ROOT logo
#ifndef ALISPECTRAAODEVENTCUTS_H
#define ALISPECTRAAODEVENTCUTS_H

/*  See cxx source for full Copyright notice */

//-------------------------------------------------------------------------
//                      AliSpectraAODEventCuts
//
//
//
//
// Authors: Michele Floris, CERN, Philip Versteeg, UU, Redmer Bertens, UU
//-------------------------------------------------------------------------

class AliAODEvent;
class AliSpectraAODTrackCuts;
class TProfile;

#include "TNamed.h"
#include "TFile.h"
#include "TKey.h"
#include "AliOADBContainer.h"
#include "AliVEvent.h"

class AliSpectraAODEventCuts : public TNamed
{
 public:
  enum {  kProcessedEvents = 0,kPhysSelEvents,kAcceptedEvents, kVtxRange, kVtxCentral, kVtxNoEvent, kQVector, kNVtxCuts};

  // Constructors
 AliSpectraAODEventCuts() : 
  TNamed(),
    fAOD(0),
    fSelectBit(AliVEvent::kMB),
    fCentralityMethod(),
    fTrackBits(1),
    fIsMC(0),
    fIsLHC10h(0),
    fTrackCuts(0),
    fIsSelected(0),
    fCentralityCutMin(0.),
    fCentralityCutMax(999),
    fQVectorCutMin(-999.),
    fQVectorCutMax(999.),
    fVertexCutMin(-10.),
    fVertexCutMax(10.),
    fMultiplicityCutMin(-999.),
    fMultiplicityCutMax(99999.),
    fqTPC(-999.),
    fqV0C(-999.),
    fqV0A(-999.),
    fqV0Cx(-999.),
    fqV0Ax(-999.),
    fqV0Cy(-999.),
    fqV0Ay(-999.),
    fPsiV0C(-999.),
    fPsiV0A(-999.),
    fCent(-999.),
    fOutput(0),
    fCalib(0),
    fRun(-1),
    fMultV0(0),
    fV0Cpol1(-1),
    fV0Cpol2(-1),
    fV0Cpol3(-1),
    fV0Cpol4(-1),
    fV0Apol1(-1),
    fV0Apol2(-1),
    fV0Apol3(-1),
    fV0Apol4(-1),
    fQvecIntList(0),
    fQvecIntegral(0), 
    fSplineArrayV0A(0),
    fSplineArrayV0C(0),
	fSplineArrayTPC(0),
    fQgenIntegral(0), 
    fSplineArrayV0Agen(0),
    fSplineArrayV0Cgen(0),
    fQvecMC(0),
    fNch(0),
    fQvecCalibType(0),
    fV0Aeff(0)
      {
	for (Int_t i = 0; i<10; i++){
	  fMeanQxa2[i] = -1;
	  fMeanQya2[i] = -1;
	  fMeanQxc2[i] = -1;
	  fMeanQyc2[i] = -1;   
	}
      }
  AliSpectraAODEventCuts(const char *name);
  virtual  ~AliSpectraAODEventCuts() {}
  
  void  SetEventSelectionBit( UInt_t val )        { fSelectBit = val;  }
  void  SetCentralityMethod(const char* method) { fCentralityMethod = method; }
  void  SetTrackBits(UInt_t TrackBits) {fTrackBits=TrackBits;}
  void  SetIsMC(Bool_t isMC = kFALSE)    {fIsMC = isMC; };
  void  SetIsLHC10h(Bool_t isLHC10h = kFALSE)    {fIsLHC10h = isLHC10h; };
  void  SetCentralityCutMin(Float_t cut)  { fCentralityCutMin = cut; }
  void  SetCentralityCutMax(Float_t cut)  { fCentralityCutMax = cut; }
  void  SetQVectorCut(Float_t min,Float_t max)  { fQVectorCutMin = min; fQVectorCutMax = max; }
  void  SetVertexCut(Float_t min,Float_t max)  { fVertexCutMin = min; fVertexCutMax = max; }
  void  SetMultiplicityCut(Float_t min,Float_t max)  { fMultiplicityCutMin = min; fMultiplicityCutMax = max; }
  
  UInt_t GetEventSelectionBit()   const           { return fSelectBit;}
  TString GetCentralityMethod()   const           { return fCentralityMethod;}
  UInt_t GetTrackType()          const    { return fTrackBits;}
  Bool_t GetIsMC()                const           { return fIsMC;}
  Bool_t GetIsLHC10h()                const           { return fIsLHC10h;}
  Float_t  GetCentralityMin()      const {  return fCentralityCutMin; }
  Float_t  GetCentralityMax()     const {  return fCentralityCutMax; }
  Float_t  GetQVectorCutMin()    const {  return fQVectorCutMin; }
  Float_t  GetQVectorCutMax()   const {  return fQVectorCutMax; }
  Float_t  GetVertexCutMin()     const {  return fVertexCutMin; }
  Float_t  GetVertexCutMax()    const {  return fVertexCutMax; }
  Float_t  GetMultiplicityCutMin()  const {  return fMultiplicityCutMin; }
  Float_t  GetMultiplicityCutMax()  const {  return fMultiplicityCutMax; }
  Double_t  GetqTPC()  const {  return fqTPC; }
  Double_t  GetqV0C()  const {  return fqV0C; }
  Double_t  GetqV0A()  const {  return fqV0A; }
  Double_t  GetqV0Cx()  const {  return fqV0Cx; }
  Double_t  GetqV0Ax()  const {  return fqV0Ax; }
  Double_t  GetqV0Cy()  const {  return fqV0Cy; }
  Double_t  GetqV0Ay()  const {  return fqV0Ay; }
  Double_t  GetPsiV0C()  const {  return fPsiV0C; }
  Double_t  GetPsiV0A()  const {  return fPsiV0A; }
  Double_t  GetCent()  const {  return fCent; }
  TList *GetOutputList()       {return fOutput;};
  TList *GetCalibList()       {return fCalib;};
  void SetCalibFile(TFile *f)    {
    TIter next(f->GetListOfKeys());
    TKey *key;
    while ((key = (TKey*)next())) {
      AliOADBContainer * obj=(AliOADBContainer*)key->ReadObj();
      fCalib->Add(obj);
    }
  };
  
  void SetQvecIntegralFile(TFile *f)    {
    TIter next(f->GetListOfKeys());
    TKey *key;
    while ((key = (TKey*)next())) {
      TObject * h=(TObject*)key->ReadObj();
      fQvecIntList->Add(h);
    }
  };
  
  // Methods
  Bool_t IsSelected(AliAODEvent * aod,AliSpectraAODTrackCuts     *trackcuts);
  Bool_t CheckVtxRange();
  Bool_t CheckCentralityCut();
  Bool_t CheckMultiplicityCut();
  Bool_t CheckQVectorCut();
  Double_t CalculateQVectorLHC10h();  //procedure to calculate the q vector for PbPb 2010
  Double_t CalculateQVectorTPC(Double_t etaMin=-0.5,Double_t etaMax=0.5);  //procedure to calculate the q vector from TPC
  void   PrintCuts();
  Bool_t OpenInfoCalbration(Int_t run);
  Short_t  GetCentrCode(AliVEvent* ev);
  
  Double_t CalculateQVector(); //q vector calculation using Event plane task
  
  Float_t  NumberOfEvents()     { return ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kAcceptedEvents+1); }
  Float_t  NumberOfProcessedEvents()     { return ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kProcessedEvents+1); }
  Float_t  NumberOfPhysSelEvents()     { return ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kPhysSelEvents+1); }

  Long64_t Merge(TCollection* list);

  Double_t GetQvecPercentile(Int_t v0side);  
  Bool_t CheckSplineArray(TObjArray * splarr, Int_t n);
  TObjArray *GetSplineArrayV0A() { return fSplineArrayV0A; }
  TObjArray *GetSplineArrayV0C() { return fSplineArrayV0C; }
  
  Double_t GetQvecMC() {return fQvecMC;}
  
  Int_t GetNch() { return fNch; }
  
  void SetQVecCalibType(Int_t val) { fQvecCalibType=val; }  //0. centrality - 1. Nch
  Int_t GetNchBin(TH2D * h);
  
  Double_t CalculateQVectorMC(Int_t v0side, Int_t type);
  Double_t GetQvecPercentileMC(Int_t v0side, Int_t type);
  
  Int_t CheckVZEROchannel(Int_t vzeroside, Double_t eta, Double_t phi);
  Int_t CheckVZEROacceptance(Double_t eta);

 private:
  
  AliAODEvent     *fAOD;              //! AOD event
  UInt_t           fSelectBit;            // Select events according to AliAnalysisTaskJetServices bit maps 
  TString          fCentralityMethod;     // Method to determine centrality
  UInt_t           fTrackBits;       // Type of track to be used in the Qvector calculation
  Bool_t          fIsMC; // true if processing MC
  Bool_t          fIsLHC10h; // for LHC10h
  AliSpectraAODTrackCuts     *fTrackCuts;              //! track cuts
  Bool_t          fIsSelected;        // True if cuts are selected
  Float_t         fCentralityCutMin;     // minimum centrality percentile
  Float_t         fCentralityCutMax;     // maximum centrality percentile
  Float_t         fQVectorCutMin;     // minimum qvecPos
  Float_t         fQVectorCutMax;     // maximum qvecPos
  Float_t         fVertexCutMin;     // minimum vertex position
  Float_t         fVertexCutMax;     // maximum vertex position
  Float_t         fMultiplicityCutMin;     // minimum multiplicity position
  Float_t         fMultiplicityCutMax;     // maximum multiplicity position
  Double_t       fqTPC;            //q vector in the TPC
  Double_t       fqV0C;            //q vector in the VZERO-C
  Double_t       fqV0A;            //q vector in the VZERO-A
  Double_t       fqV0Cx;            //q vector in the VZERO-C, x-comp
  Double_t       fqV0Ax;            //q vector in the VZERO-A, x-comp
  Double_t       fqV0Cy;            //q vector in the VZERO-C, y-comp
  Double_t       fqV0Ay;            //q vector in the VZERO-A, y-comp
  Double_t       fPsiV0C;            //EP from VZERO-C
  Double_t       fPsiV0A;            //EP from VZERO-A
  Double_t       fCent;            //centrality according to fCentralityMethod
  TList            *fOutput;        // output list 
  TList            *fCalib;        // output list 
  Int_t fRun;                       // run number - for calibration
  TProfile* fMultV0;                //! profile from V0 multiplicity
  Float_t fV0Cpol1;                 // mean V0C multiplicity - from fit profile - ring 1
  Float_t fV0Cpol2;                 // mean V0C multiplicity - from fit profile - ring 2
  Float_t fV0Cpol3;                 // mean V0C multiplicity - from fit profile - ring 3
  Float_t fV0Cpol4;                 // mean V0C multiplicity - from fit profile - ring 4
  Float_t fV0Apol1;                 // mean V0A multiplicity - from fit profile - ring 1
  Float_t fV0Apol2;                 // mean V0A multiplicity - from fit profile - ring 2
  Float_t fV0Apol3;                 // mean V0A multiplicity - from fit profile - ring 3
  Float_t fV0Apol4;                 // mean V0A multiplicity - from fit profile - ring 4
  Float_t fMeanQxa2[10];             // mean Qxa values for centr - recentering
  Float_t fMeanQya2[10];             // mean Qya values for centr - recentering
  Float_t fMeanQxc2[10];             // mean Qxc values for centr - recentering
  Float_t fMeanQyc2[10];             // mean Qyc values for centr - recentering

  TList *fQvecIntList;            // List with Qvec Integrated vs centrality distribution
  TH2D * fQvecIntegral;           // ! Integrated Qvec distribution
  TObjArray * fSplineArrayV0A;    // TSpline array for VZERO-A
  TObjArray * fSplineArrayV0C;    // TSpline array for VZERO-C
  TObjArray * fSplineArrayTPC;    // TSpline array for TPC
  TH2D * fQgenIntegral;           // ! Integrated Qvec distribution for generated tracks
  TObjArray * fSplineArrayV0Agen;    // TSpline array for VZERO-A for generated tracks
  TObjArray * fSplineArrayV0Cgen;    // TSpline array for VZERO-C for generated tracks
  Double_t fQvecMC; //q-vector value from MC
  
  Int_t fNch;
  Int_t fQvecCalibType; //0. centrality - 1. Nch
  TH1F * fV0Aeff; // VZEROA efficiency prim+sec / gen.

  AliSpectraAODEventCuts(const AliSpectraAODEventCuts&);
  AliSpectraAODEventCuts& operator=(const AliSpectraAODEventCuts&);
  
  ClassDef(AliSpectraAODEventCuts, 10);
  
};
#endif

 AliSpectraAODEventCuts.h:1
 AliSpectraAODEventCuts.h:2
 AliSpectraAODEventCuts.h:3
 AliSpectraAODEventCuts.h:4
 AliSpectraAODEventCuts.h:5
 AliSpectraAODEventCuts.h:6
 AliSpectraAODEventCuts.h:7
 AliSpectraAODEventCuts.h:8
 AliSpectraAODEventCuts.h:9
 AliSpectraAODEventCuts.h:10
 AliSpectraAODEventCuts.h:11
 AliSpectraAODEventCuts.h:12
 AliSpectraAODEventCuts.h:13
 AliSpectraAODEventCuts.h:14
 AliSpectraAODEventCuts.h:15
 AliSpectraAODEventCuts.h:16
 AliSpectraAODEventCuts.h:17
 AliSpectraAODEventCuts.h:18
 AliSpectraAODEventCuts.h:19
 AliSpectraAODEventCuts.h:20
 AliSpectraAODEventCuts.h:21
 AliSpectraAODEventCuts.h:22
 AliSpectraAODEventCuts.h:23
 AliSpectraAODEventCuts.h:24
 AliSpectraAODEventCuts.h:25
 AliSpectraAODEventCuts.h:26
 AliSpectraAODEventCuts.h:27
 AliSpectraAODEventCuts.h:28
 AliSpectraAODEventCuts.h:29
 AliSpectraAODEventCuts.h:30
 AliSpectraAODEventCuts.h:31
 AliSpectraAODEventCuts.h:32
 AliSpectraAODEventCuts.h:33
 AliSpectraAODEventCuts.h:34
 AliSpectraAODEventCuts.h:35
 AliSpectraAODEventCuts.h:36
 AliSpectraAODEventCuts.h:37
 AliSpectraAODEventCuts.h:38
 AliSpectraAODEventCuts.h:39
 AliSpectraAODEventCuts.h:40
 AliSpectraAODEventCuts.h:41
 AliSpectraAODEventCuts.h:42
 AliSpectraAODEventCuts.h:43
 AliSpectraAODEventCuts.h:44
 AliSpectraAODEventCuts.h:45
 AliSpectraAODEventCuts.h:46
 AliSpectraAODEventCuts.h:47
 AliSpectraAODEventCuts.h:48
 AliSpectraAODEventCuts.h:49
 AliSpectraAODEventCuts.h:50
 AliSpectraAODEventCuts.h:51
 AliSpectraAODEventCuts.h:52
 AliSpectraAODEventCuts.h:53
 AliSpectraAODEventCuts.h:54
 AliSpectraAODEventCuts.h:55
 AliSpectraAODEventCuts.h:56
 AliSpectraAODEventCuts.h:57
 AliSpectraAODEventCuts.h:58
 AliSpectraAODEventCuts.h:59
 AliSpectraAODEventCuts.h:60
 AliSpectraAODEventCuts.h:61
 AliSpectraAODEventCuts.h:62
 AliSpectraAODEventCuts.h:63
 AliSpectraAODEventCuts.h:64
 AliSpectraAODEventCuts.h:65
 AliSpectraAODEventCuts.h:66
 AliSpectraAODEventCuts.h:67
 AliSpectraAODEventCuts.h:68
 AliSpectraAODEventCuts.h:69
 AliSpectraAODEventCuts.h:70
 AliSpectraAODEventCuts.h:71
 AliSpectraAODEventCuts.h:72
 AliSpectraAODEventCuts.h:73
 AliSpectraAODEventCuts.h:74
 AliSpectraAODEventCuts.h:75
 AliSpectraAODEventCuts.h:76
 AliSpectraAODEventCuts.h:77
 AliSpectraAODEventCuts.h:78
 AliSpectraAODEventCuts.h:79
 AliSpectraAODEventCuts.h:80
 AliSpectraAODEventCuts.h:81
 AliSpectraAODEventCuts.h:82
 AliSpectraAODEventCuts.h:83
 AliSpectraAODEventCuts.h:84
 AliSpectraAODEventCuts.h:85
 AliSpectraAODEventCuts.h:86
 AliSpectraAODEventCuts.h:87
 AliSpectraAODEventCuts.h:88
 AliSpectraAODEventCuts.h:89
 AliSpectraAODEventCuts.h:90
 AliSpectraAODEventCuts.h:91
 AliSpectraAODEventCuts.h:92
 AliSpectraAODEventCuts.h:93
 AliSpectraAODEventCuts.h:94
 AliSpectraAODEventCuts.h:95
 AliSpectraAODEventCuts.h:96
 AliSpectraAODEventCuts.h:97
 AliSpectraAODEventCuts.h:98
 AliSpectraAODEventCuts.h:99
 AliSpectraAODEventCuts.h:100
 AliSpectraAODEventCuts.h:101
 AliSpectraAODEventCuts.h:102
 AliSpectraAODEventCuts.h:103
 AliSpectraAODEventCuts.h:104
 AliSpectraAODEventCuts.h:105
 AliSpectraAODEventCuts.h:106
 AliSpectraAODEventCuts.h:107
 AliSpectraAODEventCuts.h:108
 AliSpectraAODEventCuts.h:109
 AliSpectraAODEventCuts.h:110
 AliSpectraAODEventCuts.h:111
 AliSpectraAODEventCuts.h:112
 AliSpectraAODEventCuts.h:113
 AliSpectraAODEventCuts.h:114
 AliSpectraAODEventCuts.h:115
 AliSpectraAODEventCuts.h:116
 AliSpectraAODEventCuts.h:117
 AliSpectraAODEventCuts.h:118
 AliSpectraAODEventCuts.h:119
 AliSpectraAODEventCuts.h:120
 AliSpectraAODEventCuts.h:121
 AliSpectraAODEventCuts.h:122
 AliSpectraAODEventCuts.h:123
 AliSpectraAODEventCuts.h:124
 AliSpectraAODEventCuts.h:125
 AliSpectraAODEventCuts.h:126
 AliSpectraAODEventCuts.h:127
 AliSpectraAODEventCuts.h:128
 AliSpectraAODEventCuts.h:129
 AliSpectraAODEventCuts.h:130
 AliSpectraAODEventCuts.h:131
 AliSpectraAODEventCuts.h:132
 AliSpectraAODEventCuts.h:133
 AliSpectraAODEventCuts.h:134
 AliSpectraAODEventCuts.h:135
 AliSpectraAODEventCuts.h:136
 AliSpectraAODEventCuts.h:137
 AliSpectraAODEventCuts.h:138
 AliSpectraAODEventCuts.h:139
 AliSpectraAODEventCuts.h:140
 AliSpectraAODEventCuts.h:141
 AliSpectraAODEventCuts.h:142
 AliSpectraAODEventCuts.h:143
 AliSpectraAODEventCuts.h:144
 AliSpectraAODEventCuts.h:145
 AliSpectraAODEventCuts.h:146
 AliSpectraAODEventCuts.h:147
 AliSpectraAODEventCuts.h:148
 AliSpectraAODEventCuts.h:149
 AliSpectraAODEventCuts.h:150
 AliSpectraAODEventCuts.h:151
 AliSpectraAODEventCuts.h:152
 AliSpectraAODEventCuts.h:153
 AliSpectraAODEventCuts.h:154
 AliSpectraAODEventCuts.h:155
 AliSpectraAODEventCuts.h:156
 AliSpectraAODEventCuts.h:157
 AliSpectraAODEventCuts.h:158
 AliSpectraAODEventCuts.h:159
 AliSpectraAODEventCuts.h:160
 AliSpectraAODEventCuts.h:161
 AliSpectraAODEventCuts.h:162
 AliSpectraAODEventCuts.h:163
 AliSpectraAODEventCuts.h:164
 AliSpectraAODEventCuts.h:165
 AliSpectraAODEventCuts.h:166
 AliSpectraAODEventCuts.h:167
 AliSpectraAODEventCuts.h:168
 AliSpectraAODEventCuts.h:169
 AliSpectraAODEventCuts.h:170
 AliSpectraAODEventCuts.h:171
 AliSpectraAODEventCuts.h:172
 AliSpectraAODEventCuts.h:173
 AliSpectraAODEventCuts.h:174
 AliSpectraAODEventCuts.h:175
 AliSpectraAODEventCuts.h:176
 AliSpectraAODEventCuts.h:177
 AliSpectraAODEventCuts.h:178
 AliSpectraAODEventCuts.h:179
 AliSpectraAODEventCuts.h:180
 AliSpectraAODEventCuts.h:181
 AliSpectraAODEventCuts.h:182
 AliSpectraAODEventCuts.h:183
 AliSpectraAODEventCuts.h:184
 AliSpectraAODEventCuts.h:185
 AliSpectraAODEventCuts.h:186
 AliSpectraAODEventCuts.h:187
 AliSpectraAODEventCuts.h:188
 AliSpectraAODEventCuts.h:189
 AliSpectraAODEventCuts.h:190
 AliSpectraAODEventCuts.h:191
 AliSpectraAODEventCuts.h:192
 AliSpectraAODEventCuts.h:193
 AliSpectraAODEventCuts.h:194
 AliSpectraAODEventCuts.h:195
 AliSpectraAODEventCuts.h:196
 AliSpectraAODEventCuts.h:197
 AliSpectraAODEventCuts.h:198
 AliSpectraAODEventCuts.h:199
 AliSpectraAODEventCuts.h:200
 AliSpectraAODEventCuts.h:201
 AliSpectraAODEventCuts.h:202
 AliSpectraAODEventCuts.h:203
 AliSpectraAODEventCuts.h:204
 AliSpectraAODEventCuts.h:205
 AliSpectraAODEventCuts.h:206
 AliSpectraAODEventCuts.h:207
 AliSpectraAODEventCuts.h:208
 AliSpectraAODEventCuts.h:209
 AliSpectraAODEventCuts.h:210
 AliSpectraAODEventCuts.h:211
 AliSpectraAODEventCuts.h:212
 AliSpectraAODEventCuts.h:213
 AliSpectraAODEventCuts.h:214
 AliSpectraAODEventCuts.h:215
 AliSpectraAODEventCuts.h:216
 AliSpectraAODEventCuts.h:217
 AliSpectraAODEventCuts.h:218
 AliSpectraAODEventCuts.h:219
 AliSpectraAODEventCuts.h:220
 AliSpectraAODEventCuts.h:221
 AliSpectraAODEventCuts.h:222
 AliSpectraAODEventCuts.h:223
 AliSpectraAODEventCuts.h:224
 AliSpectraAODEventCuts.h:225
 AliSpectraAODEventCuts.h:226
 AliSpectraAODEventCuts.h:227
 AliSpectraAODEventCuts.h:228
 AliSpectraAODEventCuts.h:229
 AliSpectraAODEventCuts.h:230
 AliSpectraAODEventCuts.h:231
 AliSpectraAODEventCuts.h:232
 AliSpectraAODEventCuts.h:233
 AliSpectraAODEventCuts.h:234
 AliSpectraAODEventCuts.h:235
 AliSpectraAODEventCuts.h:236
 AliSpectraAODEventCuts.h:237
 AliSpectraAODEventCuts.h:238
 AliSpectraAODEventCuts.h:239
 AliSpectraAODEventCuts.h:240
 AliSpectraAODEventCuts.h:241
 AliSpectraAODEventCuts.h:242
 AliSpectraAODEventCuts.h:243
 AliSpectraAODEventCuts.h:244
 AliSpectraAODEventCuts.h:245
 AliSpectraAODEventCuts.h:246
 AliSpectraAODEventCuts.h:247
 AliSpectraAODEventCuts.h:248
 AliSpectraAODEventCuts.h:249
 AliSpectraAODEventCuts.h:250
 AliSpectraAODEventCuts.h:251
 AliSpectraAODEventCuts.h:252