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"
44 PndPersistencyTask(
"Ideal STT Hit Producer",0), fSeparate(kFALSE), fSttParameters(NULL), fGeoType(-1) {
62 FairRootManager* ioman = FairRootManager::Instance();
64 cout <<
"-E- PndSttHitProducerRealFast-wintz::Init: "
65 <<
"RootManager not instantiated!" << endl;
72 fPointArray = (TClonesArray*) ioman->GetObject(
"STTPoint");
74 cout <<
"-W- PndSttHitProducerRealFast::Init: "
75 <<
"No STTPoint array!" << endl;
89 fHitArray =
new TClonesArray(
"PndSttHit");
111 fHitArray =
new TClonesArray(
"PndSttHit");
131 cout <<
"-I- PndSttHitProducerRealFast: Intialization successfull" << endl;
139 FairRuntimeDb*
rtdb = FairRun::Instance()->GetRuntimeDb();
157 if ( !
fHitArray ) Fatal(
"Exec",
"No HitArray");
183 for (Int_t iPoint = 0; iPoint < nPoints; iPoint++) {
185 if (point == NULL)
continue;
187 detID = point->GetDetectorID();
198 if (tube ==
nullptr){
199 std::cout <<
"-E- PndSttHitProducerRealFast Nullptr of TubeID: " << tubeID << std::endl;
203 memset(InOut, 0,
sizeof(InOut));
221 stt.
TConst(0.5, 2, 0.9, 0.1);
238 stt.
TInit(point->
GetMass()/GeV, momentum.Mag()/GeV, InOut);
272 pos.SetXYZ(position.X(), position.Y(), position.Z());
281 AddHitInfo(0, 0, point->GetTrackID(), iPoint, 0, kFALSE);
286 else AddHit(
fSttSkewHitArray, detID, tubeID, iPoint, pos, dpos, pulset, radius, closestDistanceError, depcharge);
288 else AddHit(detID, tubeID, iPoint, pos, dpos, pulset, radius, closestDistanceError, depcharge);
315 TVector3 , TVector3 )
321 zposError = gRandom->Gaus(0., 3.);
333 Int_t size = clref.GetEntriesFast();
335 PndSttHit *hitnew =
new(clref[size])
PndSttHit(detID, tubeID, iPoint, pos, dpos, p, rsim, closestDistanceError, depcharge);
344 TClonesArray& clref = *hitarray;
345 Int_t size = clref.GetEntriesFast();
347 PndSttHit *hitnew =
new(clref[size])
PndSttHit(detID, tubeID, iPoint, pos, dpos, p, rsim, closestDistanceError, depcharge);
359 Int_t size = clref.GetEntriesFast();
360 return new(clref[size])
PndSttHitInfo(fileNumber, eventNumber, trackID, pointID, nMerged, isFake);
374 resmic = +1.06966e+02
375 -4.03073e+03 *TrueDcm
376 +1.60851e+05 *pow(TrueDcm,2)
377 -2.87722e+06 *pow(TrueDcm,3)
378 +2.67581e+07 *pow(TrueDcm,4)
379 -1.43397e+08 *pow(TrueDcm,5)
380 +4.61046e+08 *pow(TrueDcm,6)
381 -8.79170e+08 *pow(TrueDcm,7)
382 +9.17095e+08 *pow(TrueDcm,8)
383 -4.03253e+08 *pow(TrueDcm,9);
389 else if (rescurve==1) {
391 resmic = +1.48048e+02
393 -1.87575e+03*pow(TrueDcm,2)
394 +1.92910e+04*pow(TrueDcm,3)
395 -6.90036e+04*pow(TrueDcm,4)
396 +1.07960e+05*pow(TrueDcm,5)
397 -5.90064e+04*pow(TrueDcm,6);
403 else if (rescurve==2) {
422 + 0.00211993 * TrueDcm
423 + 0.00336004 * pow(TrueDcm, 2)
424 - 0.0103979 * pow(TrueDcm, 3)
425 + 0.0033461 * pow(TrueDcm, 4)
426 -0.000315764 * pow(TrueDcm, 5);
434 else if (rescurve==3) {
436 resmic = 4.521331e-01
437 -2.087216e-01 *10.*TrueDcm
438 +4.911102e-02 *pow(10.*TrueDcm,2)
439 -3.934728e-03 *pow(10.*TrueDcm,3);
440 resmic = resmic*1000.;
444 return resmic*0.0001;
Double_t GetYOutLocal() const
virtual ~PndSttHitProducerRealFast()
void PutWireXYZ(Double_t w1, Double_t w2, Double_t w3, Double_t w4, Double_t w5, Double_t w6)
TClonesArray * fSttParalOverlapHitArray
friend F32vec4 sqrt(const F32vec4 &a)
static T Sqrt(const T &x)
TClonesArray * fSttSkewOverlapHitArray
TClonesArray * fSttParalHitArray
PndSttHitProducerRealFast()
Double_t GetZInLocal() const
Double_t GetXInLocal() const
void SetPersistency(Bool_t val=kTRUE)
Double_t TrueDist(Double_t Point[])
Double_t GetPzOut() const
PndSttTube * GetTube(int tubeId)
TGeoManager * gGeoManager
void FoldZPosWithResolution(Double_t &zpos, Double_t &zposError, TVector3 localInPos, TVector3 localOutPos)
Double_t GetPxOut() const
Double_t GetError(Double_t, Int_t)
Double_t GetYInLocal() const
Double_t GetZOutLocal() const
Double_t GetXOutLocal() const
static PndSttTubeMap * Instance()
virtual void Exec(Option_t *opt)
Bool_t OverlapSimultaneousSignals(TClonesArray *OverlapHitArray)
TClonesArray * FillTubeArray()
TClonesArray * fOverlapHitArray
PndSttHitInfo * AddHitInfo(Int_t fileNumber, Int_t eventNumber, Int_t trackID, Int_t pointID, Int_t nMerged, Bool_t isFake)
void TInit(Double_t Mass, Double_t Momentum, Double_t InOut[])
Double_t GetPyOut() const
virtual void SetParContainers()
Double_t FastRec(Double_t TrueDcm, Int_t Flag)
void TConst(Double_t Radius, Double_t pSTP, Double_t ArP, Double_t CO2P)
TClonesArray * fSttSkewHitArray
virtual InitStatus Init()
PndSttHit * AddHit(Int_t detID, Int_t tubeID, Int_t iPoint, TVector3 &pos, TVector3 &dpos, Double_t p, Double_t rsim, Double_t closestDistanceError, Double_t depcharge)
TClonesArray * fHitInfoArray
PndGeoSttPar * fSttParameters
TClonesArray * fTubeArray
TClonesArray * fPointArray