12 #include <klm/calibration/KLMCalibrationChecker.h>
15 #include <klm/dataobjects/bklm/BKLMElementNumbers.h>
16 #include <klm/dataobjects/eklm/EKLMElementNumbers.h>
17 #include <klm/dataobjects/KLMChannelIndex.h>
18 #include <klm/dbobjects/bklm/BKLMAlignment.h>
19 #include <klm/dbobjects/eklm/EKLMAlignment.h>
20 #include <klm/dbobjects/eklm/EKLMSegmentAlignment.h>
21 #include <klm/dbobjects/KLMStripEfficiency.h>
24 #include <framework/database/Database.h>
25 #include <framework/database/DBStore.h>
26 #include <framework/database/Configuration.h>
27 #include <framework/datastore/DataStore.h>
78 B2FATAL(
"Setting both testing payload and Global Tag or setting no one of them.");
103 if (!bklmAlignment.isValid() ||
104 !eklmAlignment.isValid() ||
105 !eklmSegmentAlignment.isValid() ||
106 !bklmAlignmentErrors.
isValid() ||
107 !eklmAlignmentErrors.
isValid() ||
108 !eklmSegmentAlignmentErrors.
isValid() ||
109 !bklmAlignmentCorrections.
isValid() ||
110 !eklmAlignmentCorrections.
isValid() ||
111 !eklmSegmentAlignmentCorrections.
isValid())
112 B2FATAL(
"Alignment data are not valid.");
125 int section, sector, layer, plane, segment, param;
126 float value, correction, error;
129 TTree* bklmModuleTree =
new TTree(
"bklm_module",
130 "BKLM module alignment data.");
131 bklmModuleTree->Branch(
"experiment", &
m_experiment,
"experiment/I");
132 bklmModuleTree->Branch(
"run", &
m_run,
"run/I");
133 bklmModuleTree->Branch(
"section", §ion,
"section/I");
134 bklmModuleTree->Branch(
"sector", §or,
"sector/I");
135 bklmModuleTree->Branch(
"layer", &layer,
"layer/I");
136 bklmModuleTree->Branch(
"param", ¶m,
"param/I");
137 bklmModuleTree->Branch(
"value", &value,
"value/F");
138 bklmModuleTree->Branch(
"correction", &correction,
"correction/F");
139 bklmModuleTree->Branch(
"error", &error,
"error/F");
140 TTree* eklmModuleTree =
new TTree(
"eklm_module",
141 "EKLM module alignment data.");
142 eklmModuleTree->Branch(
"experiment", &
m_experiment,
"experiment/I");
143 eklmModuleTree->Branch(
"run", &
m_run,
"run/I");
144 eklmModuleTree->Branch(
"section", §ion,
"section/I");
145 eklmModuleTree->Branch(
"sector", §or,
"sector/I");
146 eklmModuleTree->Branch(
"layer", &layer,
"layer/I");
147 eklmModuleTree->Branch(
"param", ¶m,
"param/I");
148 eklmModuleTree->Branch(
"value", &value,
"value/F");
149 eklmModuleTree->Branch(
"correction", &correction,
"correction/F");
150 eklmModuleTree->Branch(
"error", &error,
"error/F");
151 TTree* eklmSegmentTree =
new TTree(
"eklm_segment",
152 "EKLM segment alignment data.");
153 eklmSegmentTree->Branch(
"experiment", &
m_experiment,
"experiment/I");
154 eklmSegmentTree->Branch(
"run", &
m_run,
"run/I");
155 eklmSegmentTree->Branch(
"section", §ion,
"section/I");
156 eklmSegmentTree->Branch(
"sector", §or,
"sector/I");
157 eklmSegmentTree->Branch(
"layer", &layer,
"layer/I");
158 eklmSegmentTree->Branch(
"plane", &plane,
"plane/I");
159 eklmSegmentTree->Branch(
"segment", &segment,
"segment/I");
160 eklmSegmentTree->Branch(
"param", ¶m,
"param/I");
161 eklmSegmentTree->Branch(
"value", &value,
"value/F");
162 eklmSegmentTree->Branch(
"correction", &correction,
"correction/F");
163 eklmSegmentTree->Branch(
"error", &error,
"error/F");
168 uint16_t module = klmModule.getKLMModuleNumber();
170 alignment = bklmAlignment->getModuleAlignment(module);
171 alignmentError = bklmAlignmentErrors->getModuleAlignment(module);
172 alignmentCorrection =
173 bklmAlignmentCorrections->getModuleAlignment(module);
175 alignment = eklmAlignment->getModuleAlignment(module);
176 alignmentError = eklmAlignmentErrors->getModuleAlignment(module);
177 alignmentCorrection =
178 eklmAlignmentCorrections->getModuleAlignment(module);
180 if (alignment ==
nullptr)
181 B2FATAL(
"Incomplete KLM alignment data.");
182 if ((alignmentError ==
nullptr) && (alignmentCorrection ==
nullptr)) {
183 B2WARNING(
"Alignment is not determined for KLM module."
184 <<
LogVar(
"Module", module));
185 alignmentError = &zeroAlignment;
186 alignmentCorrection = &zeroAlignment;
187 }
else if ((alignmentError ==
nullptr) ||
188 (alignmentCorrection ==
nullptr)) {
189 B2FATAL(
"Inconsistent undtermined parameters.");
191 section = klmModule.getSection();
192 sector = klmModule.getSector();
193 layer = klmModule.getLayer();
195 value = alignment->getDeltaU();
197 correction = alignmentCorrection->
getDeltaU();
199 bklmModuleTree->Fill();
201 eklmModuleTree->Fill();
205 value = alignment->getDeltaV();
209 correction = alignmentCorrection->
getDeltaV();
211 bklmModuleTree->Fill();
213 eklmModuleTree->Fill();
217 value = alignment->getDeltaW();
221 correction = alignmentCorrection->
getDeltaW();
223 bklmModuleTree->Fill();
225 eklmModuleTree->Fill();
229 value = alignment->getDeltaAlpha();
235 bklmModuleTree->Fill();
237 eklmModuleTree->Fill();
241 value = alignment->getDeltaBeta();
247 bklmModuleTree->Fill();
249 eklmModuleTree->Fill();
253 value = alignment->getDeltaGamma();
259 bklmModuleTree->Fill();
261 eklmModuleTree->Fill();
267 for (; eklmSegment != eklmSegments.
endEKLM(); ++eklmSegment) {
269 alignment = eklmSegmentAlignment->getSegmentAlignment(eklmSegmentNumber);
271 eklmSegmentAlignmentErrors->getSegmentAlignment(eklmSegmentNumber);
272 alignmentCorrection =
273 eklmSegmentAlignmentCorrections->getSegmentAlignment(eklmSegmentNumber);
274 if (alignment ==
nullptr)
275 B2FATAL(
"Incomplete KLM alignment data.");
276 if ((alignmentError ==
nullptr) && (alignmentCorrection ==
nullptr)) {
281 alignmentError = &zeroAlignment;
282 alignmentCorrection = &zeroAlignment;
283 }
else if ((alignmentError ==
nullptr) ||
284 (alignmentCorrection ==
nullptr)) {
285 B2FATAL(
"Inconsistent undtermined parameters.");
293 value = alignment->getDeltaU();
295 correction = alignmentCorrection->
getDeltaU();
296 eklmSegmentTree->Fill();
300 value = alignment->getDeltaV();
304 correction = alignmentCorrection->
getDeltaV();
305 eklmSegmentTree->Fill();
309 value = alignment->getDeltaW();
313 correction = alignmentCorrection->
getDeltaW();
314 eklmSegmentTree->Fill();
318 value = alignment->getDeltaAlpha();
323 eklmSegmentTree->Fill();
327 value = alignment->getDeltaBeta();
332 eklmSegmentTree->Fill();
336 value = alignment->getDeltaGamma();
341 eklmSegmentTree->Fill();
343 bklmModuleTree->Write();
344 eklmModuleTree->Write();
345 eklmSegmentTree->Write();
346 delete bklmModuleTree;
347 delete eklmModuleTree;
348 delete eklmSegmentTree;
349 delete alignmentResults;
360 if (!stripEfficiency.isValid())
361 B2FATAL(
"Strip efficiency data are not valid.");
365 int subdetector, section, sector, layer, plane;
366 float efficiency, error;
367 TFile* stripEfficiencyResults =
369 TTree* efficiencyTree =
new TTree(
"efficiency",
"KLM strip efficiency data.");
370 efficiencyTree->Branch(
"experiment", &
m_experiment,
"experiment/I");
371 efficiencyTree->Branch(
"run", &
m_run,
"run/I");
372 efficiencyTree->Branch(
"subdetector", &subdetector,
"subdetector/I");
373 efficiencyTree->Branch(
"section", §ion,
"section/I");
374 efficiencyTree->Branch(
"sector", §or,
"sector/I");
375 efficiencyTree->Branch(
"layer", &layer,
"layer/I");
376 efficiencyTree->Branch(
"plane", &plane,
"plane/I");
377 efficiencyTree->Branch(
"efficiency", &efficiency,
"efficiency/F");
378 efficiencyTree->Branch(
"error", &error,
"error/F");
381 subdetector = klmPlane.getSubdetector();
382 section = klmPlane.getSection();
383 sector = klmPlane.getSector();
384 layer = klmPlane.getLayer();
385 plane = klmPlane.getPlane();
387 subdetector, section, sector, layer, plane, 1);
388 efficiency = stripEfficiency->getEfficiency(channel);
389 error = stripEfficiency->getEfficiencyError(channel);
390 efficiencyTree->Fill();
392 efficiencyTree->Write();
393 delete efficiencyTree;
394 delete stripEfficiencyResults;
405 if (not stripEfficiency.isValid())
406 B2FATAL(
"Strip efficiency data are not valid.");
411 TCanvas* canvas =
new TCanvas();
413 int subdetector = klmSector.getSubdetector();
414 int section = klmSector.getSection();
415 int sector = klmSector.getSector();
417 TH1F* hist =
new TH1F(
"plane_histogram",
"", 30, 0.5, 30.5);
418 hist->GetYaxis()->SetTitle(
"Efficiency");
419 hist->SetMinimum(0.4);
420 hist->SetMaximum(1.);
421 hist->SetMarkerStyle(20);
422 hist->SetMarkerSize(0.5);
426 title.Form(
"BKLM backward sector %d", sector);
428 title.Form(
"BKLM forward sector %d", sector);
429 hist->SetTitle(title.Data());
430 hist->GetXaxis()->SetTitle(
"(Layer - 1) * 2 + plane + 1");
433 int bin = (layer - 1) * 2 + plane + 1;
434 float efficiency = stripEfficiency->getBarrelEfficiency(section, sector, layer, plane, 2);
435 float efficiencyError = stripEfficiency->getBarrelEfficiencyError(section, sector, layer, plane, 2);
436 hist->SetBinContent(bin, efficiency);
437 hist->SetBinError(bin, efficiencyError);
442 hist->SetBins(24, 0.5, 24.5);
443 title.Form(
"EKLM backward sector %d", sector);
445 hist->SetBins(28, 0.5, 28.5);
446 title.Form(
"EKLM forward sector %d", sector);
448 hist->SetTitle(title.Data());
449 hist->GetXaxis()->SetTitle(
"(Layer - 1) * 2 + plane");
453 int bin = (layer - 1) * 2 + plane;
454 float efficiency = stripEfficiency->getEndcapEfficiency(section, sector, layer, plane, 2);
455 float efficiencyError = stripEfficiency->getEndcapEfficiencyError(section, sector, layer, plane, 2);
456 hist->SetBinContent(bin, efficiency);
457 hist->SetBinError(bin, efficiencyError);
463 name.Form(
"efficiency_subdetector_%d_section_%d_sector_%d.pdf", subdetector, section, sector);
464 canvas->Print(name.Data());