ROOT logo
//
// Helper Class that contains a lot of 
// usefull static functions jet matchin pythia access etc.
//
#ifndef  ALIANALYSISHELPERJETTASKS_H
#define  ALIANALYSISHELPERJETTASKS_H
#include "TObject.h"

class AliMCEvent;
class AliAODJet;
class AliVEvent;
class TString;
class TArrayI;
class TArrayF;
class AliGenPythiaEventHeader;
class TVector3;
class AliGenEventHeader;

class AliAnalysisHelperJetTasks : public TObject {
 public:
  AliAnalysisHelperJetTasks() : TObject() {;}
  virtual ~AliAnalysisHelperJetTasks(){;}


  enum {kMaxJets = 6}; //  needed for array size not to fragemnt memory on the heap by many new/delete 


  enum { kNone = 1<<0,
	 kBunchBunch = 1<<1,
	 kBunchEmpty = 1<<2,
	 kEmptyEmpty= 1<<3,
	 kV0A=1<<4,
	 kV0C=1<<5,
	 kNoV0BG=1<<6,
	 kSPDFO=1<<7,
	 kPhysicsSelection = 1<<8, 
	 kVertexIn = 1<<9, 
	 kIsCosmic = 1<<10, 
	 kIsPileUp = 1<<11,
	 kIsMCND=1<<12,
	 kIsMCDD=1<<13,
	 kIsMCSD=1<<14,
	 kTotalSelections = (1<<15) - 1};

  enum Trigger {kAcceptAll = 0,kMB1,kMB2,kMB3,kSPDGFO,kTrigger}; // 
  // same as in PWG0Helper
  enum MCProcessType { kInvalidProcess = -1, kND = 0x1, kDD = 0x2, kSD = 0x4, kOnePart = 0x8 };

  static AliGenPythiaEventHeader*  GetPythiaEventHeader(const AliMCEvent *mcEvent);
  static void PrintStack(AliMCEvent *mcEvent,Int_t iFirst = 0,Int_t iLast = 0,Int_t iMaxPrint = 10);
  static void GetClosestJets(const AliAODJet *genJets,
			     const Int_t &kGenJets,
			     const AliAODJet *recJets,
			     const Int_t &kRecJets,
			     Int_t *iGenIndex,
			     Int_t *iRecIndex,
			     Int_t iDebug = 0, Float_t maxDist = 0.3);

  static void GetClosestJets(const TList *genJetsList,const Int_t &kGenJets,
			     const TList *recJetsList,const Int_t &kRecJets,
			     TArrayI &iGenIndex,TArrayI &iRecIndex,
			     Int_t iDebug = 0,Float_t maxDist = 0.3);
				 
  static void GetJetMatching(const TList *genJetsList, const Int_t &kGenJets,
                             const TList *recJetsList, const Int_t &kRecJets,
                             TArrayI &iMatchIndex, TArrayF &fPtFraction,
                             Int_t iDebug = 0, Float_t maxDist = 0.3, Int_t mode=1);
							 
  static Double_t GetFractionOfJet(const AliAODJet *recJet,const AliAODJet *genJet,Int_t mode=1);


  static void MergeOutputDirs(const char* cFiles,const char* cPattern,const char *cOutFile,Bool_t bUpdate = false); // merges all directories containing the pattern

  static void MergeOutput(const char* cFiles,const char* cDir = "",const char *cList = "",const char* cOutFile ="allpt.root",Bool_t bUpdate = false); // Merges the files in the input text file  needs the two histograms fh1PtHard_Trials, fh1Xsec and the name of the input list
  static Bool_t PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials);// get the cross section and the trails either from pyxsec.root or from pysec_hists.root
  static Bool_t PrintDirectorySize(const char* currFile,Int_t iDetail = -1); // print the size of the output on a given file
  static Bool_t GetEventShapes(TVector3 &n01,const TVector3 * pTrack, Int_t nTracks, Double_t * eventShapes);

  static MCProcessType GetPythiaEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);
  static MCProcessType GetDPMjetEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);
  static Int_t GetLastProcessType() { return fgLastProcessType; }

  static Bool_t Selected(Bool_t bSet = kFALSE,Bool_t bNew = kTRUE); // static function to store the state of selection from service task
  static Double_t ReactionPlane(Bool_t bSet = kFALSE,Double_t fNew = 0); 
  static Int_t GetPhiBin(Double_t phi,Int_t fNRPbins);

  static Bool_t IsPileUp(); // Wrapper for SelectInfo with PileUp
  static Bool_t IsCosmic(); // Wrapper for SelectInfo with cosmic
  static Bool_t TestSelectInfo(UInt_t iMask); // Wrapper for testing the SelectInfo bitmask
  static Bool_t TestEventClass(Int_t iClass); // Wrapper for testing the SelectInfo bitmask

  static UInt_t SelectInfo(Bool_t bSet = kFALSE,UInt_t iNew = 0); // static function to store the state bitmask of the selection from service task
  static Int_t  EventClass(Bool_t bSet = kFALSE,Int_t iNew = 0); // static function to store the event class of the selection from service task
  
  // these methods have been essentially copied from PWG0/AliTriggerAnalysis and expanded to use with AOD
  static Bool_t IsTriggerFired(const AliVEvent* aEsd, Trigger trigger);

  private:
  
  static Int_t fgLastProcessType;    // stores the raw value of the last process type extracted
 
  ClassDef(AliAnalysisHelperJetTasks, 7) 
};

#endif // ALIANALYSISHELPERJETTASKS_H
 AliAnalysisHelperJetTasks.h:1
 AliAnalysisHelperJetTasks.h:2
 AliAnalysisHelperJetTasks.h:3
 AliAnalysisHelperJetTasks.h:4
 AliAnalysisHelperJetTasks.h:5
 AliAnalysisHelperJetTasks.h:6
 AliAnalysisHelperJetTasks.h:7
 AliAnalysisHelperJetTasks.h:8
 AliAnalysisHelperJetTasks.h:9
 AliAnalysisHelperJetTasks.h:10
 AliAnalysisHelperJetTasks.h:11
 AliAnalysisHelperJetTasks.h:12
 AliAnalysisHelperJetTasks.h:13
 AliAnalysisHelperJetTasks.h:14
 AliAnalysisHelperJetTasks.h:15
 AliAnalysisHelperJetTasks.h:16
 AliAnalysisHelperJetTasks.h:17
 AliAnalysisHelperJetTasks.h:18
 AliAnalysisHelperJetTasks.h:19
 AliAnalysisHelperJetTasks.h:20
 AliAnalysisHelperJetTasks.h:21
 AliAnalysisHelperJetTasks.h:22
 AliAnalysisHelperJetTasks.h:23
 AliAnalysisHelperJetTasks.h:24
 AliAnalysisHelperJetTasks.h:25
 AliAnalysisHelperJetTasks.h:26
 AliAnalysisHelperJetTasks.h:27
 AliAnalysisHelperJetTasks.h:28
 AliAnalysisHelperJetTasks.h:29
 AliAnalysisHelperJetTasks.h:30
 AliAnalysisHelperJetTasks.h:31
 AliAnalysisHelperJetTasks.h:32
 AliAnalysisHelperJetTasks.h:33
 AliAnalysisHelperJetTasks.h:34
 AliAnalysisHelperJetTasks.h:35
 AliAnalysisHelperJetTasks.h:36
 AliAnalysisHelperJetTasks.h:37
 AliAnalysisHelperJetTasks.h:38
 AliAnalysisHelperJetTasks.h:39
 AliAnalysisHelperJetTasks.h:40
 AliAnalysisHelperJetTasks.h:41
 AliAnalysisHelperJetTasks.h:42
 AliAnalysisHelperJetTasks.h:43
 AliAnalysisHelperJetTasks.h:44
 AliAnalysisHelperJetTasks.h:45
 AliAnalysisHelperJetTasks.h:46
 AliAnalysisHelperJetTasks.h:47
 AliAnalysisHelperJetTasks.h:48
 AliAnalysisHelperJetTasks.h:49
 AliAnalysisHelperJetTasks.h:50
 AliAnalysisHelperJetTasks.h:51
 AliAnalysisHelperJetTasks.h:52
 AliAnalysisHelperJetTasks.h:53
 AliAnalysisHelperJetTasks.h:54
 AliAnalysisHelperJetTasks.h:55
 AliAnalysisHelperJetTasks.h:56
 AliAnalysisHelperJetTasks.h:57
 AliAnalysisHelperJetTasks.h:58
 AliAnalysisHelperJetTasks.h:59
 AliAnalysisHelperJetTasks.h:60
 AliAnalysisHelperJetTasks.h:61
 AliAnalysisHelperJetTasks.h:62
 AliAnalysisHelperJetTasks.h:63
 AliAnalysisHelperJetTasks.h:64
 AliAnalysisHelperJetTasks.h:65
 AliAnalysisHelperJetTasks.h:66
 AliAnalysisHelperJetTasks.h:67
 AliAnalysisHelperJetTasks.h:68
 AliAnalysisHelperJetTasks.h:69
 AliAnalysisHelperJetTasks.h:70
 AliAnalysisHelperJetTasks.h:71
 AliAnalysisHelperJetTasks.h:72
 AliAnalysisHelperJetTasks.h:73
 AliAnalysisHelperJetTasks.h:74
 AliAnalysisHelperJetTasks.h:75
 AliAnalysisHelperJetTasks.h:76
 AliAnalysisHelperJetTasks.h:77
 AliAnalysisHelperJetTasks.h:78
 AliAnalysisHelperJetTasks.h:79
 AliAnalysisHelperJetTasks.h:80
 AliAnalysisHelperJetTasks.h:81
 AliAnalysisHelperJetTasks.h:82
 AliAnalysisHelperJetTasks.h:83
 AliAnalysisHelperJetTasks.h:84
 AliAnalysisHelperJetTasks.h:85
 AliAnalysisHelperJetTasks.h:86
 AliAnalysisHelperJetTasks.h:87
 AliAnalysisHelperJetTasks.h:88
 AliAnalysisHelperJetTasks.h:89
 AliAnalysisHelperJetTasks.h:90
 AliAnalysisHelperJetTasks.h:91
 AliAnalysisHelperJetTasks.h:92
 AliAnalysisHelperJetTasks.h:93
 AliAnalysisHelperJetTasks.h:94
 AliAnalysisHelperJetTasks.h:95
 AliAnalysisHelperJetTasks.h:96
 AliAnalysisHelperJetTasks.h:97
 AliAnalysisHelperJetTasks.h:98
 AliAnalysisHelperJetTasks.h:99
 AliAnalysisHelperJetTasks.h:100
 AliAnalysisHelperJetTasks.h:101
 AliAnalysisHelperJetTasks.h:102
 AliAnalysisHelperJetTasks.h:103
 AliAnalysisHelperJetTasks.h:104
 AliAnalysisHelperJetTasks.h:105