70 float tmaxfdLead = 0.1;
71 float stemaxLead = .10000E+01;
72 float deemaxLead = 0.1;
73 float epsilLead = 1.0E-4;
74 float stminLead = 0.0;
79 Detector::Medium(1,
"LEAD", 1, 0, ifield, fieldm, tmaxfdLead, stemaxLead, deemaxLead, epsilLead, stminLead);
109 LOGP(info,
"Creating ECal geometry");
111 TGeoManager* geoManager = gGeoManager;
112 TGeoVolume* vALIC = geoManager->GetVolume(
"barrel");
114 LOGP(fatal,
"Could not find barrel volume while constructing ECal geometry");
118 vALIC->AddNode(vECal, 2,
new TGeoTranslation(0, 30., 0));
120 char vstrng[100] =
"ECalVol";
121 vECal->SetTitle(vstrng);
125 TGeoMedium* medPb = matmgr.getTGeoMedium(
"ECL_LEAD");
126 TGeoTube* ecalShape =
new TGeoTube(
"ECLsh", mInnerRadius, mOuterRadius, mLength);
127 TGeoVolume* ecalVol =
new TGeoVolume(
"ECL", ecalShape, medPb);
128 ecalVol->SetLineColor(kAzure - 9);
129 ecalVol->SetTransparency(0);
130 vECal->AddNode(ecalVol, 1,
nullptr);
134 TGeoTube* ecalEndcapShape =
new TGeoTube(
"ECLECsh", 15.f, 160.f, 0.5 * (mOuterRadius - mInnerRadius));
135 TGeoVolume* ecalEndcapVol =
new TGeoVolume(
"ECLEC", ecalEndcapShape, medPb);
136 ecalEndcapVol->SetLineColor(kAzure - 9);
137 ecalEndcapVol->SetTransparency(0);
138 vECal->AddNode(ecalEndcapVol, 1,
new TGeoTranslation(0, 0, -450.f));
152 if (!(fMC->TrackCharge())) {
156 int lay = vol->getVolumeId();
157 int volID = vol->getMCid();
161 if (fMC->IsTrackExiting() && (lay == 0)) {
165 stack->addTrackReference(tr);
167 bool startHit =
false, stopHit =
false;
168 unsigned char status = 0;
169 if (fMC->IsTrackEntering()) {
170 status |= Hit::kTrackEntering;
172 if (fMC->IsTrackInside()) {
173 status |= Hit::kTrackInside;
175 if (fMC->IsTrackExiting()) {
176 status |= Hit::kTrackExiting;
178 if (fMC->IsTrackOut()) {
179 status |= Hit::kTrackOut;
181 if (fMC->IsTrackStop()) {
182 status |= Hit::kTrackStopped;
184 if (fMC->IsTrackAlive()) {
185 status |= Hit::kTrackAlive;
189 if ((status & Hit::kTrackEntering) || (status & Hit::kTrackInside && !mTrackData.mHitStarted)) {
191 }
else if ((status & (Hit::kTrackExiting | Hit::kTrackOut | Hit::kTrackStopped))) {
197 mTrackData.mEnergyLoss += fMC->Edep();
199 if (!(startHit | stopHit)) {
204 mTrackData.mEnergyLoss = 0.;
205 fMC->TrackMomentum(mTrackData.mMomentumStart);
206 fMC->TrackPosition(mTrackData.mPositionStart);
207 mTrackData.mTrkStatusStart = status;
208 mTrackData.mHitStarted =
true;
211 TLorentzVector positionStop;
212 fMC->TrackPosition(positionStop);
214 int stave(0), halfstave(0), chipinmodule(0),
module;
215 fMC->CurrentVolOffID(1, chipinmodule);
216 fMC->CurrentVolOffID(2, module);
217 fMC->CurrentVolOffID(3, halfstave);
218 fMC->CurrentVolOffID(4, stave);
220 Hit* p =
addHit(
stack->GetCurrentTrackNumber(), lay, mTrackData.mPositionStart.Vect(), positionStop.Vect(),
221 mTrackData.mMomentumStart.Vect(), mTrackData.mMomentumStart.E(), positionStop.T(),
222 mTrackData.mEnergyLoss, mTrackData.mTrkStatusStart, status);
227 stack->addHit(GetDetId());
234 const TVector3& startMom,
double startE,
double endTime,
double eLoss,
unsigned char startStatus,
235 unsigned char endStatus)
237 mHits->emplace_back(trackID, detID, startPos, endPos, startMom, startE, endTime, eLoss, startStatus, endStatus);
238 return &(mHits->back());
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)
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)
o2::itsmft::Hit * addHit(int trackID, int detID, const TVector3 &startPos, const TVector3 &endPos, const TVector3 &startMom, double startE, double endTime, double eLoss, unsigned char startStatus, unsigned char endStatus)