ROOT logo
/* $Id$ */

#ifndef ALIPWG0HELPER_H
#define ALIPWG0HELPER_H

#include <TObject.h>
#include <AliTriggerAnalysis.h>

// static helper functions

class AliESDEvent;
class AliESDVertex;
class TParticle;
class TH1;
class TH2;
class TH3;
class AliHeader;
class AliGenEventHeader;
class AliStack;
class TTree;
class AliOfflineTrigger;
class AliMultiplicity;

class AliPWG0Helper : public TObject
{
  public:
    // kTPCSPD: tracks + tracklets not using any cluster associated to tracks 
    enum AnalysisMode { kInvalid = -1, kSPD = 0x1, kTPC = 0x2, kTPCITS = 0x4, kFieldOn = 0x8, kSPDOnlyL0 = 0x10, kTPCSPD = 0x20}; 
    // in case we want to use bitmaps...
    enum MCProcessType { kInvalidProcess = -1, kND = 0x1, kDD = 0x2, kSD = 0x4, kOnePart = 0x8 };
    enum DiffTreatment { kMCFlags = 0, kUA5Cuts = 1, kE710Cuts, kALICEHadronLevel };

    static const AliESDVertex* GetVertex(const AliESDEvent* aEsd, AnalysisMode analysisMethod, Bool_t debug = kFALSE);
    static Bool_t TestVertex(const AliESDVertex* vertex, AnalysisMode analysisMode, Bool_t debug = kFALSE);
    
    static Bool_t IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries, Bool_t adebug = kFALSE);

    static MCProcessType GetEventProcessType(AliESDEvent* esd, AliHeader* header, AliStack* stack, DiffTreatment diffTreatment);
    static MCProcessType GetEventProcessType(AliHeader* aHeader, Bool_t adebug = kFALSE);
    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 TParticle* FindPrimaryMother(AliStack* stack, Int_t label);
    static Int_t FindPrimaryMotherLabel(AliStack* stack, Int_t label);

    static void CreateProjections(TH3* hist, Bool_t save = kFALSE);
    static void CreateDividedProjections(TH3* hist, TH3* hist2, const char* axis = 0, Bool_t putErrors = kFALSE, Bool_t save = kFALSE);
    static const char* GetAxisTitle(TH3* hist, const char axis);

    static void NormalizeToBinWidth(TH1* hist);
    static void NormalizeToBinWidth(TH2* hist);

    static void PrintConf(AnalysisMode analysisMode, AliTriggerAnalysis::Trigger trigger, DiffTreatment diffTreatment);
    
    static Double_t Rapidity(Double_t pt, Double_t pz, Double_t m);
    static Bool_t IsHadronLevelSingleDiffractive(AliStack* stack, Float_t cms, Float_t xiMin, Float_t xiMax);
    
  protected:
    static Int_t fgLastProcessType;    // stores the raw value of the last process type extracted
 
    ClassDef(AliPWG0Helper, 0)

  private:
    AliPWG0Helper(const AliPWG0Helper&);
    AliPWG0Helper& operator=(const AliPWG0Helper&);
};

#endif

 AliPWG0Helper.h:1
 AliPWG0Helper.h:2
 AliPWG0Helper.h:3
 AliPWG0Helper.h:4
 AliPWG0Helper.h:5
 AliPWG0Helper.h:6
 AliPWG0Helper.h:7
 AliPWG0Helper.h:8
 AliPWG0Helper.h:9
 AliPWG0Helper.h:10
 AliPWG0Helper.h:11
 AliPWG0Helper.h:12
 AliPWG0Helper.h:13
 AliPWG0Helper.h:14
 AliPWG0Helper.h:15
 AliPWG0Helper.h:16
 AliPWG0Helper.h:17
 AliPWG0Helper.h:18
 AliPWG0Helper.h:19
 AliPWG0Helper.h:20
 AliPWG0Helper.h:21
 AliPWG0Helper.h:22
 AliPWG0Helper.h:23
 AliPWG0Helper.h:24
 AliPWG0Helper.h:25
 AliPWG0Helper.h:26
 AliPWG0Helper.h:27
 AliPWG0Helper.h:28
 AliPWG0Helper.h:29
 AliPWG0Helper.h:30
 AliPWG0Helper.h:31
 AliPWG0Helper.h:32
 AliPWG0Helper.h:33
 AliPWG0Helper.h:34
 AliPWG0Helper.h:35
 AliPWG0Helper.h:36
 AliPWG0Helper.h:37
 AliPWG0Helper.h:38
 AliPWG0Helper.h:39
 AliPWG0Helper.h:40
 AliPWG0Helper.h:41
 AliPWG0Helper.h:42
 AliPWG0Helper.h:43
 AliPWG0Helper.h:44
 AliPWG0Helper.h:45
 AliPWG0Helper.h:46
 AliPWG0Helper.h:47
 AliPWG0Helper.h:48
 AliPWG0Helper.h:49
 AliPWG0Helper.h:50
 AliPWG0Helper.h:51
 AliPWG0Helper.h:52
 AliPWG0Helper.h:53
 AliPWG0Helper.h:54
 AliPWG0Helper.h:55
 AliPWG0Helper.h:56
 AliPWG0Helper.h:57
 AliPWG0Helper.h:58
 AliPWG0Helper.h:59
 AliPWG0Helper.h:60
 AliPWG0Helper.h:61
 AliPWG0Helper.h:62
 AliPWG0Helper.h:63
 AliPWG0Helper.h:64
 AliPWG0Helper.h:65
 AliPWG0Helper.h:66
 AliPWG0Helper.h:67
 AliPWG0Helper.h:68
 AliPWG0Helper.h:69
 AliPWG0Helper.h:70