#ifndef PNDTRKCOMBILEGENDRETASK_H #define PNDTRKCOMBILEGENDRETASK_H #include "PndTrkLegendreTransform.h" #include "PndTrkCombiLegendreTransform.h" // fairroot #include "FairTask.h" // pandaroot #include "PndTrack.h" #include "PndMCTrack.h" // stt #include "PndGeoSttPar.h" #include "PndSttHit.h" #include "PndSttMapCreator.h" // tracking #include "PndTrkSttHitList.h" #include "PndTrkSdsHitList.h" #include "PndTrkCluster.h" #include "PndTrkClusterList.h" #include "PndTrkTrack.h" #include "PndTrkConformalHitList.h" #include "PndTrkFitter.h" #include "PndTrkNeighboringMap.h" // ROOT #include "TH2F.h" #include "TCanvas.h" #define MAXNOFHITS 1000 // CHECK class TClonesArray; class TObjectArray; class PndTrkLegendreTransform; class PndTrkCombiLegendreTransform; class PndTrkConformalTransform; class PndTrkCombiLegendreTask : public FairTask { public: /** Default constructor **/ PndTrkCombiLegendreTask(); PndTrkCombiLegendreTask(int verbose); /** Destructor **/ ~PndTrkCombiLegendreTask(); /** Virtual method Init **/ virtual InitStatus Init(); /** Virtual method Exec **/ virtual void Exec(Option_t* opt); void SetParContainers(); void Initialize(); void Reset(); inline void SwitchOnDisplay() { fDisplayOn = kTRUE; } inline void SwitchOnSeeMC() { fSeeMC = kTRUE; } void DrawGeometry(int cpad = 1); void DrawSttGeometry(); void DrawHits(PndTrkHitList *hitlist); void DrawLists(); void DrawNeighborings(); void DrawNeighboringsToHit(PndTrkHit *hit); void Refresh(); void RefreshConf(); void DrawGeometryConf(double x1, double x2, double y1, double y2) ; void DrawConfHit(double x, double y, double r, int marker = 2); void LightCluster(PndTrkCluster *cluster); void DrawLegendreHisto(); void ComputePlaneExtremities(PndTrkCluster *cluster); Int_t FillConformalHitList(PndTrkCluster *cluster); void FillLegendreHisto(PndTrkCluster *cluster); void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]); PndTrkHit *FindSttReferenceHit(int isec = -1); PndTrkHit *FindMvdPixelReferenceHit(); PndTrkHit *FindMvdStripReferenceHit(); PndTrkHit *FindMvdReferenceHit(); PndTrkHit *FindReferenceHit(); PndTrkHit *FindReferenceHit(PndTrkCluster *cluster, bool keeprefhit); void RePrepareLegendre(PndTrkCluster *cluster); /* void PrepareLegendre(); */ /* Int_t ApplyLegendre(double &theta_max, double &r_max); */ Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max); Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max); void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R); void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp); void SearchSecondaryTracks() { fSecondary = kTRUE; } PndTrkClusterList CreateFullClusterization(); PndTrkClusterList CreateFullClusterization2(); Int_t CountTracksInCluster(PndTrkCluster *cluster, int *noftracksinlayer); Int_t CountTracksInSkewSector(PndTrkCluster *cluster, int *noftracksinlayer); Int_t CountTracksInCluster(PndTrkCluster *cluster, Int_t where, int *noftracksinlayer); Int_t ClusterToConformal(PndTrkCluster *cluster, bool samerefhit); PndTrkTrack *LegendreFit(PndTrkCluster *cluster); PndTrkTrack *LegendreFitWithRecovering(PndTrkCluster *cluster); PndTrkCluster *CreateClusterAroundTrack(PndTrkTrack *track); PndTrkCluster *CreateClusterAroundTrack2(PndTrkTrack *track); PndTrkCluster *CreateClusterAroundTrack3(PndTrkTrack *track); Bool_t DoesBelong(PndTrkHit *hit, double xc, double yc, double R); void AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq); void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2); void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R); void IntersectionFinder(PndTrkConformalHit *chit, double fitm, double fitp); Double_t ComputePerpendicularChi2(PndTrkCluster *cluster, double fitm, double fitp); void FillHitMap(); void FillPeakCouplesHisto(PndTrkCluster *cluster); void FillPeakNeighCouplesHisto(PndTrkCluster *cluster); PndTrkCluster *ComputeSkewedXYZ(PndTrkCluster *cluster); void CleanTrack(PndTrkTrack *track); private: Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits; /** Input array of PndSttPoints **/ TClonesArray* fSttPointArray; /** Input array of PndSttHit **/ TClonesArray* fSttHitArray; /** Input array of PndSdsPoint **/ TClonesArray* fMvdPointArray; /** Input array of MvdPixelHitArray **/ TClonesArray* fMvdPixelHitArray; /** Input array of MvdStripHitArray **/ TClonesArray* fMvdStripHitArray; TClonesArray* fTrackArray, * fTrackCandArray; TClonesArray* fTubeArray; PndGeoSttPar *fSttParameters; // CHECK added char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200]; PndSttMapCreator *fMapper; Int_t fEventCounter; // , fVerbose; PndTrkSttHitList *stthitlist; PndTrkSdsHitList *mvdpixhitlist; PndTrkSdsHitList *mvdstrhitlist; Double_t fSttParalDistance, fSttToMvdStripDistance; double fDeltaThetaRad; // TSpectrum2 *s; PndTrkLegendreTransform *legendre; PndTrkCombiLegendreTransform *legendrecombi; Bool_t fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fSecondary, fInitDone; Int_t fRecoverIteration; PndTrkConformalTransform *conform; PndTrkConformalHitList *conformalhitlist; PndTrkTools *tools; PndTrkHit *fRefHit; Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit; std::vector< std::pair > fFoundPeaks; double fTime; TStopwatch *fTimer; PndTrkFitter *fFitter; PndTrkNeighboringMap *fHitMap; double fUmin, fUmax, fVmin, fVmax, fRmin, fRmax, fThetamin, fThetamax; // display Bool_t fDisplayOn; Bool_t fSeeMC; TH2F *hxy, *hxz, *hzphi; TCanvas *display; TH2F *huv; ClassDef(PndTrkCombiLegendreTask,1); }; #endif