]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/TRD/AliTRDresolution.h
Changes in drawing macros:
[u/mrichter/AliRoot.git] / PWGPP / TRD / AliTRDresolution.h
1 #ifndef ALITRDRESOLUTION_H
2 #define ALITRDRESOLUTION_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id: AliTRDresolution.h 27496 2008-07-22 08:35:45Z cblume $ */
7
8 ////////////////////////////////////////////////////////////////////////////
9 //                                                                        //
10 //  TRD Resolution performance                                            //
11 //                                                                        //
12 //  Authors:                                                              //
13 //    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
14 //    Markus Fasel <M.Fasel@gsi.de>                                       //
15 //                                                                        //
16 ////////////////////////////////////////////////////////////////////////////
17
18 #ifndef ALITRDRECOTASK_H
19 #include "AliTRDrecoTask.h"
20 #endif
21
22 #ifndef Root_TNamed
23 #include "TNamed.h"
24 #endif
25
26 class TH1;
27 class TH2;
28 class TF1;
29 class TGraphErrors;
30 class TObjArray;
31 class TDatabasePDG;
32 class AliTRDrecoParam;
33 class AliTRDseedV1;
34 class AliTRDtrackInfo;
35 class AliTrackPoint;
36 class AliTRDresolution : public AliTRDrecoTask
37 {
38 public:
39   enum ETRDresolutionSteer {
40      kVerbose    = BIT(18) // switch verbosity
41     ,kVisual     = BIT(19) // show partial results during processing
42     ,kTrackRefit = BIT(20) // steer track refit
43     ,kTrackSelect= BIT(21) // steer track selection
44     ,kXchange    = BIT(22) // use exchange containers
45   };
46   enum ETRDresolutionSlots {
47      kClToTrk    = 2
48     ,kClToMC
49     ,kTrkltToTrk
50     ,kTrkltToMC
51     ,kNSlots     = 4
52   };
53   enum ETRDresolutionClass {
54      kDetector=0      // cluster - detector
55     ,kCluster         // cluster - track
56     ,kTracklet        // tracklet - track residuals/pulls
57     ,kTrackIn         // tracklet - track residuals/pulls at lower TRD entrance
58     ,kMCcluster       // cluster-mc resolution/pulls
59     ,kMCtracklet      // tracklet-mc resolution/pulls
60     ,kMCtrackIn       // TPC track monitor
61     ,kMCtrack         // TRD track monitor
62 /*    ,kTrackOut        // tracklet - track residuals/pulls at lower TRD entrance during refit
63     ,kMCtrackOut      // TOF/HMPID track monitor*/
64     ,kNclasses        // total number of resolution classes
65     ,kV0TrackIn       // tracklet - track residuals/pulls at lower TRD entrance for V0 tagged tracks
66   };
67   enum ETRDresolutionClassProjs {
68     kDetNproj=460      // detector projections
69     ,kClNproj=2800     // cluster projections
70     ,kTrkltNproj=8000  // tracklet projections
71     ,kTrkInNproj=1440  // trackIn projections
72     ,kTrkNproj=2500    // track projections
73     ,kMCTrkInNproj=1260// trackIn projections
74   };
75   enum ETRDresolutionProjs {
76     kBC    = 0 // bunch cross
77     ,kPhi
78     ,kEta
79     ,kYrez
80     ,kPrez
81     ,kZrez
82     ,kSpeciesChgRC
83     ,kPt
84     ,kNdim  // no of dimensions in the THnSparse
85     ,kNdimDet     = 4
86     ,kNdimCl      = 4
87     ,kNdimTrklt   = 4
88     ,kNdimTrkIn   = 7
89     ,kNbunchCross = 3  // no of classes for bunch crossing
90     ,kNspc        = 3  // no of species e, mu+pi, K+p
91     ,kNcharge     = 2  // no of charges
92     ,kNpads       = 4  // no of charges
93   };
94
95   AliTRDresolution();
96   AliTRDresolution(char* name, Bool_t xchange=kTRUE);
97   AliTRDresolution(const AliTRDresolution&);
98   AliTRDresolution& operator=(const AliTRDresolution&);
99   virtual ~AliTRDresolution();
100   
101   static Bool_t   FitTrack(const Int_t np, AliTrackPoint *points, Float_t params[10]);
102   static Bool_t   FitTracklet(const Int_t ly, const Int_t np, const AliTrackPoint *points, const Float_t trackPars[10], Float_t trackletPars[3]);
103   void            UserCreateOutputObjects();
104 //  Float_t GetCorrectionX(Int_t det, Int_t tb) const {return fXcorr[det][tb];}
105   static void     GetRangeZ(TH2 *h2, Float_t &m, Float_t &M);
106   Float_t         GetPtThreshold() const {return fPtThreshold;}
107   Bool_t          GetRefFigure(Int_t ifig);
108
109   virtual TObjArray*  Histos(); 
110 //  Bool_t  Load(const Char_t *file = "AnalysisResults.root", const Char_t *dir="TRD_Performance");
111 //  Bool_t  LoadCorrection(const Char_t *file=NULL);
112   void            MakeSummary();
113
114   TObjArray*      Results(ETRDresolutionClass c) const  { if(!fProj) return NULL; return (TObjArray*)fProj->At(c);}
115   void            UserExec(Option_t * opt);
116   void            InitExchangeContainers();
117 /*  Bool_t          HasTrackRefit() const                 { return TestBit(kTrackRefit);}
118   Bool_t          HasTrackSelection() const             { return TestBit(kTrackSelect);}*/
119   Bool_t          IsVerbose() const                     { return TestBit(kVerbose);}
120   Bool_t          IsVisual() const                      { return TestBit(kVisual);}
121   Bool_t          UseBCselectTOF() const                { return fBCbinTOF>0;}
122   Bool_t          UseBCselectFill() const               { return fBCbinFill>0;}
123   Bool_t          UseLYselectTrklt() const              { return fLYselect>=0;}
124   Bool_t          UseExchangeContainers() const         { return TestBit(kXchange);}
125   Bool_t          PostProcess();
126
127   TH1*            DetCluster(const TObjArray *cl=NULL);
128   TH1*            PlotCluster(const AliTRDtrackV1 *t=NULL);
129   TH1*            PlotTracklet(const AliTRDtrackV1 *t=NULL);
130   TH1*            PlotTrackIn(const AliTRDtrackV1 *t=NULL);
131 //  TH1*            PlotTrackOut(const AliTRDtrackV1 *t=NULL);
132   TH1*            PlotMC(const AliTRDtrackV1 *t=NULL);
133
134   static Bool_t   Process(TH2* const /*h2*/, TGraphErrors **/*g*/, Int_t stat=100){ return Bool_t(stat);}
135   void            SetPtThreshold(Float_t pt)            { fPtThreshold = pt;}
136   void            SetBCselectTOF(Int_t b=0)             { fBCbinTOF = b;}
137   void            SetBCselectFill(Int_t b=0)            { fBCbinFill = b<0||b>3499?1:b+1;}
138   void            SetBsign(Int_t b=0)                   { fBsign = Bool_t(b);}
139   void            SetLYselect(Int_t ly=0)               { fLYselect = ly;}
140   void            SetProcesses(Bool_t det, Bool_t cl, Bool_t trklt, Bool_t trkin);
141   void            SetDump3D(Bool_t det, Bool_t cl, Bool_t trklt, Bool_t trkin);
142   void            SetVerbose(Bool_t v = kTRUE)          { SetBit(kVerbose, v);}
143   void            SetVisual(Bool_t v = kTRUE)           { SetBit(kVisual, v);}
144 /*  void            SetTrackRefit(Bool_t v = kTRUE)       { SetBit(kTrackRefit, v);}
145   void            SetTrackSelection(Bool_t v = kTRUE)   { SetBit(kTrackSelect, v);}*/
146   void            SetUseExchangeContainers(Bool_t v = kTRUE) { SetBit(kXchange, v);}
147
148   void            Terminate(Option_t * opt);
149   static Bool_t   UseTrack(const Int_t np, const AliTrackPoint *points, Float_t params[10]);
150
151   void        AdjustF1(TH1 *h, TF1 *f);
152   TH2*        DrawSigma(TH2 *h2, const Char_t *t, Float_t m=0., Float_t M=-1., Float_t scale=1);
153   void        GetLandauMpvFwhm(TF1 * const f, Float_t &mpv, Float_t &xm, Float_t &xM);
154   void        GetRange(TH2 *h2, Char_t mod, Float_t *range);
155
156 protected:
157   Bool_t      HasDump3DFor(ETRDresolutionClass cls) const { return TESTBIT(fSteer, 4+cls);}
158   Bool_t      HasProcess(ETRDresolutionClass cls) const   { return TESTBIT(fSteer, cls);}
159   Bool_t      MakeProjectionDetector();
160   Bool_t      MakeProjectionCluster(Bool_t mc=kFALSE);
161   Bool_t      MakeProjectionTracklet(Bool_t mc=kFALSE);
162   Bool_t      MakeProjectionTrackIn(Bool_t mc=kFALSE, Bool_t v0=kFALSE);
163   Bool_t      MakeProjectionTrack();
164   Bool_t      Process(TH2* const /*h2*/, TF1 */*f*/, Float_t /*k*/, TGraphErrors **/*g*/) { return kTRUE;}
165   Bool_t      Pulls(Double_t dyz[2], Double_t cc[3], Double_t tilt) const;
166
167   UShort_t              fSteer;           // bit map to steer internal behaviour of class
168                                           // MakeProjection [kTrackIn kTracklet kCluster kDetector]
169                                           // Dump3D [4+kTrackIn 4+kTracklet 4+kCluster 4+kDetector]
170   Float_t               fPtThreshold;     // pt threshold for some performance plots
171   Int_t                 fBCbinTOF;        // set/select by TOF BC index
172   Int_t                 fBCbinFill;       // set/select by Bunch Fill index
173   Int_t                 fLYselect;        // select layer for Tracklet projections (in debug mode)
174   Bool_t                fBsign;           // sign of magnetic field (kFALSE[-] kTRUE[+])
175   static Char_t const  *fgPerformanceName[kNclasses]; //! name of performance plot
176   static Int_t const    fgkNbins[kNdim];  //! no of bins/projection
177   static Double_t const fgkMin[kNdim];    //! low limits for projections
178   static Double_t const fgkMax[kNdim];    //! high limits for projections
179   static Char_t const  *fgkTitle[kNdim];  //! title of projection
180   TObjArray            *fProj;            //! result holder - sigma values
181   TDatabasePDG         *fDBPDG;           //! PDG database
182
183   // calibration containers
184   TObjArray            *fCl;              //! cluster2track calib
185   TObjArray            *fMCcl;            //! cluster2mc calib
186   
187   ClassDef(AliTRDresolution, 11) // TRD tracking resolution task
188 };
189 #endif