Lines getting the matched track moved to a method in AliCalorimeterUtils. Lines copie...
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoModelCorrFctn.cxx
1 ////////////////////////////////////////////////////////////////////////////////
2 ///                                                                          ///
3 /// AliFemtoModelCorrFctn - the base class for correlation function which    ///
4 /// uses the model framework and weight generation                           ///
5 ///                                                                          ///
6 ////////////////////////////////////////////////////////////////////////////////
7 #ifdef __ROOT__
8   ClassImp(AliFemtoModelCorrFctn, 1)
9 #endif
10
11 #include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
12 #include "AliFemtoModelHiddenInfo.h"
13 #include "AliFemtoModelCorrFctn.h"
14 #include "AliFemtoPair.h"
15 #include "AliFemtoModelManager.h"
16 #include <TH1D.h>
17     
18 //_______________________
19 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(): 
20   AliFemtoCorrFctn(),
21   fManager(0),
22   fNumeratorTrue(0),
23   fNumeratorFake(0),
24   fDenominator(0)
25 {
26   // Default constructor
27   fNumeratorTrue = new TH1D("ModelNumTrue","ModelNumTrue",50,0.0,0.5);
28   fNumeratorFake = new TH1D("ModelNumFake","ModelNumFake",50,0.0,0.5);
29   fDenominator = new TH1D("ModelDen","ModelDen",50,0.0,0.5);
30
31   fNumeratorTrue->Sumw2();
32   fNumeratorFake->Sumw2();
33   fDenominator->Sumw2();
34 }
35 //_______________________
36 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const char *title, Int_t aNbins, Double_t aQinvLo, Double_t aQinvHi):
37   AliFemtoCorrFctn(),
38   fManager(0),
39   fNumeratorTrue(0),
40   fNumeratorFake(0),
41   fDenominator(0)
42 {
43   // Normal constructor
44   char buf[100];
45   snprintf(buf , 100,  "NumTrue%s", title);
46   fNumeratorTrue = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
47   snprintf(buf , 100,  "NumFake%s", title);
48   fNumeratorFake = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
49   snprintf(buf , 100,  "Den%s", title);
50   fDenominator = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
51
52   fNumeratorTrue->Sumw2();
53   fNumeratorFake->Sumw2();
54   fDenominator->Sumw2();
55 }
56 //_______________________
57 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const AliFemtoModelCorrFctn& aCorrFctn) :
58   AliFemtoCorrFctn(),
59   fManager(0),
60   fNumeratorTrue(0),
61   fNumeratorFake(0),
62   fDenominator(0)
63 {
64   // Copy constructor
65   if (aCorrFctn.fNumeratorTrue)
66     fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue));
67   if (aCorrFctn.fNumeratorFake)
68     fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake));
69   if (aCorrFctn.fDenominator)
70     fDenominator = new TH1D(*(aCorrFctn.fDenominator));
71   fManager = aCorrFctn.fManager;
72 }
73 //_______________________
74 AliFemtoModelCorrFctn::~AliFemtoModelCorrFctn()
75 {
76   // Destructor
77   if (fNumeratorTrue) delete fNumeratorTrue;
78   if (fNumeratorFake) delete fNumeratorFake;
79   if (fDenominator) delete fDenominator;
80 }
81 //_______________________
82 AliFemtoModelCorrFctn& AliFemtoModelCorrFctn::operator=(const AliFemtoModelCorrFctn& aCorrFctn)
83 {
84   // Assignment operator
85   if (this == &aCorrFctn)
86     return *this;
87   
88   if (aCorrFctn.fNumeratorTrue)
89     fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue));
90   else
91     fNumeratorTrue = 0;
92   if (aCorrFctn.fNumeratorFake)
93     fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake));
94   else
95     fNumeratorFake = 0;
96   if (aCorrFctn.fDenominator)
97     fDenominator = new TH1D(*(aCorrFctn.fDenominator));
98   else
99     fDenominator = 0;
100   fManager = aCorrFctn.fManager;
101
102   return *this;
103 }
104 //_______________________
105 void AliFemtoModelCorrFctn::ConnectToManager(AliFemtoModelManager *aManager)
106 {
107   fManager = aManager;
108 }
109
110 //_______________________
111 AliFemtoString AliFemtoModelCorrFctn::Report()
112 {
113   // Prepare report
114   AliFemtoString tStr = "AliFemtoModelCorrFctn report";
115
116   return tStr;
117 }
118
119 //_______________________
120 void AliFemtoModelCorrFctn::AddRealPair(AliFemtoPair* aPair)
121 {
122   Double_t weight = fManager->GetWeight(aPair);
123   fNumeratorTrue->Fill(aPair->QInv(), weight);
124 }
125 //_______________________
126 void AliFemtoModelCorrFctn::AddMixedPair(AliFemtoPair* aPair)
127 {
128   Double_t weight = fManager->GetWeight(aPair);
129   fNumeratorFake->Fill(aPair->QInv(), weight);
130   fDenominator->Fill(aPair->QInv(), 1.0);
131 }
132 //_______________________
133 void AliFemtoModelCorrFctn::EventBegin(const AliFemtoEvent* /* aEvent */)
134 {
135   /* Do nothing */
136 }
137 //_______________________
138 void AliFemtoModelCorrFctn::EventEnd(const AliFemtoEvent* /* aEvent */)
139 {
140   /* Do nothing */
141 }
142 //_______________________
143 void AliFemtoModelCorrFctn::Finish()
144 {
145   /* Do nothing */
146 }
147 //_______________________
148 void AliFemtoModelCorrFctn::Write()
149 {
150   // Write out data histos
151   fNumeratorTrue->Write();
152   fNumeratorFake->Write();
153   fDenominator->Write();
154 }
155 //_______________________
156 AliFemtoModelCorrFctn* AliFemtoModelCorrFctn::Clone()
157 {
158   // Create clone
159   AliFemtoModelCorrFctn *tCopy = new AliFemtoModelCorrFctn(*this);
160   
161   return tCopy;
162 }
163 //_________________________
164 TList* AliFemtoModelCorrFctn::GetOutputList()
165 {
166   // Prepare the list of objects to be written to the output
167   TList *tOutputList = new TList();
168
169   tOutputList->Add(fNumeratorTrue); 
170   tOutputList->Add(fNumeratorFake); 
171   tOutputList->Add(fDenominator); 
172
173   return tOutputList;
174 }