14 #include "FairGeoInterface.h"
15 #include "FairGeoLoader.h"
16 #include "FairGeoNode.h"
17 #include "FairGeoRootBuilder.h"
18 #include "FairRootManager.h"
19 #include "FairRuntimeDb.h"
20 #include "FairVolume.h"
22 #include "TClonesArray.h"
23 #include "TLorentzVector.h"
24 #include "TParticle.h"
25 #include "TVirtualMC.h"
26 #include "TGeoMatrix.h"
27 #include "TObjArray.h"
29 #include "TGeoMedium.h"
30 #include "TGeoVolume.h"
39 #define innerStrawDiameter 1.
44 : fTrackID(0), fVolumeID(0), fPos(0,0,0,0), fPosIn(0,0,0,0), fPosOut(0,0,0,0), fPosInLocal(0,0,0,0), fPosOutLocal(0,0,0,0),
45 fMomIn(0,0,0,0), fMomOut(0,0,0,0), fTime(0), fLength(0), fELoss(0), fMass(0), fIsInitialized(kFALSE), fPosIndex(0),
46 fFtsCollection(0), fpostot(0,0,0,0), fpostotin(0,0,0,0), fpostotout(0,0,0,0), fPassNodes(), valid(kFALSE), fGeoType(0)
57 : FairDetector(name, active), fTrackID(0), fVolumeID(0), fPos(0,0,0,0), fPosIn(0,0,0,0), fPosOut(0,0,0,0), fPosInLocal(0,0,0,0), fPosOutLocal(0,0,0,0),
58 fMomIn(0,0,0,0), fMomOut(0,0,0,0), fTime(0), fLength(0), fELoss(0), fMass(0), fIsInitialized(kFALSE), fPosIndex(0),
59 fFtsCollection(0), fpostot(0,0,0,0), fpostotin(0,0,0,0), fpostotout(0,0,0,0), fPassNodes(), valid(kFALSE), fGeoType(0)
91 gMC->TrackPosition(entryPosition);
92 positionInMother[0] = entryPosition.X();
93 positionInMother[1] = entryPosition.Y();
94 positionInMother[2] = entryPosition.Z();
95 gMC->Gmtod(positionInMother, positionInStraw, 1);
97 return positionInStraw[0] * positionInStraw[0] +
98 positionInStraw[1] * positionInStraw[1];
108 pos = aSrc.find(aDelim);
110 aDest = aSrc.substr(0, pos);
112 if(pos != string::npos)
113 aSrc = aSrc.substr(pos + 1);
129 while(
Split(sub, aSrc, aDelim))
153 TString vol_name(gMC->CurrentVolName());
155 gMC->GetTransformation(gMC->CurrentVolPath(),M);
159 if (gMC->TrackCharge() != 0.)
162 if ( gMC->IsTrackEntering() )
168 fTime = gMC->TrackTime() * 1.0e09;
170 gMC->TrackPosition(
fPos);
171 gMC->TrackMomentum(
fMomIn);
173 Double_t globalPos[3] = {0., 0., 0.};
174 Double_t localPos[3] = {0., 0., 0.};
176 globalPos[0] =
fPos.X();
177 globalPos[1] =
fPos.Y();
178 globalPos[2] =
fPos.Z();
180 gMC->Gmtod(globalPos, localPos, 1);
181 fPosInLocal.SetXYZM(localPos[0], localPos[1], localPos[2], 0.0);
191 if ( gMC->IsTrackExiting() &&
valid==kTRUE )
195 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
199 if (fVerboseLevel>2) std::cout<<
"test Vol----------"<<vol->getMCid()<<std::endl;
200 if (fVerboseLevel>2) std::cout<<
"fTrackID-----"<<
fTrackID<<std::endl;
203 fMass = gMC->TrackMass();
207 Double_t globalPos[3] = {0., 0., 0.};
208 Double_t localPos[3] = {0., 0., 0.};
210 gMC->Gdtom(localPos, globalPos, 1);
212 fPos.SetXYZM(globalPos[0], globalPos[1], globalPos[2], 0.0);
218 gMC->Gmtod(globalPos, localPos, 1);
219 fPosOutLocal.SetXYZM(localPos[0], localPos[1], localPos[2], 0.0);
230 volPath(gMC->CurrentVolPath()),
231 volPath2(gMC->CurrentVolPath());
233 volumename = volPath;
237 Int_t start =volPath2.find(
"fts",0);
238 specialname = volPath2.substr(start,volPath2.find(
"_",start)-start);
240 if(volumename.Contains(
"fts01")) basename =
"fts01tube";
241 if(volumename.Contains(
"fts02")) basename =
"fts02tube";
242 if(volumename.Contains(
"fts31")) basename =
"fts31tube";
243 if(volumename.Contains(
"fts32")) basename =
"fts32tube";
244 if(volumename.Contains(
"fts33")) basename =
"fts33tube";
245 if(volumename.Contains(
"fts34")) basename =
"fts34tube";
246 if(volumename.Contains(
"fts35")) basename =
"fts35tube";
247 if(volumename.Contains(
"fts36")) basename =
"fts36tube";
248 if(volumename.Contains(
"fts37")) basename =
"fts37tube";
249 if(volumename.Contains(
"fts38")) basename =
"fts38tube";
250 if(volumename.Contains(
"fts05")) basename =
"fts05tube";
251 if(volumename.Contains(
"fts06")) basename =
"fts06tube";
253 fullName = basename + hashmark + number;
256 *volnode =
dynamic_cast<FairGeoNode*
> (
fPassNodes->FindObject(fullName.c_str()));
259 cout <<
"-I- PndFts: No volume " << fullName.c_str() <<
" found in geometry container." << endl;
265 if (fVerboseLevel>2) std::cout<<
"befor Mapper------"<<std::endl;
296 if (fVerboseLevel>2) std::cout<<
"AddHit PndFts.cxx= "<<
fTrackID<<std::endl;
332 FairRootManager::Instance()->Register(
"FTSPoint",
"Fts",
fFtsCollection, kTRUE);
356 cout <<
"-I- PndFts: " << nHits <<
" points registered in this event." << endl;
380 nEntries = cl1->GetEntriesFast();
382 cout <<
"-I- PndFts: " << nEntries <<
" entries to add." << endl;
384 TClonesArray& clref = *cl2;
388 for (Int_t
i=0;
i<nEntries;
i++)
393 index = oldpoint->GetTrackID() +
offset;
395 oldpoint->SetTrackID(index);
399 cout <<
"-I- PndFts: " << cl2->GetEntriesFast() <<
" merged entries."
405 cout <<
" -I- Initializing PndFts()" <<endl;
415 FairGeoLoader*
geoLoad = FairGeoLoader::Instance();
416 FairGeoInterface*
geoFace = geoLoad->getGeoInterface();
418 Geo->setGeomFile(GetGeometryFileName());
419 geoFace->addGeoModule(Geo);
421 Bool_t rc = geoFace->readSet(Geo);
422 if (rc) Geo->create(geoLoad->getGeoBuilder());
424 TList* volList = Geo->getListOfVolumes();
427 FairRun *
fRun = FairRun::Instance();
428 FairRuntimeDb *
rtdb= FairRun::Instance()->GetRuntimeDb();
433 TListIter iter(volList);
434 FairGeoNode* node = NULL;
435 FairGeoVolume *aVol=NULL;
438 while( (node = (FairGeoNode*)iter.Next()) ) {
439 aVol =
dynamic_cast<FairGeoVolume*
> ( node );
440 if ( node->isSensitive() ) {
441 fSensNodes->AddLast( aVol );
457 par->setInputVersion(fRun->GetRunId(),1);
458 ProcessNodes ( volList );
470 TVector3
pos, TVector3 posInLocal, TVector3 posOutLocal,
471 TVector3 momIn, TVector3 momOut,
478 size = clref.GetEntriesFast();
480 PndFtsPoint *pointnew =
new(clref[size])
PndFtsPoint(trackID, detID, tubeID, chamberID, layerID, pos, posInLocal, posOutLocal,momIn, momOut, time, length, eLoss, mass);
virtual Bool_t ProcessHits(FairVolume *vol=0)
TLorentzVector fpostot
Hit collection.
virtual void ConstructGeometry()
Int_t fVolumeID
track index
TLorentzVector fPosOut
entry position in global frame
bool Split(std::string &aDest, std::string &aSrc, char aDelim)
TClonesArray * fFtsCollection
TLorentzVector fPosInLocal
exit position in global frame
Int_t GetTubeIDFromPath(TString path)
virtual void EndOfEvent()
void SetLayerID(Int_t layerid)
virtual void Print() const
void SetTubeInRad(Double_t inrad)
void AddPoint(DetectorId iDet)
TLorentzVector fMomIn
exit position in straw frame
float GetSquaredDistanceFromWire()
Int_t GetChamberIDFromPath(TString path)
void SetChamberID(Int_t chamberid)
Int_t GetLayerID(Int_t chamberid, Int_t tubeid, TString path)
TLorentzVector fpostotout
Int_t GetTubeIDTot(Int_t chamberid, Int_t layerid, Int_t tubeid, TString path)
void SetTubeOutRad(Double_t outrad)
PndFtsMapCreator * fMapper
virtual void CopyClones(TClonesArray *cl1, TClonesArray *cl2, Int_t offset)
virtual TClonesArray * GetCollection(Int_t iColl) const
std::string GetStringPart(std::string &aSrc, Int_t part, char aDelim)
TObjArray * GetGeoPassiveNodes()
void SetGeometryType(Int_t geoType)
TLorentzVector fPosOutLocal
entry position in straw frame
FairGeoInterface * geoFace
TObjArray * GetGeoSensitiveNodes()
Double_t fMass
energy loss
PndFtsPoint * AddHit(Int_t trackID, Int_t detID, Int_t tubeID, Int_t chamberID, Int_t layerID, TVector3 pos, TVector3 posInLocal, TVector3 posOutLocal, TVector3 momIn, TVector3 momOut, Double_t time, Double_t length, Double_t eLoss, Double_t mass)
void SetTubeID(Int_t tubeid)
TLorentzVector fPos
volume id
TLorentzVector fMomOut
momentum