128 if ((!
fMC->TrackCharge()) ||
fMC->IsTrackDisappeared()) {
131 fMC->SetMaxStep(mMaxMCStepDef);
135 const int vid =
fMC->CurrentVolID(copy);
136 const int8_t region = (vid > 0 && vid < (int)mRegionByVolId.size()) ? mRegionByVolId[vid] : kNotSensitive;
137 if (region == kNotSensitive) {
140 const bool drRegion = (region == kDrift);
141 const bool amRegion = (region == kAmplification);
146 if (mSectorOffset < 0) {
147 for (
int off = 0; off < 16; ++off) {
149 if (mChamberOffset < 0 && mChamberFromName && std::sscanf(
fMC->CurrentVolOffName(off),
"UT%d", &chamber) == 1) {
150 mChamberOffset = off;
152 const int oid =
fMC->CurrentVolOffID(off, copy);
153 if (oid <= 0 || oid >= (
int)mChamberByVolId.size()) {
156 if (mChamberOffset < 0 && !mChamberFromName && mChamberByVolId[oid] >= 0) {
157 mChamberOffset = off;
159 if (mSectorByVolId[oid] >= 0) {
164 if (mChamberOffset < 0 || mSectorOffset < 0) {
165 LOG(fatal) <<
"No TRD chamber/supermodule ancestor above sensitive volume " <<
fMC->CurrentVolName();
167 LOG(info) <<
"TRD: chamber at mother offset " << mChamberOffset <<
", supermodule at " << mSectorOffset;
171 if (mChamberFromName) {
172 if (std::sscanf(
fMC->CurrentVolOffName(mChamberOffset),
"UT%d", &idChamber) != 1) {
176 const int chamberVol =
fMC->CurrentVolOffID(mChamberOffset, copy);
177 idChamber = (chamberVol > 0 && chamberVol < (int)mChamberByVolId.size()) ? mChamberByVolId[chamberVol] : -1;
179 const int sectorVol =
fMC->CurrentVolOffID(mSectorOffset, copy);
180 const int sector = (sectorVol > 0 && sectorVol < (int)mSectorByVolId.size()) ? mSectorByVolId[sectorVol] : -1;
181 if (idChamber < 0 || sector < 0) {
182 LOG(fatal) <<
"Cannot resolve TRD chamber/supermodule from volume " <<
fMC->CurrentVolName();
186 int det = mGeom->getDetector(mGeom->getLayer(idChamber), mGeom->getStack(idChamber), sector);
187 if (det < 0 || det >= MAXCHAMBER) {
188 LOG(fatal) <<
"Detector number out of bounds";
196 float px, py, pz, etot;
197 float trackLength =
fMC->TrackLength();
198 float tof =
fMC->TrackTime();
201 if (drRegion &&
fMC->IsTrackEntering()) {
204 fMC->TrackMomentum(px, py, pz, etot);
205 fMC->TrackPosition(xp, yp, zp);
210 const bool ele = (std::fabs(
fMC->TrackPid()) == 11);
214 }
else if (amRegion &&
fMC->IsTrackExiting()) {
217 fMC->TrackMomentum(px, py, pz, etot);
218 fMC->TrackPosition(xp, yp, zp);
226 const float enDep = std::max(
fMC->Edep(), 0.0) * 1e9;
227 const int totalChargeDep = (int)(enDep / mWion);
231 if (totalChargeDep || trkStat) {
232 fMC->TrackPosition(xp, yp, zp);
234 const int trackID =
stack->GetCurrentTrackNumber();
235 double pos[3] = {xp, yp, zp};
236 double loc[3] = {-99, -99, -99};
237 gGeoManager->MasterToLocal(
pos, loc);
238 float locC = loc[0], locR = loc[1], locT = loc[2];
240 locT = locT - 0.5 * (Geometry::drThick() + Geometry::amThick());
242 addHit(xp, yp, zp, locC, locR, locT, tof, totalChargeDep, trackID, det, drRegion);
376 Material(1,
"Al", 26.98, 13.0, 2.7, 8.9, 37.2);
378 Material(2,
"Cu", 63.54, 29.0, 8.96, 1.43, 14.8);
380 Material(3,
"C", 12.01, 6.0, 2.265, 18.8, 74.4);
382 Material(4,
"C2", 12.01, 6.0, 1.75, 18.8, 74.4);
384 Material(5,
"Sn", 118.71, 50.0, 7.31, 1.21, 14.8);
386 Material(6,
"Si", 28.09, 14.0, 2.33, 9.36, 37.2);
388 Material(7,
"Fe", 55.85, 26.0, 7.87, 1.76, 14.8);
391 float aAir[4] = {12.011, 14.0, 15.9994, 36.0};
392 float zAir[4] = {6.0, 7.0, 8.0, 18.0};
393 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
394 float dAir = 1.20479e-03;
395 Mixture(51,
"Air", aAir, zAir, dAir, 4, wAir);
397 float ape[2] = {12.011, 1.0079};
398 float zpe[2] = {6.0, 1.0};
399 float wpe[2] = {1.0, 2.0};
401 Mixture(52,
"Polyethilene", ape, zpe, dpe, -2, wpe);
404 float aXeCO2[3] = {131.29, 12.0107, 15.9994};
405 float zXeCO2[3] = {54.0, 6.0, 8.0};
406 float wXeCO2[3] = {8.5, 1.5, 3.0};
410 float dgmXe = fxc * dxe + (1.0 - fxc) * dco;
412 float aArCO2[3] = {39.948, 12.0107, 15.9994};
413 float zArCO2[3] = {18.0, 6.0, 8.0};
414 float wArCO2[3] = {8.2, 1.8, 3.6};
417 float dgmAr = fac * dar + (1.0 - fac) * dco;
419 Mixture(53,
"XeCO2", aXeCO2, zXeCO2, dgmXe, -3, wXeCO2);
421 LOG(info) <<
"Gas mixture: Ar C02 (80/20)";
422 Mixture(53,
"ArCO2", aArCO2, zArCO2, dgmAr, -3, wArCO2);
424 LOG(fatal) <<
"Wrong gas mixture";
428 float aG10[4] = {1.0079, 12.011, 15.9994, 28.086};
429 float zG10[4] = {1.0, 6.0, 8.0, 14.0};
430 float wG10[4] = {0.023, 0.194, 0.443, 0.340};
432 Mixture(54,
"G10", aG10, zG10, dG10, 4, wG10);
434 float awa[2] = {1.0079, 15.9994};
435 float zwa[2] = {1.0, 8.0};
436 float wwa[2] = {2.0, 1.0};
438 Mixture(55,
"Water", awa, zwa, dwa, -2, wwa);
440 float arh[3] = {12.011, 1.0079, 15.9994};
441 float zrh[3] = {6.0, 1.0, 8.0};
442 float wrh[3] = {5.0, 8.0, 2.0};
444 Mixture(56,
"Rohacell", arh, zrh, drh, -3, wrh);
446 float aEpoxy[3] = {15.9994, 1.0079, 12.011};
447 float zEpoxy[3] = {8.0, 1.0, 6.0};
448 float wEpoxy[3] = {3.0, 19.0, 18.0};
450 Mixture(57,
"Epoxy", aEpoxy, zEpoxy, dEpoxy, -3, wEpoxy);
452 float aAral[3] = {15.9994, 1.0079, 12.011};
453 float zAral[3] = {8.0, 1.0, 6.0};
454 float wAral[3] = {3.0, 19.0, 18.0};
456 Mixture(58,
"Araldite", aAral, zAral, dAral, -3, wAral);
458 float aMy[3] = {12.011, 1.0, 15.9994};
459 float zMy[3] = {6.0, 1.0, 8.0};
460 float wMy[3] = {5.0, 4.0, 2.0};
462 Mixture(59,
"Mylar", aMy, zMy, dMy, -3, wMy);
464 float app[2] = {12.011, 1.0079};
465 float zpp[2] = {6.0, 1.0};
466 float wpp[2] = {3.0, 6.0};
468 Mixture(60,
"Polypropylene", app, zpp, dpp, -2, wpp);
470 float aAra[4] = {1.0079, 12.011, 15.9994, 14.0067};
471 float zAra[4] = {1.0, 6.0, 8.0, 7.0};
472 float wAra[4] = {3.0, 1.0, 1.0, 1.0};
474 Mixture(61,
"Aramide", aAra, zAra, dAra, -4, wAra);
476 float aGFK[4] = {1.0079, 12.011, 15.9994, 28.086};
477 float zGFK[4] = {1.0, 6.0, 8.0, 14.0};
478 float wGFK[4] = {0.0445, 0.5031, 0.1118, 0.340};
480 Mixture(62,
"GFK", aGFK, zGFK, dGFK, 4, wGFK);
487 float tmaxfd = -10.0;
488 float stemax = -1.0e10;
490 float epsil = 1.0e-4;
491 float stmin = -0.001;
494 Medium(1,
"Al Frame", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
496 Medium(2,
"Air", 51, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
498 Medium(3,
"Wires", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
500 Medium(4,
"ROB Other", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
502 Medium(5,
"Padplane", 2, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
504 Medium(6,
"Readout", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
506 Medium(7,
"Wacosit", 62, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
508 Medium(8,
"Cooling bus", 7, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
510 Medium(9,
"Gas-mix", 53, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
512 Medium(10,
"Honeycomb", 61, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
514 Medium(11,
"Glue", 58, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
516 Medium(13,
"G10-plates", 54, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
518 Medium(14,
"Water", 55, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
520 Medium(15,
"Rohacell", 56, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
522 Medium(16,
"MCM-Al", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
524 Medium(17,
"MCM-Sn", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
526 Medium(18,
"MCM-Cu", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
528 Medium(19,
"MCM-G10", 54, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
530 Medium(20,
"Chip-Si", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
532 Medium(21,
"Chip-Ep", 57, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
534 Medium(22,
"Conn-PE", 52, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
536 Medium(23,
"Chip-Cu", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
538 Medium(24,
"Cooling", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
540 Medium(25,
"Serv-Cu", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
542 Medium(26,
"Carbon", 4, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
544 Medium(27,
"Mylar", 59, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
546 Medium(28,
"Fiber", 60, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
553 mGasNobleFraction = fxc;
556 mGasNobleFraction = fac;