23 #include "FairRootManager.h"
24 #include "FairRunAna.h"
25 #include "FairRuntimeDb.h"
26 #include "FairGeoNode.h"
27 #include "FairGeoTransform.h"
28 #include "FairGeoRotation.h"
29 #include "FairGeoVector.h"
31 #include "TGeoManager.h"
32 #include "TClonesArray.h"
45 fVolumeArray(0), fHitInfoArray(0), fevtn(0), fFtsParameters(new
PndGeoFtsPar()), fOverlap(kFALSE)
63 std::cout<<
"#########################################################"<<std::endl;
64 std::cout<<
"PndFtsHitProducerRealFast: Init()#######"<<std::endl;
65 std::cout<<
"#########################################################"<<std::endl;
68 FairRootManager* ioman = FairRootManager::Instance();
70 cout <<
"-E- PndFtsHitProducerRealFast-wintz::Init: "
71 <<
"RootManager not instantiated!" << endl;
76 fPointArray = (TClonesArray*) ioman->GetObject(
"FTSPoint");
78 cout <<
"-W- PndFtsHitProducerRealFast::Init: "
79 <<
"No FTSPoint array!" << endl;
89 fHitArray =
new TClonesArray(
"PndFtsHit");
98 fHitArray =
new TClonesArray(
"PndFtsHit");
110 cout <<
"-I- PndFTSHitProducerRealFast: INITIALIZATION SUCCESSFUL" << endl;
124 FairRuntimeDb*
rtdb = FairRunAna::Instance()->GetRuntimeDb();
139 if ( !
fHitArray ) Fatal(
"Exec",
"No HitArray");
156 for (Int_t iPoint = 0; iPoint < nPoints; iPoint++) {
158 if (point == NULL)
continue;
160 detID = point->GetDetectorID();
170 if(layerID>=3 && layerID<=6){skew=1;}
171 if(layerID>=11 && layerID<=14){skew=1;}
172 if(layerID>=19 && layerID<=22){skew=1;}
173 if(layerID>=27 && layerID<=30){skew=1;}
174 if(layerID>=35 && layerID<=38){skew=1;}
175 if(layerID>=43 && layerID<=46){skew=1;}
179 memset(InOut, 0,
sizeof(InOut));
196 fts.
TConst(0.5, 2, 0.8, 0.2);
213 fts.
TInit(point->
GetMass()/GeV, momentum.Mag()/GeV, InOut);
243 pos.SetXYZ(position.X(), position.Y(), position.Z());
246 dpos.SetXYZ(0.5, 0.5, 3.);
251 Double_t eventTime = FairRootManager::Instance()->GetEventTime();
252 Double_t flightTime = point->GetTime();
253 AddHit(detID, tubeID, chamberID, layerID, skew, iPoint, pos, dpos, pulset+flightTime+eventTime, radius, closestDistanceError, depcharge);
254 AddHitInfo(0, 0, point->GetTrackID(), iPoint, 0, kFALSE);
271 TVector3 , TVector3 )
279 zposError = gRandom->Gaus(0., 3.);
288 PndFtsHit*
PndFtsHitProducerRealFast::AddHit(Int_t detID, Int_t tubeID, Int_t chamberID, Int_t layerID, Int_t
skew, Int_t iPoint, TVector3&
pos, TVector3& dpos,
Double_t p,
Double_t rsim,
Double_t closestDistanceError,
Double_t depcharge) {
293 Int_t size = clref.GetEntriesFast();
295 PndFtsHit *hitnew =
new(clref[size])
PndFtsHit(detID, tubeID, chamberID, layerID, skew, iPoint, pos, dpos, p, rsim, closestDistanceError, depcharge);
307 Int_t size = clref.GetEntriesFast();
308 return new(clref[size])
PndFtsHitInfo(fileNumber, eventNumber, trackID, pointID, nMerged, isFake);
318 resmic = 20. +1.48048e+02
320 -1.87575e+03*pow(TrueDcm,2)
321 +1.92910e+04*pow(TrueDcm,3)
322 -6.90036e+04*pow(TrueDcm,4)
323 +1.07960e+05*pow(TrueDcm,5)
324 -5.90064e+04*pow(TrueDcm,6) ;
328 return resmic*0.0001;
Double_t GetXOutLocal() const
Double_t GetPzOut() const
PndFtsHitProducerRealFast()
Bool_t OverlapSimultaneousSignals(TClonesArray *OverlapHitArray)
virtual void Exec(Option_t *opt)
friend F32vec4 sqrt(const F32vec4 &a)
Double_t GetZOutLocal() const
TClonesArray * fPointArray
TClonesArray * fTubeArray
PndGeoFtsPar * fFtsParameters
PndFtsHitInfo * AddHitInfo(Int_t fileNumber, Int_t eventNumber, Int_t trackID, Int_t pointID, Int_t nMerged, Bool_t isFake)
Double_t GetPxOut() const
void SetPersistency(Bool_t val=kTRUE)
void TInit(Double_t Mass, Double_t Momentum, Double_t InOut[])
Double_t GetYOutLocal() const
TGeoManager * gGeoManager
TClonesArray * fHitInfoArray
Double_t GetYInLocal() const
Double_t GetZInLocal() const
PndFtsHit * AddHit(Int_t detID, Int_t tubeID, Int_t chamberID, Int_t layerID, Int_t skew, Int_t iPoint, TVector3 &pos, TVector3 &dpos, Double_t p, Double_t rsim, Double_t closestDistanceError, Double_t depcharge)
TClonesArray * fOverlapHitArray
void TConst(Double_t Radius, Double_t pSTP, Double_t ArP, Double_t CO2P)
Double_t TrueDist(Double_t Point[])
void FoldZPosWithResolution(Double_t &zpos, Double_t &zposError, TVector3 localInPos, TVector3 localOutPos)
TVector3 GetPosition() const
virtual InitStatus Init()
Double_t GetError(Double_t)
void PutWireXYZ(Double_t w1, Double_t w2, Double_t w3, Double_t w4, Double_t w5, Double_t w6)
Double_t FastRec(Double_t TrueDcm, Int_t Flag)
~PndFtsHitProducerRealFast()
TClonesArray * FillTubeArray()
this function will be used in PndFtsHitProducesRealFast
Double_t GetPyOut() const
Double_t GetXInLocal() const