ROOT logo
#ifndef ALITRDCHECKESD_H
#define ALITRDCHECKESD_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id: AliTRDcheckESD.h 27496 2008-07-22 08:35:45Z cblume $ */

/////////////////////////////////////////////////////
//
// Check basic detector results at ESD level
//
// Author
//   Alex Bercuci <A.Bercuci@gsi.de>
//   Ionut Arsene <iarsene@cern.ch>
//
//////////////////////////////////////////////////////

#ifndef ALIANALYSISTASK_H
#include "AliAnalysisTaskSE.h"
#endif

class AliESDEvent;
class AliMCEvent;
class AliESDpid;
class AliCFContainer;
class AliAnalysisCuts;
class AliESDtrack;
class TH1;
class TH2;
class TH1F;
class TH1D;
class TH2F;
class TH3F;
class TH3;
class TObjArray;
class TGraph;
class TGraphErrors;
class TAxis;

class AliTRDcheckESD : public AliAnalysisTaskSE {
public:
  enum ETRDcheckESDstatus {
     kMC        = BIT(0)  // use MC info
    ,kCollision = BIT(1)  // 
  };
    
  enum ETrdCfVariables {
    // Event wise variables
    kEventVtxZ=0,                // event vtx. Z        ---
    kEventMult,                  // event multiplicity  ---
    kEventTrigger,               // trigger class
    kEventBC,                    // event BC        --- 
    // Track wise variables
    kTrackTOFBC,                 // track TOF BC    ---
    kTrackDCAxy,                 // dca xy          ---
    kTrackDCAz,                  // dca z           ---
    kTrackCharge,                // charge          ---
    kTrackOuterParamRadius,      // outer param radius
    kTrackPhi,                   // phi at the vertex  ---
    kTrackPhiTRD,                // phi at the entrance of TRD  ---
    kTrackEta,                   // eta at the vertex  ---
    kTrackEtaTRD,                // eta at the entrance of TRD  ---
    kTrackPt,                    // pt at the vertex     ---
    kTrackPtTRD,                 // pt at the entrance of TRD ---
    kTrackP,                     // p at the vertex      ---
    kTrackPTRD,                  // p at the entrance of TRD  ---
    kTrackTrdChi2,               // TRD track chi2 ---
    kTrackTrdTracklets,          // number of TRD tracklets  ---
    kTrackTrdClusters,           // number of TRD clusters   ---
    kTrackTrdQuality,            // TRD quality for TOF
    kTrackTRDBudget,             // TRD material budget
    kTrackTOFchi2,               // TOF chi2
    // Tracklets wise variables
    kTrackletQtot,               // tracklet qtot in each layer
    kTrackletClustersVsRows,     // clusters / crossed rows
    kTrackletClusters,           // number of clusters per tracklet
    kTrackletP,                  // tracklet p in each layer
    kTrackPlossTRDlayer,         // p loss at each layer
    kTrackletLayer,              // layer of the current tracklet
    // Tracklet slice variables
    kTrackletSlice,              // tracklet slice number
    kTrackletPHslice,            // charge per tracklet slice
    kNTrdCfVariables,
    kNMaxAssignedTriggers = 200
  };
  
  enum ETrdCfSteps {
    kTPCreference=0,
    kTRD,
    kTOF,
    kTOFin,
    kTOFout,
    kNSteps
  };
     
  AliTRDcheckESD();
  AliTRDcheckESD(char* name);
  virtual ~AliTRDcheckESD();
  
  void          UserCreateOutputObjects();
  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();
  Int_t         GetTriggerCounter(const Char_t* triggerName) const;
  void          PrintTriggers() const;
  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          MakeSummaryFromCF(Double_t* trendValues=0x0, const Char_t* triggerName="", Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);
  Int_t         GetNAssignedTriggers();
  void          AddUserTrigger(const Char_t* name) {fUserEnabledTriggers += name; fUserEnabledTriggers += ";";}
  
  void          AddCFContainer(const Char_t* name, const Char_t* title, Int_t nSteps, Int_t* steps, 
		               Int_t nVars, UInt_t* vars, TArrayD* binLimits);
  
private:
  static const Float_t fgkxTPC; // end radial position of TPC
  static const Float_t fgkxTOF; // start radial position of TOF
  static const Char_t* fgkVarNames[kNTrdCfVariables];
  static const Char_t* fgkStepNames[kNSteps];
  
  void PlotTrackingSummaryFromCF(Double_t* trendValues=0x0,
				 const Char_t* triggerName="",
                                 Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);   // 1 <= centralityClass <= 5; 0-all centrality classes together
  void PlotPidSummaryFromCF(Double_t* trendValues=0x0,
			    const Char_t* triggerName="",
                            Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);        // 1 <= centralityClass <= 5; 0-all centrality classes together
  void PlotCentSummaryFromCF(Double_t* trendValues=0x0, const Char_t* triggerName="",
                             Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);       // centrality dependent plots
  void PlotOtherSummaryFromCF(Double_t* trendValues);
  
  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, TH1* mpvErr=0x0, TH1* widthErr=0x0, TH1* chi2=0x0);
  TH1F*         EfficiencyTRD(TH3* tpc3D, TH3* trd3D, Bool_t useAcceptance=kTRUE);
  TH1F*         EfficiencyFromPhiPt(AliCFContainer* cf, Int_t minNtrkl, Int_t maxNtrkl, Int_t stepNom, Int_t stepDenom, Int_t var=kTrackPt);
  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]);
  void          InitializeCFContainers();
  Int_t         GetTriggerIndex(const Char_t* name, Bool_t createNew=kTRUE);
  void          FillEventInfo(Double_t* values);
  void          FillTrackInfo(Double_t* values, AliESDtrack* esdTrack);
  void          FillTrackletInfo(Double_t* values, AliESDtrack* esdTrack, Int_t iPlane,
                                 Double_t* localSagitaPhi, Double_t localMom[][3], Bool_t* localMomGood);
  void          FillTrackletSliceInfo(Double_t* values, AliESDtrack* esdTrack, Int_t iSlice);
  //void          FillCFContainer(AliCFContainer* cf, Double_t* values, Int_t step);
  void          FillCFContainer(AliCFContainer* cf, Double_t* values, Bool_t* stepSelections);
  Bool_t        IsTrackSelected(AliESDtrack* track, Double_t* values, Int_t step);
  void          FillGlobalTrackContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
  void          FillTrdTrackletContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
  void          FillTrdSliceContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
  
  Int_t            fStatus;            // bit mask for controlling the task
  Int_t            fNRefFigures;       // number of current ref plots
  AliESDEvent      *fESD;              //! ESD event
  AliMCEvent       *fMC;               //! MC event
  AliESDpid        *fESDpid;           //  ESD pid object 
  static FILE      *fgFile;            //! trend file streamer
  TObjArray*        fHistos;           //! QA histograms
    
  AliAnalysisCuts* fReferenceTrackFilter;     // reference track filter
  Bool_t           fPhysSelTriggersEnabled;   // flag wheter physics selection triggers were enabled
  TString          fUserEnabledTriggers;      // list of user enabled triggers
  Int_t            fNAssignedTriggers;        // number of assigned triggers
    
  ClassDef(AliTRDcheckESD, 10)          // user oriented TRD analysis based on ESD-MC data
};
#endif
 AliTRDcheckESD.h:1
 AliTRDcheckESD.h:2
 AliTRDcheckESD.h:3
 AliTRDcheckESD.h:4
 AliTRDcheckESD.h:5
 AliTRDcheckESD.h:6
 AliTRDcheckESD.h:7
 AliTRDcheckESD.h:8
 AliTRDcheckESD.h:9
 AliTRDcheckESD.h:10
 AliTRDcheckESD.h:11
 AliTRDcheckESD.h:12
 AliTRDcheckESD.h:13
 AliTRDcheckESD.h:14
 AliTRDcheckESD.h:15
 AliTRDcheckESD.h:16
 AliTRDcheckESD.h:17
 AliTRDcheckESD.h:18
 AliTRDcheckESD.h:19
 AliTRDcheckESD.h:20
 AliTRDcheckESD.h:21
 AliTRDcheckESD.h:22
 AliTRDcheckESD.h:23
 AliTRDcheckESD.h:24
 AliTRDcheckESD.h:25
 AliTRDcheckESD.h:26
 AliTRDcheckESD.h:27
 AliTRDcheckESD.h:28
 AliTRDcheckESD.h:29
 AliTRDcheckESD.h:30
 AliTRDcheckESD.h:31
 AliTRDcheckESD.h:32
 AliTRDcheckESD.h:33
 AliTRDcheckESD.h:34
 AliTRDcheckESD.h:35
 AliTRDcheckESD.h:36
 AliTRDcheckESD.h:37
 AliTRDcheckESD.h:38
 AliTRDcheckESD.h:39
 AliTRDcheckESD.h:40
 AliTRDcheckESD.h:41
 AliTRDcheckESD.h:42
 AliTRDcheckESD.h:43
 AliTRDcheckESD.h:44
 AliTRDcheckESD.h:45
 AliTRDcheckESD.h:46
 AliTRDcheckESD.h:47
 AliTRDcheckESD.h:48
 AliTRDcheckESD.h:49
 AliTRDcheckESD.h:50
 AliTRDcheckESD.h:51
 AliTRDcheckESD.h:52
 AliTRDcheckESD.h:53
 AliTRDcheckESD.h:54
 AliTRDcheckESD.h:55
 AliTRDcheckESD.h:56
 AliTRDcheckESD.h:57
 AliTRDcheckESD.h:58
 AliTRDcheckESD.h:59
 AliTRDcheckESD.h:60
 AliTRDcheckESD.h:61
 AliTRDcheckESD.h:62
 AliTRDcheckESD.h:63
 AliTRDcheckESD.h:64
 AliTRDcheckESD.h:65
 AliTRDcheckESD.h:66
 AliTRDcheckESD.h:67
 AliTRDcheckESD.h:68
 AliTRDcheckESD.h:69
 AliTRDcheckESD.h:70
 AliTRDcheckESD.h:71
 AliTRDcheckESD.h:72
 AliTRDcheckESD.h:73
 AliTRDcheckESD.h:74
 AliTRDcheckESD.h:75
 AliTRDcheckESD.h:76
 AliTRDcheckESD.h:77
 AliTRDcheckESD.h:78
 AliTRDcheckESD.h:79
 AliTRDcheckESD.h:80
 AliTRDcheckESD.h:81
 AliTRDcheckESD.h:82
 AliTRDcheckESD.h:83
 AliTRDcheckESD.h:84
 AliTRDcheckESD.h:85
 AliTRDcheckESD.h:86
 AliTRDcheckESD.h:87
 AliTRDcheckESD.h:88
 AliTRDcheckESD.h:89
 AliTRDcheckESD.h:90
 AliTRDcheckESD.h:91
 AliTRDcheckESD.h:92
 AliTRDcheckESD.h:93
 AliTRDcheckESD.h:94
 AliTRDcheckESD.h:95
 AliTRDcheckESD.h:96
 AliTRDcheckESD.h:97
 AliTRDcheckESD.h:98
 AliTRDcheckESD.h:99
 AliTRDcheckESD.h:100
 AliTRDcheckESD.h:101
 AliTRDcheckESD.h:102
 AliTRDcheckESD.h:103
 AliTRDcheckESD.h:104
 AliTRDcheckESD.h:105
 AliTRDcheckESD.h:106
 AliTRDcheckESD.h:107
 AliTRDcheckESD.h:108
 AliTRDcheckESD.h:109
 AliTRDcheckESD.h:110
 AliTRDcheckESD.h:111
 AliTRDcheckESD.h:112
 AliTRDcheckESD.h:113
 AliTRDcheckESD.h:114
 AliTRDcheckESD.h:115
 AliTRDcheckESD.h:116
 AliTRDcheckESD.h:117
 AliTRDcheckESD.h:118
 AliTRDcheckESD.h:119
 AliTRDcheckESD.h:120
 AliTRDcheckESD.h:121
 AliTRDcheckESD.h:122
 AliTRDcheckESD.h:123
 AliTRDcheckESD.h:124
 AliTRDcheckESD.h:125
 AliTRDcheckESD.h:126
 AliTRDcheckESD.h:127
 AliTRDcheckESD.h:128
 AliTRDcheckESD.h:129
 AliTRDcheckESD.h:130
 AliTRDcheckESD.h:131
 AliTRDcheckESD.h:132
 AliTRDcheckESD.h:133
 AliTRDcheckESD.h:134
 AliTRDcheckESD.h:135
 AliTRDcheckESD.h:136
 AliTRDcheckESD.h:137
 AliTRDcheckESD.h:138
 AliTRDcheckESD.h:139
 AliTRDcheckESD.h:140
 AliTRDcheckESD.h:141
 AliTRDcheckESD.h:142
 AliTRDcheckESD.h:143
 AliTRDcheckESD.h:144
 AliTRDcheckESD.h:145
 AliTRDcheckESD.h:146
 AliTRDcheckESD.h:147
 AliTRDcheckESD.h:148
 AliTRDcheckESD.h:149
 AliTRDcheckESD.h:150
 AliTRDcheckESD.h:151
 AliTRDcheckESD.h:152
 AliTRDcheckESD.h:153
 AliTRDcheckESD.h:154
 AliTRDcheckESD.h:155
 AliTRDcheckESD.h:156
 AliTRDcheckESD.h:157
 AliTRDcheckESD.h:158
 AliTRDcheckESD.h:159
 AliTRDcheckESD.h:160
 AliTRDcheckESD.h:161
 AliTRDcheckESD.h:162
 AliTRDcheckESD.h:163
 AliTRDcheckESD.h:164
 AliTRDcheckESD.h:165
 AliTRDcheckESD.h:166
 AliTRDcheckESD.h:167
 AliTRDcheckESD.h:168
 AliTRDcheckESD.h:169
 AliTRDcheckESD.h:170
 AliTRDcheckESD.h:171
 AliTRDcheckESD.h:172
 AliTRDcheckESD.h:173
 AliTRDcheckESD.h:174
 AliTRDcheckESD.h:175
 AliTRDcheckESD.h:176
 AliTRDcheckESD.h:177
 AliTRDcheckESD.h:178
 AliTRDcheckESD.h:179
 AliTRDcheckESD.h:180
 AliTRDcheckESD.h:181
 AliTRDcheckESD.h:182
 AliTRDcheckESD.h:183
 AliTRDcheckESD.h:184