]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/TRD/AliTRDcheckESD.h
using AliCDBConnect task in test train of TRD
[u/mrichter/AliRoot.git] / PWG1 / TRD / AliTRDcheckESD.h
index 6dd999bdab080421f53427ca41659a5eecd322ed..02ce30038b97cfc5f3a3838c8463bace464d1683 100644 (file)
 //////////////////////////////////////////////////////
 
 #ifndef ALIANALYSISTASK_H
-#include "AliAnalysisTask.h"
+#include "AliAnalysisTaskSE.h"
 #endif
 
 class AliESDEvent;
 class AliMCEvent;
+class AliESDpid;
+class AliCFContainer;
+class AliAnalysisCuts;
 class TH1;
+class TH2;
+class TH1F;
+class TH1D;
+class TH2F;
+class TH3F;
+class TH3;
 class TObjArray;
 class TGraph;
 class TGraphErrors;
-class AliTRDcheckESD : public AliAnalysisTask {
+class TAxis;
+
+class AliTRDcheckESD : public AliAnalysisTaskSE {
 public:
   enum ETRDcheckESDstatus {
-    kMC = BIT(0)
+     kMC        = BIT(0)  // use MC info
+    ,kCollision = BIT(1)  // 
   };
   enum ETRDcheckESDhistos {
-    kNCl  = 0    // number of clusters per track
-   ,kTRDstat     // TRD tracks status
-   ,kTRDmom      // TRD track momentum
-   ,kNhistos = 3 // number of histograms
-   ,kNgraphs = 6 // number of graphs
+    kNCl = 1                // number of clusters per track
+   ,kTRDstat                // TRD tracks status
+   ,kTRDmom                 // TRD track momentum
+   ,kPtRes                  // Pt resolution @ vertex for TRD
+   ,kTPCVertex              // event vertex from TPC
+   ,kEventVertex            // event vertex
+   ,kNTracksAll             // ntracks - all
+   ,kNTracksAcc             // ntracks - inside acc. and DCA cut
+   ,kNTracksTPC             // additional cut on number of TPC clusters
+   ,kDCAxy                  // transverse DCA 
+   ,kDCAz                   // z - DCA
+   ,kPt1                    // Pt distribution, eta and ptmin cuts
+   ,kPt2                    // Pt distribution, cuts from kPt1 and DCA cuts
+   ,kPt3pos                 // Pt distribution, cuts from kPt2 and cut on TPC clusters for positives (>100)
+   ,kPt3neg                 // Pt distribution, cuts from kPt2 and cut on TPC clusters for negatives (>100)
+   ,kPt4pos                 // Pt distribution, cuts from kPt3pos and at least one TRD tracklet
+   ,kPt4neg                 // Pt distribution, cuts from kPt3neg and at least one TRD tracklet
+   ,kTheta                  // distribution of theta for tracks passing the cuts from kPt4pos and kPt4neg
+   ,kPhi                    // distribution of phi for tracks passing the cuts from kPt4pos and kPt4neg
+   ,kNTPCCl                 // number of TPC clusters, cuts from kPt2
+   ,kNTPCCl2                // number of TPC clusters, cuts from kPt2 + pt>1 GeV/c
+   ,kTPCDedx                // TPC dE/dx, cuts from kPt3pos or kPt3neg
+   ,kEtaPhi                 // (eta,phi) distrib. for tracks after the cuts from kPt3pos or kPt3neg
+   ,kEtaNclsTPC             // (TPC_Ncls,eta) distrib. for tracks after the cuts from kPt3pos or kPt3neg
+   ,kPhiNclsTPC             // (TPC_Ncls,phi) distrib. for tracks after the cuts from kPt3pos or kPt3neg
+   ,kSPDMult                // SPD multiplicity
+   ,kNTrackletsTRD          // (TRD tracklets per track, P) distribution, after cuts from kPt4pos or kPt4neg
+   ,kNClsTrackTRD=kNTrackletsTRD+6    // (TRD clusters per track, P) distribution, after cuts from kPt4pos or kPt4neg
+   ,kPHSlice=kNClsTrackTRD+6         // (slicePH,sliceNo) distribution, after cuts from kPt4pos or kPt4neg
+   ,kPHSliceTPCpions=kPHSlice+6      // (slicePH,sliceNo) distribution for TPC pions, after cuts from kPt4pos or kPt4neg 
+   ,kTPCdedxPions=kPHSliceTPCpions+6     // (TPC dedx,P) for selected TPC pions
+   ,kPHSliceTPCelectrons=kTPCdedxPions+6    // (slicePH,sliceNo) distribution for TPC electrons, after cuts from kPt4pos or kPt4neg
+   ,kTPCdedxElectrons=kPHSliceTPCelectrons+6   // (TPC dedx,P) for selected TPC electrons
+   ,kQtotP=kTPCdedxElectrons+6              // (total Q from slices, momentum) distribution, after cuts from kPt4pos or kPt4neg
+   ,kPropagXYvsP=kQtotP+6       // (X,Y,momentum) distribution after AliESDtrack::PropagateTo(r=300.)
+   ,kPropagRZvsP            // (R,Z,momentum) distribution after AliESDtrack::PropagateTo(r=300.)
+   ,kTPCRefTracksPos        // (eta,detector phi,Pt) distribution of reference TPC positive tracks (fulfill cuts from kPt3pos)
+   ,kTPCRefTracksNeg=kTPCRefTracksPos+6    // (eta,detector phi,Pt) distribution of reference TPC negative tracks (fulfill cuts from kPt3neg)
+   ,kTRDRefTracksPos=kTPCRefTracksNeg+6        // (eta,detector phi,Pt) distribution of reference TRD positive tracks (fulfill cuts from kPt4pos)
+   ,kTRDRefTracksNeg=kTRDRefTracksPos+6        // (eta,detector phi,Pt) distribution of reference TRD negative tracks (fulfill cuts from kPt4neg)
+   ,kTRDRefTracksPos4=kTRDRefTracksNeg+6        // (eta,detector phi,Pt) distribution of reference TRD positive tracks with 4 tracklets (fulfill cuts from kPt4pos)
+   ,kTRDRefTracksNeg4=kTRDRefTracksPos4+6        // (eta,detector phi,Pt) distribution of reference TRD negative tracks with 4 tracklets (fulfill cuts from kPt4neg)
+   ,kTRDRefTracksPos5=kTRDRefTracksNeg4+6
+   ,kTRDRefTracksNeg5=kTRDRefTracksPos5+6
+   ,kTRDRefTracksPos6=kTRDRefTracksNeg5+6
+   ,kTRDRefTracksNeg6=kTRDRefTracksPos6+6
+   ,kTRDEtaPhiAvNtrkl=kTRDRefTracksNeg6+6       // (eta, detector phi) profile of average number of tracklets
+   ,kTRDEtaDeltaPhiAvNtrkl=kTRDEtaPhiAvNtrkl+6  // (eta, delta-phi) profile of average number of tracklets
+                                         // delta-phi is the angle made by the track with the normal to the chamber entrance plane
+   ,kTRDEtaPhiAvQtot=kTRDEtaDeltaPhiAvNtrkl+6      // (eta, detector phi) profile of total tracklet charge from slices                     
+   ,kNhistos = kTRDEtaPhiAvQtot+36      // number of histograms
+   ,kNrefs   = 4  // number of reference plots
+  };
+  enum ETrdCfVariables {
+    kEventVtxZ=0,
+    kEventMult,
+    kEventBC,
+    kTrackTOFdeltaBC,
+    kTrackTOFBC,
+    kTrackDCAxy,
+    kTrackDCAz,
+    kTrackCharge,
+    kTrackPhi,
+    kTrackEta,
+    kTrackPt,
+    kTrackP,
+    kTrackTrdTracklets,
+    kTrackTrdClusters,
+    kTrackQtot,
+    kNTrdCfVariables=kTrackQtot+6
   };
   enum ETRDcheckESDbits {
     kTPCout = 1 // track left TPC
@@ -42,38 +119,87 @@ public:
    ,kTRDout     // track reconstructed in TRD
    ,kTRDpid     // PID calculated in TRD
    ,kTRDref     // track refitted in TRD
-   ,kNbits  = 5 // number of check bits
   };
   AliTRDcheckESD();
+  AliTRDcheckESD(char* name);
   virtual ~AliTRDcheckESD();
   
-  void          ConnectInputData(Option_t *);
-  void          CreateOutputObjects();
-  TGraph*       GetGraph(Int_t id, Option_t *opt="bc");
-  void          Exec(Option_t *);
+  void          UserCreateOutputObjects();
+  Bool_t        GetRefFigure(Int_t ifig);
+  Int_t         GetNRefFigures() const  { return fNRefFigures; } 
+  void          UserExec(Option_t *);
 
+  void          SetRefTrackFilter(AliAnalysisCuts* const filter) {fReferenceTrackFilter = filter;}
+  
   Bool_t        HasMC() const { return TESTBIT(fStatus, kMC);}
+  Bool_t        IsCollision() const {return TESTBIT(fStatus, kCollision);}
+  void          SetCollision(Bool_t set=kTRUE) {set ? SETBIT(fStatus, kCollision) : CLRBIT(fStatus, kCollision);}
   TObjArray*    Histos();
-  Bool_t        Load(const Char_t *fn, const Char_t *name=0x0);
+  AliCFContainer* GetCFContainer() {return fCfContainer;}
+  Bool_t        Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL);
   void          SetMC(Bool_t mc = kTRUE) { mc ? SETBIT(fStatus, kMC) : CLRBIT(fStatus, kMC);}
   Bool_t        PutTrendValue(const Char_t *name, Double_t val);
   void          Terminate(Option_t *);
+  void          MakeSummary(Double_t* trendValues=0x0);
+  void          MakeSummaryFromCF(Double_t* trendValues=0x0, Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);
 
 private:
   static const Float_t fgkxTPC; // end radial position of TPC
   static const Float_t fgkxTOF; // start radial position of TOF
+  static const UChar_t fgkNgraph[kNrefs]; // number of graphs/ref plot
 
+  Bool_t PlotTrackingSummary(Int_t centralityClass=1, Double_t* trendValues=0x0);     // 1 <= centralityClass <= 5; 0-all centrality classes together
+  Bool_t PlotPidSummary(Int_t centralityClass=1, Double_t* trendValues=0x0);          // 1 <= centralityClass <= 5; 0-all centrality classes together
+  Bool_t PlotCentSummary(Double_t* trendValues=0x0);                                  // centrality dependent plots
+
+  void PlotTrackingSummaryFromCF(Int_t centralityClass=1, Double_t* trendValues=0x0, 
+                                 Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);   // 1 <= centralityClass <= 5; 0-all centrality classes together
+  void PlotPidSummaryFromCF(Int_t centralityClass=1, Double_t* trendValues=0x0,
+                            Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);        // 1 <= centralityClass <= 5; 0-all centrality classes together
+  void PlotCentSummaryFromCF(Double_t* trendValues=0x0,
+                             Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);       // centrality dependent plots
+    
   AliTRDcheckESD(const AliTRDcheckESD&);
   AliTRDcheckESD& operator=(const AliTRDcheckESD&);
+  Int_t         Pdg2Idx(Int_t pdg) const;
   void          Process(TH1 **h, TGraphErrors *g);
+  void          Process2D(TH2 * const h, TGraphErrors **g);
   void          PrintStatus(ULong_t s);
-
+  TH2F*         Proj3D(TH3* hist, TH2* accMap, Int_t binLow, Int_t binHigh, Float_t &entries);
+  TH1D*         Proj2D(TH2* hist);
+  TH1F*         EfficiencyTRD(TH3* tpc3D, TH3* trd3D, Bool_t useAcceptance=kTRUE);
+  void          DrawTRDGrid();
+  void          SetStyle(TH1* hist, Int_t lineStyle, Int_t lineColor, Int_t lineWidth, 
+                         Int_t markerStyle, Int_t markerColor, Int_t markerSize);
+  void          SetStyle(TAxis* axis, const Char_t* title, Float_t titleSize, Float_t titleOffset, Bool_t centerTitle, 
+                         Float_t labelSize);
+  void          CheckActiveSM(TH1D* phiProj, Bool_t activeSM[18]);
+  void          FindIsolatedBCs(TH1D* bcHist, Bool_t isIsolated[3500]);
+  
   Int_t            fStatus;            // bit mask for controlling the task
-  AliESDEvent      *fESD;              // ESD event
-  AliMCEvent       *fMC;               // MC event
-  TObjArray        *fHistos;           // QA histos
+  Int_t            fNRefFigures;       // number of current ref plots
+  AliESDEvent      *fESD;              //! ESD event
+  AliMCEvent       *fMC;               //! MC event
+  AliESDpid        *fESDpid;           //  ESD pid object 
+  TObjArray        *fHistos;           //! QA histos
   TObjArray        *fResults;          // QA graphs
-  static FILE *fgFile;                 //! trend file streamer
-  ClassDef(AliTRDcheckESD, 3)          // user oriented TRD analysis based on ESD-MC data
+  static FILE      *fgFile;            //! trend file streamer
+  
+  AliCFContainer*  fCfContainer;       // CF container for computing efficiencies
+  AliAnalysisCuts* fReferenceTrackFilter;     // reference track filter
+  
+  // Vertex selection
+  static const Float_t fgkEvVertexZ;// cm
+  static const Int_t   fgkEvVertexN;// cm
+  // Track selection
+  static const Float_t fgkTrkDCAxy; // cm
+  static const Float_t fgkTrkDCAz;  // cm
+  static const Int_t   fgkNclTPC;   // N clusters TPC
+  static const Float_t fgkPt;       // min. pt
+  static const Float_t fgkEta;      // eta range
+  
+  static const Float_t fgkQs;      // scale for the total charge
+
+  ClassDef(AliTRDcheckESD, 7)          // user oriented TRD analysis based on ESD-MC data
 };
 #endif