ROOT logo
#ifndef ALIANALYSISTASKSPDDNDETA_H
#define ALIANALYSISTASKSPDDNDETA_H

///////////////////////////////////////////////////////////////////////////
// Class AliAnalysisTaskSPDdNdEta                                        //
// Analysis task for dN/dEta reconstruction with the SPD                 //
//                                                                       //
// Author:  M. Nicassio (INFN Bari)                                      //
// Contact: Maria.Nicassio@ba.infn.it, Domenico.Elia@ba.infn.it          //
///////////////////////////////////////////////////////////////////////////

class TH1F; 
class TH2F;
class TH3F;
class AliESDEvent;
class TList;
class AliTrackletAlg;
class AliMCParticle;

#include "AliAnalysisTaskSE.h"
#include "AliTriggerAnalysis.h"

class AliAnalysisTaskSPDdNdEta : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskSPDdNdEta(const char *name = "AliAnalysisTaskSPDdNdEta");
  virtual ~AliAnalysisTaskSPDdNdEta(); 
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *);

  enum MCCentralityBin{kcentral=1,kbin3to6=2,kbin6to9=3,kbin9to12=4,kbin12to15=5,kperipheral=6,kall=7};

  void SetReadMC(Bool_t readmc = kFALSE) { fUseMC = readmc; }
  void SetTrigger(AliTriggerAnalysis::Trigger trigger) { fTrigger = trigger; }
  void SetReadTrackRefs(Bool_t readtr = kFALSE) { fTR = readtr; }
  void SetRecoTracklets(Bool_t recotracklets = kFALSE) { fRecoTracklets = recotracklets; }
  void SetMCCentralityBin(MCCentralityBin mccentrbin) {fMCCentralityBin=mccentrbin;}
  void SetCentralityLowLim(Float_t centrlowlim) {fCentrLowLim=centrlowlim;}
  void SetCentralityUpLim(Float_t centruplim) {fCentrUpLim=centruplim;}
//  void SetCentralityEst(TString centrest) {fCentrEst=centrest;}
  void SetCentralityEst(Bool_t centrest) {fCentrEst=centrest;}
  void SetMinClusterMultLay2(Int_t minClMultLay2=0) {fMinClMultLay2=minClMultLay2;}
  void SetMaxClusterMultLay2(Int_t maxClMultLay2=0) {fMaxClMultLay2=maxClMultLay2;}
  void SetMinV0Mult(Int_t minV0Mult=0) {fMinMultV0=minV0Mult;}
  void SetVertexRange(Float_t vl=7.) {fVtxLim=vl;}
  void SetPartSpecies(Bool_t partsp = kFALSE)  {fPartSpecies=partsp;}

  void SetPhiWindow(Float_t w=0.08) {fPhiWindow=w;}
  void SetThetaWindow(Float_t w=0.025) {fThetaWindow=w;}
  void SetPhiShift(Float_t w=0.0045) {fPhiShift=w;}
  void SetRemoveClustersFromOverlaps(Bool_t b = kFALSE) {fRemoveClustersFromOverlaps = b;}
  void SetPhiOverlapCut(Float_t w=0.005) {fPhiOverlapCut=w;}
  void SetZetaOverlapCut(Float_t w=0.05) {fZetaOverlapCut=w;}
  void SetPhiRotationAngle(Float_t w=0.0) {fPhiRotationAngle=w;}
  void SetPhiWindowAna(Float_t w=0.08) {fPhiWindowAna=w;}
 
  Bool_t IsDetectablePrimary(Int_t nref, AliMCParticle* mcpart);
  Bool_t IsDetectedPrimary(Int_t nref, AliMCParticle* mcpart, Int_t Layer);

 protected:
  AliESDEvent *fmyESD;             // ! ESD object 
  TList *fOutput;                  // ! output list send on output slot 1 

  Bool_t fUseMC;                   // flag to enable the calculation of correction histograms
  AliTriggerAnalysis::Trigger fTrigger;  
  Bool_t fTR;                      // to read track references and calculate factors of track to particle correction 
  Bool_t fRecoTracklets;           // flag to recostruct tracklets
  
  MCCentralityBin fMCCentralityBin; // to select MC centrality bin in which corrections are calculated
  Float_t fCentrLowLim;             // to select centrality bin on data
  Float_t fCentrUpLim;              // to select centrality bin on data
//  TString fCentrEst;                 // to select centrality estimator
  Bool_t fCentrEst;                 // to select centrality estimator

  Int_t fMinClMultLay2;             // to select multiplicity class
  Int_t fMaxClMultLay2;             // to select multiplicity class
  Int_t fMinMultV0;                 // to select centrality class 
  Float_t fVtxLim;                  // to select vertex range
  Bool_t fPartSpecies;              // to fill correction matrices for each part species (for syst studies)
 
  Float_t       fPhiWindow;                    // Search window in phi
  Float_t       fThetaWindow;                  // Search window in theta
  Float_t       fPhiShift;                     // Phi shift reference value (at 0.5 T)
  Bool_t        fRemoveClustersFromOverlaps;   // Option to skip clusters in the overlaps
  Float_t       fPhiOverlapCut;                // Fiducial window in phi for overlap cut
  Float_t       fZetaOverlapCut;               // Fiducial window in eta for overlap cut
  Float_t       fPhiRotationAngle;             // Angle to rotate the inner layer cluster for combinatorial reco only
  Float_t       fPhiWindowAna;                 // Final analysis tracklet definition window in phi

  AliTrackletAlg *fMultReco;       // tracklet reconstruction class


  TH1F        *fV0Ampl;                     // ! V0 amplitudes to cut on centrality
  TH2F        *fHistSPDRAWMultvsZ;          // ! data to be corrected 
  TH2F        *fHistSPDRAWMultvsZTriggCentrEvts; // ! data to be corrected
  TH2F        *fHistSPDRAWMultvsZCentrEvts; // ! data to be corrected

  TH2F        *fHistSPDRAWEtavsZ;           // ! data to be corrected

  TH1F        *fHistSPDmultEtacut;          // ! cluster inner layer and tracklet check histos
  TH1F        *fHistSPDmult;                // ! cluster inner layer and tracklet check histos
  TH1F        *fHistSPDmultcl1;             // ! cluster inner layer and tracklet check histos
  TH1F        *fHistSPDmultcl2;             // ! cluster inner layer and tracklet check histos
  TH2F        *fHistSPDmultcl1vscl2;        // ! cluster inner layer and tracklet check histos
  TH2F        *fHistSPDmultvscl1;           // ! cluster inner layer and tracklet check histos
  TH2F        *fHistSPDmultvscl2;           // ! cluster inner layer and tracklet check histos

  TH1F        *fHistSPDeta;                 // ! cluster inner layer and tracklet check histos
  TH1F        *fHistSPDphi;                 // ! cluster inner layer and tracklet check histos
  TH1F        *fHistSPDtheta;               // ! cluster inner layer and tracklet check histos
  TH1F        *fHistSPDdePhi;               // ! cluster inner layer and tracklet check histos
  TH2F        *fHistSPDphivsSPDeta;         // ! cluster inner layer and tracklet check histos
  TH1F        *fHistSPDdeTheta;             // ! cluster inner layer and tracklet check histos
  
  TH1F        *fHistSPDvtx;                 // ! SPD vertex distributions
  TH1F        *fHistSPDvtxAnalysis;         // ! SPD vertex distributions
  TH2F        *fHistSPDdePhideTheta;        // ! histogram for combinatorial background studies

  TH1F        *fHistSPDphicl1;              // ! cluster inner layer and tracklet check histos
  TH1F        *fHistSPDphicl2;              // ! cluster inner layer and tracklet check histos

  TH2F* fHistBkgCorrDen;                    // ! track level correction histograms
  TH2F* fHistReconstructedProtons;            // ! track level correction histograms
  TH2F* fHistReconstructedKaons;            // ! track level correction histograms
  TH2F* fHistReconstructedPions;            // ! track level correction histograms
  TH2F* fHistReconstructedOthers;           // ! track level correction histograms
  TH2F* fHistReconstructedSec;        // ! track level correction histograms

  TH2F* fHistBkgCorrDenPrimGen;      // ! track level correction histograms
  TH2F* fHistBkgCombLabels;          // ! track level correction histograms
  TH2F* fHistBkgCorrNum;             // ! track level correction histograms
  TH2F* fHistAlgEffNum;              // ! track level correction histograms
  TH2F* fHistNonDetectableCorrDen;   // ! track level correction histograms

  TH2F* fHistNonDetectableCorrNum;   // ! track level correction histograms
  TH2F* fHistProtons;                // ! track level correction histograms
  TH2F* fHistKaons;                  // ! track level correction histograms
  TH2F* fHistPions;                  // ! track level correction histograms
  TH2F* fHistOthers;                 // ! track level correction histograms
  TH2F* fHistAllPrimaries;           // ! track level correction histograms
  TH2F* fHistTrackCentrEvts;         // ! track level correction histograms
  TH2F* fHistTrackTrigCentrEvts;     // ! track level correction histograms
 
  TH2F* fHistAllEvts;                // ! event level correction histograms
  TH2F* fHistCentrEvts;              // ! event level correction histograms
  TH2F* fHistTrigCentrEvts;          // ! event level correction histograms
  TH2F* fHistSelEvts;                // ! event level correction histograms

  TH1F* fHistMCmultEtacut;                // ! MC distributions
  TH2F* fHistMCmultEtacutvsSPDmultEtacut; // ! MC distributions
  TH2F* fHistMCmultEtacutvsSPDmultcl1;    // ! MC distributions
  TH2F* fHistMCmultEtacutvsSPDmultcl2;    // ! MC distributions

  TH1F* fHistMCvtxx;                 // ! MC vertex
  TH1F* fHistMCvtxy;                 // ! MC vertex
  TH1F* fHistMCvtxz;                 // ! MC vertex

  TH2F* fHistRecvsGenImpactPar;      // ! impact parameter correlation (ZDC est vs gen)
  TH1F* fHistMCNpart;                // ! distribution of number of participants from MC 

  TH2F* fHistdPhidThetaPP;           // ! tracklet check histo
  TH2F* fHistdPhidThetaSS;           // ! tracklet check histo
  TH2F* fHistdPhidThetaComb;         // ! tracklet check histo

  TH2F* fHistDeVtx;                  // ! check histo

 private:    
  AliAnalysisTaskSPDdNdEta(const AliAnalysisTaskSPDdNdEta&); // not implemented
  AliAnalysisTaskSPDdNdEta& operator=(const AliAnalysisTaskSPDdNdEta&); // not implemented 
  
  ClassDef(AliAnalysisTaskSPDdNdEta, 5);  
};
#endif
 AliAnalysisTaskSPDdNdEta.h:1
 AliAnalysisTaskSPDdNdEta.h:2
 AliAnalysisTaskSPDdNdEta.h:3
 AliAnalysisTaskSPDdNdEta.h:4
 AliAnalysisTaskSPDdNdEta.h:5
 AliAnalysisTaskSPDdNdEta.h:6
 AliAnalysisTaskSPDdNdEta.h:7
 AliAnalysisTaskSPDdNdEta.h:8
 AliAnalysisTaskSPDdNdEta.h:9
 AliAnalysisTaskSPDdNdEta.h:10
 AliAnalysisTaskSPDdNdEta.h:11
 AliAnalysisTaskSPDdNdEta.h:12
 AliAnalysisTaskSPDdNdEta.h:13
 AliAnalysisTaskSPDdNdEta.h:14
 AliAnalysisTaskSPDdNdEta.h:15
 AliAnalysisTaskSPDdNdEta.h:16
 AliAnalysisTaskSPDdNdEta.h:17
 AliAnalysisTaskSPDdNdEta.h:18
 AliAnalysisTaskSPDdNdEta.h:19
 AliAnalysisTaskSPDdNdEta.h:20
 AliAnalysisTaskSPDdNdEta.h:21
 AliAnalysisTaskSPDdNdEta.h:22
 AliAnalysisTaskSPDdNdEta.h:23
 AliAnalysisTaskSPDdNdEta.h:24
 AliAnalysisTaskSPDdNdEta.h:25
 AliAnalysisTaskSPDdNdEta.h:26
 AliAnalysisTaskSPDdNdEta.h:27
 AliAnalysisTaskSPDdNdEta.h:28
 AliAnalysisTaskSPDdNdEta.h:29
 AliAnalysisTaskSPDdNdEta.h:30
 AliAnalysisTaskSPDdNdEta.h:31
 AliAnalysisTaskSPDdNdEta.h:32
 AliAnalysisTaskSPDdNdEta.h:33
 AliAnalysisTaskSPDdNdEta.h:34
 AliAnalysisTaskSPDdNdEta.h:35
 AliAnalysisTaskSPDdNdEta.h:36
 AliAnalysisTaskSPDdNdEta.h:37
 AliAnalysisTaskSPDdNdEta.h:38
 AliAnalysisTaskSPDdNdEta.h:39
 AliAnalysisTaskSPDdNdEta.h:40
 AliAnalysisTaskSPDdNdEta.h:41
 AliAnalysisTaskSPDdNdEta.h:42
 AliAnalysisTaskSPDdNdEta.h:43
 AliAnalysisTaskSPDdNdEta.h:44
 AliAnalysisTaskSPDdNdEta.h:45
 AliAnalysisTaskSPDdNdEta.h:46
 AliAnalysisTaskSPDdNdEta.h:47
 AliAnalysisTaskSPDdNdEta.h:48
 AliAnalysisTaskSPDdNdEta.h:49
 AliAnalysisTaskSPDdNdEta.h:50
 AliAnalysisTaskSPDdNdEta.h:51
 AliAnalysisTaskSPDdNdEta.h:52
 AliAnalysisTaskSPDdNdEta.h:53
 AliAnalysisTaskSPDdNdEta.h:54
 AliAnalysisTaskSPDdNdEta.h:55
 AliAnalysisTaskSPDdNdEta.h:56
 AliAnalysisTaskSPDdNdEta.h:57
 AliAnalysisTaskSPDdNdEta.h:58
 AliAnalysisTaskSPDdNdEta.h:59
 AliAnalysisTaskSPDdNdEta.h:60
 AliAnalysisTaskSPDdNdEta.h:61
 AliAnalysisTaskSPDdNdEta.h:62
 AliAnalysisTaskSPDdNdEta.h:63
 AliAnalysisTaskSPDdNdEta.h:64
 AliAnalysisTaskSPDdNdEta.h:65
 AliAnalysisTaskSPDdNdEta.h:66
 AliAnalysisTaskSPDdNdEta.h:67
 AliAnalysisTaskSPDdNdEta.h:68
 AliAnalysisTaskSPDdNdEta.h:69
 AliAnalysisTaskSPDdNdEta.h:70
 AliAnalysisTaskSPDdNdEta.h:71
 AliAnalysisTaskSPDdNdEta.h:72
 AliAnalysisTaskSPDdNdEta.h:73
 AliAnalysisTaskSPDdNdEta.h:74
 AliAnalysisTaskSPDdNdEta.h:75
 AliAnalysisTaskSPDdNdEta.h:76
 AliAnalysisTaskSPDdNdEta.h:77
 AliAnalysisTaskSPDdNdEta.h:78
 AliAnalysisTaskSPDdNdEta.h:79
 AliAnalysisTaskSPDdNdEta.h:80
 AliAnalysisTaskSPDdNdEta.h:81
 AliAnalysisTaskSPDdNdEta.h:82
 AliAnalysisTaskSPDdNdEta.h:83
 AliAnalysisTaskSPDdNdEta.h:84
 AliAnalysisTaskSPDdNdEta.h:85
 AliAnalysisTaskSPDdNdEta.h:86
 AliAnalysisTaskSPDdNdEta.h:87
 AliAnalysisTaskSPDdNdEta.h:88
 AliAnalysisTaskSPDdNdEta.h:89
 AliAnalysisTaskSPDdNdEta.h:90
 AliAnalysisTaskSPDdNdEta.h:91
 AliAnalysisTaskSPDdNdEta.h:92
 AliAnalysisTaskSPDdNdEta.h:93
 AliAnalysisTaskSPDdNdEta.h:94
 AliAnalysisTaskSPDdNdEta.h:95
 AliAnalysisTaskSPDdNdEta.h:96
 AliAnalysisTaskSPDdNdEta.h:97
 AliAnalysisTaskSPDdNdEta.h:98
 AliAnalysisTaskSPDdNdEta.h:99
 AliAnalysisTaskSPDdNdEta.h:100
 AliAnalysisTaskSPDdNdEta.h:101
 AliAnalysisTaskSPDdNdEta.h:102
 AliAnalysisTaskSPDdNdEta.h:103
 AliAnalysisTaskSPDdNdEta.h:104
 AliAnalysisTaskSPDdNdEta.h:105
 AliAnalysisTaskSPDdNdEta.h:106
 AliAnalysisTaskSPDdNdEta.h:107
 AliAnalysisTaskSPDdNdEta.h:108
 AliAnalysisTaskSPDdNdEta.h:109
 AliAnalysisTaskSPDdNdEta.h:110
 AliAnalysisTaskSPDdNdEta.h:111
 AliAnalysisTaskSPDdNdEta.h:112
 AliAnalysisTaskSPDdNdEta.h:113
 AliAnalysisTaskSPDdNdEta.h:114
 AliAnalysisTaskSPDdNdEta.h:115
 AliAnalysisTaskSPDdNdEta.h:116
 AliAnalysisTaskSPDdNdEta.h:117
 AliAnalysisTaskSPDdNdEta.h:118
 AliAnalysisTaskSPDdNdEta.h:119
 AliAnalysisTaskSPDdNdEta.h:120
 AliAnalysisTaskSPDdNdEta.h:121
 AliAnalysisTaskSPDdNdEta.h:122
 AliAnalysisTaskSPDdNdEta.h:123
 AliAnalysisTaskSPDdNdEta.h:124
 AliAnalysisTaskSPDdNdEta.h:125
 AliAnalysisTaskSPDdNdEta.h:126
 AliAnalysisTaskSPDdNdEta.h:127
 AliAnalysisTaskSPDdNdEta.h:128
 AliAnalysisTaskSPDdNdEta.h:129
 AliAnalysisTaskSPDdNdEta.h:130
 AliAnalysisTaskSPDdNdEta.h:131
 AliAnalysisTaskSPDdNdEta.h:132
 AliAnalysisTaskSPDdNdEta.h:133
 AliAnalysisTaskSPDdNdEta.h:134
 AliAnalysisTaskSPDdNdEta.h:135
 AliAnalysisTaskSPDdNdEta.h:136
 AliAnalysisTaskSPDdNdEta.h:137
 AliAnalysisTaskSPDdNdEta.h:138
 AliAnalysisTaskSPDdNdEta.h:139
 AliAnalysisTaskSPDdNdEta.h:140
 AliAnalysisTaskSPDdNdEta.h:141
 AliAnalysisTaskSPDdNdEta.h:142
 AliAnalysisTaskSPDdNdEta.h:143
 AliAnalysisTaskSPDdNdEta.h:144
 AliAnalysisTaskSPDdNdEta.h:145
 AliAnalysisTaskSPDdNdEta.h:146
 AliAnalysisTaskSPDdNdEta.h:147
 AliAnalysisTaskSPDdNdEta.h:148
 AliAnalysisTaskSPDdNdEta.h:149
 AliAnalysisTaskSPDdNdEta.h:150
 AliAnalysisTaskSPDdNdEta.h:151
 AliAnalysisTaskSPDdNdEta.h:152
 AliAnalysisTaskSPDdNdEta.h:153
 AliAnalysisTaskSPDdNdEta.h:154
 AliAnalysisTaskSPDdNdEta.h:155
 AliAnalysisTaskSPDdNdEta.h:156
 AliAnalysisTaskSPDdNdEta.h:157
 AliAnalysisTaskSPDdNdEta.h:158
 AliAnalysisTaskSPDdNdEta.h:159
 AliAnalysisTaskSPDdNdEta.h:160
 AliAnalysisTaskSPDdNdEta.h:161
 AliAnalysisTaskSPDdNdEta.h:162
 AliAnalysisTaskSPDdNdEta.h:163
 AliAnalysisTaskSPDdNdEta.h:164
 AliAnalysisTaskSPDdNdEta.h:165
 AliAnalysisTaskSPDdNdEta.h:166
 AliAnalysisTaskSPDdNdEta.h:167
 AliAnalysisTaskSPDdNdEta.h:168
 AliAnalysisTaskSPDdNdEta.h:169
 AliAnalysisTaskSPDdNdEta.h:170
 AliAnalysisTaskSPDdNdEta.h:171
 AliAnalysisTaskSPDdNdEta.h:172
 AliAnalysisTaskSPDdNdEta.h:173
 AliAnalysisTaskSPDdNdEta.h:174