3 #include "TClonesArray.h"
4 #include "TLorentzVector.h"
9 #include "TGeoMaterial.h"
10 #include "TGeoMedium.h"
13 #include "TGeoMatrix.h"
14 #include "TGeoManager.h"
15 #include "TVirtualMC.h"
17 #include "FairVolume.h"
19 #include "FairRuntimeDb.h"
21 #include "FairModule.h"
34 : FairDetector(), fMdtCollection(0), fTrkIn(-1),
35 fELoss(0), fTime(0), fPos_In(), fMom_In(),
36 fVerboseLevel(0),mdtMagnet(0), mdtCoil(0), mdtMFI(0),
37 fBarrel(
""), fEndcap(
""), fMuonFilter(
""), fForward(
"")
46 : FairDetector(name,active), fMdtCollection(0), fTrkIn(-1),
47 fELoss(0), fTime(0), fPos_In(), fMom_In(),
48 fVerboseLevel(0),mdtMagnet(0), mdtCoil(0), mdtMFI(0),
49 fBarrel(
""), fEndcap(
""), fMuonFilter(
""), fForward(
"")
101 else if (
fBarrel.EndsWith(
".root"))
104 std::cout<<
"======= MDT:: ConstructGeometry() ========"<<endl;
105 std::cout<<
"File name, "<<
fBarrel<<endl;
106 std::cout<<
"============================================="<<endl;
107 ConstructRootGeometry();
111 std::cout<<
"PndMdt::ConstructGeometry : No good MDT Barrel definition " <<std::endl;
121 ConstructRootGeometry();
125 std::cout<<
"PndMdt::ConstructGeometry : No good MDT Endcap definition " <<std::endl;
139 ConstructRootGeometry();
143 std::cout<<
"PndMdt::ConstructGeometry : No good MDT Muon Filter definition " <<std::endl;
154 else if (
fForward.EndsWith(
".root"))
157 ConstructRootGeometry();
161 std::cout<<
"PndMdt::ConstructGeometry : No good MDT Forward definition " <<std::endl;
199 if (name.Contains(
"BA") || name.Contains(
"Cell"))
ProcessHitsRoot(vol);
209 if (gMC->TrackCharge()==0)
return kTRUE;
213 if (gMC->IsTrackEntering() || gMC->IsNewTrack() )
219 fTrkIn = gMC->GetStack()->GetCurrentTrackNumber();
220 fTime = gMC->TrackTime()*1e9;
225 if (gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared() )
227 Int_t TrNo=gMC->GetStack()->GetCurrentTrackNumber();
231 TLorentzVector lPos, lMom;
237 sscanf(name,
"MDT%is%il%ib%iw%i", &iMod, &iOct, &iLayer, &iBox, &iWire);
240 gMC->TrackPosition(lPos);
241 gMC->TrackMomentum(lMom);
245 gMC->TrackLength(),
fELoss,
263 if (gMC->TrackCharge()==0)
return kTRUE;
266 TString path = gMC->CurrentVolPath();
267 if (
fVerboseLevel) std::cout <<
"Path: " << path << std::endl;
269 if (gMC->IsTrackEntering() || gMC->IsNewTrack() )
274 fTrkIn = gMC->GetStack()->GetCurrentTrackNumber();
275 fTime = gMC->TrackTime()*1e9;
281 <<
", name"<<gMC->ParticleName(gMC->TrackPid())<< endl;
283 if (gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared() )
285 Int_t TrNo=gMC->GetStack()->GetCurrentTrackNumber();
289 TLorentzVector lPos, lMom;
295 gMC->CurrentVolID(iWire);
296 gMC->CurrentVolOffID(2,iBox);
297 gMC->CurrentVolOffID(3,iLayer);
298 gMC->CurrentVolOffID(4,iOct);
299 if (path.Contains(
"Barrel") ) iMod = 1;
300 if (path.Contains(
"Endcap")) iMod = 2;
301 if (path.Contains(
"MF")) iMod = 3;
302 if (path.Contains(
"Forward")) iMod = 4;
304 if (
fVerboseLevel) cout << iMod <<
"\t" << iOct <<
"\t" << iLayer <<
"\t" << iBox <<
"\t" << iWire;
308 gMC->TrackPosition(lPos);
309 gMC->TrackMomentum(lMom);
313 gMC->TrackLength(),
fELoss,
331 if ((name.find(
"MDT") != std::string::npos) || name.find(
"GasCell") != std::string::npos)
353 Int_t abspdg = abs(pdg);
354 if(abspdg == 11)
return 0;
355 else if(abspdg == 211)
return 2;
356 else if(abspdg == 13)
return 1;
357 else if(abspdg == 2212)
return 4;
358 else if(abspdg == 321)
return 3;
TClonesArray * fMdtCollection
Bool_t ProcessHitsFast(FairVolume *vol)
static Int_t Identifier(Int_t iMod, Int_t iOct, Int_t iLayer, Int_t iBox, Int_t iWire)
void AddPoint(DetectorId iDet)
Int_t PdgToIndex(Int_t pdg)
Cave SetGeometryFileName("pndcave.geo")
Bool_t ProcessHits(FairVolume *vol)
Bool_t ProcessHitsRoot(FairVolume *vol)
Bool_t CheckIfSensitive(std::string name)
void ConstructGeometryFast()
TClonesArray * GetCollection(Int_t iColl) const