#ifndef ALIFLOWONTHEFLYEVENTGENERATOR_H
#define ALIFLOWONTHEFLYEVENTGENERATOR_H
#include "TObject.h"
#include "TClonesArray.h"
#include "TRandom.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TF1.h"
#include "TParticle.h"
class AliFlowEventSimple;
class TVirtualMCDecayer;
class AliFlowOnTheFlyEventGenerator : public TObject {
public:
AliFlowOnTheFlyEventGenerator();
AliFlowOnTheFlyEventGenerator(Bool_t qa, Int_t ff, Int_t mult, TVirtualMCDecayer* decayer, Bool_t a, Bool_t b, Bool_t c, Bool_t d);
virtual ~AliFlowOnTheFlyEventGenerator();
class NaiveFlowAndSpectrumGenerator : public TObject {
public:
NaiveFlowAndSpectrumGenerator(Short_t pdg, Bool_t qa, Int_t ff) : fPdg(pdg), fQA(qa), fFF(ff), fpt(0), fv2(0), fv3(0), fQApt(0), fQAv2(0), fQAv3(0) {
TParticle* t = new TParticle(); t->SetPdgCode(fPdg);
fpt = new TF1(Form("pt_%i", pdg), Form("x/TMath::Power(1+2*TMath::Sqrt(%f*%f+x*x),4)", t->GetMass(), t->GetMass()),0.,20);
fv2 = new TF1(Form("v2_%i", pdg), Form("TMath::Log(x+1)*.2/TMath::Power(%f*%f+x*x,.2)", t->GetMass(), t->GetMass()), 0., 20);
fv3 = new TF1(Form("v3_%i", pdg), Form("TMath::Log(x+1)*.1/TMath::Power(%f*%f+x*x,.2)", t->GetMass(), t->GetMass()), 0., 20);
if(fQA) { fQApt = new TH1F(Form("pt_%i", fPdg),Form("pt_%i", fPdg),400,0,20);
fQAv2 = new TH2F(Form("v2_%i", fPdg),Form("v2_%i", fPdg),400,0,20, 400, -.5, .5);
fQAv3 = new TH2F(Form("v3_%i", fPdg),Form("v3_%i", fPdg),400,0,20, 400, -.5, .5); }
delete t;
}
virtual ~NaiveFlowAndSpectrumGenerator() {if(fpt) delete fpt; if(fv2) delete fv2; if(fv3) delete fv3; if(fQA) {delete fQApt; delete fQAv2; delete fQAv3;};}
Short_t GetPDGCode() const {return fPdg;}
Double_t GetPt() const {double _pt(fpt->GetRandom()); if(fQA) fQApt->Fill(_pt); return _pt;}
Double_t GetV2(Double_t pt) const {double _v2(fv2->Eval(pt)); if(fQA&&fFF==0) fQAv2->Fill(pt, _v2); return _v2;}
Double_t GetV3(Double_t pt) const {double _v3(fv3->Eval(pt)); if(fQA&&fFF==0) fQAv3->Fill(pt, _v3); return _v3;}
TF1* GetPtSpectrum() const {return fpt;}
TF1* GetDifferentialV2() const {return fv2;}
TF1* GetDifferentialV3() const {return fv3;}
TH1* GetQAType(Int_t t) const { if(t==0) return (TH1*)fQApt;
if(t==1) return (TH1*)fQAv2;
if(t==2) return (TH1*)fQAv3;
return 0x0; }
void FillV2(Double_t p, Double_t v) {fQAv2->Fill(p,v);}
void SetPtSpectrum(TF1* s) {fpt = s;}
void SetDifferentialV2(TF1* v2) {fv2 = v2; }
void SetDifferentialV3(TF1* v3) {fv3 = v3; }
private:
Short_t fPdg;
Bool_t fQA;
Int_t fFF;
TF1* fpt;
TF1* fv2;
TF1* fv3;
TH1F* fQApt;
TH2F* fQAv2;
TH2F* fQAv3;
NaiveFlowAndSpectrumGenerator(const NaiveFlowAndSpectrumGenerator& dummy);
NaiveFlowAndSpectrumGenerator& operator =(const NaiveFlowAndSpectrumGenerator& dummy);
};
NaiveFlowAndSpectrumGenerator* Find(Short_t pdg, Bool_t make);
TObjArray* GetGenerators() {return fGenerators; }
void SetPtSpectrum(const char* func, Short_t pdg);
void SetPtDependentV2(const char* func, Short_t pdg);
void SetPtDependentV3(const char* func, Short_t pdg);
TF1* GetPtSpectrum(Short_t pdg) {return Find(pdg, kTRUE)->GetPtSpectrum();}
TF1* GetDifferentialV2(Short_t pdg) {return Find(pdg, kTRUE)->GetDifferentialV2();}
TF1* GetDifferentialV3(Short_t pdg) {return Find(pdg, kTRUE)->GetDifferentialV3();}
TH1* GetQAType(Short_t pdg, Int_t type) {return Find(pdg, kTRUE)->GetQAType(type);}
void AddV2(TParticle* particle, Double_t v2, Double_t fluc);
void AddV2(TClonesArray* event);
void SetAfterBurnerPrecision(Double_t a, Int_t b) { fPrecisionPhi = a; fMaxNumberOfIterations = b; }
void GenerateOnTheFlyTracks(Int_t mult, Int_t pid, TClonesArray* event, Double_t fluc);
void DecayOnTheFlyTracks(TClonesArray* event);
void ForceGammaDecay(TClonesArray* arr, TParticle* part);
AliFlowEventSimple* GenerateOnTheFlyEvent(TClonesArray* event, Int_t nSpecies, Int_t species[], Int_t mult[], Int_t bg, Bool_t fluc);
void EmbedEvent(TClonesArray* embedMe) {fEmbedMe = embedMe;}
AliFlowEventSimple* ConvertTClonesToFlowEvent(TClonesArray* event, Int_t totalMultiplicity);
void AddV2Mothers(Bool_t b) { fAddV2Mothers = b; }
void AddV3Mothers(Bool_t b) { fAddV3Mothers = b; }
void AddV2Daughters(Bool_t b) { fAddV2Daughters = b; }
void AddV3Daughters(Bool_t b) { fAddV3Daughters = b; }
void InitGenerators();
void PrintGenerators();
void DoGeneratorQA(Bool_t v2, Bool_t v3);
private:
TObjArray* fGenerators;
TClonesArray* fEmbedMe;
AliFlowEventSimple* fFlowEvent;
TVirtualMCDecayer* fDecayer;
Bool_t fAddV2Mothers;
Bool_t fAddV3Mothers;
Bool_t fAddV2Daughters;
Bool_t fAddV3Daughters;
Double_t fPsi2;
Double_t fPsi3;
Double_t fPrecisionPhi;
Int_t fMaxNumberOfIterations;
Bool_t fQA;
Int_t fFF;
AliFlowOnTheFlyEventGenerator(const AliFlowOnTheFlyEventGenerator& dummy);
AliFlowOnTheFlyEventGenerator& operator =(const AliFlowOnTheFlyEventGenerator& dummy);
ClassDef(AliFlowOnTheFlyEventGenerator, 0)
};
#endif
AliFlowOnTheFlyEventGenerator.h:1 AliFlowOnTheFlyEventGenerator.h:2 AliFlowOnTheFlyEventGenerator.h:3 AliFlowOnTheFlyEventGenerator.h:4 AliFlowOnTheFlyEventGenerator.h:5 AliFlowOnTheFlyEventGenerator.h:6 AliFlowOnTheFlyEventGenerator.h:7 AliFlowOnTheFlyEventGenerator.h:8 AliFlowOnTheFlyEventGenerator.h:9 AliFlowOnTheFlyEventGenerator.h:10 AliFlowOnTheFlyEventGenerator.h:11 AliFlowOnTheFlyEventGenerator.h:12 AliFlowOnTheFlyEventGenerator.h:13 AliFlowOnTheFlyEventGenerator.h:14 AliFlowOnTheFlyEventGenerator.h:15 AliFlowOnTheFlyEventGenerator.h:16 AliFlowOnTheFlyEventGenerator.h:17 AliFlowOnTheFlyEventGenerator.h:18 AliFlowOnTheFlyEventGenerator.h:19 AliFlowOnTheFlyEventGenerator.h:20 AliFlowOnTheFlyEventGenerator.h:21 AliFlowOnTheFlyEventGenerator.h:22 AliFlowOnTheFlyEventGenerator.h:23 AliFlowOnTheFlyEventGenerator.h:24 AliFlowOnTheFlyEventGenerator.h:25 AliFlowOnTheFlyEventGenerator.h:26 AliFlowOnTheFlyEventGenerator.h:27 AliFlowOnTheFlyEventGenerator.h:28 AliFlowOnTheFlyEventGenerator.h:29 AliFlowOnTheFlyEventGenerator.h:30 AliFlowOnTheFlyEventGenerator.h:31 AliFlowOnTheFlyEventGenerator.h:32 AliFlowOnTheFlyEventGenerator.h:33 AliFlowOnTheFlyEventGenerator.h:34 AliFlowOnTheFlyEventGenerator.h:35 AliFlowOnTheFlyEventGenerator.h:36 AliFlowOnTheFlyEventGenerator.h:37 AliFlowOnTheFlyEventGenerator.h:38 AliFlowOnTheFlyEventGenerator.h:39 AliFlowOnTheFlyEventGenerator.h:40 AliFlowOnTheFlyEventGenerator.h:41 AliFlowOnTheFlyEventGenerator.h:42 AliFlowOnTheFlyEventGenerator.h:43 AliFlowOnTheFlyEventGenerator.h:44 AliFlowOnTheFlyEventGenerator.h:45 AliFlowOnTheFlyEventGenerator.h:46 AliFlowOnTheFlyEventGenerator.h:47 AliFlowOnTheFlyEventGenerator.h:48 AliFlowOnTheFlyEventGenerator.h:49 AliFlowOnTheFlyEventGenerator.h:50 AliFlowOnTheFlyEventGenerator.h:51 AliFlowOnTheFlyEventGenerator.h:52 AliFlowOnTheFlyEventGenerator.h:53 AliFlowOnTheFlyEventGenerator.h:54 AliFlowOnTheFlyEventGenerator.h:55 AliFlowOnTheFlyEventGenerator.h:56 AliFlowOnTheFlyEventGenerator.h:57 AliFlowOnTheFlyEventGenerator.h:58 AliFlowOnTheFlyEventGenerator.h:59 AliFlowOnTheFlyEventGenerator.h:60 AliFlowOnTheFlyEventGenerator.h:61 AliFlowOnTheFlyEventGenerator.h:62 AliFlowOnTheFlyEventGenerator.h:63 AliFlowOnTheFlyEventGenerator.h:64 AliFlowOnTheFlyEventGenerator.h:65 AliFlowOnTheFlyEventGenerator.h:66 AliFlowOnTheFlyEventGenerator.h:67 AliFlowOnTheFlyEventGenerator.h:68 AliFlowOnTheFlyEventGenerator.h:69 AliFlowOnTheFlyEventGenerator.h:70 AliFlowOnTheFlyEventGenerator.h:71 AliFlowOnTheFlyEventGenerator.h:72 AliFlowOnTheFlyEventGenerator.h:73 AliFlowOnTheFlyEventGenerator.h:74 AliFlowOnTheFlyEventGenerator.h:75 AliFlowOnTheFlyEventGenerator.h:76 AliFlowOnTheFlyEventGenerator.h:77 AliFlowOnTheFlyEventGenerator.h:78 AliFlowOnTheFlyEventGenerator.h:79 AliFlowOnTheFlyEventGenerator.h:80 AliFlowOnTheFlyEventGenerator.h:81 AliFlowOnTheFlyEventGenerator.h:82 AliFlowOnTheFlyEventGenerator.h:83 AliFlowOnTheFlyEventGenerator.h:84 AliFlowOnTheFlyEventGenerator.h:85 AliFlowOnTheFlyEventGenerator.h:86 AliFlowOnTheFlyEventGenerator.h:87 AliFlowOnTheFlyEventGenerator.h:88 AliFlowOnTheFlyEventGenerator.h:89 AliFlowOnTheFlyEventGenerator.h:90 AliFlowOnTheFlyEventGenerator.h:91 AliFlowOnTheFlyEventGenerator.h:92 AliFlowOnTheFlyEventGenerator.h:93 AliFlowOnTheFlyEventGenerator.h:94 AliFlowOnTheFlyEventGenerator.h:95 AliFlowOnTheFlyEventGenerator.h:96 AliFlowOnTheFlyEventGenerator.h:97 AliFlowOnTheFlyEventGenerator.h:98 AliFlowOnTheFlyEventGenerator.h:99 AliFlowOnTheFlyEventGenerator.h:100 AliFlowOnTheFlyEventGenerator.h:101 AliFlowOnTheFlyEventGenerator.h:102 AliFlowOnTheFlyEventGenerator.h:103 AliFlowOnTheFlyEventGenerator.h:104 AliFlowOnTheFlyEventGenerator.h:105 AliFlowOnTheFlyEventGenerator.h:106 AliFlowOnTheFlyEventGenerator.h:107 AliFlowOnTheFlyEventGenerator.h:108 AliFlowOnTheFlyEventGenerator.h:109 AliFlowOnTheFlyEventGenerator.h:110 AliFlowOnTheFlyEventGenerator.h:111 AliFlowOnTheFlyEventGenerator.h:112 AliFlowOnTheFlyEventGenerator.h:113 AliFlowOnTheFlyEventGenerator.h:114 AliFlowOnTheFlyEventGenerator.h:115 AliFlowOnTheFlyEventGenerator.h:116 AliFlowOnTheFlyEventGenerator.h:117 AliFlowOnTheFlyEventGenerator.h:118 AliFlowOnTheFlyEventGenerator.h:119 AliFlowOnTheFlyEventGenerator.h:120 AliFlowOnTheFlyEventGenerator.h:121