#ifndef AliAnalysisTaskJetFlowMC_H
#define AliAnalysisTaskJetFlowMC_H
#include "TF1.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TRandom.h"
#include "AliAnalysisTaskSE.h"
class TList;
class TClonesArray;
class TArrayI;
class TVirtualMCDecayer;
class AliPicoTrack;
class AliAnalysisTaskJetFlowMC : public AliAnalysisTaskSE
{
public:
enum detectorType {kVZEROA, kVZEROC, kVZEROComb, kFixedEP};
AliAnalysisTaskJetFlowMC();
AliAnalysisTaskJetFlowMC(const char *name, Bool_t qa = kFALSE, Int_t seed = 0);
virtual ~AliAnalysisTaskJetFlowMC();
void UserCreateOutputObjects();
TH1F* BookTH1F(const char* name, const char* x, Int_t bins, Double_t min, Double_t max, Int_t c = -1, Bool_t append = kTRUE);
TH2F* BookTH2F(const char* name, const char* x, const char* y, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Int_t c = -1, Bool_t append = kTRUE);
void UserExec(Option_t *option);
void SetDebugMode(Bool_t d) { fDebug = d;}
void SetTracksInName(const char *name) { fTracksInName = name; }
void SetTracksOutName(const char *name) { fTracksOutName = name; }
void SetCentralityClasses(TArrayI* c) { fCentralityClasses = c; }
void SetReferenceDetector(detectorType type) { fDetectorType = type; }
void SetDifferentialV2(TF1* v2, Int_t c = 0) { fFuncDiffV2[c] = v2; }
void SetDifferentialV3(TF1* v3, Int_t c = 0) { fFuncDiffV3[c] = v3; }
void SetDifferentialV2(TH1* v2, Int_t c = 0) { fHistDiffV2[c] = v2; }
void SetDifferentialV3(TH1* v3, Int_t c = 0) { fHistDiffV3[c] = v3; }
void SetIntegratedV2(TH1* v2) { fHistIntV2 = v2; }
void SetIntegratedV3(TH1* v3) { fHistIntV3 = v3; }
void SetTrackSpectrum(TF1* ts) { fTrackSpectrum = ts; }
void SetRandomizeEta(Bool_t b) { fRandomizeEta = b; }
void SetMultiplicity(Int_t m) { fMult = m; }
void SetReuseTracks(Bool_t r) { fReuseTracks = r; }
void SetSingleFragmentationJetSpectrum(TF1* js) { fJetSpectrumSF = js; }
void SetNoOfSFJets(Int_t n) { fNoOfSFJets = n; }
void SetDecayer(TVirtualMCDecayer* d, Int_t c = 1) { fDecayer = d; fDecayerIterations = c;}
void V2AfterBurner(Double_t& phi, Double_t& eta, Double_t& pt) const;
void V3AfterBurner(Double_t& phi, Double_t& eta, Double_t& pt) const;
void InjectSingleFragmentationJetSpectrum(Int_t nacc);
void CalculateEventPlane();
Double_t GetTrackPt() const { return fTrackSpectrum->GetRandom();}
Double_t GetTrackEta() const { return gRandom->Uniform(-.9, .9); }
Double_t GetV2(Double_t pt) const {
return (fFuncDiffV2[fCenBin]) ? fFuncDiffV2[fCenBin]->Eval(pt) :
fHistDiffV2[fCenBin]->GetBinContent(fHistDiffV2[fCenBin]->GetXaxis()->FindBin(pt));
}
Double_t GetV3(Double_t pt) const {
return (fFuncDiffV3[fCenBin]) ? fFuncDiffV3[fCenBin]->Eval(pt) :
fHistDiffV3[fCenBin]->GetBinContent(fHistDiffV3[fCenBin]->GetXaxis()->FindBin(pt));
}
void GetFlowFluctuation(Double_t& vn) const {
vn += TMath::Sqrt(2*(vn*.25)*(vn*.25))*TMath::ErfInverse(2*(gRandom->Uniform(0, fFlowFluctuations))-1);
}
Double_t PhaseShift(Double_t x) const {
while (x>=TMath::TwoPi())x-=TMath::TwoPi();
while (x<0.)x+=TMath::TwoPi();
return x; }
Double_t PhaseShift(Double_t x, Double_t n) const {
x = PhaseShift(x);
if(TMath::Nint(n)==2) while (x>TMath::Pi()) x-=TMath::Pi();
if(TMath::Nint(n)==3) {
if(x>2.*TMath::TwoPi()/n) x = TMath::TwoPi() - x;
if(x>TMath::TwoPi()/n) x = TMath::TwoPi()-(x+TMath::TwoPi()/n);
}
return x; }
void SampleVnFromTF1(Double_t &phi) const {
phi = (fFuncVn) ? fFuncVn->GetRandom(0., TMath::TwoPi()) : 0; }
void FillHistogramsOriginalData(Double_t& pt, Double_t& eta, Double_t& phi) const {
fHistOriginalSpectrum[fCenBin]->Fill(pt); fHistOriginalEtaPhi[fCenBin]->Fill(eta, phi);
fHistOriginalDeltaPhi[fCenBin]->Fill(PhaseShift(phi-fPsi2, 2));
}
void FillHistogramsToyData(Double_t& pt, Double_t& eta, Double_t& phi, Double_t& vn) const {
fHistToySpectrum[fCenBin]->Fill(pt); fHistToyEtaPhi[fCenBin]->Fill(eta, phi);
fHistToyDeltaPhi[fCenBin]->Fill(PhaseShift(phi-fPsi2, 2)); fHistToyVn[fCenBin]->Fill(pt, vn);
}
Int_t InsertDecayDaughters(AliPicoTrack* mother, TClonesArray* daughters);
Int_t InsertDecayDaughters(Double_t pt, Double_t phi, Double_t eta, Double_t mass, Short_t charge, TClonesArray* daughters);
void Terminate(Option_t* option);
void PrintInfo() const;
protected:
Bool_t fQA;
TString fTracksOutName;
TString fTracksInName;
TClonesArray *fTracksIn;
TClonesArray *fTracksOut;
Bool_t fReuseTracks;
Int_t fMult;
Int_t fCenBin;
TArrayI* fCentralityClasses;
TF1* fFuncVn;
TList* fOutputList;
TF1* fTrackSpectrum;
Bool_t fRandomizeEta;
TF1* fJetSpectrumSF;
Int_t fNoOfSFJets;
TF1* fFuncDiffV2[10];
TF1* fFuncDiffV3[10];
TH1* fHistDiffV2[10];
TH1* fHistDiffV3[10];
TH1* fHistIntV2;
TH1* fHistIntV3;
Float_t fFlowFluctuations;
Int_t fMaxNumberOfIterations;
Double_t fPsi2;
Double_t fPsi3;
Double_t fPrecisionPhi;
detectorType fDetectorType;
TH1F* fHistOriginalSpectrum[10];
TH2F* fHistOriginalEtaPhi[10];
TH1F* fHistToySpectrum[10];
TH2F* fHistToyEtaPhi[10];
TH1F* fHistOriginalDeltaPhi[10];
TH1F* fHistToyDeltaPhi[10];
TH2F* fHistToyVn[10];
TH1F* fHistSFJetSpectrum;
TH2F* fHistSFJetEtaPhi;
TVirtualMCDecayer* fDecayer;
Int_t fDecayerIterations;
TClonesArray* fDecayerCache[25];
TClonesArray* fDecayerResults;
private:
AliAnalysisTaskJetFlowMC(const AliAnalysisTaskJetFlowMC&);
AliAnalysisTaskJetFlowMC &operator=(const AliAnalysisTaskJetFlowMC&);
ClassDef(AliAnalysisTaskJetFlowMC, 4);
};
#endif
AliAnalysisTaskJetFlowMC.h:1 AliAnalysisTaskJetFlowMC.h:2 AliAnalysisTaskJetFlowMC.h:3 AliAnalysisTaskJetFlowMC.h:4 AliAnalysisTaskJetFlowMC.h:5 AliAnalysisTaskJetFlowMC.h:6 AliAnalysisTaskJetFlowMC.h:7 AliAnalysisTaskJetFlowMC.h:8 AliAnalysisTaskJetFlowMC.h:9 AliAnalysisTaskJetFlowMC.h:10 AliAnalysisTaskJetFlowMC.h:11 AliAnalysisTaskJetFlowMC.h:12 AliAnalysisTaskJetFlowMC.h:13 AliAnalysisTaskJetFlowMC.h:14 AliAnalysisTaskJetFlowMC.h:15 AliAnalysisTaskJetFlowMC.h:16 AliAnalysisTaskJetFlowMC.h:17 AliAnalysisTaskJetFlowMC.h:18 AliAnalysisTaskJetFlowMC.h:19 AliAnalysisTaskJetFlowMC.h:20 AliAnalysisTaskJetFlowMC.h:21 AliAnalysisTaskJetFlowMC.h:22 AliAnalysisTaskJetFlowMC.h:23 AliAnalysisTaskJetFlowMC.h:24 AliAnalysisTaskJetFlowMC.h:25 AliAnalysisTaskJetFlowMC.h:26 AliAnalysisTaskJetFlowMC.h:27 AliAnalysisTaskJetFlowMC.h:28 AliAnalysisTaskJetFlowMC.h:29 AliAnalysisTaskJetFlowMC.h:30 AliAnalysisTaskJetFlowMC.h:31 AliAnalysisTaskJetFlowMC.h:32 AliAnalysisTaskJetFlowMC.h:33 AliAnalysisTaskJetFlowMC.h:34 AliAnalysisTaskJetFlowMC.h:35 AliAnalysisTaskJetFlowMC.h:36 AliAnalysisTaskJetFlowMC.h:37 AliAnalysisTaskJetFlowMC.h:38 AliAnalysisTaskJetFlowMC.h:39 AliAnalysisTaskJetFlowMC.h:40 AliAnalysisTaskJetFlowMC.h:41 AliAnalysisTaskJetFlowMC.h:42 AliAnalysisTaskJetFlowMC.h:43 AliAnalysisTaskJetFlowMC.h:44 AliAnalysisTaskJetFlowMC.h:45 AliAnalysisTaskJetFlowMC.h:46 AliAnalysisTaskJetFlowMC.h:47 AliAnalysisTaskJetFlowMC.h:48 AliAnalysisTaskJetFlowMC.h:49 AliAnalysisTaskJetFlowMC.h:50 AliAnalysisTaskJetFlowMC.h:51 AliAnalysisTaskJetFlowMC.h:52 AliAnalysisTaskJetFlowMC.h:53 AliAnalysisTaskJetFlowMC.h:54 AliAnalysisTaskJetFlowMC.h:55 AliAnalysisTaskJetFlowMC.h:56 AliAnalysisTaskJetFlowMC.h:57 AliAnalysisTaskJetFlowMC.h:58 AliAnalysisTaskJetFlowMC.h:59 AliAnalysisTaskJetFlowMC.h:60 AliAnalysisTaskJetFlowMC.h:61 AliAnalysisTaskJetFlowMC.h:62 AliAnalysisTaskJetFlowMC.h:63 AliAnalysisTaskJetFlowMC.h:64 AliAnalysisTaskJetFlowMC.h:65 AliAnalysisTaskJetFlowMC.h:66 AliAnalysisTaskJetFlowMC.h:67 AliAnalysisTaskJetFlowMC.h:68 AliAnalysisTaskJetFlowMC.h:69 AliAnalysisTaskJetFlowMC.h:70 AliAnalysisTaskJetFlowMC.h:71 AliAnalysisTaskJetFlowMC.h:72 AliAnalysisTaskJetFlowMC.h:73 AliAnalysisTaskJetFlowMC.h:74 AliAnalysisTaskJetFlowMC.h:75 AliAnalysisTaskJetFlowMC.h:76 AliAnalysisTaskJetFlowMC.h:77 AliAnalysisTaskJetFlowMC.h:78 AliAnalysisTaskJetFlowMC.h:79 AliAnalysisTaskJetFlowMC.h:80 AliAnalysisTaskJetFlowMC.h:81 AliAnalysisTaskJetFlowMC.h:82 AliAnalysisTaskJetFlowMC.h:83 AliAnalysisTaskJetFlowMC.h:84 AliAnalysisTaskJetFlowMC.h:85 AliAnalysisTaskJetFlowMC.h:86 AliAnalysisTaskJetFlowMC.h:87 AliAnalysisTaskJetFlowMC.h:88 AliAnalysisTaskJetFlowMC.h:89 AliAnalysisTaskJetFlowMC.h:90 AliAnalysisTaskJetFlowMC.h:91 AliAnalysisTaskJetFlowMC.h:92 AliAnalysisTaskJetFlowMC.h:93 AliAnalysisTaskJetFlowMC.h:94 AliAnalysisTaskJetFlowMC.h:95 AliAnalysisTaskJetFlowMC.h:96 AliAnalysisTaskJetFlowMC.h:97 AliAnalysisTaskJetFlowMC.h:98 AliAnalysisTaskJetFlowMC.h:99 AliAnalysisTaskJetFlowMC.h:100 AliAnalysisTaskJetFlowMC.h:101 AliAnalysisTaskJetFlowMC.h:102 AliAnalysisTaskJetFlowMC.h:103 AliAnalysisTaskJetFlowMC.h:104 AliAnalysisTaskJetFlowMC.h:105 AliAnalysisTaskJetFlowMC.h:106 AliAnalysisTaskJetFlowMC.h:107 AliAnalysisTaskJetFlowMC.h:108 AliAnalysisTaskJetFlowMC.h:109 AliAnalysisTaskJetFlowMC.h:110 AliAnalysisTaskJetFlowMC.h:111 AliAnalysisTaskJetFlowMC.h:112 AliAnalysisTaskJetFlowMC.h:113 AliAnalysisTaskJetFlowMC.h:114 AliAnalysisTaskJetFlowMC.h:115 AliAnalysisTaskJetFlowMC.h:116 AliAnalysisTaskJetFlowMC.h:117 AliAnalysisTaskJetFlowMC.h:118 AliAnalysisTaskJetFlowMC.h:119 AliAnalysisTaskJetFlowMC.h:120 AliAnalysisTaskJetFlowMC.h:121 AliAnalysisTaskJetFlowMC.h:122 AliAnalysisTaskJetFlowMC.h:123 AliAnalysisTaskJetFlowMC.h:124 AliAnalysisTaskJetFlowMC.h:125 AliAnalysisTaskJetFlowMC.h:126 AliAnalysisTaskJetFlowMC.h:127 AliAnalysisTaskJetFlowMC.h:128 AliAnalysisTaskJetFlowMC.h:129 AliAnalysisTaskJetFlowMC.h:130 AliAnalysisTaskJetFlowMC.h:131 AliAnalysisTaskJetFlowMC.h:132 AliAnalysisTaskJetFlowMC.h:133 AliAnalysisTaskJetFlowMC.h:134 AliAnalysisTaskJetFlowMC.h:135 AliAnalysisTaskJetFlowMC.h:136 AliAnalysisTaskJetFlowMC.h:137 AliAnalysisTaskJetFlowMC.h:138 AliAnalysisTaskJetFlowMC.h:139 AliAnalysisTaskJetFlowMC.h:140 AliAnalysisTaskJetFlowMC.h:141 AliAnalysisTaskJetFlowMC.h:142 AliAnalysisTaskJetFlowMC.h:143 AliAnalysisTaskJetFlowMC.h:144 AliAnalysisTaskJetFlowMC.h:145