82 static Double_t timeIn;
83 static Double_t timeOut;
84 static Double_t lengthtrack;
88 Int_t ivol = vol->getMCid();
96 static Int_t lEDEBUGcounter=0;
98 std::cout <<
"EDEBUG-- BmnSiMD::ProcessHits: entered" << gMC->CurrentVolPath() << endl;
101 if(gMC->IsTrackEntering()){
112 TLorentzVector PosIn;
113 gMC->TrackPosition(PosIn);
114 fPosIn.SetXYZ(PosIn.X(), PosIn.Y(), PosIn.Z());
116 TLorentzVector MomIn;
117 gMC->TrackMomentum(MomIn);
118 fMomIn.SetXYZ(MomIn.Px(), MomIn.Py(), MomIn.Pz());
120 timeIn = gMC->TrackTime() * 1.0e09;
130 part = gMC->GetStack()->GetCurrentTrack();
133 fIsPrimary = (Int_t)part->IsPrimary();
134 fCharge = (Int_t)part->GetPDG()->Charge() / 3.;
135 fPdgId = (Int_t)part->GetPdgCode();
142 Double_t eLoss = gMC->Edep();
146 Double_t slengthtrack = gMC-> TrackStep();
147 lengthtrack += slengthtrack;
149 if ((gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()) && (fELoss > 0))
151 TLorentzVector PosOut;
152 gMC->TrackPosition(PosOut);
153 fPosOut.SetXYZ(PosOut.X(), PosOut.Y(), PosOut.Z());
155 TLorentzVector MomOut;
156 gMC->TrackMomentum(MomOut);
157 fMomOut.SetXYZ(MomOut.Px(), MomOut.Py(), MomOut.Pz());
159 timeOut = gMC->TrackTime() * 1.0e09;
181 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);
194 gMC->CurrentVolOffID(1, iCell);
198 if (lEDEBUGcounter<100) {
199 std::cout <<
"EDEBUG-- BmnSiMD::ProcessHits: TrackID:" << fTrackID <<
202 " " << gMC->CurrentVolPath() <<
" " << tPos.Z() <<
204 " " << ivol <<
"=="<< gMC->CurrentVolID(copyNo) <<
","<< copyNo <<
205 " " << gMC->CurrentVolOffID(1,iCell) <<
" " << iCell <<
206 " " << gMC->CurrentVolOffName(1) <<
" " << gMC->CurrentVolOffName(0) <<
216 AddHit(fTrackID, ivol, copyNo, fPosIn, fPosOut,
218 time, length, fELoss, fIsPrimary, fCharge, fPdgId, timeIn, timeOut, lengthtrack);
221 AddHit(fTrackID, ivol, copyNo, fPosIn, fPosOut,
223 time, length, fELoss, fIsPrimary, fCharge, fPdgId, timeIn, timeOut, lengthtrack);
316 FairGeoLoader* geoLoad = FairGeoLoader::Instance();
317 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
319 SiMDGeo->setGeomFile(GetGeometryFileName());
320 geoFace->addGeoModule(SiMDGeo);
322 Bool_t rc = geoFace->readSet(SiMDGeo);
323 if (rc) SiMDGeo->create(geoLoad->getGeoBuilder());
324 TList* volList = SiMDGeo->getListOfVolumes();
327 FairRun *fRun = FairRun::Instance();
328 FairRuntimeDb *rtdb = FairRun::Instance()->GetRuntimeDb();
333 TListIter iter(volList);
334 FairGeoNode *node =
nullptr;
335 FairGeoVolume *aVol =
nullptr;
337 while( (node = (FairGeoNode*)iter.Next()) )
339 aVol =
dynamic_cast<FairGeoVolume*
>(node);
341 if(node->isSensitive()) fSensNodes->AddLast(aVol);
342 else fPassNodes->AddLast(aVol);
346 par->setInputVersion(fRun->GetRunId(),1);
347 ProcessNodes( volList );
362 TVector3 momIn, TVector3 momOut, Double_t time, Double_t length, Double_t eLoss, Bool_t isPrimary,
363 Double_t charge, Int_t pdgId, Double_t timeIn, Double_t timeOut, Double_t lengthtrack)
365 TClonesArray& clref = *fSiMDCollection;
366 Int_t size = clref.GetEntriesFast();
367 return new(clref[size])
BmnSiMDPoint(trackID, detID, copyNo, posIn, posOut, momIn, momOut, time, length, eLoss, isPrimary,
368 charge, pdgId, timeIn, timeOut, lengthtrack);
BmnSiMDPoint * 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 timeIn, Double_t timeOut, Double_t lengthtrack)