ROOT logo
#ifndef ALIANALYSISTASKMINIJET_H
#define ALIANALYSISTASKMINIJET_H

// Two-particle correlations using all particles over pt threshold
// Extract mini-jet yield and fragmentation properties via Delta-Phi histograms
// Can use ESD or AOD, reconstructed and Monte Carlo data as input
// Author: eva.sicking@cern.ch

class TList;
class TH1F;
class TH2F;
class TProfile;
class THnSparse;
class AliESDtrackCuts;

#include "AliAnalysisTaskSE.h"
#include <vector>

class AliAnalysisTaskMinijet : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskMinijet(const char *name="<default name>");
  virtual ~AliAnalysisTaskMinijet();
  
  virtual void UserCreateOutputObjects();
  virtual void UserExec(Option_t* option);
  virtual void Terminate(Option_t *);
  virtual void SetCuts(AliESDtrackCuts* cuts){fCuts = cuts;}
  
  void         SetUseMC(Bool_t useMC=kTRUE, Bool_t mcOnly=kFALSE)    {fUseMC = useMC; fMcOnly=mcOnly;}
  void         SetAnalyseOnlyPrimaries(Bool_t analysePrimOnly)       {fAnalysePrimOnly = analysePrimOnly;} // not used anymore
  void         SetPtRange(Float_t ptMin, Float_t ptMax)              {fPtMin = ptMin; fPtMax = ptMax; }
  void         SetTriggerPtCut(Float_t triggerPtCut)                 {fTriggerPtCut = triggerPtCut;}  
  void         SetAssociatePtCut(Float_t associatePtCut)             {fAssociatePtCut = associatePtCut;} 
  void         SetModeEsdAod(Int_t mode)                             {fMode = mode;}
  void         SetTriggerMask(Int_t triggerType)                     {fTriggerType = triggerType;}
  void         SetFilterBit(Int_t filterBit)                         {fFilterBit = filterBit;}
  void         SetMaxVertexZ(Float_t vertexZCut)                     {fVertexZCut = vertexZCut;}
  void         SetMaxEta(Float_t etaCut)                             {fEtaCut = etaCut;}
  void         SetMaxEtaSeed(Float_t etaCutSeed)                     {fEtaCutSeed = etaCutSeed;}
  void         SetSelectParticles(Int_t selectParticles)             {fSelectParticles = selectParticles;}
  void         SetSelectParticlesAssoc(Int_t selectParticlesAssoc)   {fSelectParticlesAssoc = selectParticlesAssoc;}
  void         SetCheckSDD(Bool_t checkSDD, Int_t selOption)         {fCheckSDD = checkSDD; fSelOption = selOption;}
  void         SetCorrStrangeness(Bool_t corrStrangeness)            {fCorrStrangeness = corrStrangeness;}
  void         SetThreeParticleCorrelation(Bool_t threeParticleCorr) {fThreeParticleCorr = threeParticleCorr;}
  void         SetRejectCorrupted(Bool_t rejectChunks, Int_t nTPC)   {fRejectChunks = rejectChunks; fNTPC = nTPC;}

    void         SetCentralityMethod(TString centralityMethod)                   {fCentralityMethod = centralityMethod;}
    
    
 private:

  Double_t ReadEventESD         (std::vector<Float_t> &pt,  std::vector<Float_t> &eta,
			      std::vector<Float_t> &phi,  std::vector<Short_t> &charge,
			      std::vector<Float_t> &strangnessWeight,
			      std::vector<Double_t> &nTracksTracklets, const Int_t step);
  Double_t ReadEventESDRecMcProp(std::vector<Float_t> &pt,  std::vector<Float_t> &eta,
			      std::vector<Float_t> &phi,  std::vector<Short_t> &charge,
			      std::vector<Float_t> &strangnessWeight,
			      std::vector<Double_t> &nTracksTracklets, const Int_t step);
  Double_t ReadEventESDMC       (std::vector<Float_t> &pt,  std::vector<Float_t> &eta,
			      std::vector<Float_t> &phi,  std::vector<Short_t> &charge,
			      std::vector<Float_t> &strangnessWeight,
			      std::vector<Double_t> &nTracksTracklets, const Int_t step);
  
  Double_t ReadEventAOD         (std::vector<Float_t> &pt,  std::vector<Float_t> &eta,
			      std::vector<Float_t> &phi,  std::vector<Short_t> &charge,
			      std::vector<Float_t> &strangnessWeight,
			      std::vector<Double_t> &nTracksTracklets, const Int_t step);
  Double_t ReadEventAODRecMcProp(std::vector<Float_t> &pt,  std::vector<Float_t> &eta,
			      std::vector<Float_t> &phi,  std::vector<Short_t> &charge,
			      std::vector<Float_t> &strangnessWeight,
			      std::vector<Double_t> &nTracksTracklets, const Int_t step);
  Double_t ReadEventAODMC       (std::vector<Float_t> &pt,  std::vector<Float_t> &eta,
			      std::vector<Float_t> &phi,  std::vector<Short_t> &charge,
			      std::vector<Float_t> &strangnessWeight,
			      std::vector<Double_t> &nTracksTracklets, const Int_t step);
  
  void  Analyse         (const std::vector<Float_t> &pt, 
			 const std::vector<Float_t> &eta, 
			 const std::vector<Float_t> &phi, 
			 const std::vector<Short_t> &charge, 
			 const std::vector<Float_t> &strangnessWeight,
			 const Double_t ntacks, const Int_t ntacklets=0,
			 const Int_t nAll=0, const Int_t step=0);
  
  Bool_t                 SelectParticlePlusCharged(const Short_t charge, const Int_t pdg, const Bool_t prim);
  Bool_t                 SelectParticle(const Short_t charge, const Int_t pdg, const Bool_t prim);
  Bool_t                 CheckEvent(const Bool_t recVertex);
  const Double_t*        CreateLogAxis(const Int_t nbins, const Double_t xmin, const Double_t xmax); 
  Bool_t                 CheckLikeSign(const Short_t chargeEventAxis, const Short_t chargeOthers);


  Bool_t       fUseMC;                      // flag for Monte Carlo usages
  Bool_t       fMcOnly;                     // flag defines, if only MC data is used in analysis or also reconstructed data
  Double_t     fBSign;                      // magnetic field
  Bool_t       fAnalysePrimOnly;            // flag for analysis of primaries only (also in reconstructed data)
  Float_t      fPtMin;                      // set lower limit for pt acceptance for mutliplicity defintion
  Float_t      fPtMax;                      // set upper limit for pt acceptance for mutliplicity defintion
  AliESDtrackCuts* fCuts;                   // List of cuts for ESDs
  Float_t      fTriggerPtCut;               // cut on particle pt used as event axis
  Float_t      fAssociatePtCut;             // cut on particle pt used for correlations
  Int_t        fMode;                       // ESD(=0) of AOD(=1) reading 
  Int_t        fTriggerType;                // sets trigger -> AliVEvent::kMB, AliVEvent::kHighMult
  Int_t        fFilterBit;                  // Filter bit written in ESD filter, select track type
  Float_t      fVertexZCut;                 // vertex cut
  Float_t      fEtaCut;                     // eta acceptance cut
  Float_t      fEtaCutSeed;                 // eta acceptance cut for seed
  Int_t        fSelectParticles;            // only in cas of MC: use also neutral particles or not 
  Int_t        fSelectParticlesAssoc;       // only in cas of MC: use also neutral particles or not 
  Bool_t       fCheckSDD;                   // check if SDD was in read out partition (needed for LHC11a)
  Int_t        fSelOption;                  // 0 = use hit in SDD for event selection, 1 = use trigger for event selection
  Bool_t       fCorrStrangeness;            // for data correction -> Pythia simulations underestimate contamination from strangness
  Bool_t       fThreeParticleCorr;          // perform three particle correlation
  Bool_t       fRejectChunks;               // rejection of chunks in which no ITS tracks are reconstructed
  Int_t        fNTPC;                       // track number limit for rejection decision.

  AliESDEvent *fESDEvent;                   //! esd event
  AliAODEvent *fAODEvent;                   //! aod event
  Double_t        fNMcPrimAccept;              // global variable for mc multiplucity
  Double_t        fNRecAccept;                 // global variable for rec multiplucity
  Float_t      fNRecAcceptStrangeCorr;                 // global variable for rec multiplucity
  Double_t        fNMcPrimAcceptTracklet;      // global variable for mc multiplucity
  Double_t        fNRecAcceptTracklet;         // global variable for rec multiplucity
  Float_t      fVzEvent;                    // global variable for rec vertex position
  Double_t     fMeanPtRec;                  // global variable for rec mean pt
  Double_t     fLeadingPtRec;               // global variable for rec mean pt

  TList	     *fHists;                       // output list
  TH1F       *fStep;                        // how many events have passed which correction step
  TH1F       *fEventStat;                   // how many events are accepted by trigger, vertex selection, 1 track in acceptance (for real data)
  TH1F       *fHistPt;                      // Pt spectrum ESD
  TH1F       *fHistPtMC;                    // Pt spectrum MC
  TH2F       *fNContrNtracklets;            // control histogram for vertex->nContributers and number of tracklets
  TH2F       *fNContrNtracks;               // control histogram for vertex->nContributers and number of tracks
  TH2F       *fCorruptedChunks;             // control histogram: TPC tracks versus ITS-TPC-tracks
  TH2F       *fCorruptedChunksAfter;        // control histogram: TPC tracks versus ITS-TPC-tracks

  TH2F       *fNmcNch;                      // N mc - N ch rec
  TProfile   *fPNmcNch;                     // N mc - N ch rec
  TH2F       *fNmcNchVtx;                   // N mc - N ch rec for events with reconstructed vertex
  TH2F       *fNmcNchVtxStrangeCorr;        // N mc - N ch rec for events with reconstructed vertex + strangeness correction
  TProfile   *fPNmcNchVtx;                  // N mc - N ch rec for events with reconstructed vertex
  TH2F       *fNmcNchTracklet;              // N mc - N ch rec
  TProfile   *fPNmcNchTracklet;             // N mc - N ch rec
  TH2F       *fNmcNchVtxTracklet;           // N mc - N ch rec for events with reconstructed vertex
  TProfile   *fPNmcNchVtxTracklet;          // N mc - N ch rec for events with reconstructed vertex
  TH2F       *fChargedPi0;                  // charged versus charged+Pi0
  TH1F       *fVertexCheck;                 // check which fraction of events has vtx_rec but no good vtx_mc
  TH1F       *fPropagateDca;                // check of AliAODtrack::PropagateToDca

  THnSparse  *fMapSingleTrig[8];            //! multi-dim histo for trigger track properties
  THnSparse  *fMapPair[8];                  //! multi-dim histo for pair properties
  THnSparse  *fMapEvent[8];                 //! multi-dim histo for event properties
  THnSparse  *fMapAll[8];                   //! multi-dim histo for properties of all analysed tracks
  THnSparse  *fMapThree[8];                 //! multi-dim histo for properties of three particle correlations
  
  TH1F       * fVertexZ[8];                 // z of vertex
  TH1F       * fNcharge[8];                 // pt
  TH1F       * fPt[8];                      // pt
  TH1F       * fEta[8];                     // eta
  TH1F       * fPhi[8];                     // phi
  TH1F       * fDcaXY[8];                   // dca xy direction
  TH1F       * fDcaZ[8];                    // dca z direction

  TH1F       * fPtSeed[8];                  // pt of seed (event axis)
  TH1F       * fEtaSeed[8];                 // eta of seed 
  TH1F       * fPhiSeed[8];                 // phi of seed

  TH1F       * fPtOthers[8];                // pt of all other particels used in dEtadPhi
  TH1F       * fEtaOthers[8];               // eta of all other particels used in dEtadPhi
  TH1F       * fPhiOthers[8];               // phi of all other particels used in dEtadPhi
  TH2F       * fPtEtaOthers[8];             // pt-eta of all other particels used in dEtadPhi


  TH2F       * fPhiEta[8];                  // eta - phi
  TH2F       * fDPhiDEtaEventAxis[8];       // correlation dEta-dPhi towards event axis
  TH2F       * fDPhiDEtaEventAxisSeeds[8];  // correlation dEta-dPhi towards event axis of trigger particles
  TH1F       * fTriggerNch[8];              // number of triggers with accepted-track number
  TH2F       * fTriggerNchSeeds[8];         // number of triggers with accepted-track number
  TH1F       * fTriggerTracklet[8];         // number of triggers with accepted-tracklet number
  TH2F       * fNch07Nch[8];                // nCharged with pT>fTriggerPtCut vs nCharged
  TProfile   * fPNch07Nch[8];               // nCharged with pT>fTriggerPtCut vs nCharged
  
  TH2F       * fNch07Tracklet[8];           // nCharged with pT>fTriggerPtCut vs nTracklet
  TH2F       * fNchTracklet[8];             // nCharged vs nTracklet
  TProfile   * fPNch07Tracklet[8];           // nCharged with pT>fTriggerPtCut vs nTracklet

  TH1F       * fDPhiEventAxis[8];           // delta phi of associate tracks to event axis
  TH2F       * fDPhi1DPhi2[8];              // dPhi1 versus dPhi2: three particle correlation test
    
    TString fCentralityMethod;        //centrality pA
 
  AliAnalysisTaskMinijet(const AliAnalysisTaskMinijet&); // not implemented
  AliAnalysisTaskMinijet& operator=(const AliAnalysisTaskMinijet&); // not implemented
  
  ClassDef(AliAnalysisTaskMinijet, 2); // mini jet analysis with two particle correlations
};

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