ROOT logo
#ifndef ALIDNDPTHELPER_H
#define ALIDNDPTHELPER_H

//
// static dNdPt helper functions
//
// Origin: Jan Fiete Grosse-Oetringhaus
// Modified and Extended: Jacek Otwinowski 19/11/2009
// last change: 2013-06-13 by M.Knichel
//

#include <TObject.h>
#include <THnSparse.h>
#include "AliTriggerAnalysis.h"
#include "AliPWG0Helper.h"

class TF1;
class TH1;
class TH2;
class TH3;
class TTree;
class THnSparse;
class TParticle;
class AliHeader;
class AliGenEventHeader;
class AliStack;
class AliESD;
class AliESDEvent;
class AliESDtrack;
class AliMCEvent;
class AliESDVertex;
class AliESDtrackCuts;
class AlidNdPtAcceptanceCuts;
class AlidNdPtEventCuts;
class AliPWG0Helper;
class AliOfflineTrigger;
class AliMultiplicity;

class AliGenDPMjetEventHeader;
class AliGenCocktailEventHeader;
class AliGenPythiaEventHeader;
class AliVertexerTracks;
class AliLog;
class AliHeader;

class AlidNdPtHelper : public TObject
{
  public:
    enum AnalysisMode { kInvalid = -1, kSPD = 0, kTPC, kTPCITS, kTPCSPDvtx, kTPCSPDvtxUpdate, kTPCTrackSPDvtx, kTPCTrackSPDvtxUpdate, kTPCITSHybrid, kTPCITSHybridTrackSPDvtx, kTPCITSHybridTrackSPDvtxDCArPt, kITSStandAloneTrackSPDvtx,kITSStandAloneTPCTrackSPDvtx, kMCRec };

    enum ParticleMode { kAllPart = 0, kMCPion, kMCKaon, kMCProton, kPlus, kMinus, kCosmic, kBackgroundTrack, kMCRest, kVZEROCase1, kVZEROCase2};

    enum OutputObject { kInvalidObject = -1, kCutAnalysis = 0, kAnalysis, kAnalysisPbPb, kCorrection, kSystematics, kCutAnalysisPbPb };

    enum TrackObject  { kInvalidTrackObject = -1, kAllTracks = 0, kAccTracks, kRecTracks, kMCTracks };
    enum EventObject  { kInvalidEventObject = -1, kAllEvents = 0, kTriggeredEvents, kAccEvents, kRecEvents, kMCEvents };
    enum CutSteps     { kCutSteps = 3 };

    static const AliESDVertex* GetVertex(AliESDEvent* const aEsd, const AlidNdPtEventCuts *const evtCuts,const  AlidNdPtAcceptanceCuts *const accCuts,const  AliESDtrackCuts *const trackCuts,  AnalysisMode analysisMethod, Bool_t debug = kFALSE,Bool_t bRedoTPC = kFALSE, Bool_t bUseMeanVertex = kFALSE);

    static const AliESDVertex* GetTPCVertexZ(const AliESDEvent* const aEsd, const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts, Float_t fraction=0.8, Int_t ntracksMin=2);

    static Bool_t TestRecVertex(const AliESDVertex* vertex, const AliESDVertex* vertexSPD, AnalysisMode analysisMode, Bool_t debug = kFALSE);

    static Bool_t IsPrimaryParticle(AliStack *const stack, Int_t idx, ParticleMode particleMode);
    static Bool_t IsCosmicTrack(AliESDtrack *const track1, AliESDtrack *const track2);
    static Bool_t IsGoodImpPar(const AliESDtrack *const track);
    static Int_t ConvertPdgToPid(const TParticle *const particle);

    static Bool_t SelectEvent(const AliESDEvent* const aEsd, AliESDtrackCuts* const esdTrackCuts);
    static Bool_t SelectMCEvent(AliMCEvent* const mcEvent);

    static TObjArray *GetAllChargedTracks(AliESDEvent *const esdEvent, AnalysisMode analysisMode);

    static TH1F* MakeResol(TH2F * const his, Int_t integ, Bool_t type, Bool_t drawBins, Int_t minHistEntries);
    static TH1F* CreateResHisto(TH2F* const hRes2, TH1F **phMean, Int_t integ,  Bool_t drawBinFits, Int_t minHistEntries);

    static Int_t GetTPCMBTrackMult(const AliESDEvent* const esdEvent, const AlidNdPtEventCuts *const evtCuts,const  AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts);
    static Int_t GetTPCMBPrimTrackMult(const AliESDEvent* const esdEvent, AliStack * const stack,const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts, const AliESDtrackCuts *const trackCuts);

    static Int_t GetSPDMBTrackMult(const AliESDEvent* const esdEvent, Float_t deltaThetaCut =0.025, Float_t deltaPhiCut = 0.08);
    static Int_t GetSPDMBPrimTrackMult(const AliESDEvent* const esdEvent, AliStack *const  stack, Float_t deltaThetaCut =0.025, Float_t deltaPhiCut = 0.08);
    static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AlidNdPtEventCuts *const evtCuts, AlidNdPtAcceptanceCuts *const accCuts);    
    static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AlidNdPtEventCuts *const evtCuts, AlidNdPtAcceptanceCuts *const accCuts, Double_t yShift);    

    static AliESDtrack* GetTPCOnlyTrackSPDvtx(const AliESDEvent* const esdEvent, Int_t iTrack, Bool_t bUpdate);
    static AliESDtrack* GetTPCOnlyTrackTrackSPDvtx(const AliESDEvent* const esdEvent, Int_t iTrack, Bool_t bUpdate);
    static AliESDtrack* GetTrackSPDvtx(const AliESDEvent* const esdEvent, Int_t iTrack, Bool_t bUpdate);
    static AliESDtrack* GetTrackTrackSPDvtx(const AliESDEvent* const esdEvent, Int_t iTrack, Bool_t bUpdate);

    static void PrintConf(AnalysisMode analysisMode, AliTriggerAnalysis::Trigger trigger);
    static void PrintMCInfo(AliStack *const pStack, Int_t label);

    static TH1* ScaleByBinWidth(TH1 *const hist=0);
    static TH1* GetContCorrHisto(TH1 *const hist=0);
    static TH1* CalcRelativeDifference(const TH1 *const hist1=0, const TH1 *const hist2=0);
    static TH1* CalcRelativeDifferenceFun(const TH1 *const hist=0, TF1 *const fun=0);
    static TH1* NormalizeToEvent(const TH2 *const hist1=0, const TH1 *const hist2=0);

    //static THnSparse* GenerateCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, char *const name);
    //static TH2* GenerateCorrMatrix(TH2 *const hist1, TH2 *const hist2, char *const name);
    //static TH1* GenerateCorrMatrix(TH1 *const hist1, TH1 *const hist2, char *const name);

    //static THnSparse* GenerateContCorrMatrix(THnSparse *const hist1, THnSparse *const hist2, char *const name);
    //static TH2* GenerateContCorrMatrix(TH2 *const hist1, TH2 *const hist2, char *const name);
    //static TH1* GenerateContCorrMatrix(TH1 *const hist1, TH1 *const hist2, char *const name);

    static THnSparse* GenerateCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, const char * name);
    static TH2* GenerateCorrMatrix(TH2 *const hist1, TH2 *const hist2, const char* name);
    static TH1* GenerateCorrMatrix(TH1 *const hist1, TH1 *const hist2, const char* name);

    static THnSparse* GenerateContCorrMatrix(THnSparse *const hist1, const THnSparse *const hist2, const char* name);
    static TH2* GenerateContCorrMatrix(TH2 *const hist1, TH2 *const hist2, const char* name);
    static TH1* GenerateContCorrMatrix(TH1 *const hist1, TH1 *const hist2, const char* name);

    static Double_t GetStrangenessCorrFactor(const Double_t pt);
    static Double_t GetStrangenessCorrFactorPbPb(const Double_t pt);    
    static Double_t GetLinearInterpolationValue(const Double_t x1, const Double_t y1, const Double_t x2, const Double_t y2, const Double_t pt);

    // function to rebin THnSparse, the content of hist1 will be rebinned, hist2 serves as a protoype for the binning
    static THnSparse* RebinTHnSparse(const THnSparse* hist1, THnSparse* hist2, const Char_t* newname = "",  Option_t* option = "");
    
    // function to get processtype (kSD, kND) from DPMJET header in PA
    static AliPWG0Helper::MCProcessType GetEventProcessTypePA(AliHeader* aHeader, Bool_t adebug = kFALSE);
    static AliPWG0Helper::MCProcessType GetDPMjetEventProcessTypePA(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);

    ClassDef(AlidNdPtHelper, 3);

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

#endif

 AlidNdPtHelper.h:1
 AlidNdPtHelper.h:2
 AlidNdPtHelper.h:3
 AlidNdPtHelper.h:4
 AlidNdPtHelper.h:5
 AlidNdPtHelper.h:6
 AlidNdPtHelper.h:7
 AlidNdPtHelper.h:8
 AlidNdPtHelper.h:9
 AlidNdPtHelper.h:10
 AlidNdPtHelper.h:11
 AlidNdPtHelper.h:12
 AlidNdPtHelper.h:13
 AlidNdPtHelper.h:14
 AlidNdPtHelper.h:15
 AlidNdPtHelper.h:16
 AlidNdPtHelper.h:17
 AlidNdPtHelper.h:18
 AlidNdPtHelper.h:19
 AlidNdPtHelper.h:20
 AlidNdPtHelper.h:21
 AlidNdPtHelper.h:22
 AlidNdPtHelper.h:23
 AlidNdPtHelper.h:24
 AlidNdPtHelper.h:25
 AlidNdPtHelper.h:26
 AlidNdPtHelper.h:27
 AlidNdPtHelper.h:28
 AlidNdPtHelper.h:29
 AlidNdPtHelper.h:30
 AlidNdPtHelper.h:31
 AlidNdPtHelper.h:32
 AlidNdPtHelper.h:33
 AlidNdPtHelper.h:34
 AlidNdPtHelper.h:35
 AlidNdPtHelper.h:36
 AlidNdPtHelper.h:37
 AlidNdPtHelper.h:38
 AlidNdPtHelper.h:39
 AlidNdPtHelper.h:40
 AlidNdPtHelper.h:41
 AlidNdPtHelper.h:42
 AlidNdPtHelper.h:43
 AlidNdPtHelper.h:44
 AlidNdPtHelper.h:45
 AlidNdPtHelper.h:46
 AlidNdPtHelper.h:47
 AlidNdPtHelper.h:48
 AlidNdPtHelper.h:49
 AlidNdPtHelper.h:50
 AlidNdPtHelper.h:51
 AlidNdPtHelper.h:52
 AlidNdPtHelper.h:53
 AlidNdPtHelper.h:54
 AlidNdPtHelper.h:55
 AlidNdPtHelper.h:56
 AlidNdPtHelper.h:57
 AlidNdPtHelper.h:58
 AlidNdPtHelper.h:59
 AlidNdPtHelper.h:60
 AlidNdPtHelper.h:61
 AlidNdPtHelper.h:62
 AlidNdPtHelper.h:63
 AlidNdPtHelper.h:64
 AlidNdPtHelper.h:65
 AlidNdPtHelper.h:66
 AlidNdPtHelper.h:67
 AlidNdPtHelper.h:68
 AlidNdPtHelper.h:69
 AlidNdPtHelper.h:70
 AlidNdPtHelper.h:71
 AlidNdPtHelper.h:72
 AlidNdPtHelper.h:73
 AlidNdPtHelper.h:74
 AlidNdPtHelper.h:75
 AlidNdPtHelper.h:76
 AlidNdPtHelper.h:77
 AlidNdPtHelper.h:78
 AlidNdPtHelper.h:79
 AlidNdPtHelper.h:80
 AlidNdPtHelper.h:81
 AlidNdPtHelper.h:82
 AlidNdPtHelper.h:83
 AlidNdPtHelper.h:84
 AlidNdPtHelper.h:85
 AlidNdPtHelper.h:86
 AlidNdPtHelper.h:87
 AlidNdPtHelper.h:88
 AlidNdPtHelper.h:89
 AlidNdPtHelper.h:90
 AlidNdPtHelper.h:91
 AlidNdPtHelper.h:92
 AlidNdPtHelper.h:93
 AlidNdPtHelper.h:94
 AlidNdPtHelper.h:95
 AlidNdPtHelper.h:96
 AlidNdPtHelper.h:97
 AlidNdPtHelper.h:98
 AlidNdPtHelper.h:99
 AlidNdPtHelper.h:100
 AlidNdPtHelper.h:101
 AlidNdPtHelper.h:102
 AlidNdPtHelper.h:103
 AlidNdPtHelper.h:104
 AlidNdPtHelper.h:105
 AlidNdPtHelper.h:106
 AlidNdPtHelper.h:107
 AlidNdPtHelper.h:108
 AlidNdPtHelper.h:109
 AlidNdPtHelper.h:110
 AlidNdPtHelper.h:111
 AlidNdPtHelper.h:112
 AlidNdPtHelper.h:113
 AlidNdPtHelper.h:114
 AlidNdPtHelper.h:115
 AlidNdPtHelper.h:116
 AlidNdPtHelper.h:117
 AlidNdPtHelper.h:118
 AlidNdPtHelper.h:119
 AlidNdPtHelper.h:120
 AlidNdPtHelper.h:121
 AlidNdPtHelper.h:122
 AlidNdPtHelper.h:123
 AlidNdPtHelper.h:124
 AlidNdPtHelper.h:125
 AlidNdPtHelper.h:126
 AlidNdPtHelper.h:127
 AlidNdPtHelper.h:128
 AlidNdPtHelper.h:129
 AlidNdPtHelper.h:130
 AlidNdPtHelper.h:131
 AlidNdPtHelper.h:132
 AlidNdPtHelper.h:133
 AlidNdPtHelper.h:134
 AlidNdPtHelper.h:135