1 #ifndef PndTrkTracking2_H     2 #define PndTrkTracking2_H 1    15 #include "TClonesArray.h"    16 #include "TGeoVolume.h"    17 #include "TStopwatch.h"    38   PndTrkTracking2(
int istamp, 
bool iplot, 
bool doMcComparison, 
bool doSciTil);
    78   virtual void Exec(Option_t *opt);
    81   virtual InitStatus 
Init();
    85     fMvdAloneTracking = 
false;
    91     cout << 
"\nMy calculation of the time is :";
    92     cout << 
" real time " << frtime2 << 
" sec., CPU time " << fctime2 << 
" seconds." << endl << endl;
    98     sprintf(fSttBranch, 
"%s", string1);
    99     sprintf(fMvdPixelBranch, 
"%s", string2);
   100     sprintf(fMvdStripBranch, 
"%s", string3);
   113     fMvdAloneTracking = 
true;
   122 #define BOCA_90DEGREES_DIVISIONS 180   124   static const Short_t LEGIANDRE_NRADIUSDIV = 100,
   128     MAXMCTRACKS = 100, MAXMVDPIXELHITS = 500, MAXMVDPIXELHITSINTRACK = 10, MAXMVDSTRIPHITS = 500, MAXMVDSTRIPHITSINTRACK = 10, MAXMVDTRACKSPEREVENT = 400,
   130     MAXSCITILHITSINTRACK = 2,               
   131     MAXSTTHITS = 900, MAXSTTHITSINTRACK = 40, MAXTRACKSPEREVENT = 200,
   133     NFIDIVCONFORMAL = 282, NRDIVCONFORMAL = 10,
   134                        NUMBER_STRAWS = 4542; 
   137   bool doMcComparison, fSingleHitListStt[MAXSTTHITS], iplotta, fMvdAloneTracking, fYesCleanMvd, fYesCleanStt, fYesSciTil, fInclusionListStt[MAXSTTHITS],
   138     fInclusionListSciTil[MAXSCITILHITS], finMvdTrackCandPixel[MAXMVDPIXELHITS], finMvdTrackCandStrip[MAXMVDSTRIPHITS], fTypeConf[MAXTRACKSPEREVENT];
   142   char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
   144   Short_t fnAxialOuterRight, 
   149     fListAxialOuterRight[NUMBER_STRAWS], 
   150     fListAxialInnerRight[NUMBER_STRAWS], 
   151     fListAxialOuterLeft[NUMBER_STRAWS],  
   152     fListAxialInnerLeft[NUMBER_STRAWS],  
   156     fListSkewRight[NUMBER_STRAWS], 
   157     fListSkewLeft[NUMBER_STRAWS],  
   159     fListHitMvdTrackCand[MAXMVDTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK],
   160     fListHitTypeMvdTrackCand[MAXMVDTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK], fListMvdDSPixelHitNotTrackCand[MAXMVDPIXELHITS],
   161     fListMvdDSStripHitNotTrackCand[MAXMVDSTRIPHITS], fListMvdPixelHitsinTrack[MAXTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK],
   162     fListMvdStripHitsinTrack[MAXTRACKSPEREVENT][MAXMVDSTRIPHITSINTRACK], fListMvdUSPixelHitNotTrackCand[MAXMVDPIXELHITS], fListMvdUSStripHitNotTrackCand[MAXMVDSTRIPHITS],
   163     fListParContiguous[NUMBER_STRAWS][6], fListSciTilHitsinTrack[MAXTRACKSPEREVENT][MAXSCITILHITSINTRACK], fListSttParHitsinTrack[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK],
   164     fListSttParHits[MAXSTTHITS], fListSttSkewHitsinTrack[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK], fListSttSkewHitsinTrackSolution[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK],
   165     fListSttSkewHits[MAXSTTHITS], fListTrackCandHit[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK + MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK + MAXSCITILHITSINTRACK],
   168     fListTrackCandHitType[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK + MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK + MAXSCITILHITSINTRACK], fnHitMvdTrackCand[MAXMVDTRACKSPEREVENT],
   169     fnMCTracks, fMCtrack_of_Pixel[MAXMVDPIXELHITS], fMCtrack_of_Strip[MAXMVDSTRIPHITS], fnMvdDSPixelHitNotTrackCand, fnMvdDSStripHitNotTrackCand, fnMvdPixelHit,
   170     fnMvdPixelHitsinTrack[MAXTRACKSPEREVENT], fnMvdStripHit, fnMvdStripHitsinTrack[MAXTRACKSPEREVENT], fnMvdTrackCand, fnMvdUSPixelHitNotTrackCand, fnMvdUSStripHitNotTrackCand,
   171     fnParContiguous[NUMBER_STRAWS], fnSciTilHits, fnSciTilHitsinTrack[MAXTRACKSPEREVENT], fnSttParHitsinTrack[MAXTRACKSPEREVENT], fnSttSkewHitsinTrack[MAXTRACKSPEREVENT],
   172     fnTrackCandHit[MAXTRACKSPEREVENT], fStrawCode[NUMBER_STRAWS], fStrawCode2[NUMBER_STRAWS], fTubeID[MAXSTTHITS];
   174   int fNevents_to_plot, istampa, IVOLTE;
   176   Double_t fALFA[MAXTRACKSPEREVENT], fBETA[MAXTRACKSPEREVENT], fBFIELD,
   178     fCandidatePixelDriftRadius[MAXMVDPIXELHITS], fCandidatePixelErrorDriftRadius[MAXMVDPIXELHITS], fCandidatePixelS[MAXMVDPIXELHITS], fCandidatePixelZ[MAXMVDPIXELHITS],
   180     fCandidateStripDriftRadius[MAXMVDSTRIPHITS], fCandidateStripErrorDriftRadius[MAXMVDSTRIPHITS], fCandidateStripS[MAXMVDSTRIPHITS], fCandidateStripZ[MAXMVDSTRIPHITS],
   182     fCandidateSciTilDriftRadius, fCandidateSciTilErrorDriftRadius, fCandidateSciTilS, fCandidateSciTilZ,
   184     fCandidateSkewS[2 * MAXSTTHITS],      
   185     fCandidateSkewZ[2 * MAXSTTHITS],      
   186     fCandidateSkewZDrift[2 * MAXSTTHITS], 
   187     fCandidateSkewZError[2 * MAXSTTHITS], 
   189     fCosine[LEGIANDRE_NTHETADIV], fCxMC[MAXMCTRACKS], fCyMC[MAXMCTRACKS], fDELTATHETA, fFimin, fGAMMA[MAXTRACKSPEREVENT], fMCSkewAloneX[MAXSTTHITS], fMCSkewAloneY[MAXSTTHITS],
   190     fMCtruthTrkInfo[15][MAXMCTRACKS], fOx[MAXTRACKSPEREVENT], fOy[MAXTRACKSPEREVENT], fposizSciTil[MAXSCITILHITS][3], fpSciTilx[MAXSCITILHITS], fpSciTily[MAXSCITILHITS],
   191     fpSciTilz[MAXSCITILHITS], fR[MAXTRACKSPEREVENT], frefindexMvdPixel[MAXMVDPIXELHITS], frefindexMvdStrip[MAXMVDSTRIPHITS], fradiaConf[NRDIVCONFORMAL], fR_MC[MAXMCTRACKS],
   192     fsigmaXMvdPixel[MAXMVDPIXELHITS], fsigmaYMvdPixel[MAXMVDPIXELHITS], fsigmaZMvdPixel[MAXMVDPIXELHITS], fsigmaXMvdStrip[MAXMVDSTRIPHITS], fsigmaYMvdStrip[MAXMVDSTRIPHITS],
   193     fsigmaZMvdStrip[MAXMVDSTRIPHITS], fSinus[LEGIANDRE_NTHETADIV], fS_SciTilHitsinTrack[MAXTRACKSPEREVENT][MAXSCITILHITS], fxTube[NUMBER_STRAWS], fxxyyTube[NUMBER_STRAWS],
   194     fyTube[NUMBER_STRAWS], fzTube[NUMBER_STRAWS], fXMvdPixel[MAXMVDPIXELHITS], fXMvdStrip[MAXMVDSTRIPHITS], fYMvdPixel[MAXMVDPIXELHITS], fYMvdStrip[MAXMVDSTRIPHITS],
   195     fZMvdPixel[MAXMVDPIXELHITS], fZMvdStrip[MAXMVDSTRIPHITS];
   199   Double_t fctime, fctime2, frtime, frtime2;
   200   TStopwatch ftimer, ftimer2;
   205   FILE *HANDLE, *HANDLE2;
   207   TH1F *hdeltaRPixel, *hdeltaRStrip, *hdeltaRPixel2, *hdeltaRStrip2;
   235     *fSttMvdPndTrackCandArray,
   237     *fSttMvdPndTrackArray;
   241   void Initialization_ClassVariables();
   243   bool AcceptHitsConformal(Double_t distance,
   248   Short_t AssociateBetterAfterFitSkewHitsToXYTrack(Short_t TemporarynSttSkewhitinTrack, 
   249                                                    Short_t SkewList[][2],               
   259                                                    Double_t *temporeZDrift,             
   260                                                    Double_t *temporeZError,             
   264   Short_t AssociateSciTilHit(Double_t Oxx, Double_t Oyy, Double_t Rr,
   269   Short_t AssociateSkewHitsToXYTrack(
bool *InclusionListSkew, Short_t NSkewhits, Short_t *infoskew, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t *WDX,
   270                                      Double_t *WDY, Double_t *WDZ, Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge,
   271                                      Short_t SkewList[][2], 
   279   Short_t AssociateSkewHitsToXYTrack2(
bool *InclusionListSkew, Short_t NSkewhits, Short_t *infoskew, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t *WDX,
   280                                       Double_t *WDY, Double_t *WDZ, Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge,
   281                                       Short_t SkewList[][2], 
   289   bool BadTrack_ParStt(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge,
   292                        Double_t Ycross[2], Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t 
cut, Short_t maxnum,
   297   void CalculateSinandCosin();
   299   void CollectParSttHitsagain(
Vec<bool> &keepit, 
Vec<bool> &Mvdhits, Double_t info[][7], Short_t nSttParHit, Short_t StartTrackCand, Short_t EndTrackCand, Double_t *KAPPA,
   300                               Double_t *FI0, Double_t *Fi_low_limit, Double_t *Fi_up_limit,
   301                               Short_t *fnSttParHitsinTrack,                       
   302                               Short_t fListSttParHitsinTrack[][MAXSTTHITSINTRACK] 
   305   Short_t CompareTracks(Short_t first_track, Short_t second_track);
   307   bool EliminateClones(Short_t nTotalCandidates, 
   312   void EliminateSpuriousSZ_bis(Short_t ncand, Short_t MaxTurnofTracks, Double_t signPz, Double_t *SchosenPixel, Double_t *SchosenStrip, Double_t *SchosenSkew,
   313                                Double_t *ZchosenPixel, Double_t *ZchosenStrip, Double_t *ZchosenSkew, Double_t *ErrorchosenPixel, Double_t *ErrorchosenStrip,
   314                                Double_t *ErrorchosenSkew, Double_t KAPPA, Double_t FI0, Double_t Rr);
   316   void EliminateSpuriousSZ_ter(Short_t ncand, Short_t MaxTurnofTracks, Double_t signPz, Double_t *SchosenPixel, Double_t *SchosenStrip, Double_t *SchosenSkew,
   317                                Double_t *ZchosenPixel, Double_t *ZchosenStrip, Double_t *ZchosenSkew, Double_t *ErrorchosenPixel, Double_t *ErrorchosenStrip,
   318                                Double_t *ErrorchosenSkew, Double_t KAPPA, Double_t FI0, Double_t Rr);
   320   void FindCharge(Double_t oX, Double_t oY, Short_t nHits, Double_t *X, Double_t *Y, Short_t *Charge);
   322   Short_t FindTrackStrictCollection(Short_t NFiCELLDISTANCE,
   326                                     Short_t NParallelToSearch, Short_t *ListHitsinTrackinWhichToSearch, 
bool *InclusionList, Short_t *FiConformalIndex,
   327                                     Short_t *OutputListHitsinTrack);
   329   void GetVolumeCharacteristics(TGeoVolume *tgeovol, TGeoHMatrix *mat, Double_t GlobalScal[3], Double_t GlobalTrans[3], Double_t GlobalRot[9]);
   331   void FixDiscontinuitiesFiangleinSZplane(Short_t TemporarynSkewHitsinTrack, 
Vec<Double_t> &S, Double_t *Fi_initial_helix_referenceframe, Short_t Charge);
   333   void InfoXYZParal(Double_t info[][7], Short_t infopar, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t KAPPA, Double_t FI0, Short_t Charge,
   337   void Initial_SttParHits_DecreasingR_Ordering(Double_t info[][7], Short_t *ListSttParHi, Int_t nSttParHit);
   339   void LoadPndTrack_TrackCand(
bool *keepit, 
bool *SttSZfit, Short_t nTotalCandidates, Short_t *Charge, Int_t nSttTrackCand, Double_t *FI0, Double_t *KAPPA, Double_t info[][7],
   340                               Double_t SchosenSkew[][MAXSTTHITS], Double_t ZchosenSkew[][MAXSTTHITS], Short_t *daTrackFoundaTrackMC);
   342   void LoadSZetc_forSZfit(Short_t ncand, 
   350                           Double_t *ErrorDriftRadiusbis,   
   352                           Double_t *DriftRadiusbis,        
   359   void LoadSZetc_forSZfit2(Short_t ncand, 
   362                            Double_t *TemporaryZ,      
   363                            Double_t *TemporaryZDrift, 
   364                            Double_t *TemporaryZError, 
   367                            Double_t *ErrorDriftRadiusbis,   
   369                            Double_t *DriftRadiusbis,        
   376   void MakeInclusionListStt(Int_t nSttHit, Short_t *TubeID, Double_t info[][7]);
   378   void MatchMvdHitsToSttTracks(
Vec<bool> &keepit, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst, 
Vec<Short_t> &CHARGE,
   379                                Short_t *nPixelHitsinTrack,                             
   380                                Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], 
   381                                Short_t *nStripHitsinTrack,                             
   382                                Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]  
   385   void MatchMvdHitsToSttTracksagain(
Vec<bool> &keepit, 
Vec<bool> &Mvdhits, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst,
   388                                     Short_t *nPixelHitsinTrack,                             
   389                                     Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], 
   390                                     Short_t *nStripHitsinTrack,                             
   391                                     Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]  
   394   void MatchMvdHitsToSttTracks2(
bool *keepit, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst, Short_t *CHARGE,
   395                                 Short_t *nPixelHitsinTrack,                             
   396                                 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], 
   397                                 Short_t *nStripHitsinTrack,                             
   398                                 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]  
   402   OrderingConformal_Loading_ListTrackCandHit(
bool *keepit, Short_t ncand, Double_t info[][7], Double_t Trajectory_Start[][2], Short_t *CHARGE, Double_t SchosenSkew[][MAXSTTHITS]);
   404   void OrderingR_Loading_ListTrackCandHit(
bool *keepit, Short_t ncand, Double_t info[][7]);
   406   void OrderingSttSkewandSttParallel(Double_t oX, Double_t oY, Double_t Rr, Short_t nSkewhit, Short_t *ListSkewHits,
   410                                      Short_t Charge, Short_t nParHits, Short_t *ListParHits, Double_t *U, Double_t *V,
   415   void OrderingUsingConformal(Double_t oX, Double_t oY, Double_t Traj_Sta[2], Int_t nHits,
   420   void Ordering_Loading_ListTrackCandHit(
   422     bool *keepit, Short_t FirstCandidate, Short_t LastCandidate, Double_t info[][7], Double_t Trajectory_Start[][2],
   424     Short_t *CHARGE, Double_t SchosenSkew[][MAXSTTHITS]);
   425   void RefitMvdStt(Short_t nCandHit, Short_t *fListTrackCandHit, Short_t *fListTrackCandHitType, Double_t info[][7], Double_t rotationangle, Double_t trajectory_vertex[2],
   433   void StartFromSciTil(Short_t *Charge, Short_t *FiConformalIndex, Double_t *Fi_final_helix_referenceframe, Double_t *Fi_initial_helix_referenceframe, Double_t *Fi_low_limit,
   434                        Double_t *Fi_up_limit, Short_t HitsinBoxConformal[][NRDIVCONFORMAL][NFIDIVCONFORMAL], Double_t info[][7], Double_t infoparalConformal[][5],
   435                        Short_t nBoxConformal[][NFIDIVCONFORMAL], Int_t nSttParHit, Int_t &nSttTrackCand, Short_t *RConformalIndex, Double_t *trajectory_vertex, Double_t *UU,
   438   void SeparateInnerOuterParallel(
   441     Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t RStrawDetInnerParMax,
   444     Short_t *nInnerHits, Short_t *ListInnerHits, Short_t *nOuterHits, Short_t *ListOuterHits,
   446     Short_t *nInnerHitsLeft, Short_t *ListInnerHitsLeft, Short_t *nInnerHitsRight, Short_t *ListInnerHitsRight,
   448     Short_t *nOuterHitsLeft, Short_t *ListOuterHitsLeft, Short_t *nOuterHitsRight, Short_t *ListOuterHitsRight);
   450   bool SttParalCleanup(Double_t GAP, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t FI0, Double_t FiLimitAdmissible, Short_t nHits,
   451                        Short_t *Listofhits, Double_t info[][7], Double_t RStrawDetMin, Double_t RStrawDetInnerParMax, Double_t RStrawDetOuterParMin, Double_t RStrawDetMax);
   453   bool SttSkewCleanup(Double_t GAP, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t FI0, Double_t FiLimitAdmissible, Short_t nHits,
   454                       Short_t *Listofhits, Double_t *S, Double_t info[][7], Double_t RminStrawSkew, Double_t RmaxStrawSkew, Double_t 
cut, Short_t maxnum);
   456   bool TrackCleanup(Double_t GAP, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t Start[3], Short_t &nHitsPar, Short_t *ListHitsPar,
   457                     Short_t &nHitsSkew, Short_t *ListHitsSkew, Double_t *auxS, Double_t info[][7], Double_t RStrawDetMin, Double_t ApotemaMaxInnerPar, Double_t ApotemaMinSkew,
   458                     Double_t ApotemaMaxSkew, Double_t ApotemaMinOuterPar, Double_t RStrawDetMax);
   460   Short_t TrkAssociatedParallelHitsToHelixQuater(
bool *ExclusionList, Double_t 
m, Double_t q, Short_t Status, Short_t nHitsinTrack, Short_t *ListHitsinTrack, Int_t NhitsParallel,
   461                                                  Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t infoparalConformal[][5], Short_t *RConformalIndex,
   462                                                  Short_t *FiConformalIndex, Short_t nBoxConformal[][NFIDIVCONFORMAL], Short_t HitsinBoxConformal[][NRDIVCONFORMAL][NFIDIVCONFORMAL],
   463                                                  Short_t *auxListHitsinTrack);
   465   Short_t TrkAssociatedParallelHitsToHelix5(
bool *ExclusionList, Int_t NhitsParallel, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t Fi_low, Double_t Fi_up,
   466                                             Short_t *auxListHitsinTrack);
   468   void StoreSZ_MvdScitil(Short_t ncand);
 void SetEventsToPlot(int nev)
 
void SetPersistency(Bool_t val=kTRUE)
 
virtual void Exec(Option_t *opt)
 
virtual InitStatus Init()
 
#define BOCA_90DEGREES_DIVISIONS
 
void SetPersistence(Bool_t persistence)
 
void SetInputBranchName(const char *string1, const char *string2, const char *string3)
 
void NoMvdAloneTracking()
 
void YesMvdAloneTracking()