97static const Double_t dP = 1.032 ;
98static const Double_t BirkC1 = 0.013/dP;
99static const Double_t BirkC2 = 9.6e-6/(dP * dP);
101static Double_t lightYield;
102static Double_t timeIn;
103static Double_t timeOut;
104static Double_t lengthtrack;
108 Int_t ivol = vol->getMCid();
116 static Int_t lEDEBUGcounter=0;
117 if (lEDEBUGcounter<1)
118 std::cout <<
"EDEBUG-- BmnBC::ProcessHits: entered" << gMC->CurrentVolPath() << endl;
121 if (gMC->IsTrackEntering()) {
132 TLorentzVector PosIn;
133 gMC->TrackPosition(PosIn);
134 fPosIn.SetXYZ(PosIn.X(), PosIn.Y(), PosIn.Z());
136 if (PosIn.Z()<-810) {fStation = 1;}
137 else if(PosIn.Z()>-810 && PosIn.Z()< -730 ){fStation = 2;}
138 else if(PosIn.Z()>-730 && PosIn.Z()< -472 ){fStation = 3;}
142 TLorentzVector MomIn;
143 gMC->TrackMomentum(MomIn);
144 fMomIn.SetXYZ(MomIn.Px(), MomIn.Py(), MomIn.Pz());
146 timeIn = gMC->TrackTime() * 1.0e09;
155 Double_t eLoss = gMC->Edep();
159 if ((gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()) && (fELoss > 0))
161 TLorentzVector PosOut;
162 gMC->TrackPosition(PosOut);
163 fPosOut.SetXYZ(PosOut.X(), PosOut.Y(), PosOut.Z());
170 if (PosOut.Z()<-810) {fStation = 1;}
171 else if(PosOut.Z()>-810 && PosOut.Z()< -730 ){fStation = 2;}
172 else if(PosOut.Z()>-730 && PosOut.Z()< -472 ){fStation = 3;}
213 TLorentzVector MomOut;
214 gMC->TrackMomentum(MomOut);
215 fMomOut.SetXYZ(MomOut.Px(), MomOut.Py(), MomOut.Pz());
217 timeOut = gMC->TrackTime() * 1.0e09;
220 if (fELoss == 0. )
return kFALSE;
228if (gMC->TrackCharge()!=0) {
229 Double_t BirkC1Mod = 0;
231 if (TMath::Abs(gMC->TrackCharge())>=2)
232 BirkC1Mod = BirkC1 * 7.2/12.6;
236 if (gMC->TrackStep() > 0)
238 Double_t dedxcm = gMC -> Edep() * 1000./gMC -> TrackStep();
239 Double_t curLightYield = gMC -> Edep() * 1000./(1. + BirkC1Mod * dedxcm + BirkC2 * dedxcm * dedxcm);
240 curLightYield /= 1000.;
241 lightYield += curLightYield;
243 lengthtrack = gMC-> TrackStep();
250 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
253 part = gMC->GetStack()->GetCurrentTrack();
255 fIsPrimary = (Int_t)part->IsPrimary();
256 fCharge = (Int_t)part->GetPDG()->Charge() / 3.;
257 fPdgId = (Int_t)part->GetPdgCode();
262 Double_t time = gMC->TrackTime() * 1.0e09;
263 Double_t length = gMC->TrackLength();
267 gMC->CurrentVolID(copyNo);
270 gMC->CurrentVolOffID(1, iCell);
276 if (lEDEBUGcounter<100) {
277 std::cout <<
"EDEBUG-- BmnBC::ProcessHits: TrackID:" << fTrackID <<
280 " " << gMC->CurrentVolPath() <<
" " << tPos.Z() <<
282 " " << ivol <<
"=="<< gMC->CurrentVolID(copyNo) <<
","<< copyNo <<
283 " " << gMC->CurrentVolOffID(1,iCell) <<
" " << iCell <<
284 " " << gMC->CurrentVolOffName(1) <<
" " << gMC->CurrentVolOffName(0) <<
295 AddHit(fTrackID, ivol, copyNo, fPosIn, fPosOut,
297 time, length, fELoss, fIsPrimary, fCharge, fPdgId, lightYield, timeIn, timeOut, lengthtrack);
301 AddHit(fTrackID, ivol, copyNo, fPosIn, fPosOut,
303 time, length, fELoss, fStation, fIsPrimary, fCharge, fPdgId, lightYield, timeIn, timeOut, lengthtrack);
398 FairGeoLoader* geoLoad = FairGeoLoader::Instance();
399 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
401 BCGeo->setGeomFile(GetGeometryFileName());
402 geoFace->addGeoModule(BCGeo);
404 Bool_t rc = geoFace->readSet(BCGeo);
405 if (rc) BCGeo->create(geoLoad->getGeoBuilder());
406 TList* volList = BCGeo->getListOfVolumes();
409 FairRun *fRun = FairRun::Instance();
410 FairRuntimeDb *rtdb = FairRun::Instance()->GetRuntimeDb();
415 TListIter iter(volList);
416 FairGeoNode *node =
nullptr;
417 FairGeoVolume *aVol =
nullptr;
419 while( (node = (FairGeoNode*)iter.Next()) )
421 aVol =
dynamic_cast<FairGeoVolume*
>(node);
423 if(node->isSensitive()) fSensNodes->AddLast(aVol);
424 else fPassNodes->AddLast(aVol);
428 par->setInputVersion(fRun->GetRunId(),1);
429 ProcessNodes( volList );
447 TVector3 posIn, TVector3 posOut,
448 TVector3 momIn, TVector3 momOut,
450 Double_t length, Double_t eLoss, Int_t fStat, Bool_t isPrimary, Double_t charge, Int_t pdgId,
451 Double_t lightYield, Double_t timeIn, Double_t timeOut, Double_t lengthtrack) {
453 TClonesArray& clref = *fBCCollection;
454 Int_t size = clref.GetEntriesFast();
455 return new(clref[size])
BmnBCPoint(trackID, detID, copyNo,
456 posIn, posOut, momIn, momOut,
457 time, length, eLoss, fStation, isPrimary, charge, pdgId, lightYield, timeIn, timeOut, lengthtrack);
BmnBCPoint * 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, Int_t fStat, Bool_t isPrimary, Double_t charge, Int_t pdgId, Double_t lightYield, Double_t timeIn, Double_t timeOut, Double_t lengthtrack)