127 if ((!fMC->TrackCharge()) || fMC->IsTrackDisappeared()) {
130 fMC->SetMaxStep(mMaxMCStepDef);
134 const int vid = fMC->CurrentVolID(copy);
135 const int8_t region = (vid > 0 && vid < (int)mRegionByVolId.size()) ? mRegionByVolId[vid] : kNotSensitive;
136 if (region == kNotSensitive) {
139 const bool drRegion = (region == kDrift);
140 const bool amRegion = (region == kAmplification);
145 if (mSectorOffset < 0) {
146 for (
int off = 0; off < 16; ++off) {
148 if (mChamberOffset < 0 && mChamberFromName && std::sscanf(fMC->CurrentVolOffName(off),
"UT%d", &chamber) == 1) {
149 mChamberOffset = off;
151 const int oid = fMC->CurrentVolOffID(off, copy);
152 if (oid <= 0 || oid >= (
int)mChamberByVolId.size()) {
155 if (mChamberOffset < 0 && !mChamberFromName && mChamberByVolId[oid] >= 0) {
156 mChamberOffset = off;
158 if (mSectorByVolId[oid] >= 0) {
163 if (mChamberOffset < 0 || mSectorOffset < 0) {
164 LOG(fatal) <<
"No TRD chamber/supermodule ancestor above sensitive volume " << fMC->CurrentVolName();
166 LOG(info) <<
"TRD: chamber at mother offset " << mChamberOffset <<
", supermodule at " << mSectorOffset;
170 if (mChamberFromName) {
171 if (std::sscanf(fMC->CurrentVolOffName(mChamberOffset),
"UT%d", &idChamber) != 1) {
175 const int chamberVol = fMC->CurrentVolOffID(mChamberOffset, copy);
176 idChamber = (chamberVol > 0 && chamberVol < (int)mChamberByVolId.size()) ? mChamberByVolId[chamberVol] : -1;
178 const int sectorVol = fMC->CurrentVolOffID(mSectorOffset, copy);
179 const int sector = (sectorVol > 0 && sectorVol < (int)mSectorByVolId.size()) ? mSectorByVolId[sectorVol] : -1;
180 if (idChamber < 0 || sector < 0) {
181 LOG(fatal) <<
"Cannot resolve TRD chamber/supermodule from volume " << fMC->CurrentVolName();
185 int det = mGeom->getDetector(mGeom->getLayer(idChamber), mGeom->getStack(idChamber), sector);
186 if (det < 0 || det >= MAXCHAMBER) {
187 LOG(fatal) <<
"Detector number out of bounds";
195 float px, py, pz, etot;
196 float trackLength = fMC->TrackLength();
197 float tof = fMC->TrackTime();
200 if (drRegion && fMC->IsTrackEntering()) {
203 fMC->TrackMomentum(px, py, pz, etot);
204 fMC->TrackPosition(xp, yp, zp);
209 const bool ele = (std::fabs(fMC->TrackPid()) == 11);
213 }
else if (amRegion && fMC->IsTrackExiting()) {
216 fMC->TrackMomentum(px, py, pz, etot);
217 fMC->TrackPosition(xp, yp, zp);
225 const float enDep = std::max(fMC->Edep(), 0.0) * 1e9;
226 const int totalChargeDep = (int)(enDep / mWion);
230 if (totalChargeDep || trkStat) {
231 fMC->TrackPosition(xp, yp, zp);
233 const int trackID =
stack->GetCurrentTrackNumber();
234 double pos[3] = {xp, yp, zp};
235 double loc[3] = {-99, -99, -99};
236 gGeoManager->MasterToLocal(
pos, loc);
237 float locC = loc[0], locR = loc[1], locT = loc[2];
239 locT = locT - 0.5 * (Geometry::drThick() + Geometry::amThick());
241 addHit(xp, yp, zp, locC, locR, locT, tof, totalChargeDep, trackID, det, drRegion);
242 stack->addHit(GetDetId());
375 Material(1,
"Al", 26.98, 13.0, 2.7, 8.9, 37.2);
377 Material(2,
"Cu", 63.54, 29.0, 8.96, 1.43, 14.8);
379 Material(3,
"C", 12.01, 6.0, 2.265, 18.8, 74.4);
381 Material(4,
"C2", 12.01, 6.0, 1.75, 18.8, 74.4);
383 Material(5,
"Sn", 118.71, 50.0, 7.31, 1.21, 14.8);
385 Material(6,
"Si", 28.09, 14.0, 2.33, 9.36, 37.2);
387 Material(7,
"Fe", 55.85, 26.0, 7.87, 1.76, 14.8);
390 float aAir[4] = {12.011, 14.0, 15.9994, 36.0};
391 float zAir[4] = {6.0, 7.0, 8.0, 18.0};
392 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
393 float dAir = 1.20479e-03;
394 Mixture(51,
"Air", aAir, zAir, dAir, 4, wAir);
396 float ape[2] = {12.011, 1.0079};
397 float zpe[2] = {6.0, 1.0};
398 float wpe[2] = {1.0, 2.0};
400 Mixture(52,
"Polyethilene", ape, zpe, dpe, -2, wpe);
403 float aXeCO2[3] = {131.29, 12.0107, 15.9994};
404 float zXeCO2[3] = {54.0, 6.0, 8.0};
405 float wXeCO2[3] = {8.5, 1.5, 3.0};
409 float dgmXe = fxc * dxe + (1.0 - fxc) * dco;
411 float aArCO2[3] = {39.948, 12.0107, 15.9994};
412 float zArCO2[3] = {18.0, 6.0, 8.0};
413 float wArCO2[3] = {8.2, 1.8, 3.6};
416 float dgmAr = fac * dar + (1.0 - fac) * dco;
418 Mixture(53,
"XeCO2", aXeCO2, zXeCO2, dgmXe, -3, wXeCO2);
420 LOG(info) <<
"Gas mixture: Ar C02 (80/20)";
421 Mixture(53,
"ArCO2", aArCO2, zArCO2, dgmAr, -3, wArCO2);
423 LOG(fatal) <<
"Wrong gas mixture";
427 float aG10[4] = {1.0079, 12.011, 15.9994, 28.086};
428 float zG10[4] = {1.0, 6.0, 8.0, 14.0};
429 float wG10[4] = {0.023, 0.194, 0.443, 0.340};
431 Mixture(54,
"G10", aG10, zG10, dG10, 4, wG10);
433 float awa[2] = {1.0079, 15.9994};
434 float zwa[2] = {1.0, 8.0};
435 float wwa[2] = {2.0, 1.0};
437 Mixture(55,
"Water", awa, zwa, dwa, -2, wwa);
439 float arh[3] = {12.011, 1.0079, 15.9994};
440 float zrh[3] = {6.0, 1.0, 8.0};
441 float wrh[3] = {5.0, 8.0, 2.0};
443 Mixture(56,
"Rohacell", arh, zrh, drh, -3, wrh);
445 float aEpoxy[3] = {15.9994, 1.0079, 12.011};
446 float zEpoxy[3] = {8.0, 1.0, 6.0};
447 float wEpoxy[3] = {3.0, 19.0, 18.0};
449 Mixture(57,
"Epoxy", aEpoxy, zEpoxy, dEpoxy, -3, wEpoxy);
451 float aAral[3] = {15.9994, 1.0079, 12.011};
452 float zAral[3] = {8.0, 1.0, 6.0};
453 float wAral[3] = {3.0, 19.0, 18.0};
455 Mixture(58,
"Araldite", aAral, zAral, dAral, -3, wAral);
457 float aMy[3] = {12.011, 1.0, 15.9994};
458 float zMy[3] = {6.0, 1.0, 8.0};
459 float wMy[3] = {5.0, 4.0, 2.0};
461 Mixture(59,
"Mylar", aMy, zMy, dMy, -3, wMy);
463 float app[2] = {12.011, 1.0079};
464 float zpp[2] = {6.0, 1.0};
465 float wpp[2] = {3.0, 6.0};
467 Mixture(60,
"Polypropylene", app, zpp, dpp, -2, wpp);
469 float aAra[4] = {1.0079, 12.011, 15.9994, 14.0067};
470 float zAra[4] = {1.0, 6.0, 8.0, 7.0};
471 float wAra[4] = {3.0, 1.0, 1.0, 1.0};
473 Mixture(61,
"Aramide", aAra, zAra, dAra, -4, wAra);
475 float aGFK[4] = {1.0079, 12.011, 15.9994, 28.086};
476 float zGFK[4] = {1.0, 6.0, 8.0, 14.0};
477 float wGFK[4] = {0.0445, 0.5031, 0.1118, 0.340};
479 Mixture(62,
"GFK", aGFK, zGFK, dGFK, 4, wGFK);
486 float tmaxfd = -10.0;
487 float stemax = -1.0e10;
489 float epsil = 1.0e-4;
490 float stmin = -0.001;
493 Medium(1,
"Al Frame", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
495 Medium(2,
"Air", 51, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
497 Medium(3,
"Wires", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
499 Medium(4,
"ROB Other", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
501 Medium(5,
"Padplane", 2, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
503 Medium(6,
"Readout", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
505 Medium(7,
"Wacosit", 62, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
507 Medium(8,
"Cooling bus", 7, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
509 Medium(9,
"Gas-mix", 53, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
511 Medium(10,
"Honeycomb", 61, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
513 Medium(11,
"Glue", 58, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
515 Medium(13,
"G10-plates", 54, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
517 Medium(14,
"Water", 55, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
519 Medium(15,
"Rohacell", 56, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
521 Medium(16,
"MCM-Al", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
523 Medium(17,
"MCM-Sn", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
525 Medium(18,
"MCM-Cu", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
527 Medium(19,
"MCM-G10", 54, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
529 Medium(20,
"Chip-Si", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
531 Medium(21,
"Chip-Ep", 57, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
533 Medium(22,
"Conn-PE", 52, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
535 Medium(23,
"Chip-Cu", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
537 Medium(24,
"Cooling", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
539 Medium(25,
"Serv-Cu", 2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
541 Medium(26,
"Carbon", 4, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
543 Medium(27,
"Mylar", 59, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
545 Medium(28,
"Fiber", 60, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
552 mGasNobleFraction = fxc;
555 mGasNobleFraction = fac;