13#include "TGeoManager.h"
31Bool_t Geo::mToBeInit = kTRUE;
32Bool_t Geo::mToBeInitIndexing = kTRUE;
33Float_t Geo::mRotationMatrixSector[NSECTORS + 1][3][3];
34Float_t Geo::mRotationMatrixPlateStrip[NSECTORS][NPLATES][NMAXNSTRIP][3][3];
35Float_t Geo::mPadPosition[NSECTORS][NPLATES][NMAXNSTRIP][NPADZ][NPADX][3];
36Float_t Geo::mGeoDistances[NSECTORS][NPLATES][NMAXNSTRIP];
37Float_t Geo::mGeoHeights[NSECTORS][NPLATES][NMAXNSTRIP];
38Float_t Geo::mGeoX[NSECTORS][NPLATES][NMAXNSTRIP];
39Int_t Geo::mPlate[NSTRIPXSECTOR];
40Int_t Geo::mStripInPlate[NSTRIPXSECTOR];
41std::array<std::vector<float>, 5> Geo::mDistances[NSECTORS];
48 LOG(info) <<
"tof::Geo: Initialization of TOF rotation parameters";
51 LOG(fatal) <<
"geometry is not loaded";
54 Double_t rotationAngles[6] =
55 {90., 90. , 0., 0., 90., 0 };
56 for (Int_t ii = 0; ii < 6; ii++) {
57 rotationAngles[ii] *= TMath::DegToRad();
60 for (Int_t isector = 0; isector <
NSECTORS; isector++) {
61 rotationAngles[5] = ((isector + 0.5) *
PHISEC) * TMath::DegToRad();
62 rotationAngles[1] = 90. * TMath::DegToRad() + rotationAngles[5];
64 for (Int_t ii = 0; ii < 3; ii++) {
65 mRotationMatrixSector[isector][ii][0] =
66 TMath::Sin(rotationAngles[2 * ii]) * TMath::Cos(rotationAngles[2 * ii + 1]);
67 mRotationMatrixSector[isector][ii][1] =
68 TMath::Sin(rotationAngles[2 * ii]) * TMath::Sin(rotationAngles[2 * ii + 1]);
69 mRotationMatrixSector[isector][ii][2] = TMath::Cos(rotationAngles[2 * ii]);
73 rotationAngles[0] = 90. * TMath::DegToRad();
74 rotationAngles[1] = 0.;
75 rotationAngles[2] = 0.;
76 rotationAngles[3] = 0.;
77 rotationAngles[4] = 90. * TMath::DegToRad();
78 rotationAngles[5] = 270. * TMath::DegToRad();
79 for (Int_t ii = 0; ii < 3; ii++) {
80 mRotationMatrixSector[
NSECTORS][ii][0] =
81 TMath::Sin(rotationAngles[2 * ii]) * TMath::Cos(rotationAngles[2 * ii + 1]);
82 mRotationMatrixSector[
NSECTORS][ii][1] =
83 TMath::Sin(rotationAngles[2 * ii]) * TMath::Sin(rotationAngles[2 * ii + 1]);
84 mRotationMatrixSector[
NSECTORS][ii][2] = TMath::Cos(rotationAngles[2 * ii]);
88 toMyCoord[0] = mRotationMatrixSector[
NSECTORS][0][0];
89 toMyCoord[1] = mRotationMatrixSector[
NSECTORS][1][0];
90 toMyCoord[2] = mRotationMatrixSector[
NSECTORS][2][0];
92 toMyCoord[3] = mRotationMatrixSector[
NSECTORS][0][1];
93 toMyCoord[4] = mRotationMatrixSector[
NSECTORS][1][1];
94 toMyCoord[5] = mRotationMatrixSector[
NSECTORS][2][1];
96 toMyCoord[6] = mRotationMatrixSector[
NSECTORS][0][2];
97 toMyCoord[7] = mRotationMatrixSector[
NSECTORS][1][2];
98 toMyCoord[8] = mRotationMatrixSector[
NSECTORS][2][2];
100 TGeoHMatrix myMatCoord;
101 myMatCoord.SetRotation(toMyCoord);
102 myMatCoord = myMatCoord.Inverse();
113 for (Int_t isector = 0; isector <
NSECTORS; isector++) {
115 auto string1 = fmt::format(
"/cave_1/barrel_1/B077_1/BSEGMO{:d}_1/BTOF{:d}_1", isector, isector);
116 gGeoManager->cd(string1.c_str());
117 TGeoHMatrix sectorMat = *gGeoManager->GetCurrentMatrix();
119 double trans0[3] = {0., 0., 0.};
120 sectorMat.SetTranslation(trans0);
121 const Double_t* rot = sectorMat.GetRotationMatrix();
131 mRotationMatrixSector[isector][0][0] = rot[0];
132 mRotationMatrixSector[isector][1][0] = rot[1];
133 mRotationMatrixSector[isector][2][0] = rot[2];
135 mRotationMatrixSector[isector][0][1] = rot[3];
136 mRotationMatrixSector[isector][1][1] = rot[4];
137 mRotationMatrixSector[isector][2][1] = rot[5];
139 mRotationMatrixSector[isector][0][2] = rot[6];
140 mRotationMatrixSector[isector][1][2] = rot[7];
141 mRotationMatrixSector[isector][2][2] = rot[8];
144 sectorMat = sectorMat.Inverse();
153 for (Int_t iplate = 0; iplate <
NPLATES; iplate++) {
156 if (iplate == 2 && (isector == 13 || isector == 14 || isector == 15)) {
162 }
else if (iplate == 2) {
173 for (Int_t istrip = 0; istrip <
NSTRIPC; istrip++) {
174 auto string2 = fmt::format(
"FTOA_0/FLTA_0/FSTR_{:d}", istrip + istripOff);
175 if (isector == 13 || isector == 14 || isector == 15) {
177 string2 = fmt::format(
"FTOB_0/FLTB_0/FSTR_{:d}", istrip + istripOff);
180 string2 = fmt::format(
"FTOC_0/FLTC_0/FSTR_{:d}", istrip + istripOff);
185 if (!(iplate == 2 && istrip >=
NSTRIPA)) {
188 TGeoHMatrix aliceToStrip = *gGeoManager->GetCurrentMatrix();
189 TGeoHMatrix stripMat = sectorMat * aliceToStrip * myMatCoord;
192 const Double_t* tr = stripMat.GetTranslation();
193 const Double_t* rot = stripMat.GetRotationMatrix();
194 mGeoDistances[isector][iplate][istrip] = tr[1];
195 mGeoHeights[isector][iplate][istrip] = tr[2] - (
RMAX +
RMIN) * 0.5;
196 mGeoX[isector][iplate][istrip] = tr[0];
206 mRotationMatrixPlateStrip[isector][iplate][istrip][0][0] = rot[0];
207 mRotationMatrixPlateStrip[isector][iplate][istrip][1][0] = rot[1];
208 mRotationMatrixPlateStrip[isector][iplate][istrip][2][0] = rot[2];
210 mRotationMatrixPlateStrip[isector][iplate][istrip][0][1] = rot[3];
211 mRotationMatrixPlateStrip[isector][iplate][istrip][1][1] = rot[4];
212 mRotationMatrixPlateStrip[isector][iplate][istrip][2][1] = rot[5];
214 mRotationMatrixPlateStrip[isector][iplate][istrip][0][2] = rot[6];
215 mRotationMatrixPlateStrip[isector][iplate][istrip][1][2] = rot[7];
216 mRotationMatrixPlateStrip[isector][iplate][istrip][2][2] = rot[8];
219 for (Int_t ipadz = 0; ipadz <
NPADZ; ipadz++) {
221 for (Int_t ipadx = 0; ipadx <
NPADX; ipadx++) {
225 global = *gGeoManager->GetCurrentMatrix();
226 tr = global.GetTranslation();
227 mPadPosition[isector][iplate][istrip][ipadz][ipadx][0] = tr[0];
228 mPadPosition[isector][iplate][istrip][ipadz][ipadx][1] = tr[1];
229 mPadPosition[isector][iplate][istrip][ipadz][ipadx][2] = tr[2];
295 mToBeInitIndexing =
true;
300 LOG(info) <<
"tof::Geo: Initialization of TOF rotation parameters with ideal";
302 Double_t rotationAngles[6] =
303 {90., 90. , 0., 0., 90., 0 };
304 for (Int_t ii = 0; ii < 6; ii++) {
305 rotationAngles[ii] *= TMath::DegToRad();
308 for (Int_t isector = 0; isector <
NSECTORS; isector++) {
309 rotationAngles[5] = ((isector + 0.5) *
PHISEC) * TMath::DegToRad();
310 rotationAngles[1] = 90. * TMath::DegToRad() + rotationAngles[5];
312 for (Int_t ii = 0; ii < 3; ii++) {
313 mRotationMatrixSector[isector][ii][0] =
314 TMath::Sin(rotationAngles[2 * ii]) * TMath::Cos(rotationAngles[2 * ii + 1]);
315 mRotationMatrixSector[isector][ii][1] =
316 TMath::Sin(rotationAngles[2 * ii]) * TMath::Sin(rotationAngles[2 * ii + 1]);
317 mRotationMatrixSector[isector][ii][2] = TMath::Cos(rotationAngles[2 * ii]);
321 rotationAngles[0] = 90. * TMath::DegToRad();
322 rotationAngles[1] = 0.;
323 rotationAngles[2] = 0.;
324 rotationAngles[3] = 0.;
325 rotationAngles[4] = 90. * TMath::DegToRad();
326 rotationAngles[5] = 270. * TMath::DegToRad();
327 for (Int_t ii = 0; ii < 3; ii++) {
328 mRotationMatrixSector[
NSECTORS][ii][0] =
329 TMath::Sin(rotationAngles[2 * ii]) * TMath::Cos(rotationAngles[2 * ii + 1]);
330 mRotationMatrixSector[
NSECTORS][ii][1] =
331 TMath::Sin(rotationAngles[2 * ii]) * TMath::Sin(rotationAngles[2 * ii + 1]);
332 mRotationMatrixSector[
NSECTORS][ii][2] = TMath::Cos(rotationAngles[2 * ii]);
335 for (Int_t isector = 0; isector <
NSECTORS; isector++) {
336 for (Int_t iplate = 0; iplate <
NPLATES; iplate++) {
337 for (Int_t istrip = 0; istrip <
NSTRIPC; istrip++) {
338 mGeoDistances[isector][iplate][istrip] =
DISTANCES[iplate][istrip];
339 mGeoHeights[isector][iplate][istrip] =
HEIGHTS[iplate][istrip];
340 mGeoX[isector][iplate][istrip] = 0.0;
343 rotationAngles[0] = 90. * TMath::DegToRad();
344 rotationAngles[1] = 0.;
345 rotationAngles[3] = 90. * TMath::DegToRad();
346 rotationAngles[4] =
getAngles(iplate, istrip) * TMath::DegToRad();
347 rotationAngles[5] = 90. * TMath::DegToRad();
348 rotationAngles[2] = 90. * TMath::DegToRad() + rotationAngles[4];
349 }
else if (
getAngles(iplate, istrip) == 0.) {
350 rotationAngles[0] = 90. * TMath::DegToRad();
351 rotationAngles[1] = 0.;
352 rotationAngles[2] = 90. * TMath::DegToRad();
353 rotationAngles[3] = 90. * TMath::DegToRad();
354 rotationAngles[4] = 0;
355 rotationAngles[5] = 0.;
356 }
else if (
getAngles(iplate, istrip) < 0.) {
357 rotationAngles[0] = 90. * TMath::DegToRad();
358 rotationAngles[1] = 0.;
359 rotationAngles[3] = 90. * TMath::DegToRad();
360 rotationAngles[4] = -
getAngles(iplate, istrip) * TMath::DegToRad();
361 rotationAngles[5] = 270. * TMath::DegToRad();
362 rotationAngles[2] = 90. * TMath::DegToRad() - rotationAngles[4];
365 for (Int_t ii = 0; ii < 3; ii++) {
366 mRotationMatrixPlateStrip[isector][iplate][istrip][ii][0] =
367 TMath::Sin(rotationAngles[2 * ii]) * TMath::Cos(rotationAngles[2 * ii + 1]);
368 mRotationMatrixPlateStrip[isector][iplate][istrip][ii][1] =
369 TMath::Sin(rotationAngles[2 * ii]) * TMath::Sin(rotationAngles[2 * ii + 1]);
370 mRotationMatrixPlateStrip[isector][iplate][istrip][ii][2] = TMath::Cos(rotationAngles[2 * ii]);
379 for (Int_t isector = 0; isector <
NSECTORS; isector++) {
380 for (Int_t iplate = 0; iplate <
NPLATES; iplate++) {
381 for (Int_t istrip = 0; istrip <
NSTRIPC; istrip++) {
382 for (
int iz = 0; iz < 2; iz++) {
383 for (
int ix = 0; ix < 48; ix++) {
384 int det[] = {isector, iplate, istrip, iz, ix};
385 float posPad[3] = {0., 0., 0.};
391 mPadPosition[isector][iplate][istrip][iz][ix][0] = -posPad[0];
392 mPadPosition[isector][iplate][istrip][iz][ix][1] = -posPad[1];
393 mPadPosition[isector][iplate][istrip][iz][ix][2] = -posPad[2];
403 if (!mToBeInitIndexing) {
406 mToBeInitIndexing = kFALSE;
412 mStripInPlate[istrip] = istrip;
415 mStripInPlate[istrip] = istrip -
NSTRIPC;
429 for (Int_t isector = 0; isector <
NSECTORS; isector++) {
430 for (
int iplate = 0; iplate < 5; ++iplate) {
431 if (iplate == 1 || iplate == 3) {
433 }
else if (iplate == 2) {
436 mDistances[isector][iplate].reserve(nstrips);
437 for (
int i = 0;
i < nstrips; ++
i) {
438 mDistances[isector][iplate].push_back(
getGeoDistances(isector, iplate, nstrips -
i - 1));
449 Int_t sector = ind[0];
454 auto string1 = fmt::format(
"/cave_1/barrel_1/B077_1/BSEGMO{:d}_1/BTOF{:d}_1", icopy, icopy);
456 Bool_t fgHoles = kTRUE;
458 Int_t iplate = ind[1];
459 Int_t istrip = ind[2];
476 auto string2 = fmt::format(
"FTOA_0/FLTA_0/FSTR_{:d}", icopy);
477 if (fgHoles && (sector == 13 || sector == 14 || sector == 15)) {
479 string2 = fmt::format(
"FTOB_0/FLTB_0/FSTR_{:d}", icopy);
482 string2 = fmt::format(
"FTOC_0/FLTC_0/FSTR_{:d}", icopy);
486 Int_t padz = ind[3] + 1;
487 Int_t padx = ind[4] + 1;
502 pos[0] = mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][0];
503 pos[1] = mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][1];
504 pos[2] = mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][2];
518 for (Int_t ii = 0; ii < 3; ii++) {
519 posLocal[ii] =
pos[ii];
522 det[0] = getSector(posLocal);
527 fromGlobalToSector(posLocal, det[0]);
529 det[1] = getPlate(posLocal);
534 det[2] = fromPlateToStrip(posLocal, det[1], det[0]);
539 det[3] = getPadZ(posLocal);
540 det[4] = getPadX(posLocal);
549 if (mToBeInitIndexing) {
555 detId[1] = mPlate[dummyStripPerModule];
556 detId[2] = mStripInPlate[dummyStripPerModule];
559 detId[3] = padPerStrip /
NPADX;
560 detId[4] = padPerStrip - detId[3] *
NPADX;
566 Int_t isector = detId[0];
568 printf(
"Wrong sector number in TOF (%d) !\n", isector);
571 Int_t iplate = detId[1];
573 printf(
"Wrong plate number in TOF (%d) !\n", iplate);
576 Int_t istrip = detId[2];
578 if (stripOffset == -1) {
579 printf(
"Wrong strip number per SM in TOF (%d) !\n", stripOffset);
583 Int_t ipadz = detId[3];
584 Int_t ipadx = detId[4];
604 ((iplate == 2 && (istrip < 0 || istrip >=
NSTRIPA)) ||
605 (iplate != 2 && (istrip < 0 || istrip >=
NSTRIPC))));
607 if (iplate < 0 || iplate >=
NPLATES) {
608 LOG(error) <<
"getStripNumberPerSM : "
609 <<
"Wrong plate number in TOF (" << iplate <<
")!\n";
613 (iplate == 2 && (istrip < 0 || istrip >=
NSTRIPA)) ||
614 (iplate != 2 && (istrip < 0 || istrip >=
NSTRIPC))) {
615 LOG(error) <<
"getStripNumberPerSM : "
616 <<
" Wrong strip number in TOF (strip=" << istrip <<
" in the plate= " << iplate <<
")!\n";
619 Int_t stripOffset = 0;
639 index = stripOffset + istrip;
648 fromGlobalToSector(
pos, detId[0]);
659 fromGlobalToSector(
pos, detId[0]);
662 step[0] =
getGeoX(detId[0], detId[1], detId[2]);
672 fromGlobalToSector(
pos, detId[0]);
675 step[0] =
getGeoX(detId[0], detId[1], detId[2]);
682 pos[2] -= (detId[3] - 0.5) *
ZPAD;
706void Geo::fromGlobalToSector(
Float_t*
pos, Int_t isector)
723Int_t Geo::fromPlateToStrip(
Float_t*
pos, Int_t iplate, Int_t isector)
753 auto ilower = std::lower_bound(mDistances[isector][iplate].
begin(), mDistances[isector][iplate].
end(), -
pos[2]);
754 int stripFound = mDistances[isector][iplate].size() - 1 - std::distance(mDistances[isector][iplate].
begin(), ilower);
755 int firstStripToCheck = stripFound;
756 int lastStripToCheck = stripFound;
757 if (stripFound != 0) {
758 while (firstStripToCheck != 0 && std::abs(
pos[2] +
getGeoDistances(isector, iplate, firstStripToCheck - 1)) < 10) {
762 if (stripFound != nstrips - 1) {
763 while (lastStripToCheck != nstrips - 1 && std::abs(
pos[2] +
getGeoDistances(isector, iplate, lastStripToCheck + 1)) < 10) {
768 for (Int_t istrip = firstStripToCheck; istrip <= lastStripToCheck; ++istrip) {
774 translate(posLoc2[0], posLoc2[1], posLoc2[2], step);
776 if (std::abs(posLoc2[1]) > 10) {
779 if (std::abs(posLoc2[2]) > 10) {
783 float distanceSquared = posLoc2[1] * posLoc2[1] + posLoc2[2] * posLoc2[2];
785 if (distanceSquared > 45) {
791 if ((std::abs(posLoc2[0]) <=
STRIPLENGTH * 0.5) && (std::abs(posLoc2[1]) <= HSTRIPY * 0.5) &&
792 (std::abs(posLoc2[2]) <=
WCPCBZ * 0.5)) {
797 translate(posLoc2[0], posLoc2[1], posLoc2[2], step);
799 for (Int_t jj = 0; jj < 3; ++jj) {
800 pos[jj] = posLoc2[jj];
830 iSect = (Int_t)(phi * TMath::RadToDeg() *
PHISECINV);
844 for (Int_t ii = 0; ii < 3; ii++) {
845 DeltaPos[ii] =
pos[ii];
850 det[0] = getSector(DeltaPos);
857 fromGlobalToSector(DeltaPos, det[0]);
858 det[1] = getPlate(DeltaPos);
863 det[2] = fromPlateToStrip(DeltaPos, det[1], det[0]);
868 det[3] = getPadZ(DeltaPos);
869 det[4] = getPadX(DeltaPos);
874 step[0] = (det[4] + 0.5) *
XPAD;
878 step[2] = (det[3] + 0.5) *
ZPAD;
894 Float_t deltaZetaLoc = std::abs(zLocal);
953 Int_t iPadZ = (Int_t)(
pos[2] /
ZPAD);
954 if (iPadZ ==
NPADZ) {
956 }
else if (iPadZ >
NPADZ) {
969 Int_t iPadX = (Int_t)(
pos[0] /
XPAD);
970 if (iPadX ==
NPADX) {
972 }
else if (iPadX >
NPADX) {
985 for (Int_t ii = 0; ii < 3; ii++) {
986 xyz[ii] -= translationVector[ii];
997 x -= translationVector[0];
998 y -= translationVector[1];
999 z -= translationVector[2];
1014 Float_t xyzDummy[3] = {0., 0., 0.};
1016 for (Int_t ii = 0; ii < 3; ii++) {
1017 xyzDummy[ii] = xyz[0] * mRotationMatrixSector[isector][0][ii] + xyz[1] * mRotationMatrixSector[isector][1][ii] +
1018 xyz[2] * mRotationMatrixSector[isector][2][ii];
1021 for (Int_t ii = 0; ii < 3; ii++) {
1022 xyz[ii] = xyzDummy[ii];
1034 Float_t xyzDummy[3] = {0., 0., 0.};
1036 for (Int_t ii = 0; ii < 3; ii++) {
1037 xyzDummy[ii] = xyz[0] * mRotationMatrixSector[isector][ii][0] + xyz[1] * mRotationMatrixSector[isector][ii][1] +
1038 xyz[2] * mRotationMatrixSector[isector][ii][2];
1041 for (Int_t ii = 0; ii < 3; ii++) {
1042 xyz[ii] = xyzDummy[ii];
1050 Float_t xyzDummy[3] = {0., 0., 0.};
1052 for (Int_t ii = 0; ii < 3; ii++) {
1053 xyzDummy[ii] = xyz[0] * mRotationMatrixPlateStrip[isector][iplate][istrip][0][ii] +
1054 xyz[1] * mRotationMatrixPlateStrip[isector][iplate][istrip][1][ii] +
1055 xyz[2] * mRotationMatrixPlateStrip[isector][iplate][istrip][2][ii];
1058 for (Int_t ii = 0; ii < 3; ii++) {
1059 xyz[ii] = xyzDummy[ii];
1067 Float_t xyzDummy[3] = {0., 0., 0.};
1069 for (Int_t ii = 0; ii < 3; ii++) {
1070 xyzDummy[ii] = xyz[0] * mRotationMatrixPlateStrip[isector][iplate][istrip][ii][0] +
1071 xyz[1] * mRotationMatrixPlateStrip[isector][iplate][istrip][ii][1] +
1072 xyz[2] * mRotationMatrixPlateStrip[isector][iplate][istrip][ii][2];
1075 for (Int_t ii = 0; ii < 3; ii++) {
1076 xyz[ii] = xyzDummy[ii];
1094 for (Int_t ii = 0; ii < 6; ii++) {
1095 rotationAngles[ii] *= TMath::DegToRad();
1098 Float_t xyzDummy[3] = {0., 0., 0.};
1100 for (Int_t ii = 0; ii < 3; ii++) {
1101 xyzDummy[ii] = xyz[0] * TMath::Sin(rotationAngles[2 * ii]) * TMath::Cos(rotationAngles[2 * ii + 1]) +
1102 xyz[1] * TMath::Sin(rotationAngles[2 * ii]) * TMath::Sin(rotationAngles[2 * ii + 1]) +
1103 xyz[2] * TMath::Cos(rotationAngles[2 * ii]);
1106 for (Int_t ii = 0; ii < 3; ii++) {
1107 xyz[ii] = xyzDummy[ii];
1119 for (Int_t ii = 0; ii < 6; ii++) {
1120 rotationAngles[ii] *= TMath::DegToRad();
1123 Float_t xyzDummy[3] = {0., 0., 0.};
1125 xyzDummy[0] = xyz[0] * TMath::Sin(rotationAngles[0]) * TMath::Cos(rotationAngles[1]) +
1126 xyz[1] * TMath::Sin(rotationAngles[2]) * TMath::Cos(rotationAngles[3]) +
1127 xyz[2] * TMath::Sin(rotationAngles[4]) * TMath::Cos(rotationAngles[5]);
1129 xyzDummy[1] = xyz[0] * TMath::Sin(rotationAngles[0]) * TMath::Sin(rotationAngles[1]) +
1130 xyz[1] * TMath::Sin(rotationAngles[2]) * TMath::Sin(rotationAngles[3]) +
1131 xyz[2] * TMath::Sin(rotationAngles[4]) * TMath::Sin(rotationAngles[5]);
1133 xyzDummy[2] = xyz[0] * TMath::Cos(rotationAngles[0]) + xyz[1] * TMath::Cos(rotationAngles[2]) +
1134 xyz[2] * TMath::Cos(rotationAngles[4]);
1136 for (Int_t ii = 0; ii < 3; ii++) {
1137 xyz[ii] = xyzDummy[ii];
1159 }
else if (iStripPerSM <
NSTRIPC) {
1161 istrip = iStripPerSM;
1164 istrip = iStripPerSM -
NSTRIPC;
General auxilliary methods.
Definition of the GeometryManager class.
TOF geo parameters (only statics)
static constexpr Float_t RMAX
static std::string getVolumePath(const Int_t *ind)
static constexpr Float_t ZPAD
static void getStripAndModule(Int_t iStripPerSM, Int_t &iplate, Int_t &istrip)
static constexpr Float_t PHISECINV
static constexpr Float_t RMIN2
static constexpr Float_t HFILIY
static Float_t getGeoDistances(Int_t isector, Int_t iplate, Int_t istrip)
static constexpr Float_t ROOF2PARAMETERS[3]
static constexpr Float_t XPAD
static constexpr Float_t LENGTHEXINMODBORDER
static constexpr Int_t NSECTORS
static constexpr Float_t XHALFSTRIP
static constexpr Float_t HCPCBY
static constexpr Float_t HGLASSY
static Float_t getAngles(Int_t iplate, Int_t istrip)
static constexpr Int_t NPADZ
static constexpr Float_t HHONY
static constexpr Float_t DISTANCES[NPLATES][NMAXNSTRIP]
static Int_t getIndexFromEquipment(Int_t icrate, Int_t islot, Int_t ichain, Int_t itdc)
static void rotateToSector(Float_t *xyz, Int_t isector)
static constexpr Float_t HPCBY
static constexpr Float_t HRGLY
static Int_t getStripNumberPerSM(Int_t iplate, Int_t istrip)
static constexpr Int_t NSTRIPXSECTOR
static constexpr Float_t NPADS_INV_INT
static constexpr Float_t HEIGHTS[NPLATES][NMAXNSTRIP]
static void translate(Float_t *xyz, Float_t translationVector[3])
static constexpr Float_t INTERCENTRMODBORDER1
static constexpr Int_t NPADS
static void getPosInPadCoord(int ch, float *pos)
static constexpr Int_t NSTRIPB
static constexpr Int_t NSTRIPC
static void getPosInStripCoord(int ch, float *pos)
static constexpr Int_t NSTRIPA
static Float_t getGeoX(Int_t isector, Int_t iplate, Int_t istrip)
static constexpr Float_t ZLENA
static Float_t getGeoHeights(Int_t isector, Int_t iplate, Int_t istrip)
static void getPos(Int_t *det, Float_t *pos)
static void antiRotateToSector(Float_t *xyz, Int_t isector)
static void rotate(Float_t *xyz, Double_t rotationAngles[6])
static constexpr Float_t LENGTHINCEMODBORDERD
static constexpr Float_t INTERCENTRMODBORDER2
static constexpr Float_t MODULEWALLTHICKNESS
static void getVolumeIndices(Int_t index, Int_t *detId)
static constexpr Float_t RMIN
static Int_t getIndex(const Int_t *detId)
static constexpr Int_t NPLATES
static void getDetID(Float_t *pos, Int_t *det)
static void antiRotate(Float_t *xyz, Double_t rotationAngles[6])
static void getPadDxDyDz(const Float_t *pos, Int_t *det, Float_t *DeltaPos, int sector=-1)
static void getPosInSectorCoord(int ch, float *pos)
static constexpr Float_t NSTRIPXSECTOR_INV_INT
static constexpr Float_t EXTERINTERMODBORDER1
static constexpr Int_t NPADX
static constexpr Float_t STRIPLENGTH
static void antiRotateToStrip(Float_t *xyz, Int_t iplate, Int_t istrip, Int_t isector)
static constexpr Float_t EXTERINTERMODBORDER2
static constexpr Float_t WCPCBZ
static constexpr Float_t RMAX2
static constexpr Float_t PHISEC
static void InitIndices()
static void rotateToStrip(Float_t *xyz, Int_t iplate, Int_t istrip, Int_t isector)
static constexpr Bool_t FEAWITHMASKS[NSECTORS]
static constexpr Float_t ANGLES[NPLATES][NMAXNSTRIP]
GLdouble GLdouble GLdouble z
void check(const std::vector< std::string > &arguments, const std::vector< ConfigParamSpec > &workflowOptions, const std::vector< DeviceSpec > &deviceSpecs, CheckMatrix &matrix)
Enum< T >::Iterator begin(Enum< T >)
static std::string concat_string(Ts const &... ts)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"