13#include "TGeoCompositeShape.h"
14#include "TGeoManager.h"
15#include "TGeoMatrix.h"
16#include "TGeoVolume.h"
20#include <fairlogger/Logger.h>
21#include "FairVolume.h"
22#include "FairRootManager.h"
24#include "TOFSimulation/Detector.h"
26#include <TVirtualMC.h>
52 mTOFHoles(rhs.mTOFHoles),
56 mTOFSectors[
i] = rhs.mTOFSectors[
i];
67 TGeoVolume*
v = gGeoManager->GetVolume(
"FPAD");
69 printf(
"Sensitive volume FSEN not found!!!!!!!!");
71 AddSensitiveVolume(
v);
78 if (
static_cast<int>(fMC->TrackCharge()) == 0) {
83 float pos2x, pos2y, pos2z;
84 fMC->TrackPosition(pos2x, pos2y, pos2z);
85 Float_t radius = std::sqrt(pos2x * pos2x + pos2y * pos2y);
86 LOG(
debug) <<
"Process hit in TOF volume ar R=" << radius <<
" - Z=" << pos2z;
94 float posx, posy, posz;
95 fMC->TrackPosition(posx, posy, posz);
96 float time = fMC->TrackTime() * 1.0e09;
99 int sensID =
v->getMCid();
105 HitType newhit(posx, posy, posz,
time, enDep, trackID, sensID);
108 if (channel < 0 || mHits->
empty() || channel != mLastChannelID || !isMergable(newhit, mHits->back())) {
109 mHits->push_back(newhit);
110 stack->addHit(GetDetId());
112 mHits->back().SetEnergyLoss(mHits->back().GetEnergyLoss() + newhit.
GetEnergyLoss());
116 mLastChannelID = channel;
123 FairRootManager::Instance()->RegisterAny(
addNameTo(
"Hit").
data(), mHits, kTRUE);
142 Float_t aq[2] = {28.0855, 15.9994};
149 Float_t anox[4] = {12.011, 1.00794, 15.9994, 14.00674};
150 Float_t znox[4] = {6., 1., 8., 7.};
151 Float_t wnox[4] = {14., 22., 2., 2.};
159 Float_t ag10[5] = {28.0855, 15.9994, 12.011, 1.00794, 15.9994};
160 Float_t zg10[5] = {14., 8., 6., 1., 8.};
163 na[0] = 1., na[1] = 2., na[2] = 0., na[3] = 0., na[4] = 0.;
165 wmatg10[0] = we[0] * 0.6;
166 wmatg10[1] = we[1] * 0.6;
167 na[0] = 0., na[1] = 0., na[2] = 14., na[3] = 20., na[4] = 3.;
169 wmatg10[2] = we[2] * 0.4;
170 wmatg10[3] = we[3] * 0.4;
171 wmatg10[4] = we[4] * 0.4;
176 Float_t awa[2] = {1.00794, 15.9994};
183 Float_t aAir[4] = {12.011, 14.00674, 15.9994, 39.948};
184 Float_t zAir[4] = {6., 7., 8., 18.};
185 Float_t wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
189 Float_t afg[4] = {28.0855, 15.9994, 12.011, 1.00794};
190 Float_t zfg[4] = {14., 8., 6., 1.};
191 Float_t wfg[4] = {0.12906, 0.29405, 0.51502, 0.06187};
197 Float_t afre[4] = {12.011, 1.00794, 18.9984032, 32.0065};
198 Float_t zfre[4] = {6., 1., 9., 16.};
199 Float_t wfre[4] = {0.21250, 0.01787, 0.74827, 0.021355};
204 Float_t acbt[2] = {26.981539, 63.546};
206 Float_t wcbt[2] = {0.407, 0.593};
210 Float_t asc[4] = {12.011, 1.00794, 26.981539, 63.546};
211 Float_t zsc[4] = {6., 1., 13., 29.};
213 for (Int_t ii = 0; ii < 4; ii++) {
218 for (Int_t ii = 0; ii < 4; ii++) {
221 for (Int_t ii = 0; ii < 4; ii++) {
227 wsc[0] = 0.4375 * wDummy[0];
228 wsc[1] = 0.4375 * wDummy[1];
234 Float_t acra[5] = {26.981539, 63.546, 55.845, 51.9961, 58.6934};
235 Float_t zcra[5] = {13., 29., 26., 24., 28.};
236 Float_t wcra[5] = {0.7, 0.2, 0.07, 0.018, 0.012};
240 Float_t aPlastic[2] = {12.011, 1.00794};
241 Float_t zPlastic[2] = {6., 1.};
242 Float_t wPlastic[2] = {1., 2.};
245 Int_t nwPlastic = -2;
247 Mixture(0,
"Air$", aAir, zAir, dAir, 4, wAir);
248 Mixture(1,
"Nomex$", anox, znox, dnox, nnox, wnox);
249 Mixture(2,
"G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
250 Mixture(3,
"fibre glass$", afg, zfg, dfg, nfg, wfg);
251 Material(4,
"Al $", 26.981539, 13., 2.7, -8.9, 999.);
252 Float_t factor = 0.4 / 1.5 * 2. / 3.;
253 Material(5,
"Al honeycomb$", 26.981539, 13., 2.7 * factor, -8.9 / factor, 999.);
254 Mixture(6,
"Freon$", afre, zfre, densfre, nfre, wfre);
255 Mixture(7,
"Glass$", aq, zq, dq, nq, wq);
256 Mixture(8,
"Water$", awa, zwa, dwa, nwa, wwa);
257 Mixture(9,
"cables+tubes$", acbt, zcbt, decbt, 2, wcbt);
258 Material(10,
"Cu $", 63.546, 29., 8.96, -1.43, 999.);
259 Mixture(11,
"cable$", asc, zsc, dsc, 4, wsc);
260 Mixture(12,
"Al+Cu+steel$", acra, zcra, dcra, 5, wcra);
261 Mixture(13,
"plastic$", aPlastic, zPlastic, dPlastic, nwPlastic, wPlastic);
262 Float_t factorHoles = 1. / 36.5;
263 Material(14,
"Al honey for holes$", 26.981539, 13., 2.7 * factorHoles, -8.9 / factorHoles, 999.);
265 Float_t epsil, stmin, deemax, stemax;
279 Medium(
kAir,
"Air$", 0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
280 Medium(
kNomex,
"Nomex$", 1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
281 Medium(
kG10,
"G10$", 2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
282 Medium(
kFiberGlass,
"fibre glass$", 3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
283 Medium(
kAlFrame,
"Al Frame$", 4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
284 Medium(
kHoneycomb,
"honeycomb$", 5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
285 Medium(
kFre,
"Fre$", 6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
286 Medium(
kCuS,
"Cu-S$", 10, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
287 Medium(
kGlass,
"Glass$", 7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
288 Medium(
kWater,
"Water$", 8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
289 Medium(
kCable,
"Cable$", 11, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
290 Medium(
kCableTubes,
"Cables+Tubes$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
291 Medium(
kCopper,
"Copper$", 10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
292 Medium(
kPlastic,
"Plastic$", 13, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
293 Medium(
kCrates,
"Crates$", 12, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
294 Medium(
kHoneyHoles,
"honey_holes$", 14, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
303 for (Int_t
i = 0;
i <
n; ++
i) {
307 for (Int_t
i = 0;
i <
n; ++
i) {
325 LOG(info) <<
"Loaded TOF geometry";
340 createModules(xtof, ytof, zlenA, xFLT, yFLT, zFLTA);
341 makeStripsInModules(ytof, zlenA);
343 createModuleCovers(xtof, zlenA);
345 createBackZone(xtof, ytof, zlenA);
346 makeFrontEndElectronics(xtof);
347 makeFEACooling(xtof);
349 makeSuperModuleCooling(xtof, ytof, zlenA);
350 makeSuperModuleServices(xtof, ytof, zlenA);
351 makeCentralFEAContainer(ytof);
353 makeModulesInBTOFvolumes(ytof, zlenA);
354 makeCoversInBTOFvolumes();
355 makeBackInBTOFvolumes(ytof);
357 makeReadoutCrates(ytof);
368 for (Int_t ii = 0; ii < 8; ii++) {
375 par[1] = ytof * 0.25;
376 par[2] = zlenA * 0.5;
381 par[1] = ytof * 0.25;
391 par[2] = zFLTA * 0.5;
392 TVirtualMC::GetMC()->Gsvolu(
"FLTA",
"BOX ",
getMediumID(
kFre), par, 3);
398 TVirtualMC::GetMC()->Gspos(
"FLTA", 0,
"FTOA", xcoor, ycoor, zcoor, 0,
"ONLY");
402 TVirtualMC::GetMC()->Gsvolu(
"FLTB",
"BOX ",
getMediumID(
kFre), par, 3);
403 TVirtualMC::GetMC()->Gsvolu(
"FLTC",
"BOX ",
getMediumID(
kFre), par, 3);
408 TVirtualMC::GetMC()->Gspos(
"FLTB", 0,
"FTOB", xcoor, ycoor, zcoor, 0,
"ONLY");
409 TVirtualMC::GetMC()->Gspos(
"FLTC", 0,
"FTOC", xcoor, ycoor, -zcoor, 0,
"ONLY");
418 alpha = TMath::ATan(tgal);
419 beta = (TMath::Pi() * 0.5 -
alpha) * 0.5;
420 tgbe = TMath::Tan(beta);
421 trpa[0] = xFLT * 0.5;
430 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
437 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
440 Matrix(idrotm[0], 90., 90., 180., 0., 90., 180.);
441 Matrix(idrotm[1], 90., 90., 0., 0., 90., 0.);
447 TVirtualMC::GetMC()->Gspos(
"FWZ1D", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
448 TVirtualMC::GetMC()->Gspos(
"FWZ1D", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
455 trpa[0] = xFLT * 0.5;
462 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
467 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
473 TVirtualMC::GetMC()->Gspos(
"FWZAD", 1,
"FLTB", xcoor, ycoorB, zcoorB, idrotm[1],
"ONLY");
474 TVirtualMC::GetMC()->Gspos(
"FWZAD", 2,
"FLTC", xcoor, ycoorB, -zcoorB, idrotm[0],
"ONLY");
479 alpha = TMath::ATan(tgal);
480 beta = (TMath::Pi() * 0.5 -
alpha) * 0.5;
481 tgbe = TMath::Tan(beta);
482 trpa[0] = xFLT * 0.5;
491 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
498 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
501 Matrix(idrotm[2], 90., 270., 0., 0., 90., 180.);
502 Matrix(idrotm[3], 90., 270., 180., 0., 90., 0.);
508 TVirtualMC::GetMC()->Gspos(
"FWZ1U", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
509 TVirtualMC::GetMC()->Gspos(
"FWZ1U", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[3],
"ONLY");
514 trpa[0] = xFLT * 0.5;
521 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
526 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
532 TVirtualMC::GetMC()->Gspos(
"FWZBU", 1,
"FLTB", xcoor, ycoorB, zcoorB, idrotm[3],
"ONLY");
533 TVirtualMC::GetMC()->Gspos(
"FWZBU", 2,
"FLTC", xcoor, ycoorB, -zcoorB, idrotm[2],
"ONLY");
538 trpa[2] = xFLT * 0.5;
539 trpa[3] = -beta * TMath::RadToDeg();
544 Matrix(idrotm[4],
alpha * TMath::RadToDeg(), 90., 90. +
alpha * TMath::RadToDeg(), 90., 90., 180.);
545 Matrix(idrotm[5], 180. -
alpha * TMath::RadToDeg(), 90., 90. -
alpha * TMath::RadToDeg(), 90., 90., 0.);
551 TVirtualMC::GetMC()->Gspos(
"FWZ2", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[4],
"ONLY");
552 TVirtualMC::GetMC()->Gspos(
"FWZ2", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[5],
"ONLY");
557 trpa[2] = xFLT * 0.5;
558 trpa[3] = -beta * TMath::RadToDeg();
566 TVirtualMC::GetMC()->Gspos(
"FWZC", 1,
"FLTB", xcoor, ycoorB, zcoorB, idrotm[5],
"ONLY");
567 TVirtualMC::GetMC()->Gspos(
"FWZC", 2,
"FLTC", xcoor, ycoorB, -zcoorB, idrotm[4],
"ONLY");
573 alpha = TMath::ATan(tgal);
574 beta = (TMath::Pi() * 0.5 -
alpha) * 0.5;
575 tgbe = TMath::Tan(beta);
576 trpa[0] = xFLT * 0.5;
583 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
588 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
594 TVirtualMC::GetMC()->Gspos(
"FWZ3", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[3],
"ONLY");
595 TVirtualMC::GetMC()->Gspos(
"FWZ3", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[2],
"ONLY");
602 TVirtualMC::GetMC()->Gspos(
"FWZ3", 5,
"FLTB", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
603 TVirtualMC::GetMC()->Gspos(
"FWZ3", 6,
"FLTC", xcoor, ycoor, -zcoor, idrotm[3],
"ONLY");
609 TVirtualMC::GetMC()->Gspos(
"FWZ3", 3,
"FLTA", xcoor, ycoor, zcoor, idrotm[1],
"ONLY");
610 TVirtualMC::GetMC()->Gspos(
"FWZ3", 4,
"FLTA", xcoor, ycoor, -zcoor, idrotm[0],
"ONLY");
617 TVirtualMC::GetMC()->Gspos(
"FWZ3", 7,
"FLTB", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
618 TVirtualMC::GetMC()->Gspos(
"FWZ3", 8,
"FLTC", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
623 trpa[2] = xFLT * 0.5;
624 trpa[3] = -beta * TMath::RadToDeg();
629 Matrix(idrotm[6],
alpha * TMath::RadToDeg(), 90., 90. +
alpha * TMath::RadToDeg(), 90., 90., 180.);
630 Matrix(idrotm[7], 180. -
alpha * TMath::RadToDeg(), 90., 90. -
alpha * TMath::RadToDeg(), 90., 90., 0.);
635 TVirtualMC::GetMC()->Gspos(
"FWZ4", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[7],
"ONLY");
636 TVirtualMC::GetMC()->Gspos(
"FWZ4", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[6],
"ONLY");
643 TVirtualMC::GetMC()->Gspos(
"FWZ4", 3,
"FLTB", xcoor, ycoor, zcoor, idrotm[6],
"ONLY");
644 TVirtualMC::GetMC()->Gspos(
"FWZ4", 4,
"FLTC", xcoor, ycoor, -zcoor, idrotm[7],
"ONLY");
648void Detector::makeStripsInModules(
Float_t ytof,
Float_t zlenA)
const
677 static_cast<Float_t>(WSTRIPZ * 0.5)};
678 TVirtualMC::GetMC()->Gsvolu(
"FSTR",
"BOX",
getMediumID(
kFre), parfp, 3);
680 Float_t posfp[3] = {0., 0., 0.};
689 posfp[1] = -HSTRIPY * 0.5 + parfp[1];
691 TVirtualMC::GetMC()->Gspos(
"FHON", 1,
"FSTR", 0., posfp[1], 0., 0,
"ONLY");
692 TVirtualMC::GetMC()->Gspos(
"FHON", 2,
"FSTR", 0., -posfp[1], 0., 0,
"ONLY");
698 TVirtualMC::GetMC()->Gsvolu(
"FPC1",
"BOX",
getMediumID(
kG10), parfp, 3);
704 TVirtualMC::GetMC()->Gsvolu(
"FPC2",
"BOX",
getMediumID(
kG10), parfp, 3);
708 posfp[1] = -HSTRIPY * 0.5 +
Geo::HHONY + parfp[1];
710 TVirtualMC::GetMC()->Gspos(
"FPC1", 1,
"FSTR", 0., -posfp[1], 0., 0,
"ONLY");
711 TVirtualMC::GetMC()->Gspos(
"FPC2", 1,
"FSTR", 0., posfp[1], 0., 0,
"ONLY");
717 TVirtualMC::GetMC()->Gsvolu(
"FPCB",
"BOX",
getMediumID(
kG10), parfp, 3);
718 gGeoManager->GetVolume(
"FPCB")->VisibleDaughters(kFALSE);
721 TVirtualMC::GetMC()->Gspos(
"FPCB", 1,
"FSTR", 0., 0., 0., 0,
"ONLY");
725 static_cast<Float_t>(WSENSMZ * 0.5)};
726 TVirtualMC::GetMC()->Gsvolu(
"FSEN",
"BOX",
getMediumID(
kCuS), parfs, 3);
734 TVirtualMC::GetMC()->Gsdvn(
"FSEZ",
"FSEN",
Geo::NPADZ, 3);
735 TVirtualMC::GetMC()->Gsdvn(
"FPAD",
"FSEZ",
Geo::NPADX, 1);
737 TVirtualMC::GetMC()->Gspos(
"FSEN", 1,
"FPCB", 0., 0., 0., 0,
"ONLY");
748 TVirtualMC::GetMC()->Gspos(
"FRGL", 1,
"FSTR", 0., posfp[1], 0., 0,
"ONLY");
749 TVirtualMC::GetMC()->Gspos(
"FRGL", 4,
"FSTR", 0., -posfp[1], 0., 0,
"ONLY");
753 TVirtualMC::GetMC()->Gspos(
"FRGL", 2,
"FSTR", 0., -posfp[1], 0., 0,
"ONLY");
754 TVirtualMC::GetMC()->Gspos(
"FRGL", 3,
"FSTR", 0., posfp[1], 0., 0,
"ONLY");
765 TVirtualMC::GetMC()->Gspos(
"FGLF", 1,
"FSTR", 0., -posfp[1], 0., 0,
"ONLY");
766 TVirtualMC::GetMC()->Gspos(
"FGLF", 2,
"FSTR", 0., posfp[1], 0., 0,
"ONLY");
776 Int_t totalStrip = 0;
778 for (Int_t iplate = 0; iplate <
Geo::NPLATES; iplate++) {
780 totalStrip += maxStripNumbers[iplate - 1];
782 for (Int_t istrip = 0; istrip < maxStripNumbers[iplate]; istrip++) {
786 Matrix(idrotm[istrip + totalStrip], 90., 0., 90. + ang, 90., ang, 90.);
787 }
else if (ang == 0.) {
788 Matrix(idrotm[istrip + totalStrip], 90., 0., 90., 90., 0., 0.);
789 }
else if (ang < 0.) {
790 Matrix(idrotm[istrip + totalStrip], 90., 0., 90. + ang, 90., -ang, 270.);
796 TVirtualMC::GetMC()->Gspos(
"FSTR", istrip + totalStrip + 1,
"FLTA", xpos, ypos, -zpos,
797 idrotm[istrip + totalStrip],
"ONLY");
800 if (istrip + totalStrip + 1 > 53) {
801 TVirtualMC::GetMC()->Gspos(
802 "FSTR", istrip + totalStrip + 1,
"FLTC", xpos, ypos,
804 idrotm[istrip + totalStrip],
"ONLY");
806 if (istrip + totalStrip + 1 < 39) {
807 TVirtualMC::GetMC()->Gspos(
808 "FSTR", istrip + totalStrip + 1,
"FLTB", xpos, ypos,
810 idrotm[istrip + totalStrip],
"ONLY");
817void Detector::createModuleCovers(
Float_t xtof,
Float_t zlenA)
const
830 par[0] = xtof * 0.5 + 2.;
832 par[2] = zlenA * 0.5 + 2.;
833 TVirtualMC::GetMC()->Gsvolu(
"FPEA",
"BOX ",
getMediumID(
kAir), par, 3);
835 TVirtualMC::GetMC()->Gsvolu(
"FPEB",
"BOX ",
getMediumID(
kAir), par, 3);
838 constexpr Float_t ALCOVERTHICKNESS = 1.5;
839 constexpr Float_t INTERFACECARDTHICKNESS = 0.16;
840 constexpr Float_t ALSKINTHICKNESS = 0.1;
841 constexpr Float_t PLASTICFLATCABLETHICKNESS = 0.25;
842 constexpr Float_t COPPERFLATCABLETHICKNESS = 0.01;
845 par[1] = ALCOVERTHICKNESS * 0.5;
855 TVirtualMC::GetMC()->Gspos(
"FALT", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
857 TVirtualMC::GetMC()->Gspos(
"FALB", 0,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
867 TVirtualMC::GetMC()->Gspos(
"FPE1", 0,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
871 par[1] = ALCOVERTHICKNESS * 0.5 - ALSKINTHICKNESS;
877 TVirtualMC::GetMC()->Gspos(
"FPE4", 0,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
887 TVirtualMC::GetMC()->Gspos(
"FPE2", 1,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
888 TVirtualMC::GetMC()->Gspos(
"FPE2", 2,
"FALT", xcoor, ycoor, -zcoor, 0,
"ONLY");
894 TVirtualMC::GetMC()->Gspos(
"FPE2", 1,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
895 TVirtualMC::GetMC()->Gspos(
"FPE2", 2,
"FALB", xcoor, ycoor, -zcoor, 0,
"ONLY");
905 TVirtualMC::GetMC()->Gspos(
"FPE3", 1,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
906 TVirtualMC::GetMC()->Gspos(
"FPE3", 2,
"FALT", xcoor, ycoor, -zcoor, 0,
"ONLY");
912 TVirtualMC::GetMC()->Gspos(
"FPE3", 1,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
913 TVirtualMC::GetMC()->Gspos(
"FPE3", 2,
"FALB", xcoor, ycoor, -zcoor, 0,
"ONLY");
918 par[1] = INTERFACECARDTHICKNESS * 0.5;
920 TVirtualMC::GetMC()->Gsvolu(
"FIF1",
"BOX ",
getMediumID(
kG10), par, 3);
922 ycoor = ALCOVERTHICKNESS * 0.5 + INTERFACECARDTHICKNESS * 0.5;
924 TVirtualMC::GetMC()->Gspos(
"FIF1", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
929 TVirtualMC::GetMC()->Gsvolu(
"FIF2",
"BOX ",
getMediumID(
kG10), par, 3);
933 TVirtualMC::GetMC()->Gspos(
"FIF2", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
934 TVirtualMC::GetMC()->Gspos(
"FIF2", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
936 TVirtualMC::GetMC()->Gspos(
"FIF2", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
937 TVirtualMC::GetMC()->Gspos(
"FIF2", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
943 TVirtualMC::GetMC()->Gsvolu(
"FIF3",
"BOX ",
getMediumID(
kG10), par, 3);
947 TVirtualMC::GetMC()->Gspos(
"FIF3", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
948 TVirtualMC::GetMC()->Gspos(
"FIF3", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
950 TVirtualMC::GetMC()->Gspos(
"FIF3", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
951 TVirtualMC::GetMC()->Gspos(
"FIF3", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
957 par[1] = PLASTICFLATCABLETHICKNESS * 0.5;
961 ycoor = -ALCOVERTHICKNESS * 0.5 - PLASTICFLATCABLETHICKNESS * 0.5;
963 TVirtualMC::GetMC()->Gspos(
"FFC1", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
972 TVirtualMC::GetMC()->Gspos(
"FFC2", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
973 TVirtualMC::GetMC()->Gspos(
"FFC2", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
975 TVirtualMC::GetMC()->Gspos(
"FFC2", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
976 TVirtualMC::GetMC()->Gspos(
"FFC2", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
986 TVirtualMC::GetMC()->Gspos(
"FFC3", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
987 TVirtualMC::GetMC()->Gspos(
"FFC3", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
989 TVirtualMC::GetMC()->Gspos(
"FFC3", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
990 TVirtualMC::GetMC()->Gspos(
"FFC3", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
995 par[1] = COPPERFLATCABLETHICKNESS * 0.5;
998 TVirtualMC::GetMC()->Gspos(
"FCC1", 0,
"FFC1", 0., 0., 0., 0,
"ONLY");
1004 TVirtualMC::GetMC()->Gspos(
"FCC2", 0,
"FFC2", 0., 0., 0., 0,
"ONLY");
1010 TVirtualMC::GetMC()->Gspos(
"FCC3", 0,
"FFC3", 0., 0., 0., 0,
"ONLY");
1013std::vector<Detector::FEAContainer> Detector::feaContainers(
Float_t zlenA, Bool_t holes)
const
1023 const Float_t rowgap[5] = {13.5, 22.9, 16.94, 23.8, 20.4};
1024 const Int_t rowb[5] = {6, 7, 6, 19, 7};
1025 const Int_t nblocks = holes ? 4 : 5;
1027 std::vector<FEAContainer> cont;
1029 for (Int_t sg = -1; sg < 2; sg += 2) {
1030 Float_t zcoor = sg * zlenA * 0.5 - 0.8;
1031 for (Int_t nb = 0; nb < nblocks; ++nb) {
1032 zcoor = zcoor - sg * (rowgap[nb] - rowstep);
1033 const Int_t nrow =
row + rowb[nb];
1034 for (;
row < nrow; ++
row) {
1035 zcoor -= sg * rowstep;
1036 cont.push_back({zcoor,
row, sg == -1 && nb != 4});
1043void Detector::makeCentralFEAContainer(
Float_t ytof)
const
1056 const char*
source[2] = {
"FCA1",
"FCA2"};
1057 const char* central[2] = {
"FCM1",
"FCM2"};
1058 const char* mother[2] = {
"FAIA",
"FAIC"};
1059 for (Int_t
i = 0;
i < 2; ++
i) {
1060 TGeoVolume* from = gGeoManager->GetVolume(
source[
i]);
1061 auto* assembly =
new TGeoVolumeAssembly(central[
i]);
1062 for (Int_t k = 0; k < from->GetNdaughters(); ++k) {
1063 TGeoNode* nd = from->GetNode(k);
1064 assembly->AddNode(nd->GetVolume(), nd->GetNumber(),
new TGeoHMatrix(*nd->GetMatrix()));
1066 gGeoManager->GetVolume(mother[
i])->AddNode(assembly, 91,
new TGeoTranslation(0., ycoor, -0.8));
1070TGeoVolume* Detector::coolingBarPiece(Double_t dx, Double_t dy, Double_t dz)
const
1079 const std::array<Double_t, 3>
key{dx, dy, dz};
1080 auto it = mBarPieces.find(
key);
1081 if (it != mBarPieces.end()) {
1085 const TString
name = TString::Format(
"FLOS%zu", mBarPieces.size() + 1);
1088 mBarPieces[
key] = vol;
1092void Detector::placeCoolingBar(
const char* mother,
const std::vector<FEAContainer>& cont, Double_t crateDZ,
1093 Double_t crateY0, Double_t crateY1, Double_t xcoor, Double_t dx, Double_t ycoor,
1094 Double_t dy, Double_t zcoor, Double_t dz, Int_t& copy)
const
1102 const Double_t barZ0 = zcoor - dz, barZ1 = zcoor + dz;
1103 const Double_t barY0 = ycoor - dy, barY1 = ycoor + dy;
1106 std::vector<std::pair<Double_t, Double_t>> cut;
1107 if (crateY1 > barY0 && crateY0 < barY1) {
1108 for (
auto const&
c : cont) {
1109 const Double_t z0 = std::max(barZ0,
c.z - crateDZ);
1110 const Double_t
z1 = std::min(barZ1,
c.z + crateDZ);
1112 cut.emplace_back(z0, z1);
1115 std::sort(cut.begin(), cut.end());
1120 for (
auto const&
c : cut) {
1122 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, dy, 0.5 * (
c.first -
z))->GetName(), ++copy, mother,
1123 xcoor, ycoor, 0.5 * (
z +
c.first), 0,
"ONLY");
1125 z = std::max(
z,
c.second);
1128 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, dy, 0.5 * (barZ1 -
z))->GetName(), ++copy, mother,
1129 xcoor, ycoor, 0.5 * (
z + barZ1), 0,
"ONLY");
1133 const Double_t strip[2][2] = {{barY0, std::min(barY1, crateY0)}, {std::max(barY0, crateY1), barY1}};
1134 for (
auto const&
c : cut) {
1135 for (
auto const& sy : strip) {
1136 if (sy[1] <= sy[0]) {
1139 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, 0.5 * (sy[1] - sy[0]), 0.5 * (
c.second -
c.first))->GetName(),
1140 ++copy, mother, xcoor, 0.5 * (sy[0] + sy[1]), 0.5 * (
c.first +
c.second), 0,
"ONLY");
1156 Int_t idrotm[1] = {0};
1161 par[0] = xtof * 0.5;
1163 par[2] = zlenA * 0.5;
1164 TVirtualMC::GetMC()->Gsvolu(
"FAIA",
"BOX ",
getMediumID(
kAir), par, 3);
1166 TVirtualMC::GetMC()->Gsvolu(
"FAIB",
"BOX ",
getMediumID(
kAir), par, 3);
1168 TVirtualMC::GetMC()->Gsvolu(
"FAIC",
"BOX ",
getMediumID(
kAir), par, 3);
1179 TVirtualMC::GetMC()->Gsvolu(
"FCA1",
"BOX ",
getMediumID(
kAir), carpar, 3);
1180 TVirtualMC::GetMC()->Gsvolu(
"FCA2",
"BOX ",
getMediumID(
kAir), carpar, 3);
1183 Matrix(idrotm[0], 90., 180., 90., 90., 180., 0.);
1188 for (
auto const&
c : feaContainers(zlenA, kFALSE)) {
1189 TVirtualMC::GetMC()->Gspos(
"FCA1",
c.row,
"FAIA", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1190 TVirtualMC::GetMC()->Gspos(
"FCA2",
c.row,
"FAIC", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1194 for (
auto const&
c : feaContainers(zlenA, kTRUE)) {
1195 TVirtualMC::GetMC()->Gspos(
"FCA1",
c.row,
"FAIB", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1200void Detector::makeFrontEndElectronics(
Float_t xtof)
const
1208 TVirtualMC::GetMC()->Gsvolu(
"FFEA",
"BOX ",
getMediumID(
kG10), feaParam, 3);
1220 Float_t xCoor = xtof * 0.5 - 25.;
1221 Float_t yCoor = -carpar[1] + feaParam[1];
1222 Float_t zCoor = -carpar[2] + (2. * feaRoof1[2] - 2. * al1[2] - feaParam[2]);
1223 TVirtualMC::GetMC()->Gspos(
"FFEA", 1,
"FCA1", -xCoor, yCoor, zCoor, 0,
"ONLY");
1224 TVirtualMC::GetMC()->Gspos(
"FFEA", 4,
"FCA1", xCoor, yCoor, zCoor, 0,
"ONLY");
1225 TVirtualMC::GetMC()->Gspos(
"FFEA", 1,
"FCA2", -xCoor, yCoor, zCoor, 0,
"ONLY");
1226 TVirtualMC::GetMC()->Gspos(
"FFEA", 4,
"FCA2", xCoor, yCoor, zCoor, 0,
"ONLY");
1228 TVirtualMC::GetMC()->Gspos(
"FFEA", 2,
"FCA1", -xCoor, yCoor, zCoor, 0,
"ONLY");
1229 TVirtualMC::GetMC()->Gspos(
"FFEA", 3,
"FCA1", xCoor, yCoor, zCoor, 0,
"ONLY");
1230 TVirtualMC::GetMC()->Gspos(
"FFEA", 2,
"FCA2", -xCoor, yCoor, zCoor, 0,
"ONLY");
1231 TVirtualMC::GetMC()->Gspos(
"FFEA", 3,
"FCA2", xCoor, yCoor, zCoor, 0,
"ONLY");
1234void Detector::makeFEACooling(
Float_t xtof)
const
1251 const Double_t kGrooveEps = 1.e-3;
1252 new TGeoBBox(
"FRO1box", feaRoof1[0], feaRoof1[1], feaRoof1[2]);
1253 new TGeoBBox(
"FRO1groove", airHole[0], airHole[1] + kGrooveEps, airHole[2] + kGrooveEps);
1254 auto* fro1GrooveTr =
new TGeoTranslation(
"FRO1grooveTr", 0., feaRoof1[1] - airHole[1] + kGrooveEps, 0.);
1255 fro1GrooveTr->RegisterYourself();
1256 auto* fro1Shape =
new TGeoCompositeShape(
"FRO1shape",
"FRO1box-(FRO1groove:FRO1grooveTr)");
1281 Float_t xcoor = xtof * 0.5 - 25.;
1283 Float_t zcoor = -carpar[2] + 2. * feaRoof1[2] - al1[2];
1284 TVirtualMC::GetMC()->Gspos(
"FAL1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1285 TVirtualMC::GetMC()->Gspos(
"FAL1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1286 TVirtualMC::GetMC()->Gspos(
"FAL1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1287 TVirtualMC::GetMC()->Gspos(
"FAL1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1289 TVirtualMC::GetMC()->Gspos(
"FAL1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1290 TVirtualMC::GetMC()->Gspos(
"FAL1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1291 TVirtualMC::GetMC()->Gspos(
"FAL1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1292 TVirtualMC::GetMC()->Gspos(
"FAL1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1295 xcoor = xtof * 0.5 - 25.;
1297 zcoor = -carpar[2] + feaRoof1[2];
1298 TVirtualMC::GetMC()->Gspos(
"FRO1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1299 TVirtualMC::GetMC()->Gspos(
"FRO1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1300 TVirtualMC::GetMC()->Gspos(
"FRO1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1301 TVirtualMC::GetMC()->Gspos(
"FRO1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1303 TVirtualMC::GetMC()->Gspos(
"FRO1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1304 TVirtualMC::GetMC()->Gspos(
"FRO1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1305 TVirtualMC::GetMC()->Gspos(
"FRO1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1306 TVirtualMC::GetMC()->Gspos(
"FRO1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1309 xcoor = xtof * 0.5 - 25.;
1311 zcoor = -carpar[2] + bar[2];
1312 TVirtualMC::GetMC()->Gspos(
"FBAR", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1313 TVirtualMC::GetMC()->Gspos(
"FBAR", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1314 TVirtualMC::GetMC()->Gspos(
"FBAR", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1315 TVirtualMC::GetMC()->Gspos(
"FBAR", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1317 TVirtualMC::GetMC()->Gspos(
"FBAR", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1318 TVirtualMC::GetMC()->Gspos(
"FBAR", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1319 TVirtualMC::GetMC()->Gspos(
"FBAR", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1320 TVirtualMC::GetMC()->Gspos(
"FBAR", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1324 xcoor = xtof * 0.5 - 25.;
1326 zcoor = -carpar[2] + 2. * bar[2] + 2. * tubepar[1] + bar1[2];
1327 TVirtualMC::GetMC()->Gspos(
"FBA1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1328 TVirtualMC::GetMC()->Gspos(
"FBA1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1329 TVirtualMC::GetMC()->Gspos(
"FBA1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1330 TVirtualMC::GetMC()->Gspos(
"FBA1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1332 TVirtualMC::GetMC()->Gspos(
"FBA1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1333 TVirtualMC::GetMC()->Gspos(
"FBA1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1334 TVirtualMC::GetMC()->Gspos(
"FBA1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1335 TVirtualMC::GetMC()->Gspos(
"FBA1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1338 xcoor = xtof * 0.5 - 25.;
1340 zcoor = -carpar[2] + 2. * bar[2] + bar2[2];
1341 TVirtualMC::GetMC()->Gspos(
"FBA2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1342 TVirtualMC::GetMC()->Gspos(
"FBA2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1343 TVirtualMC::GetMC()->Gspos(
"FBA2", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1344 TVirtualMC::GetMC()->Gspos(
"FBA2", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1346 TVirtualMC::GetMC()->Gspos(
"FBA2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1347 TVirtualMC::GetMC()->Gspos(
"FBA2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1348 TVirtualMC::GetMC()->Gspos(
"FBA2", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1349 TVirtualMC::GetMC()->Gspos(
"FBA2", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1351 xcoor = xtof * 0.5 - 25.;
1352 ycoor = carpar[1] - 2. *
Geo::ROOF2PARAMETERS[1] * 0.5 - 2. * feaRoof1[1] - 2. * bar2[1] - 2. * tubepar[1] - bar2[1];
1353 zcoor = -carpar[2] + 2. * bar[2] + bar2[2];
1354 TVirtualMC::GetMC()->Gspos(
"FBA2", 5,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1355 TVirtualMC::GetMC()->Gspos(
"FBA2", 8,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1356 TVirtualMC::GetMC()->Gspos(
"FBA2", 5,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1357 TVirtualMC::GetMC()->Gspos(
"FBA2", 8,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1359 TVirtualMC::GetMC()->Gspos(
"FBA2", 6,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1360 TVirtualMC::GetMC()->Gspos(
"FBA2", 7,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1361 TVirtualMC::GetMC()->Gspos(
"FBA2", 6,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1362 TVirtualMC::GetMC()->Gspos(
"FBA2", 7,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1365void Detector::makeNinoMask(
Float_t xtof)
const
1393 Float_t xcoor = xtof * 0.5 - 25.;
1394 Float_t ycoor = carpar[1] - 2. * al3[1];
1395 Float_t zcoor = carpar[2] - 2. * al3[2] - al2[2];
1396 TVirtualMC::GetMC()->Gspos(
"FAL2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1397 TVirtualMC::GetMC()->Gspos(
"FAL2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1399 TVirtualMC::GetMC()->Gspos(
"FAL2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1400 TVirtualMC::GetMC()->Gspos(
"FAL2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1403 xcoor = xtof * 0.5 - 25.;
1404 ycoor = carpar[1] - al3[1];
1405 zcoor = carpar[2] - al3[2];
1406 TVirtualMC::GetMC()->Gspos(
"FAL3", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1407 TVirtualMC::GetMC()->Gspos(
"FAL3", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1409 TVirtualMC::GetMC()->Gspos(
"FAL3", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1410 TVirtualMC::GetMC()->Gspos(
"FAL3", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1413 xcoor = xtof * 0.5 - 25.;
1416 TVirtualMC::GetMC()->Gspos(
"FRO2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1417 TVirtualMC::GetMC()->Gspos(
"FRO2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1419 TVirtualMC::GetMC()->Gspos(
"FRO2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1420 TVirtualMC::GetMC()->Gspos(
"FRO2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1431 Int_t idrotm[1] = {0};
1438 Float_t tubeparW[3] = {0., 0.3, tubepar[2]};
1442 TVirtualMC::GetMC()->Gspos(
"FITU", 1,
"FTUB", 0., 0., 0., 0,
"ONLY");
1445 Float_t trapar[3] = {tubepar[2], 6.175 , 0.7};
1449 Matrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1467 Float_t zcoor = -carpar[2] + 2. * bar[2] + tubepar[1];
1468 TVirtualMC::GetMC()->Gspos(
"FTUB", 1,
"FCA1", 0., ycoor, zcoor, idrotm[0],
"ONLY");
1469 TVirtualMC::GetMC()->Gspos(
"FTUB", 1,
"FCA2", 0., ycoor, zcoor, idrotm[0],
"ONLY");
1470 gGeoManager->GetVolume(
"FTUB")->VisibleDaughters(kFALSE);
1473 for (Int_t sg = -1; sg < 2; sg += 2) {
1475 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIA", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1476 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIA", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1477 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIA", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1478 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIA", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1479 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIC", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1480 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIC", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1481 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIC", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1482 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIC", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1486 Float_t lonpar1[3] = {2., 0.5,
static_cast<Float_t>(56.82 - trapar[2])};
1487 Float_t lonpar2[3] = {lonpar1[0], lonpar1[1],
static_cast<Float_t>((198.8 - 56.82) * 0.5 - trapar[2])};
1488 Float_t lonpar3[3] = {lonpar1[0], lonpar1[1],
static_cast<Float_t>((366.9 - 198.8) * 0.5 - trapar[2])};
1492 const std::vector<FEAContainer> contFull = feaContainers(zlenA, kFALSE);
1493 const std::vector<FEAContainer> contHoles = feaContainers(zlenA, kTRUE);
1495 const Double_t crateY0 = crateY - carpar[1], crateY1 = crateY + carpar[1];
1496 const Float_t zcoor2 = (198.8 + 56.82) * 0.5;
1497 const Float_t zcoor3 = (366.9 + 198.8) * 0.5;
1498 Int_t copyA = 0, copyB = 0, copyC = 0;
1500 for (Int_t up = 0; up < 2; ++up) {
1501 ycoor = up ? ytub + (tubepar[1] + 2. * bar2[1] + lonpar1[1]) : ytub - (tubepar[1] + 2. * bar2[1] + lonpar1[1]);
1502 for (Int_t sx = -1; sx < 2; sx += 2) {
1503 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar1[0], ycoor, lonpar1[1], 0.,
1505 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar1[0], ycoor, lonpar1[1], 0.,
1507 for (Int_t sz = -1; sz < 2; sz += 2) {
1508 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar2[0], ycoor, lonpar2[1],
1509 sz * zcoor2, lonpar2[2], copyA);
1510 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar2[0], ycoor, lonpar2[1],
1511 sz * zcoor2, lonpar2[2], copyC);
1512 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar3[0], ycoor, lonpar3[1],
1513 sz * zcoor3, lonpar3[2], copyA);
1514 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar3[0], ycoor, lonpar3[1],
1515 sz * zcoor3, lonpar3[2], copyC);
1523 for (Int_t sg = -1; sg < 2; sg += 2) {
1524 carpos[2] = sg * zlenA * 0.5;
1525 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIB", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1526 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIB", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1527 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIB", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1528 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIB", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1532 for (Int_t up = 0; up < 2; ++up) {
1533 ycoor = up ? ytub + (tubepar[1] + 2. * bar2[1] + lonpar1[1]) : ytub - (tubepar[1] + 2. * bar2[1] + lonpar1[1]);
1534 const Double_t xcoor = up ? -24. : 24.;
1535 for (Int_t sz = -1; sz < 2; sz += 2) {
1536 placeCoolingBar(
"FAIB", contHoles, carpar[2], crateY0, crateY1, xcoor, lonpar2[0], ycoor, lonpar2[1],
1537 sz * zcoor2, lonpar2[2], copyB);
1538 placeCoolingBar(
"FAIB", contHoles, carpar[2], crateY0, crateY1, xcoor, lonpar3[0], ycoor, lonpar3[1],
1539 sz * zcoor3, lonpar3[2], copyB);
1555 zcoor = -carpar[2] + barS[2];
1556 TVirtualMC::GetMC()->Gspos(
"FBAS", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1557 TVirtualMC::GetMC()->Gspos(
"FBAS", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1558 TVirtualMC::GetMC()->Gspos(
"FBAS", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1559 TVirtualMC::GetMC()->Gspos(
"FBAS", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1561 zcoor = -carpar[2] + 2. * barS[2] + 2. * tubepar[1] + barS1[2];
1562 TVirtualMC::GetMC()->Gspos(
"FBS1", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1563 TVirtualMC::GetMC()->Gspos(
"FBS1", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1564 TVirtualMC::GetMC()->Gspos(
"FBS1", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1565 TVirtualMC::GetMC()->Gspos(
"FBS1", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1567 ycoor = ytubBis + (tubepar[1] + barS2[1]);
1568 zcoor = -carpar[2] + 2. * barS[2] + barS2[2];
1569 TVirtualMC::GetMC()->Gspos(
"FBS2", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1570 TVirtualMC::GetMC()->Gspos(
"FBS2", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1571 TVirtualMC::GetMC()->Gspos(
"FBS2", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1572 TVirtualMC::GetMC()->Gspos(
"FBS2", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1574 ycoor = ytubBis - (tubepar[1] + barS2[1]);
1576 TVirtualMC::GetMC()->Gspos(
"FBS2", 3,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1577 TVirtualMC::GetMC()->Gspos(
"FBS2", 4,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1578 TVirtualMC::GetMC()->Gspos(
"FBS2", 3,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1579 TVirtualMC::GetMC()->Gspos(
"FBS2", 4,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1591 Int_t idrotm[3] = {0, 0, 0};
1605 Float_t cbparS[3] = {cbpar[0], cbpar[1],
1611 Matrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1624 Float_t zcoor = -carpar[2] + (2. * feaRoof1[2] - 2. * al1[2] - 2. * feaParam[2] - cbpar[1]);
1625 TVirtualMC::GetMC()->Gspos(
"FCAB", 1,
"FCA1", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1626 TVirtualMC::GetMC()->Gspos(
"FCAB", 2,
"FCA1", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1627 TVirtualMC::GetMC()->Gspos(
"FCAB", 1,
"FCA2", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1628 TVirtualMC::GetMC()->Gspos(
"FCAB", 2,
"FCA2", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1630 ycoor -= 2. * cbpar[1];
1631 TVirtualMC::GetMC()->Gspos(
"FCAL", 1,
"FCA1", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1632 TVirtualMC::GetMC()->Gspos(
"FCAL", 2,
"FCA1", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1633 TVirtualMC::GetMC()->Gspos(
"FCAL", 1,
"FCA2", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1634 TVirtualMC::GetMC()->Gspos(
"FCAL", 2,
"FCA2", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1651 cblpar[3] = kCBLl * 0.5;
1654 cblpar[6] = TMath::ATan(tgal) * TMath::RadToDeg();
1655 cblpar[7] = kCBLl * 0.5;
1658 cblpar[10] = cblpar[6];
1665 Matrix(idrotm[1], 90., 90., 180., 0., 90., 180.);
1666 Matrix(idrotm[2], 90., 90., 0., 0., 90., 0.);
1669 xcoor = (xtof -
Geo::CBLW) * 0.5 - 2. * sawpar[0];
1671 zcoor = kCBLl * 0.5;
1672 TVirtualMC::GetMC()->Gspos(
"FCBL", 1,
"FAIA", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1673 TVirtualMC::GetMC()->Gspos(
"FCBL", 2,
"FAIA", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1674 TVirtualMC::GetMC()->Gspos(
"FCBL", 3,
"FAIA", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1675 TVirtualMC::GetMC()->Gspos(
"FCBL", 4,
"FAIA", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1676 TVirtualMC::GetMC()->Gspos(
"FCBL", 1,
"FAIC", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1677 TVirtualMC::GetMC()->Gspos(
"FCBL", 2,
"FAIC", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1678 TVirtualMC::GetMC()->Gspos(
"FCBL", 3,
"FAIC", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1679 TVirtualMC::GetMC()->Gspos(
"FCBL", 4,
"FAIC", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1682 cblpar[3] = kCBLlh * 0.5;
1683 cblpar[5] =
Geo::CBLH1 * 0.5 + kCBLlh * tgal;
1684 cblpar[7] = kCBLlh * 0.5;
1685 cblpar[9] = cblpar[5];
1688 xcoor = (xtof -
Geo::CBLW) * 0.5 - 2. * sawpar[0];
1690 zcoor = kCBLl - kCBLlh * 0.5;
1691 TVirtualMC::GetMC()->Gspos(
"FCBB", 1,
"FAIB", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1692 TVirtualMC::GetMC()->Gspos(
"FCBB", 2,
"FAIB", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1693 TVirtualMC::GetMC()->Gspos(
"FCBB", 3,
"FAIB", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1694 TVirtualMC::GetMC()->Gspos(
"FCBB", 4,
"FAIB", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1698 xcoor = xtof * 0.5 - sawpar[0];
1701 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIA", -xcoor, ycoor, zcoor, 0,
"ONLY");
1702 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIA", xcoor, ycoor, zcoor, 0,
"ONLY");
1703 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIC", -xcoor, ycoor, zcoor, 0,
"ONLY");
1704 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIC", xcoor, ycoor, zcoor, 0,
"ONLY");
1707 xcoor = xtof * 0.5 - sawpar[0];
1709 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIB", -xcoor, ycoor, 0., 0,
"ONLY");
1710 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIB", xcoor, ycoor, 0., 0,
"ONLY");
1726 TVirtualMC::GetMC()->Gspos(
"FCOV", 0,
"FAIA", xcoor, ycoor, zcoor, 0,
"ONLY");
1727 TVirtualMC::GetMC()->Gspos(
"FCOV", 0,
"FAIC", xcoor, ycoor, zcoor, 0,
"ONLY");
1730 TVirtualMC::GetMC()->Gspos(
"FCOB", 1,
"FAIB", xcoor, ycoor, zcoor, 0,
"ONLY");
1731 TVirtualMC::GetMC()->Gspos(
"FCOB", 2,
"FAIB", xcoor, ycoor, -zcoor, 0,
"ONLY");
1733 TVirtualMC::GetMC()->Gspos(
"FCOP", 0,
"FAIB", xcoor, ycoor, zcoor, 0,
"ONLY");
1738void Detector::makeReadoutCrates(
Float_t ytof)
const
1773 Float_t serpar[3] = {29. * 0.5, 121. * 0.5, 90. * 0.5};
1777 zcoor = (118. - 90.) * 0.5;
1781 xcoor = ra * TMath::Cos(phi * TMath::DegToRad());
1782 ycoor = ra * TMath::Sin(phi * TMath::DegToRad());
1783 Matrix(idrotm[
i], 90., phi, 90., phi + 270., 0., 0.);
1784 TVirtualMC::GetMC()->Gspos(
"FTOS",
i,
"BFMO", xcoor, ycoor, zcoor, idrotm[
i],
"ONLY");
1787 zcoor = (90. - 223.) * 0.5;
1788 TVirtualMC::GetMC()->Gspos(
"FTOS", 1,
"BBCE", ra, -3., zcoor, 0,
"ONLY");
1791void Detector::makeModulesInBTOFvolumes(
Float_t ytof,
Float_t zlenA)
const
1800 constexpr Int_t SIZESTR = 16;
1802 Int_t idrotm[1] = {0};
1805 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1812 if (mTOFSectors[isec] == -1) {
1817 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1818 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1821 zcoor = -ytof * 0.25;
1822 TVirtualMC::GetMC()->Gspos(
"FTOB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1823 TVirtualMC::GetMC()->Gspos(
"FTOC", 0,
name, xcoor, -ycoor, zcoor, idrotm[0],
"ONLY");
1827 zcoor = -ytof * 0.25;
1828 TVirtualMC::GetMC()->Gspos(
"FTOA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1841void Detector::makeCoversInBTOFvolumes()
const
1851 constexpr Int_t SIZESTR = 16;
1853 Int_t idrotm[1] = {0};
1856 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1867 if (mTOFSectors[isec] == -1) {
1870 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1871 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1872 TVirtualMC::GetMC()->Gspos(
"FPEB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1874 TVirtualMC::GetMC()->Gspos(
"FPEA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1880void Detector::makeBackInBTOFvolumes(
Float_t ytof)
const
1889 constexpr Int_t SIZESTR = 16;
1891 Int_t idrotm[1] = {0};
1894 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1905 if (mTOFSectors[isec] == -1) {
1908 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1910 TVirtualMC::GetMC()->Gspos(
"FAIA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1912 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1913 TVirtualMC::GetMC()->Gspos(
"FAIB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1915 TVirtualMC::GetMC()->Gspos(
"FAIC", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1930 Int_t modUID, modnum = 0;
1935 TString vpL0 =
"cave/barrel_1/B077_1/BSEGMO";
1936 TString vpL1 =
"_1/BTOF";
1937 TString vpL2 =
"_1";
1938 TString vpL3 =
"/FTOA_0";
1939 TString vpL4 =
"/FLTA_0/FSTR_";
1941 TString snSM =
"TOF/sm";
1942 TString snSTRIP =
"/strip";
1955 LOG(
debug) <<
"modUID: " << modUID;
1957 if (mTOFSectors[isect] == -1) {
1961 if (mTOFHoles && (isect == 13 || isect == 14 || isect == 15)) {
1964 vpL4 =
"/FLTB_0/FSTR_";
1965 }
else if (istr > 53) {
1967 vpL4 =
"/FLTC_0/FSTR_";
1973 vpL4 =
"/FLTA_0/FSTR_";
1986 symName += Form(
"%02d", isect);
1988 symName += Form(
"%02d", istr);
1990 LOG(
debug) <<
"--------------------------------------------"
1992 LOG(
debug) <<
"Alignable object" << imod <<
"\n";
1993 LOG(
debug) <<
"volPath=" << volPath <<
"\n";
1994 LOG(
debug) <<
"symName=" << symName <<
"\n";
1995 LOG(
debug) <<
"--------------------------------------------"
1998 LOG(
debug) <<
"Check for alignable entry: " << symName;
2000 if (!gGeoManager->SetAlignableEntry(symName.Data(), volPath.Data(), modUID)) {
2001 LOG(error) <<
"Alignable entry " << symName <<
" NOT set";
2003 LOG(
debug) <<
"Alignable entry " << symName <<
" set";
2006 TGeoPNEntry* e = gGeoManager->GetAlignableEntryByUID(modUID);
2007 LOG(
debug) <<
"Got TGeoPNEntry " << e;
2010 TGeoHMatrix* globMatrix = e->GetGlobalOrig();
2012 TGeoHMatrix* t2l =
new TGeoHMatrix();
2014 const TGeoHMatrix& globMatrixi = globMatrix->Inverse();
2015 t2l->MultiplyLeft(&globMatrixi);
2038 symName += Form(
"%02d", isect);
2046 gGeoManager->SetAlignableEntry(symName.Data(), volPath.Data());
Definition of the GeometryManager class.
Definition of the Stack class.
void Matrix(Int_t &nmat, Float_t theta1, Float_t phi1, Float_t theta2, Float_t phi2, Float_t theta3, Float_t phi3) const
void Mixture(Int_t imat, const char *name, Float_t *a, Float_t *z, Float_t dens, Int_t nlmat, Float_t *wmat)
void Medium(Int_t numed, const char *name, Int_t nmat, Int_t isvol, Int_t ifield, Float_t fieldm, Float_t tmaxfd, Float_t stemax, Float_t deemax, Float_t epsil, Float_t stmin, Float_t *ubuf=nullptr, Int_t nbuf=0)
int getMediumID(int imed) const
static void initFieldTrackingParams(int &mode, float &maxfield)
void Material(Int_t imat, const char *name, Float_t a, Float_t z, Float_t dens, Float_t radl, Float_t absl, Float_t *buf=nullptr, Int_t nwbuf=0)
std::string addNameTo(const char *ext) const
static int getSensID(o2::detectors::DetID detid, int sensid)
static MaterialManager & Instance()
Int_t GetCurrentTrackNumber() const override
virtual void MaterialMixer(Float_t *p, const Float_t *const a, const Float_t *const m, Int_t n) const final
void ConstructGeometry() final
void InitializeO2Detector() final
void addAlignableVolumes() const override
declare alignable volumes of detector
Bool_t ProcessHits(FairVolume *v=nullptr) final
virtual void DefineGeometry(Float_t xtof, Float_t ytof, Float_t zlenA) final
static constexpr Float_t RMAX
static constexpr Float_t ZPAD
static constexpr Float_t HFILIY
static constexpr Float_t MODULECOVERTHICKNESS
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 HCPCBY
static constexpr Float_t BARS[3]
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 WGLFZ
static constexpr Float_t HPCBY
static constexpr Float_t CBLH2
static constexpr Float_t WRGLZ
static constexpr Float_t HRGLY
static constexpr Int_t NSTRIPXSECTOR
static constexpr Float_t ROOF1PARAMETERS[3]
static constexpr Float_t HSENSMY
static constexpr Float_t INTERCENTRMODBORDER1
static constexpr Float_t BAR2[3]
static Float_t getHeights(Int_t iplate, Int_t istrip)
static constexpr Int_t NSTRIPB
static constexpr Int_t NSTRIPC
static constexpr Float_t AL1PARAMETERS[3]
static constexpr Float_t FEAPARAMETERS[3]
static constexpr Int_t NSTRIPA
static constexpr Float_t CBLH1
static constexpr Float_t ZLENA
static constexpr Float_t BAR1[3]
static constexpr Float_t BETWEENLANDMASK
static constexpr Float_t AL2PARAMETERS[3]
static constexpr Float_t WPCBZ1
static constexpr Float_t LENGTHINCEMODBORDERD
static constexpr Float_t INTERCENTRMODBORDER2
static constexpr Float_t MODULEWALLTHICKNESS
static constexpr Float_t FEAWIDTH1
static constexpr Float_t RMIN
static constexpr Float_t BARS2[3]
static constexpr Float_t SAWTHICKNESS
static Int_t getIndex(const Int_t *detId)
static constexpr Int_t NPLATES
static constexpr Float_t WPCBZ2
static Float_t getDistances(Int_t iplate, Int_t istrip)
static constexpr Float_t BARS1[3]
static void getPadDxDyDz(const Float_t *pos, Int_t *det, Float_t *DeltaPos, int sector=-1)
static constexpr Float_t WHONZ
static constexpr Float_t EXTERINTERMODBORDER1
static constexpr Int_t NPADX
static constexpr Float_t FEAWIDTH2
static constexpr Float_t STRIPLENGTH
static constexpr Float_t BAR[3]
static constexpr Float_t LENGTHINCEMODBORDERU
static constexpr Float_t EXTERINTERMODBORDER2
static constexpr Float_t WCPCBZ
static constexpr Float_t PHISEC
static constexpr Float_t CBLW
static constexpr Float_t AL3PARAMETERS[3]
static constexpr Bool_t FEAWITHMASKS[NSECTORS]
static ShmManager & Instance()
GLfloat GLfloat GLfloat alpha
GLuint const GLchar * name
GLsizei GLsizei GLchar * source
GLboolean GLboolean GLboolean GLboolean a
GLdouble GLdouble GLdouble z
Node par(int index)
Parameters.
float float float float z1
void freeSimVector(std::vector< T > *ptr)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Common utility functions.
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"