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