0a25f7bf67f705d13407a7e13f13d4d4a3342b8c
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowCommon / AliFlowEventSimpleMakerOnTheFly.cxx
1 /*************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  * 
14 **************************************************************************/
15
16 /********************************** 
17  * create an event and perform    *
18  * flow analysis 'on the fly'     * 
19  *                                * 
20  * authors: Raimond Snellings     *
21  *           (snelling@nikhef.nl) * 
22  *          Ante Bilandzic        * 
23  *           (anteb@nikhef.nl)    *
24  *********************************/
25   
26 #include "Riostream.h"
27 #include "TMath.h"
28 #include "TF1.h"
29 #include "TRandom3.h"
30
31 #include "AliFlowEventSimpleMakerOnTheFly.h"
32 #include "AliFlowEventSimple.h"
33 #include "AliFlowTrackSimple.h"
34
35 ClassImp(AliFlowEventSimpleMakerOnTheFly)
36
37
38 //========================================================================
39
40
41 AliFlowEventSimpleMakerOnTheFly::AliFlowEventSimpleMakerOnTheFly(UInt_t iseed):
42   fMultiplicityOfRP(0),
43   fMultiplicitySpreadOfRP(0.),
44   fV1RP(0.), 
45   fV1SpreadRP(0.), 
46   fV2RP(0.), 
47   fV2SpreadRP(0.), 
48   fPtSpectra(NULL),
49   fPhiDistribution(NULL),
50   fMyTRandom3(NULL),
51   fCount(0),
52   fNoOfLoops(1)
53  {
54   // constructor
55    fMyTRandom3 = new TRandom3(iseed); 
56  }
57
58
59 //========================================================================
60
61
62 AliFlowEventSimpleMakerOnTheFly::~AliFlowEventSimpleMakerOnTheFly()
63 {
64  // destructor
65   if (fPtSpectra) delete fPtSpectra;
66   if (fPhiDistribution) delete fPhiDistribution;
67   if (fMyTRandom3) delete  fMyTRandom3;
68 }
69
70
71 //========================================================================
72
73
74 AliFlowEventSimple* AliFlowEventSimpleMakerOnTheFly::CreateEventOnTheFly()
75 {
76   // method to create event on the fly
77   
78   AliFlowEventSimple* pEvent = new AliFlowEventSimple(fMultiplicityOfRP);
79     
80   // pt:   
81   Double_t dPtMin = 0.; // to be improved 
82   Double_t dPtMax = 10.; // to be improved 
83   
84   fPtSpectra = new TF1("fPtSpectra","[0]*x*TMath::Exp(-x*x)",dPtMin,dPtMax);  
85   fPtSpectra->SetParName(0,"Multiplicity of RPs");  
86   // sampling the multiplicity:
87   Int_t fNewMultiplicityOfRP = fMyTRandom3->Gaus(fMultiplicityOfRP,fMultiplicitySpreadOfRP);
88   fPtSpectra->SetParameter(0,fNewMultiplicityOfRP);
89   
90   
91   // phi:
92   Double_t dPhiMin = 0.; // to be improved 
93   Double_t dPhiMax = TMath::TwoPi(); // to be improved 
94   
95   fPhiDistribution = new TF1("fPhiDistribution","1+2.*[0]*TMath::Cos(x-[2])+2.*[1]*TMath::Cos(2*(x-[2]))",dPhiMin,dPhiMax);
96   
97   // samling the reaction plane
98   Double_t fMCReactionPlaneAngle = fMyTRandom3->Uniform(0.,TMath::TwoPi());
99   fPhiDistribution->SetParName(2,"Reaction Plane");
100   fPhiDistribution->SetParameter(2,fMCReactionPlaneAngle);
101
102   // sampling the V1:
103   fPhiDistribution->SetParName(0,"directed flow");
104   Double_t fNewV1RP=fV1RP;
105   if(fV1SpreadRP>0.0) {fNewV1RP = fMyTRandom3->Gaus(fV1RP,fV1SpreadRP);}
106   fPhiDistribution->SetParameter(0,fNewV1RP);
107  
108   // sampling the V2:
109   fPhiDistribution->SetParName(1,"elliptic flow");
110   Double_t fNewV2RP = fV2RP;
111   if(fV2SpreadRP>0.0) fNewV2RP = fMyTRandom3->Gaus(fV2RP,fV2SpreadRP);
112   fPhiDistribution->SetParameter(1,fNewV2RP);
113    
114   // eta:
115   Double_t dEtaMin = -1.; // to be improved 
116   Double_t dEtaMax = 1.; // to be improved 
117   
118   Int_t iGoodTracks = 0;
119   Int_t iSelParticlesRP = 0;
120   Int_t iSelParticlesPOI = 0;
121   Double_t fTmpPt =0;
122   Double_t fTmpEta =0;
123   Double_t fTmpPhi =0;
124   
125   for(Int_t i=0;i<fNewMultiplicityOfRP;i++) {
126     fTmpPt = fPtSpectra->GetRandom();
127     fTmpEta = fMyTRandom3->Uniform(dEtaMin,dEtaMax);
128     fTmpPhi = fPhiDistribution->GetRandom();
129     for(Int_t d=0;d<fNoOfLoops;d++) {
130       AliFlowTrackSimple* pTrack = new AliFlowTrackSimple();
131       pTrack->SetPt(fTmpPt);
132       pTrack->SetEta(fTmpEta);
133       pTrack->SetPhi(fTmpPhi);
134       pTrack->SetForRPSelection(kTRUE);
135       iSelParticlesRP++;
136       pTrack->SetForPOISelection(kTRUE);
137       iSelParticlesPOI++;
138       pEvent->TrackCollection()->Add(pTrack);
139       iGoodTracks++;
140     }
141   }
142  
143   pEvent->SetEventNSelTracksRP(iSelParticlesRP);  
144   pEvent->SetNumberOfTracks(iGoodTracks);//tracks used either for RP or for POI selection
145   pEvent->SetMCReactionPlaneAngle(fMCReactionPlaneAngle);
146
147   if (!fMCReactionPlaneAngle == 0) cout<<" MC Reaction Plane Angle = "<<  fMCReactionPlaneAngle << endl;
148   else cout<<" MC Reaction Plane Angle = unknown "<< endl;
149
150   cout<<" iGoodTracks = "<< iGoodTracks << endl;
151   cout<<" # of RP selected tracks = "<<iSelParticlesRP<<endl;
152   cout<<" # of POI selected tracks = "<<iSelParticlesPOI<<endl;  
153   cout << "# " << ++fCount << " events processed" << endl;
154
155   delete fPhiDistribution;
156   delete fPtSpectra;
157   return pEvent;  
158  
159 } // end of CreateEventOnTheFly()
160
161
162