Moving PWG1 to PWGPP
[u/mrichter/AliRoot.git] / PWGPP / ITS / AliAnalysisTaskITSAlignQA.h
1 #ifndef ALIANALYSISTASKITSALIGNQA
2 #define ALIANALYSISTASKITSALIGNQA
3
4 /* Copyright(c) 1998-2012, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 //*************************************************************************
8 // Class AliAnalysiTaskITSAlignQA
9 // AliAnalysisTaskSE to extract from ESD + ESDfriends 
10 // the track-to-point residuals and dE/dx vs, time for SDD modules
11 //
12 // Author: F. Prino, prino@to.infn.it
13 //*************************************************************************
14
15 class TList;
16 class TH1F;
17 class TH2F;
18 class TProfile;
19 class TTree;
20 class TString;
21 class AliESDEvent;
22 class AliESDfriend;
23 class AliITSTPArrayFit;
24 class AliTrackPointArray;
25
26 #include "AliAnalysisTaskSE.h"
27
28 class AliAnalysisTaskITSAlignQA : public AliAnalysisTaskSE {
29
30  public:
31   enum {kEvAll=0,kEvCnt,kEvVtx,kEvPlp,kNTracks,kNEvStatBins,  kEvAcc=kEvPlp};
32   AliAnalysisTaskITSAlignQA();
33   virtual ~AliAnalysisTaskITSAlignQA();
34
35   virtual void   UserExec(Option_t *option);
36   virtual void   UserCreateOutputObjects();
37   virtual void   Terminate(Option_t *option);
38
39   void SetDoSPDResiduals(Bool_t opt){
40     fDoSPDResiduals=opt;
41   }
42   void SetDoSDDResiduals(Bool_t opt){
43     fDoSDDResiduals=opt;
44   }
45   void SetDoSSDResiduals(Bool_t opt){
46     fDoSSDResiduals=opt;
47   }
48   void SetDoSDDdEdxCalib(Bool_t opt){
49     fDoSDDdEdxCalib=opt;
50   }
51   void SetDoSDDVDriftCalib(Bool_t opt){
52     fDoSDDVDriftCalib=opt;
53   }
54   void SetDoSDDDriftTime(Bool_t opt){
55     fDoSDDDriftTime=opt;
56   }
57   void SetDoAllResiduals(){
58     fDoSPDResiduals=kTRUE;
59     fDoSDDResiduals=kTRUE;
60     fDoSSDResiduals=kTRUE;
61   }
62   void SetDoAll(){
63     SetDoAllResiduals();
64     fDoSDDdEdxCalib=kTRUE;    
65   }
66   void SetUseITSstandaloneTracks(Bool_t use){
67     fUseITSsaTracks=use;
68   }
69   void SetLoadGeometryFromOCDB(Bool_t opt){
70     fLoadGeometry=opt;
71   }
72
73   void SetMinITSPoints(Int_t minp=3){
74     fMinITSpts=minp;
75   }
76   void SetMinTPCPoints(Int_t minp=70){
77     fMinTPCpts=minp;
78   }
79   void SetMinPt(Float_t minpt=1.0){
80     fMinPt=minpt;
81   }
82   void SetMinVtxContributors(Int_t n=5)     { fMinVtxContributors = n; }
83   void SetUseVertex(Bool_t v=kTRUE)         { fUseVertex = v; }
84   void SetUseVertexForZOnly(Bool_t v=kTRUE) { fUseVertexForZOnly = v; } // Use the vertex for SDD Z residuals only
85   void SetRemovePileupWithSPD(Bool_t opt=kTRUE) { fRemovePileupWithSPD = opt; }
86   void SetMinMaxMult(Double_t mn=0,Double_t mx=1e9) {fMinMult=mn; fMaxMult=mx;} 
87   void SetOCDBInfo(UInt_t runNb, const char *location) {
88     fRunNb=runNb; 
89     fOCDBLocation=location;
90   }
91
92   Bool_t   AcceptTrack(const AliESDtrack * track);
93   Bool_t   AcceptVertex(const AliESDVertex * vtx, const AliESDVertex * vtxSPD);
94   Bool_t   AcceptCentrality(const AliESDEvent *esd) const;
95   void     CreateSPDHistos();
96   void     CreateSDDHistos();
97   void     CreateSSDHistos();
98
99   void     FitAndFillSPD(Int_t iLayer, const AliTrackPointArray *array, Int_t npts, AliESDtrack * track);
100   void     FitAndFillSDDrphi(const AliTrackPointArray *array, Int_t npts, AliESDtrack * track);
101   void     FitAndFillSDDz(Int_t iLayer, const AliTrackPointArray *array, Int_t npts, AliESDtrack * track);
102   void     FitAndFillSSD(Int_t iLayer, const AliTrackPointArray *array, Int_t npts, AliESDtrack * track);
103   void     SetPtBinLimits(Int_t nBins, Double_t* xbins){
104     fNPtBins=nBins;
105     if(nBins>kMaxPtBins) fNPtBins=kMaxPtBins;
106     for(Int_t iBin=0; iBin<=fNPtBins; iBin++) fPtBinLimits[iBin]=xbins[iBin];
107   }
108   void     LoadGeometryFromOCDB();
109   AliTrackPointArray* PrepareTrack(const AliTrackPointArray* inp, const AliESDVertex* vtx=0);
110   void                PrepareVertexConstraint(const AliESDVertex* vtx, AliTrackPoint &point);
111  private:
112   AliAnalysisTaskITSAlignQA(const AliAnalysisTaskITSAlignQA &source);
113   AliAnalysisTaskITSAlignQA& operator=(const AliAnalysisTaskITSAlignQA &source);
114   
115   enum {kNSPDmods = 240};
116   enum {kNSDDmods = 260};
117   enum {kNSSDmods = 1698};
118   enum {kMaxPtBins = 12};
119   enum {kVtxSensVID=14371};    // dummy VID for "vertex" point
120
121   TList* fOutput;              //! Histos with residuals
122   TH1F*  fHistNEvents;         //! histo with N of events  
123   TH1F*  fHistPtAccept;        //! histo of pt distribution of accepted tracks 
124
125   TH2F*  fHistSPDResidX[kNSPDmods];       //! histos of SPD residuals along Xloc vs. Pt
126   TH2F*  fHistSPDResidZ[kNSPDmods];       //! histos of SPD residuals along Zloc vs. Pt
127   TH2F*  fHistSDDResidX[kNSDDmods];       //! histos of SDD residuals along Xloc vs. Pt
128   TH2F*  fHistSDDResidZ[kNSDDmods];       //! histos of SDD residuals along Zloc vs. Pt
129   TH2F*  fHistSSDResidX[kNSSDmods];       //! histos of SSD residuals along Xloc vs. Pt
130   TH2F*  fHistSSDResidZ[kNSSDmods];       //! histos of SSD residuals along Zloc vs. Pt
131
132   TH2F*  fHistSDDResidXvsX[kNSDDmods];    //! histos of SDD residuals along Xloc vs. Xloc
133   TH2F*  fHistSDDResidXvsZ[kNSDDmods];    //! histos of SDD residuals along Xloc vs. Zloc
134   TH2F*  fHistSDDResidZvsX[kNSDDmods];    //! histos of SDD residuals along Zloc vs. Xloc
135   TH2F*  fHistSDDResidZvsZ[kNSDDmods];    //! histos of SDD residuals along Zloc vs. Zloc
136   TH2F*  fHistSDDdEdxvsDrTime[kNSDDmods]; //! histos of SDD dE/dx vs. drift time
137   TH1F*  fHistSDDDrTimeAll[kNSDDmods];    //! histos of SDD drift time (all clusters)
138   TH1F*  fHistSDDDrTimeExtra[kNSDDmods];  //! histos of SDD drift time (extra clusters)
139   TH1F*  fHistSDDDrTimeAttac[kNSDDmods];  //! histos of SDD drift time (attached clusters)
140   //
141   // RS
142   TProfile* fHProfSDDResidXvsXD[kNSDDmods][2]; // ! profile histos of SDD residuals along Xloc vs. Drift distance, each side separately
143   TProfile* fHProfSDDDrTimevsXD[kNSDDmods][2]; // ! profile histos of SDD drift time vs. Drift distance, each side separately
144   TProfile* fHProfSDDResidXvsZ[kNSDDmods][2];  // ! profile histos of SDD residuals along Xloc vs. Z (anode), each side separately
145   TProfile* fHProfSDDDrTimevsZ[kNSDDmods][2];  // ! profile histos of SDD drift time vs. Z (anode), each side separately
146   //
147   Bool_t   fDoSPDResiduals;   // Flag to enable histos of SPD residuals
148   Bool_t   fDoSDDResiduals;   // Flag to enable histos of SDD residuals
149   Bool_t   fDoSSDResiduals;   // Flag to enable histos of SSD residuals
150   Bool_t   fDoSDDdEdxCalib;   // Flag to enable histos for SDD dE/dx calibration
151   Bool_t   fDoSDDVDriftCalib; // Flag to enable histos for SDD VDrift calibration
152   Bool_t   fDoSDDDriftTime;   // Flag to enable histos for SDD Drift times
153   Bool_t   fUseITSsaTracks;   // Flag for using standalone ITS tracks
154   Bool_t   fLoadGeometry;     // Flag to control the loading of geometry from OCDB
155   Bool_t   fUseVertex;        // Use the vertex as an extra point
156   Bool_t   fUseVertexForZOnly; // Use the vertex for SDD Z residuals only
157   Int_t    fMinVtxContributors; // min N contributors to accept vertex if fUseVertex is on
158   Bool_t   fRemovePileupWithSPD; // Use/not use pileup rejection with SPD
159   Int_t    fMinITSpts;        // Minimum number of ITS points per track
160   Int_t    fMinTPCpts;        // Minimum number of TPC points per track
161   Float_t  fMinPt;            // Minimum pt to accept tracks
162   Int_t    fNPtBins;          // number of pt bins
163   Double_t fMinMult;          // min centrality cut
164   Double_t fMaxMult;          // max centrality cut
165   Double_t fPtBinLimits[kMaxPtBins+1];  // limits of Pt bins
166
167   AliITSTPArrayFit* fFitter;  // Track Point fitter
168   Int_t fRunNb;               // Run number
169   TString fOCDBLocation;      // OCDB location
170
171   ClassDef(AliAnalysisTaskITSAlignQA,5);
172 };
173
174
175 #endif
176
177