#ifndef ALIANALYSISMUMUNCH_H
#define ALIANALYSISMUMUNCH_H
#include "AliAnalysisMuMuBase.h"
#include "TRandom3.h"
#include "TMap.h"
class TH2F;
class TH2;
class AliVEvent;
class AliAODTracklets;
class TAxis;
class TF1;
class AliAODVertex;
class AliAnalysisMuMuNch : public AliAnalysisMuMuBase
{
public:
AliAnalysisMuMuNch(TH2F* spdCorrection=0x0, TProfile* spdMeanCorrection = 0x0, Double_t meanTrRef=-1., Double_t etaMin=-0.5, Double_t etaMax=0.5
, Double_t zmin=-10., Double_t zmax=10., Bool_t disableHistos=kFALSE ,Bool_t computeResolution=kFALSE);
AliAnalysisMuMuNch(TProfile* spdMeanCorrection, TProfile* spdMeanCorrectionToCompare, Double_t meanTrRef=-1., Double_t etaMin=-1.0,
Double_t etaMax=1.0, Double_t zMin=-10., Double_t zMax=10., Double_t etaMinToCompare=-0.5, Double_t etaMaxToCompare=0.5,Bool_t disableHistos=kFALSE, Bool_t computeResolution=kFALSE);
AliAnalysisMuMuNch(TObjArray* spdCorrectionList, Double_t meanTrRef=-1., Double_t etaMin=-0.5, Double_t etaMax=0.5
, Double_t zmin=-10, Double_t zmax=10, Bool_t disableHistos=kFALSE ,Bool_t computeResolution=kFALSE);
virtual ~AliAnalysisMuMuNch();
void DefineGeneratorName(const char* genName);
Bool_t HasAtLeastNTrackletsInEtaRange(const AliVEvent& event, Int_t n,
Double_t& etaMin, Double_t& etaMax) const;
void NameOfHasAtLeastNTrackletsInEtaRange(TString& name, Int_t n,
Double_t& etaMin, Double_t& etaMax) const;
virtual void SetEvent(AliVEvent* event, AliMCEvent* mcEvent=0x0);
void SetRun(const AliInputEventHandler* eventHandler);
virtual void Terminate(Option_t *);
protected:
void AddHisto(const char* eventSelection,
const char* triggerClassName,
const char* centrality,
const char* histoname,
Double_t z,
TH1* h,
Bool_t isMC=kFALSE);
void AttachSPDAcceptance(UInt_t dataType,
const char* eventSelection,
const char* triggerClassName,
const char* centrality,const char* histoname);
void FillHistosForMCEvent(const char* eventSelection, const char* triggerClassName,
const char* centrality);
void FillHistosForEvent(const char* eventSelection, const char* triggerClassName,
const char* centrality);
virtual void DefineHistogramCollection(const char* eventSelection, const char* triggerClassName,
const char* centrality);
void DefineSPDAcceptance();
Bool_t GetEtaRangeSPD(Double_t spdZVertex, Double_t etaRange[]);
Double_t GetSPDCorrection(Double_t zvert, Double_t eta) const;
Double_t GetTrackletsMeanCorrection(Double_t zvert, Int_t nTracklets,Bool_t corrToCompare=kFALSE) const;
AliAODTracklets* GetTracklets(AliVEvent* event);
Bool_t IsMCtrackFromGenerator(Int_t indexMC) const;
private:
Double_t NumberOfTrackletsInEtaRange(const AliVEvent& event, Double_t& etamin,
Double_t& etamax, Bool_t corrected=kFALSE) const;
void DefineSPDCorrectionMap(TObjArray* spdCorrectionList);
private:
TH2F* fSPDOneOverAccxEff;
TMap* fSPDCorrectionMap;
TObjArray* fSPDCorrectionList;
TProfile* fSPDMeanTracklets;
TProfile* fSPDMeanTrackletsCorrToCompare;
TAxis* fEtaAxis;
TAxis* fZAxis;
AliVEvent* fCurrentEvent;
Double_t fMeanTrRef;
Double_t fEtaMin;
Double_t fEtaMax;
Double_t fEtaMinToCompare;
Double_t fEtaMaxToCompare;
Double_t fetaRange[2];
Double_t fZMin;
Double_t fZMax;
Bool_t fResolution;
TRandom3* frand;
TString* fGeneratorHeaderClass;
TF1* fSPD1LR;
TF1* fSPD1LL;
TF1* fSPD2LR;
TF1* fSPD2LL;
ClassDef(AliAnalysisMuMuNch,4)
};
#endif