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";
335 Double_t xFLT, yFLT, zFLTA;
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);
360void Detector::createModules(Double_t xtof, Double_t ytof, Double_t zlenA, Double_t xFLT, Double_t yFLT, Double_t zFLTA)
const
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);
394 Double_t xcoor, ycoor, zcoor;
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");
414 Double_t
alpha, tgal, beta, tgbe, trpa[11];
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");
450 Double_t y0B, ycoorB, zcoorB;
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(Double_t ytof, Double_t zlenA)
const
676 Double_t parfp[3] = {(LSTRIPX * 0.5), (HSTRIPY * 0.5),
678 TVirtualMC::GetMC()->Gsvolu(
"FSTR",
"BOX",
getMediumID(
kFre), parfp, 3);
680 Double_t posfp[3] = {0., 0., 0.};
691 const double hStrip = (HSTRIPY * 0.5);
697 const double yRglIn = hCpcb + hRgl;
698 const double yGlassSlotIn = yRglIn + hRgl;
700 const double yHon = hStrip - hHon;
701 const double yPcbOut = (yHon - hHon) - hPcb;
702 const double yRglOut = (yPcbOut - hPcb) - hRgl;
703 const double yGlassSlotOut = yRglOut - hRgl;
705 const double yGlf = 0.5 * (yGlassSlotIn + yGlassSlotOut);
714 TVirtualMC::GetMC()->Gspos(
"FHON", 1,
"FSTR", 0., -yHon, 0., 0,
"ONLY");
715 TVirtualMC::GetMC()->Gspos(
"FHON", 2,
"FSTR", 0., yHon, 0., 0,
"ONLY");
721 TVirtualMC::GetMC()->Gsvolu(
"FPC1",
"BOX",
getMediumID(
kG10), parfp, 3);
727 TVirtualMC::GetMC()->Gsvolu(
"FPC2",
"BOX",
getMediumID(
kG10), parfp, 3);
731 TVirtualMC::GetMC()->Gspos(
"FPC1", 1,
"FSTR", 0., yPcbOut, 0., 0,
"ONLY");
732 TVirtualMC::GetMC()->Gspos(
"FPC2", 1,
"FSTR", 0., -yPcbOut, 0., 0,
"ONLY");
738 TVirtualMC::GetMC()->Gsvolu(
"FPCB",
"BOX",
getMediumID(
kG10), parfp, 3);
739 gGeoManager->GetVolume(
"FPCB")->VisibleDaughters(kFALSE);
742 TVirtualMC::GetMC()->Gspos(
"FPCB", 1,
"FSTR", 0., 0., 0., 0,
"ONLY");
745 Double_t parfs[3] = {(LSENSMX * 0.5), (HSENSMY * 0.5),
747 TVirtualMC::GetMC()->Gsvolu(
"FSEN",
"BOX",
getMediumID(
kCuS), parfs, 3);
755 TVirtualMC::GetMC()->Gsdvn(
"FSEZ",
"FSEN",
Geo::NPADZ, 3);
756 TVirtualMC::GetMC()->Gsdvn(
"FPAD",
"FSEZ",
Geo::NPADX, 1);
758 TVirtualMC::GetMC()->Gspos(
"FSEN", 1,
"FPCB", 0., 0., 0., 0,
"ONLY");
767 TVirtualMC::GetMC()->Gspos(
"FRGL", 1,
"FSTR", 0., -yRglOut, 0., 0,
"ONLY");
768 TVirtualMC::GetMC()->Gspos(
"FRGL", 4,
"FSTR", 0., yRglOut, 0., 0,
"ONLY");
769 TVirtualMC::GetMC()->Gspos(
"FRGL", 2,
"FSTR", 0., -yRglIn, 0., 0,
"ONLY");
770 TVirtualMC::GetMC()->Gspos(
"FRGL", 3,
"FSTR", 0., yRglIn, 0., 0,
"ONLY");
779 TVirtualMC::GetMC()->Gspos(
"FGLF", 1,
"FSTR", 0., -yGlf, 0., 0,
"ONLY");
780 TVirtualMC::GetMC()->Gspos(
"FGLF", 2,
"FSTR", 0., yGlf, 0., 0,
"ONLY");
790 Int_t totalStrip = 0;
791 Double_t xpos, zpos, ypos, ang;
792 for (Int_t iplate = 0; iplate <
Geo::NPLATES; iplate++) {
794 totalStrip += maxStripNumbers[iplate - 1];
796 for (Int_t istrip = 0; istrip < maxStripNumbers[iplate]; istrip++) {
800 Matrix(idrotm[istrip + totalStrip], 90., 0., 90. + ang, 90., ang, 90.);
801 }
else if (ang == 0.) {
802 Matrix(idrotm[istrip + totalStrip], 90., 0., 90., 90., 0., 0.);
803 }
else if (ang < 0.) {
804 Matrix(idrotm[istrip + totalStrip], 90., 0., 90. + ang, 90., -ang, 270.);
810 TVirtualMC::GetMC()->Gspos(
"FSTR", istrip + totalStrip + 1,
"FLTA", xpos, ypos, -zpos,
811 idrotm[istrip + totalStrip],
"ONLY");
814 if (istrip + totalStrip + 1 > 53) {
815 TVirtualMC::GetMC()->Gspos(
816 "FSTR", istrip + totalStrip + 1,
"FLTC", xpos, ypos,
818 idrotm[istrip + totalStrip],
"ONLY");
820 if (istrip + totalStrip + 1 < 39) {
821 TVirtualMC::GetMC()->Gspos(
822 "FSTR", istrip + totalStrip + 1,
"FLTB", xpos, ypos,
824 idrotm[istrip + totalStrip],
"ONLY");
831void Detector::createModuleCovers(Double_t xtof, Double_t zlenA)
const
844 par[0] = xtof * 0.5 + 2.;
846 par[2] = zlenA * 0.5 + 2.;
847 TVirtualMC::GetMC()->Gsvolu(
"FPEA",
"BOX ",
getMediumID(
kAir), par, 3);
849 TVirtualMC::GetMC()->Gsvolu(
"FPEB",
"BOX ",
getMediumID(
kAir), par, 3);
852 constexpr Double_t ALCOVERTHICKNESS = 1.5;
853 constexpr Double_t INTERFACECARDTHICKNESS = 0.16;
854 constexpr Double_t ALSKINTHICKNESS = 0.1;
855 constexpr Double_t PLASTICFLATCABLETHICKNESS = 0.25;
856 constexpr Double_t COPPERFLATCABLETHICKNESS = 0.01;
859 par[1] = ALCOVERTHICKNESS * 0.5;
865 Double_t xcoor, ycoor, zcoor;
869 TVirtualMC::GetMC()->Gspos(
"FALT", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
871 TVirtualMC::GetMC()->Gspos(
"FALB", 0,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
881 TVirtualMC::GetMC()->Gspos(
"FPE1", 0,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
885 par[1] = ALCOVERTHICKNESS * 0.5 - ALSKINTHICKNESS;
891 TVirtualMC::GetMC()->Gspos(
"FPE4", 0,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
901 TVirtualMC::GetMC()->Gspos(
"FPE2", 1,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
902 TVirtualMC::GetMC()->Gspos(
"FPE2", 2,
"FALT", xcoor, ycoor, -zcoor, 0,
"ONLY");
908 TVirtualMC::GetMC()->Gspos(
"FPE2", 1,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
909 TVirtualMC::GetMC()->Gspos(
"FPE2", 2,
"FALB", xcoor, ycoor, -zcoor, 0,
"ONLY");
919 TVirtualMC::GetMC()->Gspos(
"FPE3", 1,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
920 TVirtualMC::GetMC()->Gspos(
"FPE3", 2,
"FALT", xcoor, ycoor, -zcoor, 0,
"ONLY");
926 TVirtualMC::GetMC()->Gspos(
"FPE3", 1,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
927 TVirtualMC::GetMC()->Gspos(
"FPE3", 2,
"FALB", xcoor, ycoor, -zcoor, 0,
"ONLY");
932 par[1] = INTERFACECARDTHICKNESS * 0.5;
934 TVirtualMC::GetMC()->Gsvolu(
"FIF1",
"BOX ",
getMediumID(
kG10), par, 3);
936 ycoor = ALCOVERTHICKNESS * 0.5 + INTERFACECARDTHICKNESS * 0.5;
938 TVirtualMC::GetMC()->Gspos(
"FIF1", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
943 TVirtualMC::GetMC()->Gsvolu(
"FIF2",
"BOX ",
getMediumID(
kG10), par, 3);
947 TVirtualMC::GetMC()->Gspos(
"FIF2", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
948 TVirtualMC::GetMC()->Gspos(
"FIF2", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
950 TVirtualMC::GetMC()->Gspos(
"FIF2", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
951 TVirtualMC::GetMC()->Gspos(
"FIF2", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
957 TVirtualMC::GetMC()->Gsvolu(
"FIF3",
"BOX ",
getMediumID(
kG10), par, 3);
961 TVirtualMC::GetMC()->Gspos(
"FIF3", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
962 TVirtualMC::GetMC()->Gspos(
"FIF3", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
964 TVirtualMC::GetMC()->Gspos(
"FIF3", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
965 TVirtualMC::GetMC()->Gspos(
"FIF3", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
971 par[1] = PLASTICFLATCABLETHICKNESS * 0.5;
975 ycoor = -ALCOVERTHICKNESS * 0.5 - PLASTICFLATCABLETHICKNESS * 0.5;
977 TVirtualMC::GetMC()->Gspos(
"FFC1", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
986 TVirtualMC::GetMC()->Gspos(
"FFC2", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
987 TVirtualMC::GetMC()->Gspos(
"FFC2", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
989 TVirtualMC::GetMC()->Gspos(
"FFC2", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
990 TVirtualMC::GetMC()->Gspos(
"FFC2", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
1000 TVirtualMC::GetMC()->Gspos(
"FFC3", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
1001 TVirtualMC::GetMC()->Gspos(
"FFC3", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
1003 TVirtualMC::GetMC()->Gspos(
"FFC3", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
1004 TVirtualMC::GetMC()->Gspos(
"FFC3", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
1008 par[0] = xtof * 0.5;
1009 par[1] = COPPERFLATCABLETHICKNESS * 0.5;
1012 TVirtualMC::GetMC()->Gspos(
"FCC1", 0,
"FFC1", 0., 0., 0., 0,
"ONLY");
1018 TVirtualMC::GetMC()->Gspos(
"FCC2", 0,
"FFC2", 0., 0., 0., 0,
"ONLY");
1024 TVirtualMC::GetMC()->Gspos(
"FCC3", 0,
"FFC3", 0., 0., 0., 0,
"ONLY");
1027std::vector<Detector::FEAContainer> Detector::feaContainers(Double_t zlenA, Bool_t holes)
const
1036 const Double_t rowstep = 6.66;
1037 const Double_t rowgap[5] = {13.5, 22.9, 16.94, 23.8, 20.4};
1038 const Int_t rowb[5] = {6, 7, 6, 19, 7};
1039 const Int_t nblocks = holes ? 4 : 5;
1041 std::vector<FEAContainer> cont;
1043 for (Int_t sg = -1; sg < 2; sg += 2) {
1044 Double_t zcoor = sg * zlenA * 0.5 - 0.8;
1045 for (Int_t nb = 0; nb < nblocks; ++nb) {
1046 zcoor = zcoor - sg * (rowgap[nb] - rowstep);
1047 const Int_t nrow =
row + rowb[nb];
1048 for (;
row < nrow; ++
row) {
1049 zcoor -= sg * rowstep;
1050 cont.push_back({zcoor,
row, sg == -1 && nb != 4});
1057void Detector::makeCentralFEAContainer(Double_t ytof)
const
1070 const char*
source[2] = {
"FCA1",
"FCA2"};
1071 const char* central[2] = {
"FCM1",
"FCM2"};
1072 const char* mother[2] = {
"FAIA",
"FAIC"};
1073 for (Int_t
i = 0;
i < 2; ++
i) {
1074 TGeoVolume* from = gGeoManager->GetVolume(
source[
i]);
1075 auto* assembly =
new TGeoVolumeAssembly(central[
i]);
1076 for (Int_t k = 0; k < from->GetNdaughters(); ++k) {
1077 TGeoNode* nd = from->GetNode(k);
1078 assembly->AddNode(nd->GetVolume(), nd->GetNumber(),
new TGeoHMatrix(*nd->GetMatrix()));
1080 gGeoManager->GetVolume(mother[
i])->AddNode(assembly, 91,
new TGeoTranslation(0., ycoor, -0.8));
1084TGeoVolume* Detector::coolingBarPiece(Double_t dx, Double_t dy, Double_t dz)
const
1093 const std::array<Double_t, 3>
key{dx, dy, dz};
1094 auto it = mBarPieces.find(
key);
1095 if (it != mBarPieces.end()) {
1099 const TString
name = TString::Format(
"FLOS%zu", mBarPieces.size() + 1);
1102 mBarPieces[
key] = vol;
1106void Detector::placeCoolingBar(
const char* mother,
const std::vector<FEAContainer>& cont, Double_t crateDZ,
1107 Double_t crateY0, Double_t crateY1, Double_t xcoor, Double_t dx, Double_t ycoor,
1108 Double_t dy, Double_t zcoor, Double_t dz, Int_t& copy)
const
1116 const Double_t barZ0 = zcoor - dz, barZ1 = zcoor + dz;
1117 const Double_t barY0 = ycoor - dy, barY1 = ycoor + dy;
1120 std::vector<std::pair<Double_t, Double_t>> cut;
1121 if (crateY1 > barY0 && crateY0 < barY1) {
1122 for (
auto const&
c : cont) {
1123 const Double_t z0 = std::max(barZ0,
c.z - crateDZ);
1124 const Double_t
z1 = std::min(barZ1,
c.z + crateDZ);
1126 cut.emplace_back(z0, z1);
1129 std::sort(cut.begin(), cut.end());
1134 for (
auto const&
c : cut) {
1136 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, dy, 0.5 * (
c.first -
z))->GetName(), ++copy, mother,
1137 xcoor, ycoor, 0.5 * (
z +
c.first), 0,
"ONLY");
1139 z = std::max(
z,
c.second);
1142 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, dy, 0.5 * (barZ1 -
z))->GetName(), ++copy, mother,
1143 xcoor, ycoor, 0.5 * (
z + barZ1), 0,
"ONLY");
1147 const Double_t strip[2][2] = {{barY0, std::min(barY1, crateY0)}, {std::max(barY0, crateY1), barY1}};
1148 for (
auto const&
c : cut) {
1149 for (
auto const& sy : strip) {
1150 if (sy[1] <= sy[0]) {
1153 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, 0.5 * (sy[1] - sy[0]), 0.5 * (
c.second -
c.first))->GetName(),
1154 ++copy, mother, xcoor, 0.5 * (sy[0] + sy[1]), 0.5 * (
c.first +
c.second), 0,
"ONLY");
1159void Detector::createBackZone(Double_t xtof, Double_t ytof, Double_t zlenA)
const
1170 Int_t idrotm[1] = {0};
1175 par[0] = xtof * 0.5;
1177 par[2] = zlenA * 0.5;
1178 TVirtualMC::GetMC()->Gsvolu(
"FAIA",
"BOX ",
getMediumID(
kAir), par, 3);
1180 TVirtualMC::GetMC()->Gsvolu(
"FAIB",
"BOX ",
getMediumID(
kAir), par, 3);
1182 TVirtualMC::GetMC()->Gsvolu(
"FAIC",
"BOX ",
getMediumID(
kAir), par, 3);
1193 TVirtualMC::GetMC()->Gsvolu(
"FCA1",
"BOX ",
getMediumID(
kAir), carpar, 3);
1194 TVirtualMC::GetMC()->Gsvolu(
"FCA2",
"BOX ",
getMediumID(
kAir), carpar, 3);
1197 Matrix(idrotm[0], 90., 180., 90., 90., 180., 0.);
1202 for (
auto const&
c : feaContainers(zlenA, kFALSE)) {
1203 TVirtualMC::GetMC()->Gspos(
"FCA1",
c.row,
"FAIA", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1204 TVirtualMC::GetMC()->Gspos(
"FCA2",
c.row,
"FAIC", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1208 for (
auto const&
c : feaContainers(zlenA, kTRUE)) {
1209 TVirtualMC::GetMC()->Gspos(
"FCA1",
c.row,
"FAIB", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1214void Detector::makeFrontEndElectronics(Double_t xtof)
const
1222 TVirtualMC::GetMC()->Gsvolu(
"FFEA",
"BOX ",
getMediumID(
kG10), feaParam, 3);
1234 Double_t xCoor = xtof * 0.5 - 25.;
1235 Double_t yCoor = -carpar[1] + feaParam[1];
1236 Double_t zCoor = -carpar[2] + (2. * feaRoof1[2] - 2. * al1[2] - feaParam[2]);
1237 TVirtualMC::GetMC()->Gspos(
"FFEA", 1,
"FCA1", -xCoor, yCoor, zCoor, 0,
"ONLY");
1238 TVirtualMC::GetMC()->Gspos(
"FFEA", 4,
"FCA1", xCoor, yCoor, zCoor, 0,
"ONLY");
1239 TVirtualMC::GetMC()->Gspos(
"FFEA", 1,
"FCA2", -xCoor, yCoor, zCoor, 0,
"ONLY");
1240 TVirtualMC::GetMC()->Gspos(
"FFEA", 4,
"FCA2", xCoor, yCoor, zCoor, 0,
"ONLY");
1242 TVirtualMC::GetMC()->Gspos(
"FFEA", 2,
"FCA1", -xCoor, yCoor, zCoor, 0,
"ONLY");
1243 TVirtualMC::GetMC()->Gspos(
"FFEA", 3,
"FCA1", xCoor, yCoor, zCoor, 0,
"ONLY");
1244 TVirtualMC::GetMC()->Gspos(
"FFEA", 2,
"FCA2", -xCoor, yCoor, zCoor, 0,
"ONLY");
1245 TVirtualMC::GetMC()->Gspos(
"FFEA", 3,
"FCA2", xCoor, yCoor, zCoor, 0,
"ONLY");
1248void Detector::makeFEACooling(Double_t xtof)
const
1265 const Double_t kGrooveEps = 1.e-3;
1266 new TGeoBBox(
"FRO1box", feaRoof1[0], feaRoof1[1], feaRoof1[2]);
1267 new TGeoBBox(
"FRO1groove", airHole[0], airHole[1] + kGrooveEps, airHole[2] + kGrooveEps);
1268 auto* fro1GrooveTr =
new TGeoTranslation(
"FRO1grooveTr", 0., feaRoof1[1] - airHole[1] + kGrooveEps, 0.);
1269 fro1GrooveTr->RegisterYourself();
1270 auto* fro1Shape =
new TGeoCompositeShape(
"FRO1shape",
"FRO1box-(FRO1groove:FRO1grooveTr)");
1295 Double_t xcoor = xtof * 0.5 - 25.;
1297 Double_t zcoor = -carpar[2] + 2. * feaRoof1[2] - al1[2];
1298 TVirtualMC::GetMC()->Gspos(
"FAL1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1299 TVirtualMC::GetMC()->Gspos(
"FAL1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1300 TVirtualMC::GetMC()->Gspos(
"FAL1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1301 TVirtualMC::GetMC()->Gspos(
"FAL1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1303 TVirtualMC::GetMC()->Gspos(
"FAL1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1304 TVirtualMC::GetMC()->Gspos(
"FAL1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1305 TVirtualMC::GetMC()->Gspos(
"FAL1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1306 TVirtualMC::GetMC()->Gspos(
"FAL1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1309 xcoor = xtof * 0.5 - 25.;
1311 zcoor = -carpar[2] + feaRoof1[2];
1312 TVirtualMC::GetMC()->Gspos(
"FRO1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1313 TVirtualMC::GetMC()->Gspos(
"FRO1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1314 TVirtualMC::GetMC()->Gspos(
"FRO1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1315 TVirtualMC::GetMC()->Gspos(
"FRO1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1317 TVirtualMC::GetMC()->Gspos(
"FRO1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1318 TVirtualMC::GetMC()->Gspos(
"FRO1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1319 TVirtualMC::GetMC()->Gspos(
"FRO1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1320 TVirtualMC::GetMC()->Gspos(
"FRO1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1323 xcoor = xtof * 0.5 - 25.;
1325 zcoor = -carpar[2] + bar[2];
1326 TVirtualMC::GetMC()->Gspos(
"FBAR", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1327 TVirtualMC::GetMC()->Gspos(
"FBAR", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1328 TVirtualMC::GetMC()->Gspos(
"FBAR", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1329 TVirtualMC::GetMC()->Gspos(
"FBAR", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1331 TVirtualMC::GetMC()->Gspos(
"FBAR", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1332 TVirtualMC::GetMC()->Gspos(
"FBAR", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1333 TVirtualMC::GetMC()->Gspos(
"FBAR", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1334 TVirtualMC::GetMC()->Gspos(
"FBAR", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1337 Double_t tubepar[3] = {0., 0.4, (xtof * 0.5 -
Geo::CBLW)};
1338 xcoor = xtof * 0.5 - 25.;
1340 zcoor = -carpar[2] + 2. * bar[2] + 2. * tubepar[1] + bar1[2];
1341 TVirtualMC::GetMC()->Gspos(
"FBA1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1342 TVirtualMC::GetMC()->Gspos(
"FBA1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1343 TVirtualMC::GetMC()->Gspos(
"FBA1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1344 TVirtualMC::GetMC()->Gspos(
"FBA1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1346 TVirtualMC::GetMC()->Gspos(
"FBA1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1347 TVirtualMC::GetMC()->Gspos(
"FBA1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1348 TVirtualMC::GetMC()->Gspos(
"FBA1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1349 TVirtualMC::GetMC()->Gspos(
"FBA1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1352 xcoor = xtof * 0.5 - 25.;
1354 zcoor = -carpar[2] + 2. * bar[2] + bar2[2];
1355 TVirtualMC::GetMC()->Gspos(
"FBA2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1356 TVirtualMC::GetMC()->Gspos(
"FBA2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1357 TVirtualMC::GetMC()->Gspos(
"FBA2", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1358 TVirtualMC::GetMC()->Gspos(
"FBA2", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1360 TVirtualMC::GetMC()->Gspos(
"FBA2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1361 TVirtualMC::GetMC()->Gspos(
"FBA2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1362 TVirtualMC::GetMC()->Gspos(
"FBA2", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1363 TVirtualMC::GetMC()->Gspos(
"FBA2", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1365 xcoor = xtof * 0.5 - 25.;
1366 ycoor = carpar[1] - 2. *
Geo::ROOF2PARAMETERS[1] * 0.5 - 2. * feaRoof1[1] - 2. * bar2[1] - 2. * tubepar[1] - bar2[1];
1367 zcoor = -carpar[2] + 2. * bar[2] + bar2[2];
1368 TVirtualMC::GetMC()->Gspos(
"FBA2", 5,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1369 TVirtualMC::GetMC()->Gspos(
"FBA2", 8,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1370 TVirtualMC::GetMC()->Gspos(
"FBA2", 5,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1371 TVirtualMC::GetMC()->Gspos(
"FBA2", 8,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1373 TVirtualMC::GetMC()->Gspos(
"FBA2", 6,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1374 TVirtualMC::GetMC()->Gspos(
"FBA2", 7,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1375 TVirtualMC::GetMC()->Gspos(
"FBA2", 6,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1376 TVirtualMC::GetMC()->Gspos(
"FBA2", 7,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1379void Detector::makeNinoMask(Double_t xtof)
const
1407 Double_t xcoor = xtof * 0.5 - 25.;
1408 Double_t ycoor = carpar[1] - 2. * al3[1];
1409 Double_t zcoor = carpar[2] - 2. * al3[2] - al2[2];
1410 TVirtualMC::GetMC()->Gspos(
"FAL2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1411 TVirtualMC::GetMC()->Gspos(
"FAL2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1413 TVirtualMC::GetMC()->Gspos(
"FAL2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1414 TVirtualMC::GetMC()->Gspos(
"FAL2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1417 xcoor = xtof * 0.5 - 25.;
1418 ycoor = carpar[1] - al3[1];
1419 zcoor = carpar[2] - al3[2];
1420 TVirtualMC::GetMC()->Gspos(
"FAL3", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1421 TVirtualMC::GetMC()->Gspos(
"FAL3", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1423 TVirtualMC::GetMC()->Gspos(
"FAL3", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1424 TVirtualMC::GetMC()->Gspos(
"FAL3", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1427 xcoor = xtof * 0.5 - 25.;
1430 TVirtualMC::GetMC()->Gspos(
"FRO2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1431 TVirtualMC::GetMC()->Gspos(
"FRO2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1433 TVirtualMC::GetMC()->Gspos(
"FRO2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1434 TVirtualMC::GetMC()->Gspos(
"FRO2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1437void Detector::makeSuperModuleCooling(Double_t xtof, Double_t ytof, Double_t zlenA)
const
1445 Int_t idrotm[1] = {0};
1452 Double_t tubeparW[3] = {0., 0.3, tubepar[2]};
1456 TVirtualMC::GetMC()->Gspos(
"FITU", 1,
"FTUB", 0., 0., 0., 0,
"ONLY");
1459 Double_t trapar[3] = {tubepar[2], 6.175 , 0.7};
1463 Matrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1480 Double_t ycoor = carpar[1] - 2. *
Geo::ROOF2PARAMETERS[1] * 0.5 - 2. * feaRoof1[1] - 2. * bar2[1] - tubepar[1];
1481 Double_t zcoor = -carpar[2] + 2. * bar[2] + tubepar[1];
1482 TVirtualMC::GetMC()->Gspos(
"FTUB", 1,
"FCA1", 0., ycoor, zcoor, idrotm[0],
"ONLY");
1483 TVirtualMC::GetMC()->Gspos(
"FTUB", 1,
"FCA2", 0., ycoor, zcoor, idrotm[0],
"ONLY");
1484 gGeoManager->GetVolume(
"FTUB")->VisibleDaughters(kFALSE);
1487 for (Int_t sg = -1; sg < 2; sg += 2) {
1489 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIA", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1490 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIA", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1491 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIA", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1492 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIA", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1493 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIC", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1494 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIC", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1495 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIC", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1496 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIC", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1500 Double_t lonpar1[3] = {2., 0.5, 56.82 - trapar[2]};
1501 Double_t lonpar2[3] = {lonpar1[0], lonpar1[1], (198.8 - 56.82) * 0.5 - trapar[2]};
1502 Double_t lonpar3[3] = {lonpar1[0], lonpar1[1], (366.9 - 198.8) * 0.5 - trapar[2]};
1506 const std::vector<FEAContainer> contFull = feaContainers(zlenA, kFALSE);
1507 const std::vector<FEAContainer> contHoles = feaContainers(zlenA, kTRUE);
1509 const Double_t crateY0 = crateY - carpar[1], crateY1 = crateY + carpar[1];
1510 const Double_t zcoor2 = (198.8 + 56.82) * 0.5;
1511 const Double_t zcoor3 = (366.9 + 198.8) * 0.5;
1512 Int_t copyA = 0, copyB = 0, copyC = 0;
1514 for (Int_t up = 0; up < 2; ++up) {
1515 ycoor = up ? ytub + (tubepar[1] + 2. * bar2[1] + lonpar1[1]) : ytub - (tubepar[1] + 2. * bar2[1] + lonpar1[1]);
1516 for (Int_t sx = -1; sx < 2; sx += 2) {
1517 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar1[0], ycoor, lonpar1[1], 0.,
1519 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar1[0], ycoor, lonpar1[1], 0.,
1521 for (Int_t sz = -1; sz < 2; sz += 2) {
1522 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar2[0], ycoor, lonpar2[1],
1523 sz * zcoor2, lonpar2[2], copyA);
1524 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar2[0], ycoor, lonpar2[1],
1525 sz * zcoor2, lonpar2[2], copyC);
1526 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar3[0], ycoor, lonpar3[1],
1527 sz * zcoor3, lonpar3[2], copyA);
1528 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar3[0], ycoor, lonpar3[1],
1529 sz * zcoor3, lonpar3[2], copyC);
1534 Double_t carpos[3] = {(25. - xtof * 0.5),
1537 for (Int_t sg = -1; sg < 2; sg += 2) {
1538 carpos[2] = sg * zlenA * 0.5;
1539 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIB", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1540 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIB", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1541 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIB", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1542 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIB", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1546 for (Int_t up = 0; up < 2; ++up) {
1547 ycoor = up ? ytub + (tubepar[1] + 2. * bar2[1] + lonpar1[1]) : ytub - (tubepar[1] + 2. * bar2[1] + lonpar1[1]);
1548 const Double_t xcoor = up ? -24. : 24.;
1549 for (Int_t sz = -1; sz < 2; sz += 2) {
1550 placeCoolingBar(
"FAIB", contHoles, carpar[2], crateY0, crateY1, xcoor, lonpar2[0], ycoor, lonpar2[1],
1551 sz * zcoor2, lonpar2[2], copyB);
1552 placeCoolingBar(
"FAIB", contHoles, carpar[2], crateY0, crateY1, xcoor, lonpar3[0], ycoor, lonpar3[1],
1553 sz * zcoor3, lonpar3[2], copyB);
1567 Double_t ytubBis = carpar[1] - 2. *
Geo::ROOF2PARAMETERS[1] * 0.5 - 2. * feaRoof1[1] - 2. * barS2[1] - tubepar[1];
1569 zcoor = -carpar[2] + barS[2];
1570 TVirtualMC::GetMC()->Gspos(
"FBAS", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1571 TVirtualMC::GetMC()->Gspos(
"FBAS", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1572 TVirtualMC::GetMC()->Gspos(
"FBAS", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1573 TVirtualMC::GetMC()->Gspos(
"FBAS", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1575 zcoor = -carpar[2] + 2. * barS[2] + 2. * tubepar[1] + barS1[2];
1576 TVirtualMC::GetMC()->Gspos(
"FBS1", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1577 TVirtualMC::GetMC()->Gspos(
"FBS1", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1578 TVirtualMC::GetMC()->Gspos(
"FBS1", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1579 TVirtualMC::GetMC()->Gspos(
"FBS1", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1581 ycoor = ytubBis + (tubepar[1] + barS2[1]);
1582 zcoor = -carpar[2] + 2. * barS[2] + barS2[2];
1583 TVirtualMC::GetMC()->Gspos(
"FBS2", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1584 TVirtualMC::GetMC()->Gspos(
"FBS2", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1585 TVirtualMC::GetMC()->Gspos(
"FBS2", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1586 TVirtualMC::GetMC()->Gspos(
"FBS2", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1588 ycoor = ytubBis - (tubepar[1] + barS2[1]);
1590 TVirtualMC::GetMC()->Gspos(
"FBS2", 3,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1591 TVirtualMC::GetMC()->Gspos(
"FBS2", 4,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1592 TVirtualMC::GetMC()->Gspos(
"FBS2", 3,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1593 TVirtualMC::GetMC()->Gspos(
"FBS2", 4,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1597void Detector::makeSuperModuleServices(Double_t xtof, Double_t ytof, Double_t zlenA)
const
1605 Int_t idrotm[3] = {0, 0, 0};
1615 Double_t cbpar[3] = {0., 0.5,
1619 Double_t cbparS[3] = {cbpar[0], cbpar[1],
1625 Matrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1637 Double_t ycoor = ytub - 3.;
1638 Double_t zcoor = -carpar[2] + (2. * feaRoof1[2] - 2. * al1[2] - 2. * feaParam[2] - cbpar[1]);
1639 TVirtualMC::GetMC()->Gspos(
"FCAB", 1,
"FCA1", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1640 TVirtualMC::GetMC()->Gspos(
"FCAB", 2,
"FCA1", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1641 TVirtualMC::GetMC()->Gspos(
"FCAB", 1,
"FCA2", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1642 TVirtualMC::GetMC()->Gspos(
"FCAB", 2,
"FCA2", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1644 ycoor -= 2. * cbpar[1];
1645 TVirtualMC::GetMC()->Gspos(
"FCAL", 1,
"FCA1", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1646 TVirtualMC::GetMC()->Gspos(
"FCAL", 2,
"FCA1", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1647 TVirtualMC::GetMC()->Gspos(
"FCAL", 1,
"FCA2", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1648 TVirtualMC::GetMC()->Gspos(
"FCAL", 2,
"FCA2", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1652 Double_t kCBLl = zlenA * 0.5;
1661 Double_t cblpar[11];
1665 cblpar[3] = kCBLl * 0.5;
1668 cblpar[6] = TMath::ATan(tgal) * TMath::RadToDeg();
1669 cblpar[7] = kCBLl * 0.5;
1672 cblpar[10] = cblpar[6];
1679 Matrix(idrotm[1], 90., 90., 180., 0., 90., 180.);
1680 Matrix(idrotm[2], 90., 90., 0., 0., 90., 0.);
1683 xcoor = (xtof -
Geo::CBLW) * 0.5 - 2. * sawpar[0];
1685 zcoor = kCBLl * 0.5;
1686 TVirtualMC::GetMC()->Gspos(
"FCBL", 1,
"FAIA", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1687 TVirtualMC::GetMC()->Gspos(
"FCBL", 2,
"FAIA", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1688 TVirtualMC::GetMC()->Gspos(
"FCBL", 3,
"FAIA", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1689 TVirtualMC::GetMC()->Gspos(
"FCBL", 4,
"FAIA", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1690 TVirtualMC::GetMC()->Gspos(
"FCBL", 1,
"FAIC", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1691 TVirtualMC::GetMC()->Gspos(
"FCBL", 2,
"FAIC", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1692 TVirtualMC::GetMC()->Gspos(
"FCBL", 3,
"FAIC", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1693 TVirtualMC::GetMC()->Gspos(
"FCBL", 4,
"FAIC", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1696 cblpar[3] = kCBLlh * 0.5;
1697 cblpar[5] =
Geo::CBLH1 * 0.5 + kCBLlh * tgal;
1698 cblpar[7] = kCBLlh * 0.5;
1699 cblpar[9] = cblpar[5];
1702 xcoor = (xtof -
Geo::CBLW) * 0.5 - 2. * sawpar[0];
1704 zcoor = kCBLl - kCBLlh * 0.5;
1705 TVirtualMC::GetMC()->Gspos(
"FCBB", 1,
"FAIB", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1706 TVirtualMC::GetMC()->Gspos(
"FCBB", 2,
"FAIB", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1707 TVirtualMC::GetMC()->Gspos(
"FCBB", 3,
"FAIB", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1708 TVirtualMC::GetMC()->Gspos(
"FCBB", 4,
"FAIB", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1712 xcoor = xtof * 0.5 - sawpar[0];
1715 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIA", -xcoor, ycoor, zcoor, 0,
"ONLY");
1716 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIA", xcoor, ycoor, zcoor, 0,
"ONLY");
1717 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIC", -xcoor, ycoor, zcoor, 0,
"ONLY");
1718 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIC", xcoor, ycoor, zcoor, 0,
"ONLY");
1721 xcoor = xtof * 0.5 - sawpar[0];
1723 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIB", -xcoor, ycoor, 0., 0,
"ONLY");
1724 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIB", xcoor, ycoor, 0., 0,
"ONLY");
1728 Double_t covpar[3] = {(xtof * 0.5), 0.075, (zlenA * 0.5)};
1740 TVirtualMC::GetMC()->Gspos(
"FCOV", 0,
"FAIA", xcoor, ycoor, zcoor, 0,
"ONLY");
1741 TVirtualMC::GetMC()->Gspos(
"FCOV", 0,
"FAIC", xcoor, ycoor, zcoor, 0,
"ONLY");
1744 TVirtualMC::GetMC()->Gspos(
"FCOB", 1,
"FAIB", xcoor, ycoor, zcoor, 0,
"ONLY");
1745 TVirtualMC::GetMC()->Gspos(
"FCOB", 2,
"FAIB", xcoor, ycoor, -zcoor, 0,
"ONLY");
1747 TVirtualMC::GetMC()->Gspos(
"FCOP", 0,
"FAIB", xcoor, ycoor, zcoor, 0,
"ONLY");
1752void Detector::makeReadoutCrates(Double_t ytof)
const
1787 Double_t serpar[3] = {29. * 0.5, 121. * 0.5, 90. * 0.5};
1790 Double_t xcoor, ycoor, zcoor;
1791 zcoor = (118. - 90.) * 0.5;
1795 xcoor = ra * TMath::Cos(phi * TMath::DegToRad());
1796 ycoor = ra * TMath::Sin(phi * TMath::DegToRad());
1797 Matrix(idrotm[
i], 90., phi, 90., phi + 270., 0., 0.);
1798 TVirtualMC::GetMC()->Gspos(
"FTOS",
i,
"BFMO", xcoor, ycoor, zcoor, idrotm[
i],
"ONLY");
1801 zcoor = (90. - 223.) * 0.5;
1802 TVirtualMC::GetMC()->Gspos(
"FTOS", 1,
"BBCE", ra, -3., zcoor, 0,
"ONLY");
1805void Detector::makeModulesInBTOFvolumes(Double_t ytof, Double_t zlenA)
const
1814 constexpr Int_t SIZESTR = 16;
1816 Int_t idrotm[1] = {0};
1819 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1821 Double_t xcoor, ycoor, zcoor;
1826 if (mTOFSectors[isec] == -1) {
1831 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1832 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1835 zcoor = -ytof * 0.25;
1836 TVirtualMC::GetMC()->Gspos(
"FTOB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1837 TVirtualMC::GetMC()->Gspos(
"FTOC", 0,
name, xcoor, -ycoor, zcoor, idrotm[0],
"ONLY");
1841 zcoor = -ytof * 0.25;
1842 TVirtualMC::GetMC()->Gspos(
"FTOA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1855void Detector::makeCoversInBTOFvolumes()
const
1865 constexpr Int_t SIZESTR = 16;
1867 Int_t idrotm[1] = {0};
1870 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1872 Double_t xcoor, ycoor, zcoor;
1881 if (mTOFSectors[isec] == -1) {
1884 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1885 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1886 TVirtualMC::GetMC()->Gspos(
"FPEB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1888 TVirtualMC::GetMC()->Gspos(
"FPEA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1894void Detector::makeBackInBTOFvolumes(Double_t ytof)
const
1903 constexpr Int_t SIZESTR = 16;
1905 Int_t idrotm[1] = {0};
1908 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1910 Double_t xcoor, ycoor, zcoor;
1919 if (mTOFSectors[isec] == -1) {
1922 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1924 TVirtualMC::GetMC()->Gspos(
"FAIA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1926 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1927 TVirtualMC::GetMC()->Gspos(
"FAIB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1929 TVirtualMC::GetMC()->Gspos(
"FAIC", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1944 Int_t modUID, modnum = 0;
1949 TString vpL0 =
"cave/barrel_1/B077_1/BSEGMO";
1950 TString vpL1 =
"_1/BTOF";
1951 TString vpL2 =
"_1";
1952 TString vpL3 =
"/FTOA_0";
1953 TString vpL4 =
"/FLTA_0/FSTR_";
1955 TString snSM =
"TOF/sm";
1956 TString snSTRIP =
"/strip";
1969 LOG(
debug) <<
"modUID: " << modUID;
1971 if (mTOFSectors[isect] == -1) {
1975 if (mTOFHoles && (isect == 13 || isect == 14 || isect == 15)) {
1978 vpL4 =
"/FLTB_0/FSTR_";
1979 }
else if (istr > 53) {
1981 vpL4 =
"/FLTC_0/FSTR_";
1987 vpL4 =
"/FLTA_0/FSTR_";
2000 symName += Form(
"%02d", isect);
2002 symName += Form(
"%02d", istr);
2004 LOG(
debug) <<
"--------------------------------------------"
2006 LOG(
debug) <<
"Alignable object" << imod <<
"\n";
2007 LOG(
debug) <<
"volPath=" << volPath <<
"\n";
2008 LOG(
debug) <<
"symName=" << symName <<
"\n";
2009 LOG(
debug) <<
"--------------------------------------------"
2012 LOG(
debug) <<
"Check for alignable entry: " << symName;
2014 if (!gGeoManager->SetAlignableEntry(symName.Data(), volPath.Data(), modUID)) {
2015 LOG(error) <<
"Alignable entry " << symName <<
" NOT set";
2017 LOG(
debug) <<
"Alignable entry " << symName <<
" set";
2020 TGeoPNEntry* e = gGeoManager->GetAlignableEntryByUID(modUID);
2021 LOG(
debug) <<
"Got TGeoPNEntry " << e;
2024 TGeoHMatrix* globMatrix = e->GetGlobalOrig();
2026 TGeoHMatrix* t2l =
new TGeoHMatrix();
2028 const TGeoHMatrix& globMatrixi = globMatrix->Inverse();
2029 t2l->MultiplyLeft(&globMatrixi);
2052 symName += Form(
"%02d", isect);
2060 gGeoManager->SetAlignableEntry(symName.Data(), volPath.Data());
Definition of the GeometryManager class.
Definition of the Stack class.
void Matrix(Int_t &nmat, Double_t theta1, Double_t phi1, Double_t theta2, Double_t phi2, Double_t theta3, Double_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
int ID
Detector identifiers: continuous, starting from 0.
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(Double_t xtof, Double_t ytof, Double_t zlenA) final
static double getDistances(Int_t iplate, Int_t istrip)
static constexpr double AL3PARAMETERS[3]
static constexpr Int_t NSECTORS
static constexpr double AL2PARAMETERS[3]
static double getHeights(Int_t iplate, Int_t istrip)
static constexpr double HSENSMY
static constexpr double LENGTHEXINMODBORDER
static constexpr double ZPAD
static constexpr Int_t NPADZ
static constexpr double PHISEC
static constexpr double AL1PARAMETERS[3]
static constexpr double BARS[3]
static constexpr double WPCBZ2
static constexpr double WPCBZ1
static constexpr double WHONZ
static constexpr double STRIPLENGTH
static constexpr double LENGTHINCEMODBORDERU
static constexpr Int_t NSTRIPXSECTOR
static constexpr double CBLH2
static constexpr Int_t NSTRIPB
static constexpr Int_t NSTRIPC
static constexpr double BAR1[3]
static constexpr Int_t NSTRIPA
static constexpr double BAR[3]
static constexpr double INTERCENTRMODBORDER1
static constexpr double BARS2[3]
static constexpr double FEAWIDTH2
static constexpr double ROOF2PARAMETERS[3]
static constexpr double MODULECOVERTHICKNESS
static constexpr double BARS1[3]
static constexpr double HFILIY
static constexpr double MODULEWALLTHICKNESS
static constexpr double INTERCENTRMODBORDER2
static constexpr double LENGTHINCEMODBORDERD
static constexpr double HGLASSY
static constexpr double HPCBY
static constexpr double EXTERINTERMODBORDER2
static constexpr double XPAD
static constexpr double HRGLY
static constexpr double CBLH1
static constexpr double ROOF1PARAMETERS[3]
static constexpr double RMIN
static constexpr double WCPCBZ
static Int_t getIndex(const Int_t *detId)
static constexpr double FEAPARAMETERS[3]
static constexpr double SAWTHICKNESS
static constexpr Int_t NPLATES
static constexpr double FEAWIDTH1
static constexpr double BAR2[3]
static constexpr double RMAX
static constexpr double HCPCBY
static void getPadDxDyDz(const Float_t *pos, Int_t *det, Float_t *DeltaPos, int sector=-1)
static constexpr Int_t NPADX
static constexpr double WRGLZ
static constexpr double HHONY
static constexpr double EXTERINTERMODBORDER1
static constexpr double WGLFZ
static constexpr double BETWEENLANDMASK
static constexpr double CBLW
static constexpr Bool_t FEAWITHMASKS[NSECTORS]
static constexpr double ZLENA
static double getAngles(Int_t iplate, Int_t istrip)
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"