12 #include <klm/calibration/KLMDisplacementGenerator.h>
15 #include <klm/eklm/geometry/AlignmentChecker.h>
16 #include <klm/eklm/geometry/GeometryData.h>
19 #include <framework/gearbox/Unit.h>
29 m_GeoDat(&(EKLM::GeometryData::Instance())),
43 int iSection, iLayer, iSector, iPlane, iSegment, segment;
49 alignment->setModuleAlignment(module, &alignmentData);
53 iSection, iLayer, iSector, iPlane, iSegment);
63 double deltaU,
double deltaV,
double deltaGamma)
68 int iSection, iLayer, iSector;
75 alignment.setModuleAlignment(module, &moduleAlignment);
83 bool displaceModule,
bool displaceSegment,
bool moduleSameDisplacement,
84 bool moduleZeroDeltaU,
bool moduleZeroDeltaV,
bool moduleZeroDeltaGamma)
86 const double moduleMaxDeltaU = 5. *
Unit::cm;
87 const double moduleMinDeltaU = -5. *
Unit::cm;
88 const double moduleMaxDeltaV = 5. *
Unit::cm;
89 const double moduleMinDeltaV = -5. *
Unit::cm;
90 const double moduleMaxDeltaGamma = 0.02 *
Unit::rad;
91 const double moduleMinDeltaGamma = -0.02 *
Unit::rad;
92 const double segmentMaxDeltaU = 1. *
Unit::cm;
93 const double segmentMinDeltaU = -1. *
Unit::cm;
94 const double segmentMaxDeltaV = 0.2 *
Unit::cm;
95 const double segmentMinDeltaV = -0.2 *
Unit::cm;
96 const double segmentMaxDeltaGamma = 0.003 *
Unit::rad;
97 const double segmentMinDeltaGamma = -0.003 *
Unit::rad;
100 int iSection, iLayer, iSector, iPlane, iSegment, segment;
107 if (moduleSameDisplacement) {
108 if (iSection > 1 || iLayer > 1 || iSector > 1) {
111 alignment->getModuleAlignment(module));
113 alignment->setModuleAlignment(module, alignmentData);
121 iSection, iLayer, iSector, iPlane, iSegment);
129 if (displaceModule) {
131 if (moduleZeroDeltaU)
134 d = gRandom->Uniform(moduleMinDeltaU, moduleMaxDeltaU);
136 if (moduleZeroDeltaV)
139 d = gRandom->Uniform(moduleMinDeltaV, moduleMaxDeltaV);
141 if (moduleZeroDeltaGamma)
144 d = gRandom->Uniform(moduleMinDeltaGamma, moduleMaxDeltaGamma);
147 iSection, iLayer, iSector, &moduleAlignmentData));
149 alignment->setModuleAlignment(module, &moduleAlignmentData);
151 if (displaceSegment) {
157 gRandom->Uniform(segmentMinDeltaU, segmentMaxDeltaU));
159 gRandom->Uniform(segmentMinDeltaV, segmentMaxDeltaV));
161 gRandom->Uniform(segmentMinDeltaGamma, segmentMaxDeltaGamma));
163 iSection, iLayer, iSector, iPlane, iSegment,
164 &moduleAlignmentData, &segmentAlignmentData,
false));
166 iSection, iLayer, iSector, iPlane, iSegment);
168 segment, &segmentAlignmentData);
176 iSection, iLayer, iSector, iPlane, iSegment,
177 &moduleAlignmentData, &segmentAlignmentData,
false))
189 const char* inputFile)
192 int i, n, iSection, iLayer, iSector, iPlane, iSegment, segment, param;
195 TTree* tEKLMModule, *tEKLMSegment;
198 f =
new TFile(inputFile);
199 tEKLMModule = (TTree*)f->Get(
"eklm_module");
200 tEKLMModule->SetBranchAddress(
"section", &iSection);
201 tEKLMModule->SetBranchAddress(
"layer", &iLayer);
202 tEKLMModule->SetBranchAddress(
"sector", &iSector);
203 tEKLMModule->SetBranchAddress(
"param", ¶m);
204 tEKLMModule->SetBranchAddress(
"value", &value);
205 tEKLMSegment = (TTree*)f->Get(
"eklm_segment");
206 tEKLMSegment->SetBranchAddress(
"section", &iSection);
207 tEKLMSegment->SetBranchAddress(
"layer", &iLayer);
208 tEKLMSegment->SetBranchAddress(
"sector", &iSector);
209 tEKLMSegment->SetBranchAddress(
"plane", &iPlane);
210 tEKLMSegment->SetBranchAddress(
"segment", &iSegment);
211 tEKLMSegment->SetBranchAddress(
"param", ¶m);
212 tEKLMSegment->SetBranchAddress(
"value", &value);
213 n = tEKLMModule->GetEntries();
214 for (i = 0; i < n; i++) {
215 tEKLMModule->GetEntry(i);
218 alignment->getModuleAlignment(module));
221 alignmentData->setDeltaU(value);
224 alignmentData->setDeltaV(value);
227 alignmentData->setDeltaGamma(value);
231 n = tEKLMSegment->GetEntries();
232 for (i = 0; i < n; i++) {
233 tEKLMSegment->GetEntry(i);
235 iSection, iLayer, iSector, iPlane, iSegment);
240 alignmentData->setDeltaV(value);
243 alignmentData->setDeltaGamma(value);
251 const int nPoints = 1000;
252 const float maxDeltaU = 5. *
Unit::cm;
253 const float minDeltaU = -5. *
Unit::cm;
254 const float maxDeltaV = 5. *
Unit::cm;
255 const float minDeltaV = -5. *
Unit::cm;
256 const float maxDeltaGamma = 0.02 *
Unit::rad;
257 const float minDeltaGamma = -0.02 *
Unit::rad;
258 float deltaU, deltaV, deltaGamma;
259 int i, alignmentStatus, iSection, iLayer, iSector;
266 t =
new TTree(
"module",
"");
267 t->Branch(
"deltaU", &deltaU,
"deltaU/F");
268 t->Branch(
"deltaV", &deltaV,
"deltaV/F");
269 t->Branch(
"deltaGamma", &deltaGamma,
"deltaGamma/F");
270 t->Branch(
"status", &alignmentStatus,
"status/I");
271 for (i = 0; i < nPoints; i++) {
273 deltaU = gRandom->Uniform(minDeltaU, maxDeltaU);
274 deltaV = gRandom->Uniform(minDeltaV, maxDeltaV);
275 deltaGamma = gRandom->Uniform(minDeltaGamma, maxDeltaGamma);
284 alignment.setModuleAlignment(module, &alignmentDataRandom);
288 if (alignmentChecker.
checkAlignment(&alignment, &segmentAlignment))
299 const int nPoints = 1000;
300 const float maxDeltaU = 9. *
Unit::cm;
301 const float minDeltaU = -4. *
Unit::cm;
302 const float maxDeltaV = 0.2 *
Unit::cm;
303 const float minDeltaV = -0.2 *
Unit::cm;
304 const float maxDeltaGamma = 0.003 *
Unit::rad;
305 const float minDeltaGamma = -0.003 *
Unit::rad;
306 float deltaU, deltaV, deltaGamma;
307 int i, alignmentStatus;
308 int iSection, iLayer, iSector, jPlane, jSegment, segment;
315 t =
new TTree(
"segment",
"");
316 t->Branch(
"plane", &jPlane,
"plane/I");
317 t->Branch(
"segment", &jSegment,
"segment/I");
318 t->Branch(
"deltaU", &deltaU,
"deltaU/F");
319 t->Branch(
"deltaV", &deltaV,
"deltaV/F");
320 t->Branch(
"deltaGamma", &deltaGamma,
"deltaGamma/F");
321 t->Branch(
"status", &alignmentStatus,
"status/I");
323 printf(
"Plane %d\n", jPlane);
325 printf(
"Segment %d\n", jSegment);
326 for (i = 0; i < nPoints; i++) {
328 deltaU = gRandom->Uniform(minDeltaU, maxDeltaU);
329 deltaV = gRandom->Uniform(minDeltaV, maxDeltaV);
330 deltaGamma = gRandom->Uniform(minDeltaGamma, maxDeltaGamma);
339 iSection, iLayer, iSector, jPlane, jSegment);
341 segment, &alignmentDataRandom);
345 if (alignmentChecker.
checkAlignment(&alignment, &segmentAlignment))
359 f =
new TFile(outputFile,
"recreate");
367 const char* outputFile)
369 int iSection, iLayer, iSector, iPlane, iSegment, segment, param;
373 TTree* tEKLMModule, *tEKLMSegment;
374 f =
new TFile(outputFile,
"recreate");
375 tEKLMModule =
new TTree(
"eklm_module",
"");
376 tEKLMModule->Branch(
"section", &iSection,
"section/I");
377 tEKLMModule->Branch(
"layer", &iLayer,
"layer/I");
378 tEKLMModule->Branch(
"sector", &iSector,
"sector/I");
379 tEKLMModule->Branch(
"param", ¶m,
"param/I");
380 tEKLMModule->Branch(
"value", &value,
"value/F");
381 tEKLMSegment =
new TTree(
"eklm_segment",
"");
382 tEKLMSegment->Branch(
"section", &iSection,
"section/I");
383 tEKLMSegment->Branch(
"layer", &iLayer,
"layer/I");
384 tEKLMSegment->Branch(
"sector", &iSector,
"sector/I");
385 tEKLMSegment->Branch(
"plane", &iPlane,
"plane/I");
386 tEKLMSegment->Branch(
"segment", &iSegment,
"segment/I");
387 tEKLMSegment->Branch(
"param", ¶m,
"param/I");
388 tEKLMSegment->Branch(
"value", &value,
"value/F");
395 alignment->getModuleAlignment(module));
397 value = alignmentData->getDeltaU();
402 value = alignmentData->getDeltaV();
407 value = alignmentData->getDeltaGamma();
412 iSection, iLayer, iSector, iPlane, iSegment);
416 value = alignmentData->getDeltaV();
417 tEKLMSegment->Fill();
421 value = alignmentData->getDeltaGamma();
422 tEKLMSegment->Fill();
429 tEKLMModule->Write();
430 tEKLMSegment->Write();