ROOT logo
#ifndef ALIANALYSISTASKFASTEMBEDDING_H
#define ALIANALYSISTASKFASTEMBEDDING_H

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

/* $Id$ */

#include "AliAnalysisTaskSE.h"

class AliESDEvent;
class AliAODEvent;
class TTree;
class TFile;
class TChain;
class TObjArray;
class TObjString;
class TRandom3;
class TH1F;
class TH2F;
class TProfile;
class AliAODMCHeader;

class AliAnalysisTaskFastEmbedding : public AliAnalysisTaskSE {

public:
   
   AliAnalysisTaskFastEmbedding();
   AliAnalysisTaskFastEmbedding(const char *name);
   AliAnalysisTaskFastEmbedding(const AliAnalysisTaskFastEmbedding &copy);
   AliAnalysisTaskFastEmbedding& operator=(const AliAnalysisTaskFastEmbedding &o);
   virtual ~AliAnalysisTaskFastEmbedding();

   virtual void UserCreateOutputObjects();
   virtual void LocalInit() { Init(); }
   virtual void Init();
   virtual Bool_t UserNotify();
   virtual void UserExec(Option_t*);
   virtual void Terminate(Option_t */*option*/);

   void SetAODPath(TString path) {fAODPath = path;}
   void SetArrayOfAODPaths(TObjArray* arr) {fAODPathArray = arr;}
   void SetArrayOfAODEntries(TArrayI* arr) {fAODEntriesArray = arr;}
   void SetAODEntriesSum(Int_t i){ fAODEntriesSum = i;}
   void SetAODEntriesMax(Int_t i){ fAODEntriesMax = i;}
   
   virtual void     SetOfflineTrgMask(AliVEvent::EOfflineTriggerTypes mask) { fOfflineTrgMask = mask; }
   virtual void     SetMinContribVtx(Int_t n) { fMinContribVtx = n; }
   virtual void     SetVtxZMin(Float_t z) { fVtxZMin = z; }
   virtual void     SetVtxZMax(Float_t z) { fVtxZMax = z; }
   virtual void     SetEvtClassMin(Int_t evtClass) { fEvtClassMin = evtClass; }
   virtual void     SetEvtClassMax(Int_t evtClass) { fEvtClassMax = evtClass; }
   virtual void     SetCentMin(Float_t cent) { fCentMin = cent; }
   virtual void     SetCentMax(Float_t cent) { fCentMax = cent; }
   virtual void     SetNInputTracksMin(Int_t nTr) { fNInputTracksMin = nTr; }
   virtual void     SetNInputTracksMax(Int_t nTr) { fNInputTracksMax = nTr; }
   
   void SetTrackBranch(TString name) {fTrackBranch = name;}
   void SetMCparticlesBranch(TString name) {fMCparticlesBranch = name;}
   void SetJetBranch(TString name) {fJetBranch = name;}

   void SetEmbedMode(Int_t m) {fEmbedMode = m;}
   Int_t GetEmbedMode() const {return fEmbedMode;} 
   void SetEvtSelecMode(Int_t s) {fEvtSelecMode = s;}
   Int_t GetEvtSelecMode() const {return fEvtSelecMode;}

   void SetEvtSelJetPtRange(Float_t minPt, Float_t maxPt) {fEvtSelMinJetPt = minPt; fEvtSelMaxJetPt = maxPt;}
   void SetEvtSelJetEtaRange(Float_t minEta, Float_t maxEta) {fEvtSelMinJetEta = minEta; fEvtSelMaxJetEta = maxEta;}
   void SetEvtSelJetPhiRange(Float_t minPhi, Float_t maxPhi) {fEvtSelMinJetPhi = minPhi; fEvtSelMaxJetPhi = maxPhi;}
      void SetEffExtra(Float_t effextra) {fExtraEffPb = effextra;}   
   void SetToyNumberOfTrackRange(Int_t minN = 1, Int_t maxN = 1){ fToyMinNbOfTracks = minN, fToyMaxNbOfTracks = maxN; }
   void SetToyTrackRanges(Double_t minPt = 50., Double_t maxPt = 50., Double_t ptDistr=0,
   Double_t minEta = -.5, Double_t maxEta = .5,
   Double_t minPhi = 0., Double_t maxPhi = 2*TMath::Pi())
   {
      fToyMinTrackPt = minPt; fToyMaxTrackPt = maxPt; fToyDistributionTrackPt = ptDistr;
      fToyMinTrackEta = minEta; fToyMaxTrackEta = maxEta;
      fToyMinTrackPhi = minPhi; fToyMaxTrackPhi = maxPhi;}
   void SetToyFilterMap(UInt_t f) {fToyFilterMap = f;}
   void SetTrackFilterMap(UInt_t f) {fTrackFilterMap = f;}

   static Float_t GetPtHard(Bool_t bSet=kFALSE, Float_t newValue = 0.);
   
   virtual Int_t      GetPtHardBin(Double_t ptHard);
   virtual Bool_t     PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials);

   // embedding modes
   enum {kAODFull=0, kAODJetTracks, kAODJet4Mom, kToyTracks};
   // event selection from AOD
   enum {kEventsAll=0, kEventsJetPt};


private:

   AliESDEvent    *fESD;        //! ESD object
   AliAODEvent    *fAODout;     //! AOD out
   AliAODEvent    *fAODevent;   //! AOD in
   TTree          *fAODtree;    //! AODin tree
   TFile          *fAODfile;    //! AODin file
   AliAODMCHeader *mcHeader;    //! mc header
   TRandom3       *rndm;        //! random nummer generator
   Int_t          fInputEntries; // total nb. of events (for this subjob)

   TObjArray *fAODPathArray;    // array of paths of AOD in file
   TArrayI   *fAODEntriesArray; // array of entries of AODs 
   TString    fAODPath;         // path of AOD in file
   Int_t      fAODEntries;      // entries of AOD
   Int_t      fAODEntriesSum;   // sum of all entries of AODs
   Int_t      fAODEntriesMax;   // maximum entries of AODs

   AliVEvent::EOfflineTriggerTypes fOfflineTrgMask; // mask of offline triggers to accept
   Int_t   fMinContribVtx; // minimum number of track contributors for primary vertex
   Float_t fVtxZMin;	      // lower bound on vertex z
   Float_t fVtxZMax;	      // upper bound on vertex z
   Int_t   fEvtClassMin;	// lower bound on event class
   Int_t   fEvtClassMax;	// upper bound on event class
   Float_t fCentMin;	      // lower bound on centrality
   Float_t fCentMax;	      // upper bound on centrality
   Int_t   fNInputTracksMin;  // lower bound of nb. of input tracks
   Int_t   fNInputTracksMax;  // upper bound of nb. of input tracks
   
   TString fTrackBranch;       // name of branch for extra tracks in AOD out
   TString fMCparticlesBranch; // name of branch for extra mcparticles in AOD out
   TString fJetBranch;         // name of branch for extra jets AOD in

   Int_t fFileId;   // nb. of file from the list
   Int_t fAODEntry; // entry of extra AOD
   Int_t fCountEvents; // count processed events in this file

   Int_t fEmbedMode;     // embedding mode: kAODFull=0, kAODJetTracks=1, kAODJet4Mom=2, kToyTracks=3
   Int_t fEvtSelecMode;  // event selection criterion: kEventsAll=0, kEventsJetPt=1

   // event selection from AOD
   Float_t fEvtSelMinJetPt;       // minimum pt of the leading jet
   Float_t fEvtSelMaxJetPt;       // maximum pt of the leading jet
   Float_t fEvtSelMinJetEta;      // minimum eta of the leading jet
   Float_t fEvtSelMaxJetEta;      // maximum eta of the leading jet
   Float_t fEvtSelMinJetPhi;      // minimum phi of the leading jet
   Float_t fEvtSelMaxJetPhi;      // maximum phi of the leading jet
   Double_t fExtraEffPb;          //extra efficiency PbPb      
   
   // settings for toy "track generation"
   Int_t    fToyMinNbOfTracks;             // minimum nb. of tracks per event
   Int_t    fToyMaxNbOfTracks;             // maximum nb. of tracks per event
   Float_t  fToyMinTrackPt;                // minimum track pT
   Float_t  fToyMaxTrackPt;                // maximum track pT
   Float_t  fToyDistributionTrackPt;       // distribution of track pt
   Float_t  fToyMinTrackEta;               // minimum eta of tracks
   Float_t  fToyMaxTrackEta;               // maximum eta of tracks
   Float_t  fToyMinTrackPhi;               // minimum phi of tracks
   Float_t  fToyMaxTrackPhi;               // maximum phi of tracks
   UInt_t   fToyFilterMap;                 // filter map of tracks
   UInt_t   fTrackFilterMap;               // filter map of tracks for QA plots
   
   Int_t         fNPtHard;      // nb. of pT hard bins
   Double_t      fPtHard;       // pT hard
   Int_t         fPtHardBin;    // pT hard bin
   TClonesArray* fAODJets;      //! array of jets from aod
   Int_t         fNevents;      // number of events in aod
   Float_t       fXsection;     // average xsection of the event
   Float_t       fAvgTrials;    // average number of trials per event


   // histos
   TList *fHistList;          //  list of histograms
   TH1I  *fHistEvtSelection;  //! stastic of event selection
   TProfile *fh1Xsec;         //! cross-section
   TH1F  *fh1Trials;          //! nb. of trials (simulation)
   TH1F  *fh1TrialsEvtSel;    //! nb. of trials (event selection, e.g. jet pT)
   TH2F  *fh2PtHard;          //! pT hard bin
   TH2F  *fh2PtHardEvtSel;    //! pT hard bin (event selection)
   TH2F  *fh2PtHardTrials;     //! pT hard bin, weighted by nb. of trials
   
   // qa histos
   TH1F  *fh1TrackPt;         //! track pt
   TH2F  *fh2TrackEtaPhi;     //! track eta-phi
   TH1F  *fh1TrackN;          //! nb. of tracks
   TH1F  *fh1JetPt;           //! jet pt
   TH2F  *fh2JetEtaPhi;       //! jet eta-phi
   TH1F  *fh1JetN;            //! nb. of jets
   TH1F  *fh1MCTrackPt;       //! MC track pt
   TH2F  *fh2MCTrackEtaPhi;   //! MC track eta-phi
   TH1F  *fh1MCTrackN;        //! nb. of MC tracks
   TH1I  *fh1AODfile;         //! used AOD files from AODPathArray
   TH2I  *fh2AODevent;        //! selected events in AODs
   

   Int_t GetJobID();    // get job id (sub-job id on the GRID)
   Int_t SelectAODfile();
   Int_t OpenAODfile(Int_t trial = 0);


   ClassDef(AliAnalysisTaskFastEmbedding, 6);
};

#endif

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