ROOT logo
// $Id: AliJFilter.h,v 1.5 2012/04/19 15:19:52 jkral Exp $

//______________________________________________________________________________
// Analysis task for high pt particle correlations 
// author: R.Diaz, J. Rak,  D.J. Kim
// ALICE Group University of Jyvaskyla 
// Finland 
//
// Fill the analysis containers for ESD or AOD
// Note: Adapted for AliAnalysisTaskSE
//////////////////////////////////////////////////////////////////////////////

#ifndef ALIJFILTER_H
#define ALIJFILTER_H

#include "TNamed.h"
#include "AliJRunHeader.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliAnalysisTaskSE.h"
#include <iostream>

#include <AliJConst.h>
#include <TVectorT.h>

//==============================================================

#ifndef AliJMaxDimBuffer
#define AliJMaxDimBuffer
const int kMaxDimBuffer = 300;//max length of a line read to a buffe
#endif

class AliJEventHeader;
class AliJRunHeader;
class AliJTrack;
class AliAnalysisTaskSE;

class TH1D;
class TH2D;
class TNtuple;
class TList;
class TTree;
class TFormula;
class TRefArray;
class TArrayI;

class AliMCEvent; 
class AliESDEvent; 
class AliESDtrack;
class AliAODEvent; 
class AliAODTrack; 
class AliESDtrackCuts;
class AliESDVZERO;
class AliESDCentrality;
class AliVCluster;
class AliVCaloCells;
class AliVEvent;

class AliEMCALGeometry;
class AliEMCALGeoUtils;
class AliEMCALRecoUtils;
class AliPHOSGeoUtils;

class AliMCEvent;
class AliAnalysisFilter;

class AliESDTZERO;
class AliESDZDC;
class AliPIDResponse;
class AliPIDResponse;
class AliPIDCombined;
class AliESDTZERO;
class AliAnalysisUtils;

using namespace std;

class AliJFilter : public TNamed  {

 public:
  AliJFilter();
  AliJFilter(const char *name,  AliAnalysisTaskSE *task);
  AliJFilter(const AliJFilter& ap);   
  AliJFilter& operator = (const AliJFilter& ap);
  virtual ~AliJFilter();

  // methods to fill from AliAnalysisTaskSE
  virtual void UserCreateOutputObjects(); 
  virtual void Init();   
  virtual void LocalInit() { Init(); }
  virtual void UserExec(Option_t *option);
  virtual void Terminate(Option_t * opt = "");


  void SetTrackFilter( AliAnalysisFilter * filter ){ fESDFilter = filter; }
  bool GetEventSuccess() const { return fEventSuccess; }
  //are ESDs from real  exp or MonteCarlo 
  //  AliEMCALGeoUtils* GetEMCALGeoUtils (bool doDelete=kFALSE);
  void SetClusterThreshold(double t) { fClusterThreshold = t; }
  void SetTrackThreshold(double t) { fTrackThreshold = t; }
  void SetMyTask( AliAnalysisTaskSE *t ) { fMyTask = t; }
  TClonesArray *GetTrackList() const { return fTrackList; }
  TClonesArray *GetPhotonList() const { return fPhotonList; }
  TClonesArray *GetCaloCellList() const { return fCaloCellList; }
  TClonesArray *GetMCTrackList() const { return fMCTrackList; }
  TClonesArray *GetHeaderList() const { return fHeaderList; }
  TList        *GetRunInfoList() const { return fRunInfoList; }

  AliESDVZERO  *GetESDVZERO() const { return fVZEROData; }
  AliESDTZERO  *GetESDTZERO() const { return fTZEROData; }
  //  AliESDFMD*          fFMDData;
  AliESDZDC* GetESDZDC() const { return fZDCData; }
 
  TClonesArray **GetTrackListP()  { return &fTrackList; }
  TClonesArray **GetPhotonListP()  { return &fPhotonList; }
  TClonesArray **GetCaloCellListP()  { return &fCaloCellList; }
  TClonesArray **GetMCTrackListP()  { return &fMCTrackList; }
  TClonesArray **GetHeaderListP() { return &fHeaderList; }
  TList **GetRunInfoListP()  { return &fRunInfoList; }

  AliESDVZERO** GetESDVZEROP() { return &fVZEROData; }
  AliESDTZERO** GetESDTZEROP() { return &fTZEROData; }
  //  AliESDFMD*          fFMDData;
  AliESDZDC** GetESDZDCP() { return &fZDCData; }

  Bool_t      GetStoreEventPlaneSource(){ return fAliJRunHeader->GetStoreEventPlaneSource(); }
  Bool_t      GetStoreEMCalInfo(){ return fAliJRunHeader->GetStoreEMCalInfo(); }
  AliESDEvent * ESDEvent(){ return FromESD()? dynamic_cast<AliESDEvent*>(Event()):NULL;}
  AliAODEvent * AODEvent(){ return FromAOD()? dynamic_cast<AliAODEvent*>(Event()):NULL;}
  AliVEvent   * Event(){ return fMyTask->InputEvent(); }
  AliMCEvent  * MCEvent(){ return IsMC()?fMyTask->MCEvent():NULL; }

  Bool_t       IsMC(){ return fAliJRunHeader->IsMC(); }
  Bool_t       FromESD(){ return fAliJRunHeader->FromESD(); }
  Bool_t       FromAOD(){ return fAliJRunHeader->FromAOD(); }
 
  AliJRunHeader* GetAliJRunHeader() const { return fAliJRunHeader; }
  void    SetAliJRunHeader( AliJRunHeader* header ){ fAliJRunHeader=header; } 
 private:

  Int_t        DebugLevel(){ return fMyTask->DebugLevel(); }
  inline void   DEBUG(int level, int type, TString msg1, TString msg2=""){
    if(DebugLevel()>level) std::cout<<type<<"\t"<<msg1<<" : "<<msg2<<std::endl;
  }

  AliJEventHeader* ReadCommonHeader(AliVEvent *event);
  // methods to read data from ESD
  void ReadESDTracks(AliESDEvent* esd);
  void ConvertESDTPCOnlyTracks(AliESDEvent* esd, int iTrack, AliJTrack * ctrack, double ptMin, double ptMax);
  void ConvertESDGCGTracks(AliESDEvent* esd, int iTrack, AliJTrack * ctrack, double ptMin, double ptMax);
  void ReadESDCaloClusters(const AliESDEvent* esd);
  void ReadESDCaloCells(const AliESDEvent* esd);
  void ReadESDHeader(AliESDEvent* esd);
  void ReadESDPID(AliESDtrack* track, AliJTrack* ctrack);
  // methods to read data from AOD
  Bool_t ReadAODTracks(const AliAODEvent* aod);
  Bool_t ReadAODCaloClusters(const AliAODEvent* aod);
  void ReadAODCaloCells(const AliAODEvent* aod);
  void ReadAODHeader(AliAODEvent* aod);
  void ReadFilter();
  void ReadMCTracksFromESD();
  void ReadMCTracksFromAOD();
	void RemapMCLabels();

  Int_t GetSuperModuleNumber(bool isemcal, AliVCluster *cluster, AliVCaloCells *cells, Int_t absId);
  Double_t* GetCellsAmplitude( bool isemcal, AliVCluster *cluster, AliVCaloCells *emCells, AliVCaloCells *phoCells );

  UInt_t ConvertTriggerMask();//Converts alice trigger mask to JCorran trigger mask
  //functions used for event selction:
  bool AcceptAODTrack(AliAODTrack* aodTrack);
  void SetOADBPath(const char* path) {fOADBPath=path;}
  const char* GetOADBPath() const { return fOADBPath.Data(); }

  // method to fill jcorran
  void PrintOut() const;
  
  // UTILS
  void AddList(const char* aname, const char* cname, TClonesArray **obj, int nlist);

  // d a t a     m e m b e r s
  AliESDtrackCuts* fEsdTrackCuts; // track selection cuts
  AliAnalysisFilter * fESDFilter; // filter set of track selection BS
  TVectorT<double>  fIsRealOrMC; // flags if the input are real (0) ESDs or MonteCarlo ESDs (1)
  TString fActiveTriggers[kRangeTriggerTableAlice]; // alice table mapping trigger bit to trigger name
  TString fTriggerTableJCorran[kRangeTriggerTableJCorran]; // JCorran trigger table TBit 0 =MinBias
  Bool_t fStoreEventPlaneSource; // store event plane
  TString fOADBPath; // oadb path
  TRefArray *fCaloClustersArr; //! calo cluster array
  Double_t fClusterThreshold; // for event tropping
  Double_t fTrackThreshold; // for event tropping
  Bool_t fEventSuccess; //! if filter was successful with current event

  TArrayI *fMcMap; //! mc index map

  // jcorran output objects
  TClonesArray *    fTrackList;   //! list of charged track objects
  TClonesArray *    fMCTrackList; //! list of charged track objects
  TClonesArray *    fPhotonList;  //! list of photons objects
  TClonesArray *    fCaloCellList;  //! list of calo cells
  TClonesArray *    fHeaderList;  //! event details
  TList *        fRunInfoList; //! run details
  AliPIDResponse  *fPIDResponse; //! PID response object
  AliPIDCombined  *fPIDCombined; //! PID response object

  AliESDVZERO*        fVZEROData;  //!
  AliESDTZERO*        fTZEROData;  //!
  //  AliESDFMD*          fFMDData;
  AliESDZDC*          fZDCData;  //!

  vector<Int_t>       fEMCLabels; //! EMCal hit labels
  vector<Int_t>       fEMCTreeLabels; //! cascades for EMCal hits

  AliJRunHeader*      fAliJRunHeader; //!  run details (mg field, trigger mask,etc...)
  AliEMCALGeometry * fEMCALGeometry;  //! emcal geometry
  AliEMCALRecoUtils * fEMCALRecoUtils;  //! reco utils
  AliPHOSGeoUtils  * fPHOSGeom; //! phos geometry matrix 
  AliAnalysisUtils  *fAnaUtils; //! analysis utils ALICE
  AliAnalysisTaskSE *fMyTask; //! task pointer


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