69 static const Double_t dP = 1.032 ;
70 static const Double_t BirkC1 = 0.013/dP;
71 static const Double_t BirkC2 = 9.6e-6/(dP * dP);
73 static Double_t lightYield;
74 static Double_t timeIn;
75 static Double_t timeOut;
76 static Double_t lengthtrack;
79 Int_t ivol = vol->getMCid();
85 static Int_t lEDEBUGcounter = 0;
86 if (lEDEBUGcounter < 1)
87 std::cout <<
"EDEBUG-- BmnBd::ProcessHits: entered" << gMC->CurrentVolPath() << endl;
90 if(gMC->IsTrackEntering())
101 TLorentzVector PosIn;
102 gMC->TrackPosition(PosIn);
103 fPosIn.SetXYZ(PosIn.X(), PosIn.Y(), PosIn.Z());
105 TLorentzVector MomIn;
106 gMC->TrackMomentum(MomIn);
107 fMomIn.SetXYZ(MomIn.Px(), MomIn.Py(), MomIn.Pz());
109 timeIn = gMC->TrackTime() * 1.0e09;
117 part = gMC->GetStack()->GetCurrentTrack();
120 fIsPrimary = (Int_t)part->IsPrimary();
121 fCharge = (Int_t)part->GetPDG()->Charge() / 3.;
122 fPdgId = (Int_t)part->GetPdgCode();
126 if (gMC->TrackCharge() != 0)
128 Double_t BirkC1Mod = 0;
130 if (TMath::Abs(gMC->TrackCharge()) >= 2)
131 BirkC1Mod = BirkC1 * 7.2/12.6;
135 if (gMC->TrackStep() > 0)
137 Double_t dedxcm = gMC -> Edep() * 1000./gMC -> TrackStep();
138 Double_t curLightYield = gMC -> Edep() * 1000./(1. + BirkC1Mod * dedxcm + BirkC2 * dedxcm * dedxcm);
139 curLightYield /= 1000.;
140 lightYield += curLightYield;
144 Double_t eLoss = gMC->Edep();
148 Double_t slengthtrack = gMC-> TrackStep();
149 lengthtrack += slengthtrack;
151 if ((gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()) && (fELoss > 0))
153 TLorentzVector PosOut;
154 gMC->TrackPosition(PosOut);
155 fPosOut.SetXYZ(PosOut.X(), PosOut.Y(), PosOut.Z());
157 TLorentzVector MomOut;
158 gMC->TrackMomentum(MomOut);
159 fMomOut.SetXYZ(MomOut.Px(), MomOut.Py(), MomOut.Pz());
161 timeOut = gMC->TrackTime() * 1.0e09;
182 if (fELoss == 0. )
return kFALSE;
185 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
187 Double_t time = gMC->TrackTime() * 1.0e09;
188 Double_t length = gMC->TrackLength();
191 gMC->CurrentVolID(copyNo);
196 gMC->CurrentVolOffID(1, iCell);
199 if (lEDEBUGcounter < 100)
201 std::cout <<
"EDEBUG-- BmnBd::ProcessHits: TrackID:" << fTrackID <<
204 " " << gMC->CurrentVolPath() <<
" " << tPos.Z() <<
206 " " << ivol <<
"=="<< gMC->CurrentVolID(copyNo) <<
","<< copyNo <<
207 " " << gMC->CurrentVolOffID(1,iCell) <<
" " << iCell <<
208 " " << gMC->CurrentVolOffName(1) <<
" " << gMC->CurrentVolOffName(0) <<
218 AddHit(fTrackID, ivol, copyNo, fPosIn, fPosOut, fMomIn, fMomOut,
219 time, length, fELoss, fIsPrimary, fCharge, fPdgId, lightYield, timeIn, timeOut, lengthtrack);
221 AddHit(fTrackID, ivol, copyNo, fPosIn, fPosOut, fMomIn, fMomOut,
222 time, length, fELoss, fIsPrimary, fCharge, fPdgId, lightYield, timeIn, timeOut, lengthtrack);
311 FairGeoLoader* geoLoad = FairGeoLoader::Instance();
312 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
314 BdGeo->setGeomFile(GetGeometryFileName());
315 geoFace->addGeoModule(BdGeo);
317 Bool_t rc = geoFace->readSet(BdGeo);
318 if (rc) BdGeo->create(geoLoad->getGeoBuilder());
319 TList* volList = BdGeo->getListOfVolumes();
322 FairRun *fRun = FairRun::Instance();
323 FairRuntimeDb *rtdb = FairRun::Instance()->GetRuntimeDb();
328 TListIter iter(volList);
329 FairGeoNode *node =
nullptr;
330 FairGeoVolume *aVol =
nullptr;
332 while ( (node = (FairGeoNode*)iter.Next()) )
334 aVol =
dynamic_cast<FairGeoVolume*
>(node);
335 cout<<aVol->GetName()<<endl;
337 if (node->isSensitive()) fSensNodes->AddLast(aVol);
338 else fPassNodes->AddLast(aVol);
342 par->setInputVersion(fRun->GetRunId(),1);
343 ProcessNodes( volList );
357 TVector3 momIn, TVector3 momOut, Double_t time, Double_t length, Double_t eLoss, Bool_t isPrimary,
358 Double_t charge, Int_t pdgId, Double_t lightYield, Double_t timeIn, Double_t timeOut, Double_t lengthtrack)
360 TClonesArray& clref = *fBdCollection;
361 Int_t size = clref.GetEntriesFast();
362 return new(clref[size])
BmnBdPoint(trackID, detID, copyNo, posIn, posOut, momIn, momOut, time, length, eLoss, isPrimary,
363 charge, pdgId, lightYield, timeIn, timeOut, lengthtrack);
BmnBdPoint * AddHit(Int_t trackID, Int_t detID, Int_t copyNo, TVector3 posIn, TVector3 posOut, TVector3 momIn, TVector3 momOut, Double_t tof, Double_t length, Double_t eLoss, Bool_t isPrimary, Double_t charge, Int_t pdgId, Double_t lightYield, Double_t timeIn, Double_t timeOut, Double_t lengthtrack)