1 ////////////////////////////////////////////////////////////////////////////////
3 /// AliFemtoTPCInnerCorrFctn - A correlation function that saves the ///
4 /// distance at the entrance to the TPC between two tracks as a function ///
6 /// Authors: Adam Kisiel kisiel@mps.ohio-state.edu ///
8 ////////////////////////////////////////////////////////////////////////////////
10 #include "AliFemtoTPCInnerCorrFctn.h"
11 //#include "AliFemtoHisto.hh"
15 ClassImp(AliFemtoTPCInnerCorrFctn)
18 //____________________________
19 AliFemtoTPCInnerCorrFctn::AliFemtoTPCInnerCorrFctn(char* title, const int& nbins, const float& QinvLo, const float& QinvHi):
27 // title = "Num Qinv (MeV/c)";
28 char tTitNum[101] = "NumDTPC";
29 strncat(tTitNum,title, 100);
30 fDTPCNumerator = new TH2D(tTitNum,title,nbins,QinvLo,QinvHi,100,0.0,20.0);
32 //title = "Den Qinv (MeV/c)";
33 char tTitDen[101] = "DenDTPC";
34 strncat(tTitDen,title, 100);
35 fDTPCDenominator = new TH2D(tTitDen,title,nbins,QinvLo,QinvHi,100,0.0,20.0);
37 char tTitNumR[101] = "NumRadD";
38 strncat(tTitNumR,title, 100);
39 fRadDNumerator = new TH2D(tTitNumR,title,50,-0.1,0.1,50,-0.1,0.1);
41 //title = "Den Qinv (MeV/c)";
42 char tTitDenR[101] = "DenRadD";
43 strncat(tTitDenR,title, 100);
44 fRadDDenominator = new TH2D(tTitDenR,title,50,-0.1,0.1,50,-0.1,0.1);
46 // to enable error bar calculation...
47 fDTPCNumerator->Sumw2();
48 fDTPCDenominator->Sumw2();
49 fRadDNumerator->Sumw2();
50 fRadDDenominator->Sumw2();
53 //____________________________
54 AliFemtoTPCInnerCorrFctn::AliFemtoTPCInnerCorrFctn(const AliFemtoTPCInnerCorrFctn& aCorrFctn) :
63 if (aCorrFctn.fDTPCNumerator)
64 fDTPCNumerator = new TH2D(*aCorrFctn.fDTPCNumerator);
65 if (aCorrFctn.fDTPCDenominator)
66 fDTPCDenominator = new TH2D(*aCorrFctn.fDTPCDenominator);
67 if (aCorrFctn.fRadDNumerator)
68 fRadDNumerator = new TH2D(*aCorrFctn.fRadDNumerator);
69 if (aCorrFctn.fRadDDenominator)
70 fRadDDenominator = new TH2D(*aCorrFctn.fRadDDenominator);
72 //____________________________
73 AliFemtoTPCInnerCorrFctn::~AliFemtoTPCInnerCorrFctn(){
75 delete fDTPCNumerator;
76 delete fDTPCDenominator;
77 delete fRadDNumerator;
78 delete fRadDDenominator;
80 //_________________________
81 AliFemtoTPCInnerCorrFctn& AliFemtoTPCInnerCorrFctn::operator=(const AliFemtoTPCInnerCorrFctn& aCorrFctn)
83 // assignment operator
84 if (this == &aCorrFctn)
87 if (aCorrFctn.fDTPCNumerator)
88 fDTPCNumerator = new TH2D(*aCorrFctn.fDTPCNumerator);
91 if (aCorrFctn.fDTPCDenominator)
92 fDTPCDenominator = new TH2D(*aCorrFctn.fDTPCDenominator);
96 if (aCorrFctn.fRadDNumerator)
97 fRadDNumerator = new TH2D(*aCorrFctn.fRadDNumerator);
100 if (aCorrFctn.fRadDDenominator)
101 fRadDDenominator = new TH2D(*aCorrFctn.fRadDDenominator);
103 fRadDDenominator = 0;
105 fRadius = aCorrFctn.fRadius;
109 //_________________________
110 void AliFemtoTPCInnerCorrFctn::Finish(){
111 // here is where we should normalize, fit, etc...
112 // we should NOT Draw() the histos (as I had done it below),
113 // since we want to insulate ourselves from root at this level
114 // of the code. Do it instead at root command line with browser.
115 // mShareNumerator->Draw();
116 //mShareDenominator->Draw();
121 //____________________________
122 AliFemtoString AliFemtoTPCInnerCorrFctn::Report(){
124 string stemp = "Entrace TPC distance Correlation Function Report:\n";
126 snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fDTPCNumerator->GetEntries());
128 snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDTPCDenominator->GetEntries());
130 // stemp += mCoulombWeight->Report();
131 AliFemtoString returnThis = stemp;
134 //____________________________
135 void AliFemtoTPCInnerCorrFctn::AddRealPair( AliFemtoPair* pair){
136 // add real (effect) pair
138 if (!fPairCut->Pass(pair)) return;
140 double pih = TMath::Pi();
141 double pit = TMath::Pi()*2;
143 double tQinv = fabs(pair->QInv()); // note - qInv() will be negative for identical pairs...
144 double distx = pair->Track1()->Track()->NominalTpcEntrancePoint().x() - pair->Track2()->Track()->NominalTpcEntrancePoint().x();
145 double disty = pair->Track1()->Track()->NominalTpcEntrancePoint().y() - pair->Track2()->Track()->NominalTpcEntrancePoint().y();
146 double distz = pair->Track1()->Track()->NominalTpcEntrancePoint().z() - pair->Track2()->Track()->NominalTpcEntrancePoint().z();
147 double dist = sqrt(distx*distx + disty*disty + distz*distz);
149 fDTPCNumerator->Fill(tQinv, dist);
152 double phi1 = pair->Track1()->Track()->P().Phi();
153 double phi2 = pair->Track2()->Track()->P().Phi();
154 double chg1 = pair->Track1()->Track()->Charge();
155 double chg2 = pair->Track2()->Track()->Charge();
156 double ptv1 = pair->Track1()->Track()->Pt();
157 double ptv2 = pair->Track2()->Track()->Pt();
158 double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
159 double eta2 = pair->Track2()->Track()->P().PseudoRapidity();
160 double arg1 = -0.3 * 0.5 * chg1 * fRadius/(2*ptv1);
161 double arg2 = -0.3 * 0.5 * chg2 * fRadius/(2*ptv2);
162 double phid = phi2 - phi1 + TMath::ASin(arg2) - TMath::ASin(arg1);
164 while (phid>pih) phid -= pit;
165 while (phid<-pih) phid += pit;
166 // dist = phi2 - phi1 + TMath::ASin(-0.3 * 0.5 * chg2 * fRadius/(2*ptv2)) - TMath::ASin(-0.3 * 0.5 * chg1 * fRadius/(2*ptv1));
167 double etad = eta2 - eta1;
168 fRadDNumerator->Fill(phid, etad);
171 //____________________________
172 void AliFemtoTPCInnerCorrFctn::AddMixedPair( AliFemtoPair* pair){
173 // add mixed (background) pair
175 if (!fPairCut->Pass(pair)) return;
177 double pih = TMath::Pi();
178 double pit = TMath::Pi()*2;
180 double tQinv = fabs(pair->QInv()); // note - qInv() will be negative for identical pairs...
181 double distx = pair->Track1()->Track()->NominalTpcEntrancePoint().x() - pair->Track2()->Track()->NominalTpcEntrancePoint().x();
182 double disty = pair->Track1()->Track()->NominalTpcEntrancePoint().y() - pair->Track2()->Track()->NominalTpcEntrancePoint().y();
183 double distz = pair->Track1()->Track()->NominalTpcEntrancePoint().z() - pair->Track2()->Track()->NominalTpcEntrancePoint().z();
184 double dist = sqrt(distx*distx + disty*disty + distz*distz);
186 fDTPCDenominator->Fill(tQinv,dist);
189 double phi1 = pair->Track1()->Track()->P().Phi();
190 double phi2 = pair->Track2()->Track()->P().Phi();
191 double chg1 = pair->Track1()->Track()->Charge();
192 double chg2 = pair->Track2()->Track()->Charge();
193 double ptv1 = pair->Track1()->Track()->Pt();
194 double ptv2 = pair->Track2()->Track()->Pt();
195 double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
196 double eta2 = pair->Track2()->Track()->P().PseudoRapidity();
197 double arg1 = -0.3 * 0.5 * chg1 * fRadius/(2*ptv1);
198 double arg2 = -0.3 * 0.5 * chg2 * fRadius/(2*ptv2);
199 double phid = phi2 - phi1 + TMath::ASin(arg2) - TMath::ASin(arg1);
201 while (phid>pih) phid -= pit;
202 while (phid<-pih) phid += pit;
203 // dist = phi2 - phi1 + TMath::ASin(-0.3 * 0.5 * chg2 * fRadius/(2*ptv2)) - TMath::ASin(-0.3 * 0.5 * chg1 * fRadius/(2*ptv1));
204 double etad = eta2 - eta1;
205 fRadDDenominator->Fill(phid, etad);
210 void AliFemtoTPCInnerCorrFctn::WriteHistos()
212 // Write out result histograms
213 fDTPCNumerator->Write();
214 fDTPCDenominator->Write();
215 fRadDNumerator->Write();
216 fRadDDenominator->Write();
218 //______________________________
219 TList* AliFemtoTPCInnerCorrFctn::GetOutputList()
221 // Prepare the list of objects to be written to the output
222 TList *tOutputList = new TList();
224 tOutputList->Add(fDTPCNumerator);
225 tOutputList->Add(fDTPCDenominator);
226 tOutputList->Add(fRadDNumerator);
227 tOutputList->Add(fRadDDenominator);
232 void AliFemtoTPCInnerCorrFctn::SetRadius(double rad)