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 (fMC->IsTrackEntering() && !fMC->IsNewTrack() && fMC->TrackCharge() != 0) {
80 if (o2stack->GetCurrentTrackNumber() != mTrackRefLastTrackID) {
81 mTrackRefLastTrackID = o2stack->GetCurrentTrackNumber();
85 if (
static_cast<int>(fMC->TrackCharge()) == 0) {
90 float pos2x, pos2y, pos2z;
91 fMC->TrackPosition(pos2x, pos2y, pos2z);
93 LOG(
debug) <<
"Process hit in TOF volume ar R=" <<
radius <<
" - Z=" << pos2z;
101 float posx, posy, posz;
102 fMC->TrackPosition(posx, posy, posz);
103 float time = fMC->TrackTime() * 1.0e09;
106 int sensID =
v->getMCid();
112 HitType newhit(posx, posy, posz,
time, enDep, trackID, sensID);
115 if (channel < 0 || mHits->
empty() || channel != mLastChannelID || !isMergable(newhit, mHits->back())) {
116 mHits->push_back(newhit);
117 stack->addHit(GetDetId());
119 mHits->back().SetEnergyLoss(mHits->back().GetEnergyLoss() + newhit.
GetEnergyLoss());
123 mLastChannelID = channel;
130 FairRootManager::Instance()->RegisterAny(
addNameTo(
"Hit").
data(), mHits, kTRUE);
140 mTrackRefLastTrackID = -1;
150 Float_t aq[2] = {28.0855, 15.9994};
157 Float_t anox[4] = {12.011, 1.00794, 15.9994, 14.00674};
158 Float_t znox[4] = {6., 1., 8., 7.};
159 Float_t wnox[4] = {14., 22., 2., 2.};
167 Float_t ag10[5] = {28.0855, 15.9994, 12.011, 1.00794, 15.9994};
168 Float_t zg10[5] = {14., 8., 6., 1., 8.};
171 na[0] = 1., na[1] = 2., na[2] = 0., na[3] = 0., na[4] = 0.;
173 wmatg10[0] = we[0] * 0.6;
174 wmatg10[1] = we[1] * 0.6;
175 na[0] = 0., na[1] = 0., na[2] = 14., na[3] = 20., na[4] = 3.;
177 wmatg10[2] = we[2] * 0.4;
178 wmatg10[3] = we[3] * 0.4;
179 wmatg10[4] = we[4] * 0.4;
184 Float_t awa[2] = {1.00794, 15.9994};
191 Float_t aAir[4] = {12.011, 14.00674, 15.9994, 39.948};
192 Float_t zAir[4] = {6., 7., 8., 18.};
193 Float_t wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
197 Float_t afg[4] = {28.0855, 15.9994, 12.011, 1.00794};
198 Float_t zfg[4] = {14., 8., 6., 1.};
199 Float_t wfg[4] = {0.12906, 0.29405, 0.51502, 0.06187};
205 Float_t afre[4] = {12.011, 1.00794, 18.9984032, 32.0065};
206 Float_t zfre[4] = {6., 1., 9., 16.};
207 Float_t wfre[4] = {0.21250, 0.01787, 0.74827, 0.021355};
212 Float_t acbt[2] = {26.981539, 63.546};
214 Float_t wcbt[2] = {0.407, 0.593};
218 Float_t asc[4] = {12.011, 1.00794, 26.981539, 63.546};
219 Float_t zsc[4] = {6., 1., 13., 29.};
221 for (Int_t ii = 0; ii < 4; ii++) {
226 for (Int_t ii = 0; ii < 4; ii++) {
229 for (Int_t ii = 0; ii < 4; ii++) {
235 wsc[0] = 0.4375 * wDummy[0];
236 wsc[1] = 0.4375 * wDummy[1];
242 Float_t acra[5] = {26.981539, 63.546, 55.845, 51.9961, 58.6934};
243 Float_t zcra[5] = {13., 29., 26., 24., 28.};
244 Float_t wcra[5] = {0.7, 0.2, 0.07, 0.018, 0.012};
248 Float_t aPlastic[2] = {12.011, 1.00794};
249 Float_t zPlastic[2] = {6., 1.};
250 Float_t wPlastic[2] = {1., 2.};
253 Int_t nwPlastic = -2;
255 Mixture(0,
"Air$", aAir, zAir, dAir, 4, wAir);
256 Mixture(1,
"Nomex$", anox, znox, dnox, nnox, wnox);
257 Mixture(2,
"G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
258 Mixture(3,
"fibre glass$", afg, zfg, dfg, nfg, wfg);
259 Material(4,
"Al $", 26.981539, 13., 2.7, -8.9, 999.);
260 Float_t factor = 0.4 / 1.5 * 2. / 3.;
261 Material(5,
"Al honeycomb$", 26.981539, 13., 2.7 * factor, -8.9 / factor, 999.);
262 Mixture(6,
"Freon$", afre, zfre, densfre, nfre, wfre);
263 Mixture(7,
"Glass$", aq, zq, dq, nq, wq);
264 Mixture(8,
"Water$", awa, zwa, dwa, nwa, wwa);
265 Mixture(9,
"cables+tubes$", acbt, zcbt, decbt, 2, wcbt);
266 Material(10,
"Cu $", 63.546, 29., 8.96, -1.43, 999.);
267 Mixture(11,
"cable$", asc, zsc, dsc, 4, wsc);
268 Mixture(12,
"Al+Cu+steel$", acra, zcra, dcra, 5, wcra);
269 Mixture(13,
"plastic$", aPlastic, zPlastic, dPlastic, nwPlastic, wPlastic);
270 Float_t factorHoles = 1. / 36.5;
271 Material(14,
"Al honey for holes$", 26.981539, 13., 2.7 * factorHoles, -8.9 / factorHoles, 999.);
273 Float_t epsil, stmin, deemax, stemax;
287 Medium(
kAir,
"Air$", 0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
288 Medium(
kNomex,
"Nomex$", 1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
289 Medium(
kG10,
"G10$", 2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
290 Medium(
kFiberGlass,
"fibre glass$", 3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
291 Medium(
kAlFrame,
"Al Frame$", 4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
292 Medium(
kHoneycomb,
"honeycomb$", 5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
293 Medium(
kFre,
"Fre$", 6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
294 Medium(
kCuS,
"Cu-S$", 10, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
295 Medium(
kGlass,
"Glass$", 7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
296 Medium(
kWater,
"Water$", 8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
297 Medium(
kCable,
"Cable$", 11, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
298 Medium(
kCableTubes,
"Cables+Tubes$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
299 Medium(
kCopper,
"Copper$", 10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
300 Medium(
kPlastic,
"Plastic$", 13, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
301 Medium(
kCrates,
"Crates$", 12, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
302 Medium(
kHoneyHoles,
"honey_holes$", 14, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
311 for (Int_t
i = 0;
i <
n; ++
i) {
315 for (Int_t
i = 0;
i <
n; ++
i) {
333 LOG(info) <<
"Loaded TOF geometry";
343 Double_t xFLT, yFLT, zFLTA;
348 createModules(xtof, ytof, zlenA, xFLT, yFLT, zFLTA);
349 makeStripsInModules(ytof, zlenA);
351 createModuleCovers(xtof, zlenA);
353 createBackZone(xtof, ytof, zlenA);
354 makeFrontEndElectronics(xtof);
355 makeFEACooling(xtof);
357 makeSuperModuleCooling(xtof, ytof, zlenA);
358 makeSuperModuleServices(xtof, ytof, zlenA);
359 makeCentralFEAContainer(ytof);
361 makeModulesInBTOFvolumes(ytof, zlenA);
362 makeCoversInBTOFvolumes();
363 makeBackInBTOFvolumes(ytof);
365 makeReadoutCrates(ytof);
368void Detector::createModules(Double_t xtof, Double_t ytof, Double_t zlenA, Double_t xFLT, Double_t yFLT, Double_t zFLTA)
const
376 for (Int_t ii = 0; ii < 8; ii++) {
383 par[1] = ytof * 0.25;
384 par[2] = zlenA * 0.5;
389 par[1] = ytof * 0.25;
399 par[2] = zFLTA * 0.5;
400 TVirtualMC::GetMC()->Gsvolu(
"FLTA",
"BOX ",
getMediumID(
kFre), par, 3);
402 Double_t xcoor, ycoor, zcoor;
406 TVirtualMC::GetMC()->Gspos(
"FLTA", 0,
"FTOA", xcoor, ycoor, zcoor, 0,
"ONLY");
410 TVirtualMC::GetMC()->Gsvolu(
"FLTB",
"BOX ",
getMediumID(
kFre), par, 3);
411 TVirtualMC::GetMC()->Gsvolu(
"FLTC",
"BOX ",
getMediumID(
kFre), par, 3);
416 TVirtualMC::GetMC()->Gspos(
"FLTB", 0,
"FTOB", xcoor, ycoor, zcoor, 0,
"ONLY");
417 TVirtualMC::GetMC()->Gspos(
"FLTC", 0,
"FTOC", xcoor, ycoor, -zcoor, 0,
"ONLY");
422 Double_t
alpha, tgal, beta, tgbe, trpa[11];
426 alpha = TMath::ATan(tgal);
427 beta = (TMath::Pi() * 0.5 -
alpha) * 0.5;
428 tgbe = TMath::Tan(beta);
429 trpa[0] = xFLT * 0.5;
438 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
445 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
448 Matrix(idrotm[0], 90., 90., 180., 0., 90., 180.);
449 Matrix(idrotm[1], 90., 90., 0., 0., 90., 0.);
455 TVirtualMC::GetMC()->Gspos(
"FWZ1D", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
456 TVirtualMC::GetMC()->Gspos(
"FWZ1D", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
458 Double_t y0B, ycoorB, zcoorB;
463 trpa[0] = xFLT * 0.5;
470 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
475 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
481 TVirtualMC::GetMC()->Gspos(
"FWZAD", 1,
"FLTB", xcoor, ycoorB, zcoorB, idrotm[1],
"ONLY");
482 TVirtualMC::GetMC()->Gspos(
"FWZAD", 2,
"FLTC", xcoor, ycoorB, -zcoorB, idrotm[0],
"ONLY");
487 alpha = TMath::ATan(tgal);
488 beta = (TMath::Pi() * 0.5 -
alpha) * 0.5;
489 tgbe = TMath::Tan(beta);
490 trpa[0] = xFLT * 0.5;
499 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
506 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
509 Matrix(idrotm[2], 90., 270., 0., 0., 90., 180.);
510 Matrix(idrotm[3], 90., 270., 180., 0., 90., 0.);
516 TVirtualMC::GetMC()->Gspos(
"FWZ1U", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
517 TVirtualMC::GetMC()->Gspos(
"FWZ1U", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[3],
"ONLY");
522 trpa[0] = xFLT * 0.5;
529 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
534 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
540 TVirtualMC::GetMC()->Gspos(
"FWZBU", 1,
"FLTB", xcoor, ycoorB, zcoorB, idrotm[3],
"ONLY");
541 TVirtualMC::GetMC()->Gspos(
"FWZBU", 2,
"FLTC", xcoor, ycoorB, -zcoorB, idrotm[2],
"ONLY");
546 trpa[2] = xFLT * 0.5;
547 trpa[3] = -beta * TMath::RadToDeg();
552 Matrix(idrotm[4],
alpha * TMath::RadToDeg(), 90., 90. +
alpha * TMath::RadToDeg(), 90., 90., 180.);
553 Matrix(idrotm[5], 180. -
alpha * TMath::RadToDeg(), 90., 90. -
alpha * TMath::RadToDeg(), 90., 90., 0.);
559 TVirtualMC::GetMC()->Gspos(
"FWZ2", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[4],
"ONLY");
560 TVirtualMC::GetMC()->Gspos(
"FWZ2", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[5],
"ONLY");
565 trpa[2] = xFLT * 0.5;
566 trpa[3] = -beta * TMath::RadToDeg();
574 TVirtualMC::GetMC()->Gspos(
"FWZC", 1,
"FLTB", xcoor, ycoorB, zcoorB, idrotm[5],
"ONLY");
575 TVirtualMC::GetMC()->Gspos(
"FWZC", 2,
"FLTC", xcoor, ycoorB, -zcoorB, idrotm[4],
"ONLY");
581 alpha = TMath::ATan(tgal);
582 beta = (TMath::Pi() * 0.5 -
alpha) * 0.5;
583 tgbe = TMath::Tan(beta);
584 trpa[0] = xFLT * 0.5;
591 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
596 TMath::ATan(tgbe * 0.5) * TMath::RadToDeg();
602 TVirtualMC::GetMC()->Gspos(
"FWZ3", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[3],
"ONLY");
603 TVirtualMC::GetMC()->Gspos(
"FWZ3", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[2],
"ONLY");
610 TVirtualMC::GetMC()->Gspos(
"FWZ3", 5,
"FLTB", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
611 TVirtualMC::GetMC()->Gspos(
"FWZ3", 6,
"FLTC", xcoor, ycoor, -zcoor, idrotm[3],
"ONLY");
617 TVirtualMC::GetMC()->Gspos(
"FWZ3", 3,
"FLTA", xcoor, ycoor, zcoor, idrotm[1],
"ONLY");
618 TVirtualMC::GetMC()->Gspos(
"FWZ3", 4,
"FLTA", xcoor, ycoor, -zcoor, idrotm[0],
"ONLY");
625 TVirtualMC::GetMC()->Gspos(
"FWZ3", 7,
"FLTB", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
626 TVirtualMC::GetMC()->Gspos(
"FWZ3", 8,
"FLTC", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
631 trpa[2] = xFLT * 0.5;
632 trpa[3] = -beta * TMath::RadToDeg();
637 Matrix(idrotm[6],
alpha * TMath::RadToDeg(), 90., 90. +
alpha * TMath::RadToDeg(), 90., 90., 180.);
638 Matrix(idrotm[7], 180. -
alpha * TMath::RadToDeg(), 90., 90. -
alpha * TMath::RadToDeg(), 90., 90., 0.);
643 TVirtualMC::GetMC()->Gspos(
"FWZ4", 1,
"FLTA", xcoor, ycoor, zcoor, idrotm[7],
"ONLY");
644 TVirtualMC::GetMC()->Gspos(
"FWZ4", 2,
"FLTA", xcoor, ycoor, -zcoor, idrotm[6],
"ONLY");
651 TVirtualMC::GetMC()->Gspos(
"FWZ4", 3,
"FLTB", xcoor, ycoor, zcoor, idrotm[6],
"ONLY");
652 TVirtualMC::GetMC()->Gspos(
"FWZ4", 4,
"FLTC", xcoor, ycoor, -zcoor, idrotm[7],
"ONLY");
656void Detector::makeStripsInModules(Double_t ytof, Double_t zlenA)
const
684 Double_t parfp[3] = {(LSTRIPX * 0.5), (HSTRIPY * 0.5),
686 TVirtualMC::GetMC()->Gsvolu(
"FSTR",
"BOX",
getMediumID(
kFre), parfp, 3);
688 Double_t posfp[3] = {0., 0., 0.};
699 const double hStrip = (HSTRIPY * 0.5);
705 const double yRglIn = hCpcb + hRgl;
706 const double yGlassSlotIn = yRglIn + hRgl;
708 const double yHon = hStrip - hHon;
709 const double yPcbOut = (yHon - hHon) - hPcb;
710 const double yRglOut = (yPcbOut - hPcb) - hRgl;
711 const double yGlassSlotOut = yRglOut - hRgl;
713 const double yGlf = 0.5 * (yGlassSlotIn + yGlassSlotOut);
722 TVirtualMC::GetMC()->Gspos(
"FHON", 1,
"FSTR", 0., -yHon, 0., 0,
"ONLY");
723 TVirtualMC::GetMC()->Gspos(
"FHON", 2,
"FSTR", 0., yHon, 0., 0,
"ONLY");
729 TVirtualMC::GetMC()->Gsvolu(
"FPC1",
"BOX",
getMediumID(
kG10), parfp, 3);
735 TVirtualMC::GetMC()->Gsvolu(
"FPC2",
"BOX",
getMediumID(
kG10), parfp, 3);
739 TVirtualMC::GetMC()->Gspos(
"FPC1", 1,
"FSTR", 0., yPcbOut, 0., 0,
"ONLY");
740 TVirtualMC::GetMC()->Gspos(
"FPC2", 1,
"FSTR", 0., -yPcbOut, 0., 0,
"ONLY");
746 TVirtualMC::GetMC()->Gsvolu(
"FPCB",
"BOX",
getMediumID(
kG10), parfp, 3);
747 gGeoManager->GetVolume(
"FPCB")->VisibleDaughters(kFALSE);
750 TVirtualMC::GetMC()->Gspos(
"FPCB", 1,
"FSTR", 0., 0., 0., 0,
"ONLY");
753 Double_t parfs[3] = {(LSENSMX * 0.5), (HSENSMY * 0.5),
755 TVirtualMC::GetMC()->Gsvolu(
"FSEN",
"BOX",
getMediumID(
kCuS), parfs, 3);
763 TVirtualMC::GetMC()->Gsdvn(
"FSEZ",
"FSEN",
Geo::NPADZ, 3);
764 TVirtualMC::GetMC()->Gsdvn(
"FPAD",
"FSEZ",
Geo::NPADX, 1);
766 TVirtualMC::GetMC()->Gspos(
"FSEN", 1,
"FPCB", 0., 0., 0., 0,
"ONLY");
775 TVirtualMC::GetMC()->Gspos(
"FRGL", 1,
"FSTR", 0., -yRglOut, 0., 0,
"ONLY");
776 TVirtualMC::GetMC()->Gspos(
"FRGL", 4,
"FSTR", 0., yRglOut, 0., 0,
"ONLY");
777 TVirtualMC::GetMC()->Gspos(
"FRGL", 2,
"FSTR", 0., -yRglIn, 0., 0,
"ONLY");
778 TVirtualMC::GetMC()->Gspos(
"FRGL", 3,
"FSTR", 0., yRglIn, 0., 0,
"ONLY");
787 TVirtualMC::GetMC()->Gspos(
"FGLF", 1,
"FSTR", 0., -yGlf, 0., 0,
"ONLY");
788 TVirtualMC::GetMC()->Gspos(
"FGLF", 2,
"FSTR", 0., yGlf, 0., 0,
"ONLY");
798 Int_t totalStrip = 0;
799 Double_t xpos, zpos, ypos, ang;
800 for (Int_t iplate = 0; iplate <
Geo::NPLATES; iplate++) {
802 totalStrip += maxStripNumbers[iplate - 1];
804 for (Int_t istrip = 0; istrip < maxStripNumbers[iplate]; istrip++) {
808 Matrix(idrotm[istrip + totalStrip], 90., 0., 90. + ang, 90., ang, 90.);
809 }
else if (ang == 0.) {
810 Matrix(idrotm[istrip + totalStrip], 90., 0., 90., 90., 0., 0.);
811 }
else if (ang < 0.) {
812 Matrix(idrotm[istrip + totalStrip], 90., 0., 90. + ang, 90., -ang, 270.);
818 TVirtualMC::GetMC()->Gspos(
"FSTR", istrip + totalStrip + 1,
"FLTA", xpos, ypos, -zpos,
819 idrotm[istrip + totalStrip],
"ONLY");
822 if (istrip + totalStrip + 1 > 53) {
823 TVirtualMC::GetMC()->Gspos(
824 "FSTR", istrip + totalStrip + 1,
"FLTC", xpos, ypos,
826 idrotm[istrip + totalStrip],
"ONLY");
828 if (istrip + totalStrip + 1 < 39) {
829 TVirtualMC::GetMC()->Gspos(
830 "FSTR", istrip + totalStrip + 1,
"FLTB", xpos, ypos,
832 idrotm[istrip + totalStrip],
"ONLY");
839void Detector::createModuleCovers(Double_t xtof, Double_t zlenA)
const
852 par[0] = xtof * 0.5 + 2.;
854 par[2] = zlenA * 0.5 + 2.;
855 TVirtualMC::GetMC()->Gsvolu(
"FPEA",
"BOX ",
getMediumID(
kAir), par, 3);
857 TVirtualMC::GetMC()->Gsvolu(
"FPEB",
"BOX ",
getMediumID(
kAir), par, 3);
860 constexpr Double_t ALCOVERTHICKNESS = 1.5;
861 constexpr Double_t INTERFACECARDTHICKNESS = 0.16;
862 constexpr Double_t ALSKINTHICKNESS = 0.1;
863 constexpr Double_t PLASTICFLATCABLETHICKNESS = 0.25;
864 constexpr Double_t COPPERFLATCABLETHICKNESS = 0.01;
867 par[1] = ALCOVERTHICKNESS * 0.5;
873 Double_t xcoor, ycoor, zcoor;
877 TVirtualMC::GetMC()->Gspos(
"FALT", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
879 TVirtualMC::GetMC()->Gspos(
"FALB", 0,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
889 TVirtualMC::GetMC()->Gspos(
"FPE1", 0,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
893 par[1] = ALCOVERTHICKNESS * 0.5 - ALSKINTHICKNESS;
899 TVirtualMC::GetMC()->Gspos(
"FPE4", 0,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
909 TVirtualMC::GetMC()->Gspos(
"FPE2", 1,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
910 TVirtualMC::GetMC()->Gspos(
"FPE2", 2,
"FALT", xcoor, ycoor, -zcoor, 0,
"ONLY");
916 TVirtualMC::GetMC()->Gspos(
"FPE2", 1,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
917 TVirtualMC::GetMC()->Gspos(
"FPE2", 2,
"FALB", xcoor, ycoor, -zcoor, 0,
"ONLY");
927 TVirtualMC::GetMC()->Gspos(
"FPE3", 1,
"FALT", xcoor, ycoor, zcoor, 0,
"ONLY");
928 TVirtualMC::GetMC()->Gspos(
"FPE3", 2,
"FALT", xcoor, ycoor, -zcoor, 0,
"ONLY");
934 TVirtualMC::GetMC()->Gspos(
"FPE3", 1,
"FALB", xcoor, ycoor, zcoor, 0,
"ONLY");
935 TVirtualMC::GetMC()->Gspos(
"FPE3", 2,
"FALB", xcoor, ycoor, -zcoor, 0,
"ONLY");
940 par[1] = INTERFACECARDTHICKNESS * 0.5;
942 TVirtualMC::GetMC()->Gsvolu(
"FIF1",
"BOX ",
getMediumID(
kG10), par, 3);
944 ycoor = ALCOVERTHICKNESS * 0.5 + INTERFACECARDTHICKNESS * 0.5;
946 TVirtualMC::GetMC()->Gspos(
"FIF1", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
951 TVirtualMC::GetMC()->Gsvolu(
"FIF2",
"BOX ",
getMediumID(
kG10), par, 3);
955 TVirtualMC::GetMC()->Gspos(
"FIF2", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
956 TVirtualMC::GetMC()->Gspos(
"FIF2", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
958 TVirtualMC::GetMC()->Gspos(
"FIF2", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
959 TVirtualMC::GetMC()->Gspos(
"FIF2", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
965 TVirtualMC::GetMC()->Gsvolu(
"FIF3",
"BOX ",
getMediumID(
kG10), par, 3);
969 TVirtualMC::GetMC()->Gspos(
"FIF3", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
970 TVirtualMC::GetMC()->Gspos(
"FIF3", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
972 TVirtualMC::GetMC()->Gspos(
"FIF3", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
973 TVirtualMC::GetMC()->Gspos(
"FIF3", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
979 par[1] = PLASTICFLATCABLETHICKNESS * 0.5;
983 ycoor = -ALCOVERTHICKNESS * 0.5 - PLASTICFLATCABLETHICKNESS * 0.5;
985 TVirtualMC::GetMC()->Gspos(
"FFC1", 0,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
994 TVirtualMC::GetMC()->Gspos(
"FFC2", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
995 TVirtualMC::GetMC()->Gspos(
"FFC2", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
997 TVirtualMC::GetMC()->Gspos(
"FFC2", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
998 TVirtualMC::GetMC()->Gspos(
"FFC2", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
1008 TVirtualMC::GetMC()->Gspos(
"FFC3", 1,
"FPEA", xcoor, ycoor, zcoor, 0,
"ONLY");
1009 TVirtualMC::GetMC()->Gspos(
"FFC3", 2,
"FPEA", xcoor, ycoor, -zcoor, 0,
"ONLY");
1011 TVirtualMC::GetMC()->Gspos(
"FFC3", 1,
"FPEB", xcoor, ycoor, zcoor, 0,
"ONLY");
1012 TVirtualMC::GetMC()->Gspos(
"FFC3", 2,
"FPEB", xcoor, ycoor, -zcoor, 0,
"ONLY");
1016 par[0] = xtof * 0.5;
1017 par[1] = COPPERFLATCABLETHICKNESS * 0.5;
1020 TVirtualMC::GetMC()->Gspos(
"FCC1", 0,
"FFC1", 0., 0., 0., 0,
"ONLY");
1026 TVirtualMC::GetMC()->Gspos(
"FCC2", 0,
"FFC2", 0., 0., 0., 0,
"ONLY");
1032 TVirtualMC::GetMC()->Gspos(
"FCC3", 0,
"FFC3", 0., 0., 0., 0,
"ONLY");
1035std::vector<Detector::FEAContainer> Detector::feaContainers(Double_t zlenA, Bool_t holes)
const
1044 const Double_t rowstep = 6.66;
1045 const Double_t rowgap[5] = {13.5, 22.9, 16.94, 23.8, 20.4};
1046 const Int_t rowb[5] = {6, 7, 6, 19, 7};
1047 const Int_t nblocks = holes ? 4 : 5;
1049 std::vector<FEAContainer> cont;
1051 for (Int_t sg = -1; sg < 2; sg += 2) {
1052 Double_t zcoor = sg * zlenA * 0.5 - 0.8;
1053 for (Int_t nb = 0; nb < nblocks; ++nb) {
1054 zcoor = zcoor - sg * (rowgap[nb] - rowstep);
1055 const Int_t nrow =
row + rowb[nb];
1056 for (;
row < nrow; ++
row) {
1057 zcoor -= sg * rowstep;
1058 cont.push_back({zcoor,
row, sg == -1 && nb != 4});
1065void Detector::makeCentralFEAContainer(Double_t ytof)
const
1078 const char*
source[2] = {
"FCA1",
"FCA2"};
1079 const char* central[2] = {
"FCM1",
"FCM2"};
1080 const char* mother[2] = {
"FAIA",
"FAIC"};
1081 for (Int_t
i = 0;
i < 2; ++
i) {
1082 TGeoVolume* from = gGeoManager->GetVolume(
source[
i]);
1083 auto* assembly =
new TGeoVolumeAssembly(central[
i]);
1084 for (Int_t k = 0; k < from->GetNdaughters(); ++k) {
1085 TGeoNode* nd = from->GetNode(k);
1086 assembly->AddNode(nd->GetVolume(), nd->GetNumber(),
new TGeoHMatrix(*nd->GetMatrix()));
1088 gGeoManager->GetVolume(mother[
i])->AddNode(assembly, 91,
new TGeoTranslation(0., ycoor, -0.8));
1092TGeoVolume* Detector::coolingBarPiece(Double_t dx, Double_t dy, Double_t dz)
const
1101 const std::array<Double_t, 3>
key{dx, dy, dz};
1102 auto it = mBarPieces.find(
key);
1103 if (it != mBarPieces.end()) {
1107 const TString
name = TString::Format(
"FLOS%zu", mBarPieces.size() + 1);
1110 mBarPieces[
key] = vol;
1114void Detector::placeCoolingBar(
const char* mother,
const std::vector<FEAContainer>& cont, Double_t crateDZ,
1115 Double_t crateY0, Double_t crateY1, Double_t xcoor, Double_t dx, Double_t ycoor,
1116 Double_t dy, Double_t zcoor, Double_t dz, Int_t& copy)
const
1124 const Double_t barZ0 = zcoor - dz, barZ1 = zcoor + dz;
1125 const Double_t barY0 = ycoor - dy, barY1 = ycoor + dy;
1128 std::vector<std::pair<Double_t, Double_t>> cut;
1129 if (crateY1 > barY0 && crateY0 < barY1) {
1130 for (
auto const&
c : cont) {
1131 const Double_t z0 = std::max(barZ0,
c.z - crateDZ);
1132 const Double_t
z1 = std::min(barZ1,
c.z + crateDZ);
1134 cut.emplace_back(z0, z1);
1137 std::sort(cut.begin(), cut.end());
1142 for (
auto const&
c : cut) {
1144 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, dy, 0.5 * (
c.first -
z))->GetName(), ++copy, mother,
1145 xcoor, ycoor, 0.5 * (
z +
c.first), 0,
"ONLY");
1147 z = std::max(
z,
c.second);
1150 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, dy, 0.5 * (barZ1 -
z))->GetName(), ++copy, mother,
1151 xcoor, ycoor, 0.5 * (
z + barZ1), 0,
"ONLY");
1155 const Double_t strip[2][2] = {{barY0, std::min(barY1, crateY0)}, {std::max(barY0, crateY1), barY1}};
1156 for (
auto const&
c : cut) {
1157 for (
auto const& sy : strip) {
1158 if (sy[1] <= sy[0]) {
1161 TVirtualMC::GetMC()->Gspos(coolingBarPiece(dx, 0.5 * (sy[1] - sy[0]), 0.5 * (
c.second -
c.first))->GetName(),
1162 ++copy, mother, xcoor, 0.5 * (sy[0] + sy[1]), 0.5 * (
c.first +
c.second), 0,
"ONLY");
1167void Detector::createBackZone(Double_t xtof, Double_t ytof, Double_t zlenA)
const
1178 Int_t idrotm[1] = {0};
1183 par[0] = xtof * 0.5;
1185 par[2] = zlenA * 0.5;
1186 TVirtualMC::GetMC()->Gsvolu(
"FAIA",
"BOX ",
getMediumID(
kAir), par, 3);
1188 TVirtualMC::GetMC()->Gsvolu(
"FAIB",
"BOX ",
getMediumID(
kAir), par, 3);
1190 TVirtualMC::GetMC()->Gsvolu(
"FAIC",
"BOX ",
getMediumID(
kAir), par, 3);
1201 TVirtualMC::GetMC()->Gsvolu(
"FCA1",
"BOX ",
getMediumID(
kAir), carpar, 3);
1202 TVirtualMC::GetMC()->Gsvolu(
"FCA2",
"BOX ",
getMediumID(
kAir), carpar, 3);
1205 Matrix(idrotm[0], 90., 180., 90., 90., 180., 0.);
1210 for (
auto const&
c : feaContainers(zlenA, kFALSE)) {
1211 TVirtualMC::GetMC()->Gspos(
"FCA1",
c.row,
"FAIA", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1212 TVirtualMC::GetMC()->Gspos(
"FCA2",
c.row,
"FAIC", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1216 for (
auto const&
c : feaContainers(zlenA, kTRUE)) {
1217 TVirtualMC::GetMC()->Gspos(
"FCA1",
c.row,
"FAIB", carpos[0], carpos[1],
c.z,
c.rotated ? idrotm[0] : 0,
"ONLY");
1222void Detector::makeFrontEndElectronics(Double_t xtof)
const
1230 TVirtualMC::GetMC()->Gsvolu(
"FFEA",
"BOX ",
getMediumID(
kG10), feaParam, 3);
1242 Double_t xCoor = xtof * 0.5 - 25.;
1243 Double_t yCoor = -carpar[1] + feaParam[1];
1244 Double_t zCoor = -carpar[2] + (2. * feaRoof1[2] - 2. * al1[2] - feaParam[2]);
1245 TVirtualMC::GetMC()->Gspos(
"FFEA", 1,
"FCA1", -xCoor, yCoor, zCoor, 0,
"ONLY");
1246 TVirtualMC::GetMC()->Gspos(
"FFEA", 4,
"FCA1", xCoor, yCoor, zCoor, 0,
"ONLY");
1247 TVirtualMC::GetMC()->Gspos(
"FFEA", 1,
"FCA2", -xCoor, yCoor, zCoor, 0,
"ONLY");
1248 TVirtualMC::GetMC()->Gspos(
"FFEA", 4,
"FCA2", xCoor, yCoor, zCoor, 0,
"ONLY");
1250 TVirtualMC::GetMC()->Gspos(
"FFEA", 2,
"FCA1", -xCoor, yCoor, zCoor, 0,
"ONLY");
1251 TVirtualMC::GetMC()->Gspos(
"FFEA", 3,
"FCA1", xCoor, yCoor, zCoor, 0,
"ONLY");
1252 TVirtualMC::GetMC()->Gspos(
"FFEA", 2,
"FCA2", -xCoor, yCoor, zCoor, 0,
"ONLY");
1253 TVirtualMC::GetMC()->Gspos(
"FFEA", 3,
"FCA2", xCoor, yCoor, zCoor, 0,
"ONLY");
1256void Detector::makeFEACooling(Double_t xtof)
const
1273 const Double_t kGrooveEps = 1.e-3;
1274 new TGeoBBox(
"FRO1box", feaRoof1[0], feaRoof1[1], feaRoof1[2]);
1275 new TGeoBBox(
"FRO1groove", airHole[0], airHole[1] + kGrooveEps, airHole[2] + kGrooveEps);
1276 auto* fro1GrooveTr =
new TGeoTranslation(
"FRO1grooveTr", 0., feaRoof1[1] - airHole[1] + kGrooveEps, 0.);
1277 fro1GrooveTr->RegisterYourself();
1278 auto* fro1Shape =
new TGeoCompositeShape(
"FRO1shape",
"FRO1box-(FRO1groove:FRO1grooveTr)");
1303 Double_t xcoor = xtof * 0.5 - 25.;
1305 Double_t zcoor = -carpar[2] + 2. * feaRoof1[2] - al1[2];
1306 TVirtualMC::GetMC()->Gspos(
"FAL1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1307 TVirtualMC::GetMC()->Gspos(
"FAL1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1308 TVirtualMC::GetMC()->Gspos(
"FAL1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1309 TVirtualMC::GetMC()->Gspos(
"FAL1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1311 TVirtualMC::GetMC()->Gspos(
"FAL1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1312 TVirtualMC::GetMC()->Gspos(
"FAL1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1313 TVirtualMC::GetMC()->Gspos(
"FAL1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1314 TVirtualMC::GetMC()->Gspos(
"FAL1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1317 xcoor = xtof * 0.5 - 25.;
1319 zcoor = -carpar[2] + feaRoof1[2];
1320 TVirtualMC::GetMC()->Gspos(
"FRO1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1321 TVirtualMC::GetMC()->Gspos(
"FRO1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1322 TVirtualMC::GetMC()->Gspos(
"FRO1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1323 TVirtualMC::GetMC()->Gspos(
"FRO1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1325 TVirtualMC::GetMC()->Gspos(
"FRO1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1326 TVirtualMC::GetMC()->Gspos(
"FRO1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1327 TVirtualMC::GetMC()->Gspos(
"FRO1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1328 TVirtualMC::GetMC()->Gspos(
"FRO1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1331 xcoor = xtof * 0.5 - 25.;
1333 zcoor = -carpar[2] + bar[2];
1334 TVirtualMC::GetMC()->Gspos(
"FBAR", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1335 TVirtualMC::GetMC()->Gspos(
"FBAR", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1336 TVirtualMC::GetMC()->Gspos(
"FBAR", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1337 TVirtualMC::GetMC()->Gspos(
"FBAR", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1339 TVirtualMC::GetMC()->Gspos(
"FBAR", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1340 TVirtualMC::GetMC()->Gspos(
"FBAR", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1341 TVirtualMC::GetMC()->Gspos(
"FBAR", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1342 TVirtualMC::GetMC()->Gspos(
"FBAR", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1345 Double_t tubepar[3] = {0., 0.4, (xtof * 0.5 -
Geo::CBLW)};
1346 xcoor = xtof * 0.5 - 25.;
1348 zcoor = -carpar[2] + 2. * bar[2] + 2. * tubepar[1] + bar1[2];
1349 TVirtualMC::GetMC()->Gspos(
"FBA1", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1350 TVirtualMC::GetMC()->Gspos(
"FBA1", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1351 TVirtualMC::GetMC()->Gspos(
"FBA1", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1352 TVirtualMC::GetMC()->Gspos(
"FBA1", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1354 TVirtualMC::GetMC()->Gspos(
"FBA1", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1355 TVirtualMC::GetMC()->Gspos(
"FBA1", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1356 TVirtualMC::GetMC()->Gspos(
"FBA1", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1357 TVirtualMC::GetMC()->Gspos(
"FBA1", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1360 xcoor = xtof * 0.5 - 25.;
1362 zcoor = -carpar[2] + 2. * bar[2] + bar2[2];
1363 TVirtualMC::GetMC()->Gspos(
"FBA2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1364 TVirtualMC::GetMC()->Gspos(
"FBA2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1365 TVirtualMC::GetMC()->Gspos(
"FBA2", 1,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1366 TVirtualMC::GetMC()->Gspos(
"FBA2", 4,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1368 TVirtualMC::GetMC()->Gspos(
"FBA2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1369 TVirtualMC::GetMC()->Gspos(
"FBA2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1370 TVirtualMC::GetMC()->Gspos(
"FBA2", 2,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1371 TVirtualMC::GetMC()->Gspos(
"FBA2", 3,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1373 xcoor = xtof * 0.5 - 25.;
1374 ycoor = carpar[1] - 2. *
Geo::ROOF2PARAMETERS[1] * 0.5 - 2. * feaRoof1[1] - 2. * bar2[1] - 2. * tubepar[1] - bar2[1];
1375 zcoor = -carpar[2] + 2. * bar[2] + bar2[2];
1376 TVirtualMC::GetMC()->Gspos(
"FBA2", 5,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1377 TVirtualMC::GetMC()->Gspos(
"FBA2", 8,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1378 TVirtualMC::GetMC()->Gspos(
"FBA2", 5,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1379 TVirtualMC::GetMC()->Gspos(
"FBA2", 8,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1381 TVirtualMC::GetMC()->Gspos(
"FBA2", 6,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1382 TVirtualMC::GetMC()->Gspos(
"FBA2", 7,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1383 TVirtualMC::GetMC()->Gspos(
"FBA2", 6,
"FCA2", -xcoor, ycoor, zcoor, 0,
"ONLY");
1384 TVirtualMC::GetMC()->Gspos(
"FBA2", 7,
"FCA2", xcoor, ycoor, zcoor, 0,
"ONLY");
1387void Detector::makeNinoMask(Double_t xtof)
const
1415 Double_t xcoor = xtof * 0.5 - 25.;
1416 Double_t ycoor = carpar[1] - 2. * al3[1];
1417 Double_t zcoor = carpar[2] - 2. * al3[2] - al2[2];
1418 TVirtualMC::GetMC()->Gspos(
"FAL2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1419 TVirtualMC::GetMC()->Gspos(
"FAL2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1421 TVirtualMC::GetMC()->Gspos(
"FAL2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1422 TVirtualMC::GetMC()->Gspos(
"FAL2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1425 xcoor = xtof * 0.5 - 25.;
1426 ycoor = carpar[1] - al3[1];
1427 zcoor = carpar[2] - al3[2];
1428 TVirtualMC::GetMC()->Gspos(
"FAL3", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1429 TVirtualMC::GetMC()->Gspos(
"FAL3", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1431 TVirtualMC::GetMC()->Gspos(
"FAL3", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1432 TVirtualMC::GetMC()->Gspos(
"FAL3", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1435 xcoor = xtof * 0.5 - 25.;
1438 TVirtualMC::GetMC()->Gspos(
"FRO2", 1,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1439 TVirtualMC::GetMC()->Gspos(
"FRO2", 4,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1441 TVirtualMC::GetMC()->Gspos(
"FRO2", 2,
"FCA1", -xcoor, ycoor, zcoor, 0,
"ONLY");
1442 TVirtualMC::GetMC()->Gspos(
"FRO2", 3,
"FCA1", xcoor, ycoor, zcoor, 0,
"ONLY");
1445void Detector::makeSuperModuleCooling(Double_t xtof, Double_t ytof, Double_t zlenA)
const
1453 Int_t idrotm[1] = {0};
1460 Double_t tubeparW[3] = {0., 0.3, tubepar[2]};
1464 TVirtualMC::GetMC()->Gspos(
"FITU", 1,
"FTUB", 0., 0., 0., 0,
"ONLY");
1467 Double_t trapar[3] = {tubepar[2], 6.175 , 0.7};
1471 Matrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1488 Double_t ycoor = carpar[1] - 2. *
Geo::ROOF2PARAMETERS[1] * 0.5 - 2. * feaRoof1[1] - 2. * bar2[1] - tubepar[1];
1489 Double_t zcoor = -carpar[2] + 2. * bar[2] + tubepar[1];
1490 TVirtualMC::GetMC()->Gspos(
"FTUB", 1,
"FCA1", 0., ycoor, zcoor, idrotm[0],
"ONLY");
1491 TVirtualMC::GetMC()->Gspos(
"FTUB", 1,
"FCA2", 0., ycoor, zcoor, idrotm[0],
"ONLY");
1492 gGeoManager->GetVolume(
"FTUB")->VisibleDaughters(kFALSE);
1495 for (Int_t sg = -1; sg < 2; sg += 2) {
1497 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIA", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1498 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIA", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1499 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIA", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1500 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIA", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1501 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIC", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1502 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIC", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1503 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIC", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1504 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIC", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1508 Double_t lonpar1[3] = {2., 0.5, 56.82 - trapar[2]};
1509 Double_t lonpar2[3] = {lonpar1[0], lonpar1[1], (198.8 - 56.82) * 0.5 - trapar[2]};
1510 Double_t lonpar3[3] = {lonpar1[0], lonpar1[1], (366.9 - 198.8) * 0.5 - trapar[2]};
1514 const std::vector<FEAContainer> contFull = feaContainers(zlenA, kFALSE);
1515 const std::vector<FEAContainer> contHoles = feaContainers(zlenA, kTRUE);
1517 const Double_t crateY0 = crateY - carpar[1], crateY1 = crateY + carpar[1];
1518 const Double_t zcoor2 = (198.8 + 56.82) * 0.5;
1519 const Double_t zcoor3 = (366.9 + 198.8) * 0.5;
1520 Int_t copyA = 0, copyB = 0, copyC = 0;
1522 for (Int_t up = 0; up < 2; ++up) {
1523 ycoor = up ? ytub + (tubepar[1] + 2. * bar2[1] + lonpar1[1]) : ytub - (tubepar[1] + 2. * bar2[1] + lonpar1[1]);
1524 for (Int_t sx = -1; sx < 2; sx += 2) {
1525 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar1[0], ycoor, lonpar1[1], 0.,
1527 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar1[0], ycoor, lonpar1[1], 0.,
1529 for (Int_t sz = -1; sz < 2; sz += 2) {
1530 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar2[0], ycoor, lonpar2[1],
1531 sz * zcoor2, lonpar2[2], copyA);
1532 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar2[0], ycoor, lonpar2[1],
1533 sz * zcoor2, lonpar2[2], copyC);
1534 placeCoolingBar(
"FAIA", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar3[0], ycoor, lonpar3[1],
1535 sz * zcoor3, lonpar3[2], copyA);
1536 placeCoolingBar(
"FAIC", contFull, carpar[2], crateY0, crateY1, sx * 24., lonpar3[0], ycoor, lonpar3[1],
1537 sz * zcoor3, lonpar3[2], copyC);
1542 Double_t carpos[3] = {(25. - xtof * 0.5),
1545 for (Int_t sg = -1; sg < 2; sg += 2) {
1546 carpos[2] = sg * zlenA * 0.5;
1547 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 4 * sg,
"FAIB", 0., yFLTN, 369.9 * sg, 0,
"ONLY");
1548 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 3 * sg,
"FAIB", 0., yFLTN, 366.9 * sg, 0,
"ONLY");
1549 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + 2 * sg,
"FAIB", 0., yFLTN, 198.8 * sg, 0,
"ONLY");
1550 TVirtualMC::GetMC()->Gspos(
"FTLN", 5 + sg,
"FAIB", 0., yFLTN, 56.82 * sg, 0,
"ONLY");
1554 for (Int_t up = 0; up < 2; ++up) {
1555 ycoor = up ? ytub + (tubepar[1] + 2. * bar2[1] + lonpar1[1]) : ytub - (tubepar[1] + 2. * bar2[1] + lonpar1[1]);
1556 const Double_t xcoor = up ? -24. : 24.;
1557 for (Int_t sz = -1; sz < 2; sz += 2) {
1558 placeCoolingBar(
"FAIB", contHoles, carpar[2], crateY0, crateY1, xcoor, lonpar2[0], ycoor, lonpar2[1],
1559 sz * zcoor2, lonpar2[2], copyB);
1560 placeCoolingBar(
"FAIB", contHoles, carpar[2], crateY0, crateY1, xcoor, lonpar3[0], ycoor, lonpar3[1],
1561 sz * zcoor3, lonpar3[2], copyB);
1575 Double_t ytubBis = carpar[1] - 2. *
Geo::ROOF2PARAMETERS[1] * 0.5 - 2. * feaRoof1[1] - 2. * barS2[1] - tubepar[1];
1577 zcoor = -carpar[2] + barS[2];
1578 TVirtualMC::GetMC()->Gspos(
"FBAS", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1579 TVirtualMC::GetMC()->Gspos(
"FBAS", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1580 TVirtualMC::GetMC()->Gspos(
"FBAS", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1581 TVirtualMC::GetMC()->Gspos(
"FBAS", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1583 zcoor = -carpar[2] + 2. * barS[2] + 2. * tubepar[1] + barS1[2];
1584 TVirtualMC::GetMC()->Gspos(
"FBS1", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1585 TVirtualMC::GetMC()->Gspos(
"FBS1", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1586 TVirtualMC::GetMC()->Gspos(
"FBS1", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1587 TVirtualMC::GetMC()->Gspos(
"FBS1", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1589 ycoor = ytubBis + (tubepar[1] + barS2[1]);
1590 zcoor = -carpar[2] + 2. * barS[2] + barS2[2];
1591 TVirtualMC::GetMC()->Gspos(
"FBS2", 1,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1592 TVirtualMC::GetMC()->Gspos(
"FBS2", 2,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1593 TVirtualMC::GetMC()->Gspos(
"FBS2", 1,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1594 TVirtualMC::GetMC()->Gspos(
"FBS2", 2,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1596 ycoor = ytubBis - (tubepar[1] + barS2[1]);
1598 TVirtualMC::GetMC()->Gspos(
"FBS2", 3,
"FCA1", -24., ycoor, zcoor, 0,
"ONLY");
1599 TVirtualMC::GetMC()->Gspos(
"FBS2", 4,
"FCA1", 24., ycoor, zcoor, 0,
"ONLY");
1600 TVirtualMC::GetMC()->Gspos(
"FBS2", 3,
"FCA2", -24., ycoor, zcoor, 0,
"ONLY");
1601 TVirtualMC::GetMC()->Gspos(
"FBS2", 4,
"FCA2", 24., ycoor, zcoor, 0,
"ONLY");
1605void Detector::makeSuperModuleServices(Double_t xtof, Double_t ytof, Double_t zlenA)
const
1613 Int_t idrotm[3] = {0, 0, 0};
1623 Double_t cbpar[3] = {0., 0.5,
1627 Double_t cbparS[3] = {cbpar[0], cbpar[1],
1633 Matrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1645 Double_t ycoor = ytub - 3.;
1646 Double_t zcoor = -carpar[2] + (2. * feaRoof1[2] - 2. * al1[2] - 2. * feaParam[2] - cbpar[1]);
1647 TVirtualMC::GetMC()->Gspos(
"FCAB", 1,
"FCA1", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1648 TVirtualMC::GetMC()->Gspos(
"FCAB", 2,
"FCA1", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1649 TVirtualMC::GetMC()->Gspos(
"FCAB", 1,
"FCA2", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1650 TVirtualMC::GetMC()->Gspos(
"FCAB", 2,
"FCA2", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1652 ycoor -= 2. * cbpar[1];
1653 TVirtualMC::GetMC()->Gspos(
"FCAL", 1,
"FCA1", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1654 TVirtualMC::GetMC()->Gspos(
"FCAL", 2,
"FCA1", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1655 TVirtualMC::GetMC()->Gspos(
"FCAL", 1,
"FCA2", -xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1656 TVirtualMC::GetMC()->Gspos(
"FCAL", 2,
"FCA2", xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1660 Double_t kCBLl = zlenA * 0.5;
1669 Double_t cblpar[11];
1673 cblpar[3] = kCBLl * 0.5;
1676 cblpar[6] = TMath::ATan(tgal) * TMath::RadToDeg();
1677 cblpar[7] = kCBLl * 0.5;
1680 cblpar[10] = cblpar[6];
1687 Matrix(idrotm[1], 90., 90., 180., 0., 90., 180.);
1688 Matrix(idrotm[2], 90., 90., 0., 0., 90., 0.);
1691 xcoor = (xtof -
Geo::CBLW) * 0.5 - 2. * sawpar[0];
1693 zcoor = kCBLl * 0.5;
1694 TVirtualMC::GetMC()->Gspos(
"FCBL", 1,
"FAIA", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1695 TVirtualMC::GetMC()->Gspos(
"FCBL", 2,
"FAIA", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1696 TVirtualMC::GetMC()->Gspos(
"FCBL", 3,
"FAIA", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1697 TVirtualMC::GetMC()->Gspos(
"FCBL", 4,
"FAIA", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1698 TVirtualMC::GetMC()->Gspos(
"FCBL", 1,
"FAIC", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1699 TVirtualMC::GetMC()->Gspos(
"FCBL", 2,
"FAIC", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1700 TVirtualMC::GetMC()->Gspos(
"FCBL", 3,
"FAIC", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1701 TVirtualMC::GetMC()->Gspos(
"FCBL", 4,
"FAIC", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1704 cblpar[3] = kCBLlh * 0.5;
1705 cblpar[5] =
Geo::CBLH1 * 0.5 + kCBLlh * tgal;
1706 cblpar[7] = kCBLlh * 0.5;
1707 cblpar[9] = cblpar[5];
1710 xcoor = (xtof -
Geo::CBLW) * 0.5 - 2. * sawpar[0];
1712 zcoor = kCBLl - kCBLlh * 0.5;
1713 TVirtualMC::GetMC()->Gspos(
"FCBB", 1,
"FAIB", -xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1714 TVirtualMC::GetMC()->Gspos(
"FCBB", 2,
"FAIB", xcoor, ycoor, -zcoor, idrotm[1],
"ONLY");
1715 TVirtualMC::GetMC()->Gspos(
"FCBB", 3,
"FAIB", -xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1716 TVirtualMC::GetMC()->Gspos(
"FCBB", 4,
"FAIB", xcoor, ycoor, zcoor, idrotm[2],
"ONLY");
1720 xcoor = xtof * 0.5 - sawpar[0];
1723 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIA", -xcoor, ycoor, zcoor, 0,
"ONLY");
1724 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIA", xcoor, ycoor, zcoor, 0,
"ONLY");
1725 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIC", -xcoor, ycoor, zcoor, 0,
"ONLY");
1726 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIC", xcoor, ycoor, zcoor, 0,
"ONLY");
1729 xcoor = xtof * 0.5 - sawpar[0];
1731 TVirtualMC::GetMC()->Gspos(
"FSAW", 1,
"FAIB", -xcoor, ycoor, 0., 0,
"ONLY");
1732 TVirtualMC::GetMC()->Gspos(
"FSAW", 2,
"FAIB", xcoor, ycoor, 0., 0,
"ONLY");
1736 Double_t covpar[3] = {(xtof * 0.5), 0.075, (zlenA * 0.5)};
1748 TVirtualMC::GetMC()->Gspos(
"FCOV", 0,
"FAIA", xcoor, ycoor, zcoor, 0,
"ONLY");
1749 TVirtualMC::GetMC()->Gspos(
"FCOV", 0,
"FAIC", xcoor, ycoor, zcoor, 0,
"ONLY");
1752 TVirtualMC::GetMC()->Gspos(
"FCOB", 1,
"FAIB", xcoor, ycoor, zcoor, 0,
"ONLY");
1753 TVirtualMC::GetMC()->Gspos(
"FCOB", 2,
"FAIB", xcoor, ycoor, -zcoor, 0,
"ONLY");
1755 TVirtualMC::GetMC()->Gspos(
"FCOP", 0,
"FAIB", xcoor, ycoor, zcoor, 0,
"ONLY");
1760void Detector::makeReadoutCrates(Double_t ytof)
const
1795 Double_t serpar[3] = {29. * 0.5, 121. * 0.5, 90. * 0.5};
1798 Double_t xcoor, ycoor, zcoor;
1799 zcoor = (118. - 90.) * 0.5;
1803 xcoor = ra * TMath::Cos(phi * TMath::DegToRad());
1804 ycoor = ra * TMath::Sin(phi * TMath::DegToRad());
1805 Matrix(idrotm[
i], 90., phi, 90., phi + 270., 0., 0.);
1806 TVirtualMC::GetMC()->Gspos(
"FTOS",
i,
"BFMO", xcoor, ycoor, zcoor, idrotm[
i],
"ONLY");
1809 zcoor = (90. - 223.) * 0.5;
1810 TVirtualMC::GetMC()->Gspos(
"FTOS", 1,
"BBCE", ra, -3., zcoor, 0,
"ONLY");
1813void Detector::makeModulesInBTOFvolumes(Double_t ytof, Double_t zlenA)
const
1822 constexpr Int_t SIZESTR = 16;
1824 Int_t idrotm[1] = {0};
1827 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1829 Double_t xcoor, ycoor, zcoor;
1834 if (mTOFSectors[isec] == -1) {
1839 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1840 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1843 zcoor = -ytof * 0.25;
1844 TVirtualMC::GetMC()->Gspos(
"FTOB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1845 TVirtualMC::GetMC()->Gspos(
"FTOC", 0,
name, xcoor, -ycoor, zcoor, idrotm[0],
"ONLY");
1849 zcoor = -ytof * 0.25;
1850 TVirtualMC::GetMC()->Gspos(
"FTOA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1863void Detector::makeCoversInBTOFvolumes()
const
1873 constexpr Int_t SIZESTR = 16;
1875 Int_t idrotm[1] = {0};
1878 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1880 Double_t xcoor, ycoor, zcoor;
1889 if (mTOFSectors[isec] == -1) {
1892 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1893 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1894 TVirtualMC::GetMC()->Gspos(
"FPEB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1896 TVirtualMC::GetMC()->Gspos(
"FPEA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1902void Detector::makeBackInBTOFvolumes(Double_t ytof)
const
1911 constexpr Int_t SIZESTR = 16;
1913 Int_t idrotm[1] = {0};
1916 Matrix(idrotm[0], 90., 0., 0., 0., 90., 270.);
1918 Double_t xcoor, ycoor, zcoor;
1927 if (mTOFSectors[isec] == -1) {
1930 snprintf(
name, SIZESTR,
"BTOF%d", isec);
1932 TVirtualMC::GetMC()->Gspos(
"FAIA", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1934 if (mTOFHoles && (isec == 13 || isec == 14 || isec == 15)) {
1935 TVirtualMC::GetMC()->Gspos(
"FAIB", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1937 TVirtualMC::GetMC()->Gspos(
"FAIC", 0,
name, xcoor, ycoor, zcoor, idrotm[0],
"ONLY");
1952 Int_t modUID, modnum = 0;
1957 TString vpL0 =
"cave/barrel_1/B077_1/BSEGMO";
1958 TString vpL1 =
"_1/BTOF";
1959 TString vpL2 =
"_1";
1960 TString vpL3 =
"/FTOA_0";
1961 TString vpL4 =
"/FLTA_0/FSTR_";
1963 TString snSM =
"TOF/sm";
1964 TString snSTRIP =
"/strip";
1977 LOG(
debug) <<
"modUID: " << modUID;
1979 if (mTOFSectors[isect] == -1) {
1983 if (mTOFHoles && (isect == 13 || isect == 14 || isect == 15)) {
1986 vpL4 =
"/FLTB_0/FSTR_";
1987 }
else if (istr > 53) {
1989 vpL4 =
"/FLTC_0/FSTR_";
1995 vpL4 =
"/FLTA_0/FSTR_";
2008 symName += Form(
"%02d", isect);
2010 symName += Form(
"%02d", istr);
2012 LOG(
debug) <<
"--------------------------------------------"
2014 LOG(
debug) <<
"Alignable object" << imod <<
"\n";
2015 LOG(
debug) <<
"volPath=" << volPath <<
"\n";
2016 LOG(
debug) <<
"symName=" << symName <<
"\n";
2017 LOG(
debug) <<
"--------------------------------------------"
2020 LOG(
debug) <<
"Check for alignable entry: " << symName;
2022 if (!gGeoManager->SetAlignableEntry(symName.Data(), volPath.Data(), modUID)) {
2023 LOG(error) <<
"Alignable entry " << symName <<
" NOT set";
2025 LOG(
debug) <<
"Alignable entry " << symName <<
" set";
2028 TGeoPNEntry* e = gGeoManager->GetAlignableEntryByUID(modUID);
2029 LOG(
debug) <<
"Got TGeoPNEntry " << e;
2032 TGeoHMatrix* globMatrix = e->GetGlobalOrig();
2034 TGeoHMatrix* t2l =
new TGeoHMatrix();
2036 const TGeoHMatrix& globMatrixi = globMatrix->Inverse();
2037 t2l->MultiplyLeft(&globMatrixi);
2060 symName += Form(
"%02d", isect);
2068 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
float float float float z1
o2::track::TrackParametrization< float > par
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"