]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Tasks/AliAnalysisTaskJetFlowMC.h
from Ante Bilandzic:
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / AliAnalysisTaskJetFlowMC.h
1 #ifndef AliAnalysisTaskJetFlowMC_H
2 #define AliAnalysisTaskJetFlowMC_H
3
4 // root includes
5 #include "TF1.h"
6 #include "TH1F.h"
7 #include "TH2F.h" 
8 #include "TRandom.h"
9 // aliroot includes
10 #include "AliAnalysisTaskSE.h"
11 // forward declarations
12 class TList;
13 class TClonesArray;
14 class TArrayI;
15
16 class AliAnalysisTaskJetFlowMC : public AliAnalysisTaskSE 
17 {
18     public:
19         // enumerators
20         enum detectorType       {kVZEROA, kVZEROC, kVZEROComb};  // detector that was used
21         // constructors, destructor
22         AliAnalysisTaskJetFlowMC();
23         AliAnalysisTaskJetFlowMC(const char *name);
24         virtual ~AliAnalysisTaskJetFlowMC();
25         // mirror image of PickTrackMaker
26         void    UserCreateOutputObjects();
27         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);
28         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);
29
30         void    UserExec(Option_t *option);
31         void    SetDebugMode(Bool_t d)                          {fDebug = d;}
32         void    SetTracksInName(const char *name)               { fTracksInName     = name; }
33         void    SetTracksOutName(const char *name)              { fTracksOutName    = name; }
34         // additional setters
35         void    SetCentralityClasses(TArrayI* c)                { fCentralityClasses = c; }
36         void    SetReferenceDetector(detectorType type)         { fDetectorType = type; }
37         void    SetDifferentialV2(TF1* v2, Int_t c = 0)         { fFuncDiffV2[c] = v2; }
38         void    SetDifferentialV3(TF1* v3, Int_t c = 0)         { fFuncDiffV3[c] = v3; }
39         void    SetDifferentialV2(TH1* v2, Int_t c = 0)         { fHistDiffV2[c] = v2; }
40         void    SetDifferentialV3(TH1* v3, Int_t c = 0)         { fHistDiffV3[c] = v3; }
41         void    SetIntegratedV2(TH1* v2)                        { fHistIntV2 = v2; }
42         void    SetIntegratedV3(TH1* v3)                        { fHistIntV3 = v3; }
43         void    SetTrackSpectrum(TF1* ts)                       { fTrackSpectrum = ts; }
44         void    SetSingleFragmentationJetSpectrum(TF1* js)      { fJetSpectrumSF = js; }
45         void    SetNoOfSFJets(Int_t n)                          { fNoOfSFJets = n; }
46         // additional methods
47         void    V2AfterBurner(Double_t& phi, Double_t& eta, Double_t& pt) const;
48         void    V3AfterBurner(Double_t& phi, Double_t& eta, Double_t& pt) const;
49         void    InjectSingleFragmentationJetSpectrum(Int_t nacc);
50         void    CalculateEventPlane();
51         // inlined helper calculations
52         Double_t        GetTrackPt()       const                { return fTrackSpectrum->GetRandom();}
53         /* inline */    Double_t GetV2(Double_t pt) const { 
54             return (fFuncDiffV2[fCenBin]) ? fFuncDiffV2[fCenBin]->Eval(pt) :
55             fHistDiffV2[fCenBin]->GetBinContent(fHistDiffV2[fCenBin]->GetXaxis()->FindBin(pt));
56         }
57         /* inline */    Double_t GetV3(Double_t pt) const { 
58             return (fFuncDiffV3[fCenBin]) ? fFuncDiffV3[fCenBin]->Eval(pt) : 
59             fHistDiffV3[fCenBin]->GetBinContent(fHistDiffV3[fCenBin]->GetXaxis()->FindBin(pt));
60         }
61         /* inline */    void GetFlowFluctuation(Double_t& vn) const {
62             vn += TMath::Sqrt(2*(vn*.25)*(vn*.25))*TMath::ErfInverse(2*(gRandom->Uniform(0, fFlowFluctuations))-1); 
63         }
64         /* inline */    Double_t PhaseShift(Double_t x) const {  
65             while (x>=TMath::TwoPi())x-=TMath::TwoPi();
66             while (x<0.)x+=TMath::TwoPi();
67         return x; }
68         /* inline */    Double_t PhaseShift(Double_t x, Double_t n) const {
69             x = PhaseShift(x);
70             if(TMath::Nint(n)==2) while (x>TMath::Pi()) x-=TMath::Pi();
71             if(TMath::Nint(n)==3) {
72                 if(x>2.*TMath::TwoPi()/n) x = TMath::TwoPi() - x;
73                 if(x>TMath::TwoPi()/n) x = TMath::TwoPi()-(x+TMath::TwoPi()/n);
74             }
75         return x; }
76         /* inline */    void SampleVnFromTF1(Double_t &phi) const {
77         phi = (fFuncVn) ? fFuncVn->GetRandom(0., TMath::TwoPi()) : 0; }
78         /* inline */    void FillHistogramsOriginalData(Double_t& pt, Double_t& eta, Double_t& phi) const {
79             fHistOriginalSpectrum[fCenBin]->Fill(pt);    fHistOriginalEtaPhi[fCenBin]->Fill(eta, phi);
80             fHistOriginalDeltaPhi[fCenBin]->Fill(PhaseShift(phi-fPsi2, 2));
81         }
82         /* inline */    void FillHistogramsToyData(Double_t& pt, Double_t& eta, Double_t& phi, Double_t& vn) const {
83             fHistToySpectrum[fCenBin]->Fill(pt);         fHistToyEtaPhi[fCenBin]->Fill(eta, phi);
84             fHistToyDeltaPhi[fCenBin]->Fill(PhaseShift(phi-fPsi2, 2));  fHistToyVn[fCenBin]->Fill(pt, vn);
85         }
86         void            Terminate(Option_t* option);
87         void            PrintInfo() const;
88     protected:
89         TString         fTracksOutName;         // name of output track array
90         TString         fTracksInName;          // name of input track array
91         TClonesArray   *fTracksIn;              //!track array in
92         TClonesArray   *fTracksOut;             //!track array out
93         Int_t           fCenBin; //! centrality bin
94         TArrayI*        fCentralityClasses;     // centrality classes (max 10) 
95         TF1*            fFuncVn;                //! vn function
96         TList*          fOutputList;            // output list
97         TF1*            fTrackSpectrum;         // track pt spectrum
98         TF1*            fJetSpectrumSF;         // single fragmentation spectrum of jets
99         Int_t           fNoOfSFJets;            // number of single fragmentation jets that will be added
100         TF1*            fFuncDiffV2[10];        // differential v2 of charged tracks
101         TF1*            fFuncDiffV3[10];        // differential v3 of charged tracks
102         TH1*            fHistDiffV2[10];        // differential v2 of charged tracks
103         TH1*            fHistDiffV3[10];        // differential v3 of charged tracks
104         TH1*            fHistIntV2;             // integrated v2 of charged tracks
105         TH1*            fHistIntV3;             // integrated v3 of charged tracks
106         Float_t         fFlowFluctuations;      // introduce gaussian flow fluctuations of this magnitude
107         Int_t           fMaxNumberOfIterations; // max number of iterations for afterburner
108         Double_t        fPsi2;                  //! 2nd order event plane orientation
109         Double_t        fPsi3;                  //! 3rd order event plane orientation
110         Double_t        fPrecisionPhi;          // afterburner precision
111         detectorType    fDetectorType;          // type of detector from which the EP is taken
112         // output histograms
113         TH1F*           fHistOriginalSpectrum[10];      //! original pt spectrum of accepted tracks
114         TH2F*           fHistOriginalEtaPhi[10];        //! original eta phi spectrum of accepted tracks
115         TH1F*           fHistToySpectrum[10];           //! spectrum of toy (generated) tracks
116         TH2F*           fHistToyEtaPhi[10];             //! eta phi spectrum of toy (generated) tracks
117         TH1F*           fHistOriginalDeltaPhi[10];      //! original delta phi spectrum
118         TH1F*           fHistToyDeltaPhi[10];           //! delta phi spectrum of toy (generated) tracks
119         TH2F*           fHistToyVn[10];                 //! generated differential vn values (should equal the differential spectrum)
120         TH1F*           fHistSFJetSpectrum;             //! spectrum of generated sf jets
121         TH2F*           fHistSFJetEtaPhi;               //! eta phi of generated sf jets
122     private:
123         AliAnalysisTaskJetFlowMC(const AliAnalysisTaskJetFlowMC&);            // not implemented
124         AliAnalysisTaskJetFlowMC &operator=(const AliAnalysisTaskJetFlowMC&); // not implemented
125
126         ClassDef(AliAnalysisTaskJetFlowMC, 1); // Task to generate toy mc PicoTracks based on real events
127 };
128 #endif