24 #include "FairRootManager.h"
25 #include "FairRunAna.h"
26 #include "FairRuntimeDb.h"
27 #include "FairGeoNode.h"
28 #include "FairGeoTransform.h"
29 #include "FairGeoRotation.h"
30 #include "FairGeoVector.h"
32 #include "TGeoManager.h"
33 #include "TClonesArray.h"
45 FairTask(
"Ideal FTS Hit Producer",0), fPointArray(0), fHitArray(0),
46 fVolumeArray(0), fHitInfoArray(0), fevtn(0), fFtsParameters(new
PndGeoFtsPar()),
64 std::cout<<
"#########################################################"<<std::endl;
65 std::cout<<
"PndFtsHitProducerMcPointCoordinates: Init()#######"<<std::endl;
66 std::cout<<
"FTS hits are produced with MC point coordinates for hit positions instead of center of straws!\n";
67 std::cout<<
"Use this class only for debugging or parameter optimisation purposes!\n\n";
68 std::cout<<
"#########################################################"<<std::endl;
70 FairRootManager* ioman = FairRootManager::Instance();
72 cout <<
"-E- PndFtsHitProducerMcPointCoordinates-wintz::Init: "
73 <<
"RootManager not instantiated!" << endl;
78 fPointArray = (TClonesArray*) ioman->GetObject(
"FTSPoint");
80 cout <<
"-W- PndFtsHitProducerMcPointCoordinates::Init: "
81 <<
"No FTSPoint array!" << endl;
86 fHitArray =
new TClonesArray(
"PndFtsHit");
95 cout <<
"-I- PndFtsHitProducerMcPointCoordinates: INITIALIZATION SUCCESSFUL" << endl;
110 FairRuntimeDb*
rtdb = FairRunAna::Instance()->GetRuntimeDb();
125 if ( !
fHitArray ) Fatal(
"Exec",
"No HitArray");
141 for (Int_t iPoint = 0; iPoint < nPoints; iPoint++) {
143 if (point == NULL)
continue;
145 detID = point->GetDetectorID();
155 if(layerID>=3 && layerID<=6){skew=1;}
156 if(layerID>=11 && layerID<=14){skew=1;}
157 if(layerID>=19 && layerID<=22){skew=1;}
158 if(layerID>=27 && layerID<=30){skew=1;}
159 if(layerID>=35 && layerID<=38){skew=1;}
160 if(layerID>=43 && layerID<=46){skew=1;}
164 memset(InOut, 0,
sizeof(InOut));
181 fts.
TConst(0.5, 2, 0.8, 0.2);
198 fts.
TInit(point->
GetMass()/GeV, momentum.Mag()/GeV, InOut);
228 TVector3 position(point->GetX(), point->GetY(), point->GetZ());
230 pos.SetXYZ(position.X(), position.Y(), position.Z());
233 dpos.SetXYZ(0.5, 0.5, 3.);
238 AddHit(detID, tubeID, chamberID, layerID, skew, iPoint, pos, dpos, pulset, radius, closestDistanceError, depcharge);
240 AddHitInfo(0, 0, point->GetTrackID(), iPoint, 0, kFALSE);
252 TVector3 , TVector3 )
260 zposError = gRandom->Gaus(0., 3.);
269 PndFtsHit*
PndFtsHitProducerMcPointCoordinates::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) {
274 Int_t size = clref.GetEntriesFast();
276 PndFtsHit *hitnew =
new(clref[size])
PndFtsHit(detID, tubeID, chamberID, layerID, skew, iPoint, pos, dpos, p, rsim, closestDistanceError, depcharge);
288 Int_t size = clref.GetEntriesFast();
289 return new(clref[size])
PndFtsHitInfo(fileNumber, eventNumber, trackID, pointID, nMerged, isFake);
299 resmic = 20. +1.48048e+02
301 -1.87575e+03*pow(TrueDcm,2)
302 +1.92910e+04*pow(TrueDcm,3)
303 -6.90036e+04*pow(TrueDcm,4)
304 +1.07960e+05*pow(TrueDcm,5)
305 -5.90064e+04*pow(TrueDcm,6) ;
309 return resmic*0.0001;
Double_t GetXOutLocal() const
Double_t GetPzOut() const
virtual void Exec(Option_t *opt)
friend F32vec4 sqrt(const F32vec4 &a)
Double_t GetZOutLocal() const
~PndFtsHitProducerMcPointCoordinates()
Double_t GetPxOut() const
void TInit(Double_t Mass, Double_t Momentum, Double_t InOut[])
PndFtsHitProducerMcPointCoordinates()
Double_t GetYOutLocal() const
TGeoManager * gGeoManager
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)
PndGeoFtsPar * fFtsParameters
void TConst(Double_t Radius, Double_t pSTP, Double_t ArP, Double_t CO2P)
Double_t TrueDist(Double_t Point[])
TClonesArray * fTubeArray
void PutWireXYZ(Double_t w1, Double_t w2, Double_t w3, Double_t w4, Double_t w5, Double_t w6)
PndFtsHitInfo * AddHitInfo(Int_t fileNumber, Int_t eventNumber, Int_t trackID, Int_t pointID, Int_t nMerged, Bool_t isFake)
Double_t FastRec(Double_t TrueDcm, Int_t Flag)
TClonesArray * fPointArray
TClonesArray * FillTubeArray()
this function will be used in PndFtsHitProducesRealFast
Double_t GetPyOut() const
virtual InitStatus Init()
Double_t GetXInLocal() const
Double_t GetError(Double_t)
TClonesArray * fHitInfoArray
void FoldZPosWithResolution(Double_t &zpos, Double_t &zposError, TVector3 localInPos, TVector3 localOutPos)