91 static const Double_t dP = 1.032 ;
92 static const Double_t BirkC1 = 0.013/dP;
93 static const Double_t BirkC2 = 9.6e-6/(dP * dP);
95 static Double_t lightYield;
96 static Double_t timeIn;
97 static Double_t timeOut;
98 static Double_t lengthtrack;
102 Int_t ivol = vol->getMCid();
110 static Int_t lEDEBUGcounter=0;
111 if (lEDEBUGcounter<1)
112 std::cout <<
"EDEBUG-- BmnBd1::ProcessHits: entered" << gMC->CurrentVolPath() << endl;
115 if(gMC->IsTrackEntering()){
126 TLorentzVector PosIn;
127 gMC->TrackPosition(PosIn);
128 fPosIn.SetXYZ(PosIn.X(), PosIn.Y(), PosIn.Z());
130 TLorentzVector MomIn;
131 gMC->TrackMomentum(MomIn);
132 fMomIn.SetXYZ(MomIn.Px(), MomIn.Py(), MomIn.Pz());
134 timeIn = gMC->TrackTime() * 1.0e09;
143 part = gMC->GetStack()->GetCurrentTrack();
146 fIsPrimary = (Int_t)part->IsPrimary();
147 fCharge = (Int_t)part->GetPDG()->Charge() / 3.;
148 fPdgId = (Int_t)part->GetPdgCode();
153 if (gMC->TrackCharge() != 0) {
154 Double_t BirkC1Mod = 0;
156 if (TMath::Abs(gMC->TrackCharge())>=2)
158 BirkC1Mod = BirkC1 * 7.2/12.6;
161 if (gMC->TrackStep() > 0){
163 Double_t dedxcm = gMC -> Edep() * 1000./gMC -> TrackStep();
164 Double_t curLightYield = gMC -> Edep() * 1000./(1. + BirkC1Mod * dedxcm + BirkC2 * dedxcm * dedxcm);
165 curLightYield /= 1000.;
166 lightYield += curLightYield;
171 Double_t eLoss = gMC->Edep();
175 Double_t slengthtrack = gMC-> TrackStep();
176 lengthtrack += slengthtrack;
179 if ((gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()) && (fELoss > 0))
181 TLorentzVector PosOut;
182 gMC->TrackPosition(PosOut);
183 fPosOut.SetXYZ(PosOut.X(), PosOut.Y(), PosOut.Z());
185 TLorentzVector MomOut;
186 gMC->TrackMomentum(MomOut);
187 fMomOut.SetXYZ(MomOut.Px(), MomOut.Py(), MomOut.Pz());
189 timeOut = gMC->TrackTime() * 1.0e09;
193 if (fELoss == 0. )
return kFALSE;
197 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
199 Double_t time = gMC->TrackTime() * 1.0e09;
200 Double_t length = gMC->TrackLength();
203 gMC->CurrentVolID(copyNo);
206 gMC->CurrentVolOffID(1, iCell);
210 if (lEDEBUGcounter<100) {
211 std::cout <<
"EDEBUG-- BmnFD::ProcessHits: TrackID:" << fTrackID <<
214 " " << gMC->CurrentVolPath() <<
" " << tPos.Z() <<
216 " " << ivol <<
"=="<< gMC->CurrentVolID(copyNo) <<
","<< copyNo <<
217 " " << gMC->CurrentVolOffID(1,iCell) <<
" " << iCell <<
218 " " << gMC->CurrentVolOffName(1) <<
" " << gMC->CurrentVolOffName(0) <<
228 AddHit(fTrackID, ivol, copyNo, fPosIn, fPosOut,
230 time, length, fELoss, fIsPrimary, fCharge, fPdgId, lightYield, timeIn, timeOut, lengthtrack);
233 AddHit(fTrackID, ivol, copyNo, fPosIn, fPosOut,
235 time, length, fELoss, fIsPrimary, fCharge, fPdgId, lightYield, timeIn, timeOut, lengthtrack);
328 FairGeoLoader* geoLoad = FairGeoLoader::Instance();
329 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
331 FDGeo->setGeomFile(GetGeometryFileName());
332 geoFace->addGeoModule(FDGeo);
334 Bool_t rc = geoFace->readSet(FDGeo);
335 if (rc) FDGeo->create(geoLoad->getGeoBuilder());
336 TList* volList = FDGeo->getListOfVolumes();
339 FairRun *fRun = FairRun::Instance();
340 FairRuntimeDb *rtdb = FairRun::Instance()->GetRuntimeDb();
345 TListIter iter(volList);
346 FairGeoNode *node =
nullptr;
347 FairGeoVolume *aVol =
nullptr;
349 while( (node = (FairGeoNode*)iter.Next()) )
351 aVol =
dynamic_cast<FairGeoVolume*
>(node);
353 if(node->isSensitive()) fSensNodes->AddLast(aVol);
354 else fPassNodes->AddLast(aVol);
358 par->setInputVersion(fRun->GetRunId(),1);
359 ProcessNodes( volList );
375 TVector3 momIn, TVector3 momOut, Double_t time, Double_t length, Double_t eLoss, Bool_t isPrimary,
376 Double_t charge, Int_t pdgId, Double_t lightYield, Double_t timeIn, Double_t timeOut, Double_t lengthtrack) {
378 TClonesArray& clref = *fFDCollection;
379 Int_t size = clref.GetEntriesFast();
380 return new(clref[size])
BmnFDPoint(trackID, detID, copyNo, posIn, posOut, momIn, momOut, time, length, eLoss, isPrimary,
381 charge, pdgId, lightYield, timeIn, timeOut, lengthtrack);
BmnFDPoint * 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)