1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //Functions used by the other macros
17 //Author: Jason Glyndwr Ulery, ulery@uni-frankfurt.de
19 void MakeProjections(Float_t &xTPt1, Float_t &xTPt2, Float_t &xAPt1, Float_t &xAPt2, Int_t xCent, TList *xList, TH1F *xOutHistPhi, TH1F *xOutHistPhiMix, TH1F *xOutHistEtaN, TH1F *xOutHistEtaNMix, TH1F *xOutHistEtaA, TH1F *xOutHistEtaAMix, TH2F *xOutHistPhiEta, TH2F *xOutHistPhiEtaMix, Float_t xMPt[4], Int_t xptweighted=0, Int_t xMC=0, Int_t xNotDelta=0, Int_t xSign=0){//(Trigger Pt Low, Trigger Pt High, Assoc Pt Low, Assoc Pt High, Centrality Bin, List, Hists, mean pt array, Pt weighted?, Monty Carlo?, gives phi from triggered and from all for delta phi and delta phi mixed respectively)
20 // TFile *xFile=new TFile(xFileName);
21 //TList *xList=xFile->Get("julery_DiHadron");
22 //This needs changed if Input binning is changed
23 //cout << xptweighted << " " << xMC << " " << xNotDelta << " " << xSign << endl;
25 //float xptbins[(xnpt+1)]={2.5,3,4,6,8,10,15,20,30,40,50,75,100};
26 //IF you change also change in EffFit
27 float xptbins[(xnpt+1)]={2,2.5,3,4,5,6,8,10,15,20,30,40,50};
29 float xaptbins[(xapt+1)]={0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,12,15,20,25,30,35,40,45,50,60,70,80,90,100};
30 float xPi=3.1415926535898;
32 //After this no changes should be needed
33 float xsum1,xsum2,xerr1,xerr2;
34 int xtpt1=-1,xtpt2=-1;
43 int xapt1,xapt2,xapt3,xapt4;
45 for(int xi=0;xi<=xnpt;xi++){
46 if(fabs(xTPt1-xptbins[xi])<0.2)xtpt1=xi;
47 if(fabs(xTPt2-xptbins[xi])<0.2)xtpt2=xi;
49 //cout << xtpt1 << " " << xtpt2 << endl;
50 if(xtpt1<0)cout << "Invalid Trigger Pt1" << endl;
51 if(xtpt2<0)cout << "Invalid Trigger Pt2" << endl;
52 if(xtpt1<0||xtpt2<0)break;
56 cout << "Associateds must be less then trigger (Automatically forced)" << endl;
59 for(int xi=0;xi<=xapt;xi++){
60 if(fabs(xAPt1-xaptbins[xi])<0.1)xapt1=xi+1;
61 if(fabs(xAPt2-xaptbins[xi])<0.1)xapt2=xi;
63 // cout << xapt1 << " " << xapt2 << endl;
64 //since there are some tolerences reset the values to what are actually used
65 // xAPt1=(xapt1-1)*xasswidth;
66 // xAPt2=(xapt2-1)*xasswidth;
67 xAPt1=xaptbins[xapt1-1];
68 xAPt2=xaptbins[xapt2];
71 cout << "xTPt: "<< xTPt1 << " - " << xTPt2 << endl;
72 cout << "xAPt: " << xAPt1 << " - " << xAPt2 << endl;
73 float xntrig=0,xnmix=0,xntrigpt=0;
74 float exntrig=0,exntrigpt=0;
76 char *cpt1[2]={"","Pt"};
77 char *cdelta2[2]={"DeltaPhiEta","PhiEtaTrig"};
78 char *cdelta1[2]={"DeltaPhi","PhiTrig"};
79 char *cmc1[2]={"","_MC"};
80 char *sign1[3]={"","_LS","_ULS"};
81 char *sign2[3]={""," LikeSign"," UnlikeSign"};
82 char *xEtaN[2]={"DeltaEtaN","EtaTrig"};
83 char *xEtaA[2]={"DeltaEtaA","EtaTrig"};
86 sprintf(xname,"fHistNTrigger_C%d%s",xCent,cmc1[xMC]);
87 TH1F *xNTrig=(TH1F*)xList->FindObject(xname);
88 sprintf(xname,"fHistNMix_C%d%s",xCent,cmc1[xMC]);
89 TH1F *xNMix=(TH1F*)xList->FindObject(xname);
90 sprintf(xname,"fHistNTriggerPt_C%d%s",xCent,cmc1[xMC]);
91 TH1F *xNTrigPt=(TH1F*)xList->FindObject(xname);
92 sprintf(xname,"fHistMult%s",cmc1[xMC]);
93 TH1F *xMult=(TH1F*)xList->FindObject(xname);
94 int xnevent=xMult->GetEntries();
96 for(int xi=xtpt1;xi<xtpt2;xi++){//Do for all trigger pt ranges we are adding
97 sprintf(xname,"fHist%s%s_P%d_C%d%s%s",cdelta1[xNotDelta],cpt1[xptweighted],xi,xCent,sign1[xSign],cmc1[xMC]);
98 xtemphist1=(TH2F*)xList->FindObject(xname);
99 sprintf(xname,"fHistDeltaPhiMix%s_P%d_C%d%s%s",cpt1[xptweighted],xi,xCent,sign1[xSign],cmc1[xMC]);
100 if(xNotDelta) sprintf(xname,"fHistPhi%s_C%d%s",cpt1[xptweighted],xCent,cmc1[xMC]);
101 xtemphist2=(TH2F*)xList->FindObject(xname);
103 sprintf(xname,"fHist%s%s_P%d_C%d%s%s",xEtaN[xNotDelta],cpt1[xptweighted],xi,xCent,sign1[xSign],cmc1[xMC]);
104 xtemphistEN=(TH2F*)xList->FindObject(xname);
106 sprintf(xname,"fHistDeltaEtaNMix%s_P%d_C%d%s%s",cpt1[xptweighted],xi,xCent,sign1[xSign],cmc1[xMC]);
107 if(xNotDelta) sprintf(xname,"fHistEta%s_C%d%s",cpt1[xptweighted],xCent,cmc1[xMC]);
108 xtemphistENM=(TH2F*)xList->FindObject(xname);
111 sprintf(xname,"fHist%s%s_P%d_C%d%s%s",xEtaA[xNotDelta],cpt1[xptweighted],xi,xCent,sign1[xSign],cmc1[xMC]);
112 xtemphistEA=(TH2F*)xList->FindObject(xname);
113 sprintf(xname,"fHistDeltaEtaAMix%s_P%d_C%d%s%s",cpt1[xptweighted],xi,xCent,sign1[xSign],cmc1[xMC]);
114 if(xNotDelta) sprintf(xname,"fHistEta%s_C%d%s",cpt1[xptweighted],xCent,cmc1[xMC]);
115 xtemphistEAM=(TH2F*)xList->FindObject(xname);
117 sprintf(xname,"fHist%s%s_P%d_C%d%s",cdelta2[xNotDelta],cpt1[xptweighted],xi,xCent,cmc1[xMC]);
118 xtemphist3=(TH3F*)xList->FindObject(xname);
119 sprintf(xname,"fHistDeltaPhiEtaMix%s_P%d_C%d%s",cpt1[xptweighted],xi,xCent,cmc1[xMC]);
120 if(xNotDelta) sprintf(xname,"fHistPhiEta%s_C%d%s",cpt1[xptweighted],xCent,cmc1[xMC]);
121 xtemphist4=(TH3F*)xList->FindObject(xname);
122 //c12355=new TCanvas("c12355","c12355");
123 // xtemphist4->Draw();
125 xntrig+=xNTrig->GetBinContent(xi+1);
126 xnmix+=xNMix->GetBinContent(xi+1);
127 exntrig+=pow(xNTrig->GetBinError(xi+1),2);
128 xntrigpt+=xNTrigPt->GetBinContent(xi+1);
129 exntrigpt+=pow(xNTrigPt->GetBinError(xi+1),2);
131 TH2F *xDeltaPhi=(TH2F*)xtemphist1->Clone();
132 xDeltaPhi->SetName("xDeltaPhi");
133 TH2F *xDeltaPhiMix=(TH2F*)xtemphist2->Clone();
134 xDeltaPhiMix->SetName("xDeltaPhiMix");
135 int xnbins=xDeltaPhi->GetNbinsX();
136 float xmin=xDeltaPhi->GetBinCenter(1)-(xDeltaPhi->GetBinWidth(1))/2.;
137 float xmax=xDeltaPhi->GetBinCenter(xnbins)+(xDeltaPhi->GetBinWidth(xnbins))/2.;
139 TH2F *xDeltaEtaN=(TH2F*)xtemphistEN->Clone();
140 xDeltaEtaN->SetName("xDeltaEtaN");
142 TH2F *xDeltaEtaNMix=(TH2F*)xtemphistENM->Clone();
143 xDeltaEtaNMix->SetName("xDeltaEtaNMix");
144 int xnEbins=xDeltaEtaN->GetNbinsX();
145 //cout << xnEbins << "EtaBins" << endl;
146 float xEmin=xDeltaEtaN->GetBinCenter(1)-(xDeltaEtaN->GetBinWidth(1))/2.;
147 float xEmax=xDeltaEtaN->GetBinCenter(xnEbins)+(xDeltaEtaN->GetBinWidth(xnEbins))/2.;
149 TH2F *xDeltaEtaA=(TH2F*)xtemphistEA->Clone();
150 xDeltaEtaA->SetName("xDeltaEtaA");
151 TH2F *xDeltaEtaAMix=(TH2F*)xtemphistEAM->Clone();
152 xDeltaEtaAMix->SetName("xDeltaEtaAMix");
154 TH3F *xDeltaPhiEta=(TH3F*)xtemphist3->Clone();
155 xDeltaPhiEta->SetName("xDeltaPhiEta");
156 TH3F *xDeltaPhiEtaMix=(TH3F*)xtemphist4->Clone();
157 xDeltaPhiEtaMix->SetName("xDeltaPhiEtaMix");
158 TAxis *xAxis=xDeltaPhiEta->GetXaxis();
159 TAxis *xAxis2=xDeltaPhiEta->GetXaxis();
160 TAxis *yAxis2=xDeltaPhiEta->GetYaxis();
161 int xnbins2=xAxis2->GetNbins();
162 int ynbins2=yAxis2->GetNbins();
163 float xmin2=xAxis2->GetBinCenter(1)-(xAxis2->GetBinWidth(1))/2.;
164 float xmax2=xAxis2->GetBinCenter(xnbins2)+(xAxis2->GetBinWidth(xnbins2))/2.;
165 float ymin2=yAxis2->GetBinCenter(1)-(yAxis2->GetBinWidth(1))/2.;
166 float ymax2=yAxis2->GetBinCenter(ynbins2)+(yAxis2->GetBinWidth(ynbins2))/2.;
167 //cout << "Sum Phi " << xDeltaPhi->GetSum() << endl;
170 for(int xj=1;xj<=xnbins;xj++){
171 for(int xk=xapt1;xk<=xapt2;xk++){
172 xDeltaPhi->SetBinContent(xj,xk,(xDeltaPhi->GetBinContent(xj,xk)+xtemphist1->GetBinContent(xj,xk)));
173 xDeltaPhi->SetBinError(xj,xk,sqrt(pow(xDeltaPhi->GetBinError(xj,xk),2)+pow(xtemphist1->GetBinError(xj,xk),2)));
174 if(!xNotDelta)xDeltaPhiMix->SetBinContent(xj,xk,(xDeltaPhiMix->GetBinContent(xj,xk)+xtemphist2->GetBinContent(xj,xk)));
175 if(!xNotDelta)xDeltaPhiMix->SetBinError(xj,xk,sqrt(pow(xDeltaPhiMix->GetBinError(xj,xk),2)+pow(xtemphist2->GetBinError(xj,xk),2)));
179 for(int xj=1;xj<=xnEbins;xj++){
180 for(int xk=xapt1;xk<=xapt2;xk++){
181 xDeltaEtaN->SetBinContent(xj,xk,(xDeltaEtaN->GetBinContent(xj,xk)+xtemphistEN->GetBinContent(xj,xk)));
182 xDeltaEtaN->SetBinError(xj,xk,sqrt(pow(xDeltaEtaN->GetBinError(xj,xk),2)+pow(xtemphistEN->GetBinError(xj,xk),2)));
183 if(!xNotDelta)xDeltaEtaNMix->SetBinContent(xj,xk,(xDeltaEtaNMix->GetBinContent(xj,xk)+xtemphistENM->GetBinContent(xj,xk)));
184 if(!xNotDelta)xDeltaEtaNMix->SetBinError(xj,xk,sqrt(pow(xDeltaEtaNMix->GetBinError(xj,xk),2)+pow(xtemphistENM->GetBinError(xj,xk),2)));
186 xDeltaEtaA->SetBinContent(xj,xk,(xDeltaEtaA->GetBinContent(xj,xk)+xtemphistEA->GetBinContent(xj,xk)));
187 xDeltaEtaA->SetBinError(xj,xk,sqrt(pow(xDeltaEtaA->GetBinError(xj,xk),2)+pow(xtemphistEA->GetBinError(xj,xk),2)));
188 if(!xNotDelta)xDeltaEtaAMix->SetBinContent(xj,xk,(xDeltaEtaAMix->GetBinContent(xj,xk)+xtemphistEAM->GetBinContent(xj,xk)));
189 if(!xNotDelta)xDeltaEtaAMix->SetBinError(xj,xk,sqrt(pow(xDeltaEtaAMix->GetBinError(xj,xk),2)+pow(xtemphistEAM->GetBinError(xj,xk),2)));
193 for(int xj=1;xj<=xnbins2;xj++){
194 for(int xk=1;xk<=ynbins2;xk++){
195 for(int xl=xapt1;xl<=xapt2;xl++){
196 xDeltaPhiEta->SetBinContent(xj,xk,xl,(xDeltaPhiEta->GetBinContent(xj,xk,xl)+xtemphist3->GetBinContent(xj,xk,xl)));
197 xDeltaPhiEta->SetBinError(xj,xk,xl,sqrt(pow(xDeltaPhiEta->GetBinError(xj,xk,xl),2)+pow(xtemphist3->GetBinError(xj,xk,xl),2)));
198 if(!xNotDelta)xDeltaPhiEtaMix->SetBinContent(xj,xk,xl,(xDeltaPhiEtaMix->GetBinContent(xj,xk,xl)+xtemphist4->GetBinContent(xj,xk,xl)));
199 if(!xNotDelta)xDeltaPhiEtaMix->SetBinError(xj,xk,xl,sqrt(pow(xDeltaPhiEtaMix->GetBinError(xj,xk,xl),2)+pow(xtemphist4->GetBinError(xj,xk,xl),2)));
207 c124=new TCanvas("c124");
209 cout << xtemphist4->GetBinContent(10,10,2) << " " << xDeltaPhiEtaMix->GetBinContent(10,10,2) << endl;
210 cout << xtemphist4->GetBinError(10,10,2) << " " << xDeltaPhiEtaMix->GetBinError(10,10,2) << endl;
211 cout << xtemphist4->GetBinContent(10,1,2) << " " << xDeltaPhiEtaMix->GetBinContent(10,1,2) << endl;
215 cout << "Number of Triggers: " << xntrig << endl;
216 cout << "Number of Mixed Events: " << xnmix << endl;
217 sprintf(xname,"fHistNEvents_C%d",xCent);
218 TH1F *xNEvents=(TH1F*)xList->FindObject(xname);
219 cout << "Number of Events: " << xNEvents->GetBinContent(1) << endl;
220 if(xptweighted)cout << "<P_T Trigger>: " << xntrigpt/xntrig << endl;
221 //cout << xntrigpt << " " << exntrigpt << " " << xntrig << " " << exntrig << endl;
222 if(xptweighted)xMPt[0]=xntrigpt/xntrig;
223 exntrigpt=sqrt(exntrigpt);
224 exntrig=sqrt(exntrig);
225 if(xptweighted)xMPt[1]=xMPt[0]*sqrt(pow(exntrigpt/xntrigpt,2)+pow(exntrig/xntrig,2));
228 xDeltaPhi->Scale(xnbins/(2.*xPi)/xntrig);
229 xDeltaEtaN->Scale(xnEbins/(xEmax-xEmin)/xntrig);
230 xDeltaEtaA->Scale(xnEbins/(xEmax-xEmin)/xntrig);
231 xDeltaPhiEta->Scale(xnbins2/(2.*xPi)*ynbins2/(ymax2-ymin2)/xntrig);
233 xDeltaPhiMix->Scale(xnbins/(2.*xPi)/xnmix);
234 xDeltaEtaNMix->Scale(xnEbins/(xEmax-xEmin)/xnmix);
235 xDeltaEtaAMix->Scale(xnEbins/(xEmax-xEmin)/xnmix);
236 xDeltaPhiEtaMix->Scale(xnbins2/(2.*xPi)*ynbins2/(ymax2-ymin2)/xnmix);
239 xDeltaPhiMix->Scale(xnbins/(2.*xPi)/xnevent);
240 xDeltaEtaNMix->Scale(xnEbins/(xEmax-xEmin)/xnevent);
241 xDeltaEtaAMix->Scale(xnEbins/(xEmax-xEmin)/xnevent);
242 xDeltaPhiEtaMix->Scale(xnbins2/(2.*xPi)*ynbins2/(ymax2-ymin2)/xnevent);
245 char *tit1="#Delta#phi";
246 if(xNotDelta)tit1="#phi";
248 if(xptweighted)tit11="p_{T} Weighted";
250 if(xNotDelta)tit12="Triggered";
252 if(xptweighted)tit2="p_{T}";
253 char *tit3="Mixed #Delta#phi";
254 if(xNotDelta)tit3="#phi";
256 sprintf(xname,"%s %s %s Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",tit12,tit11,tit1,xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
257 *xOutHistPhi=new TH1F("dPhi",xname,xnbins,xmin,xmax);
258 xOutHistPhi->Sumw2();
259 sprintf(xname,"%s (radians) ",tit1);
260 xOutHistPhi->GetXaxis()->SetTitle(xname);
261 sprintf(xname,"#frac{%s}{N_{Trig}}#frac{dN}{d%s} ",tit2,tit1);
262 xOutHistPhi->GetYaxis()->SetTitle(xname);
263 SetTitles1D(xOutHistPhi);
264 xOutHistPhi->SetMarkerStyle(20);
265 xOutHistPhi->SetMarkerColor(2);
266 xOutHistPhi->SetLineColor(2);
268 sprintf(xname,"%s %s Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",tit11,tit3, xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
269 *xOutHistPhiMix=new TH1F("dMix",xname,xnbins,xmin,xmax);
270 xOutHistPhiMix->Sumw2();
271 sprintf(xname,"%s (radians) ",tit1);
272 xOutHistPhiMix->GetXaxis()->SetTitle(xname);
273 sprintf(xname,"#frac{%s}{N_{Trig}}#frac{dN}{d%s} ",tit2,tit1);
274 xOutHistPhiMix->GetYaxis()->SetTitle(xname);
275 SetTitles1D(xOutHistPhiMix);
276 xOutHistPhiMix->SetMarkerStyle(21);
277 xOutHistPhiMix->SetMarkerColor(1);
278 xOutHistPhiMix->SetLineColor(1);
280 char *tit14="#Delta#eta";
281 if(xNotDelta) tit14="#eta";
282 char *tit15="Mixed #Delta#eta";
283 if(xNotDelta) tit15="#eta";
284 char *titNear="Near-Side";
285 if(xNotDelta)titNear="";
287 sprintf(xname,"%s %s %s %s Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",tit12,titNear,tit11,tit14,xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
288 *xOutHistEtaN=new TH1F("dEtaN",xname,xnEbins,xEmin,xEmax);
289 xOutHistEtaN->Sumw2();
290 sprintf(xname,"%s ",tit14);
291 xOutHistEtaN->GetXaxis()->SetTitle(xname);
292 sprintf(xname,"#frac{%s}{N_{Trig}}#frac{dN}{d%s} ",tit2,tit14);
293 xOutHistEtaN->GetYaxis()->SetTitle(xname);
294 SetTitles1D(xOutHistEtaN);
295 xOutHistEtaN->SetMarkerStyle(20);
296 xOutHistEtaN->SetMarkerColor(2);
297 xOutHistEtaN->SetLineColor(2);
299 sprintf(xname,"%s %s %s Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",tit11,titNear,tit15,xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
300 *xOutHistEtaNMix=new TH1F("dEtaMixN",xname,xnEbins,xEmin,xEmax);
301 xOutHistEtaNMix->Sumw2();
302 sprintf(xname,"%s (radians) ",tit1);
303 xOutHistEtaNMix->GetXaxis()->SetTitle(xname);
304 sprintf(xname,"#frac{%s}{N_{Trig}}#frac{dN}{d%s} ",tit2,tit14);
305 xOutHistEtaNMix->GetYaxis()->SetTitle(xname);
306 SetTitles1D(xOutHistEtaNMix);
307 xOutHistEtaNMix->SetMarkerStyle(21);
308 xOutHistEtaNMix->SetMarkerColor(1);
309 xOutHistEtaNMix->SetLineColor(1);
311 char *titAway="Away-Side";
312 if(xNotDelta)titAway="";
314 sprintf(xname,"%s %s %s %s Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",tit12,titAway,tit11,tit14,xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
315 *xOutHistEtaA=new TH1F("dEtaA",xname,xnEbins,xEmin,xEmax);
316 xOutHistEtaA->Sumw2();
317 sprintf(xname,"%s ",tit14);
318 xOutHistEtaA->GetXaxis()->SetTitle(xname);
319 sprintf(xname,"#frac{%s}{N_{Trig}}#frac{dN}{d%s} ",tit2,tit14);
320 xOutHistEtaA->GetYaxis()->SetTitle(xname);
321 SetTitles1D(xOutHistEtaA);
322 xOutHistEtaA->SetMarkerStyle(20);
323 xOutHistEtaA->SetMarkerColor(2);
324 xOutHistEtaA->SetLineColor(2);
326 sprintf(xname,"%s %s %s Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",tit11,titAway,tit15,xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
327 *xOutHistEtaAMix=new TH1F("dEtaMixA",xname,xnEbins,xEmin,xEmax);
328 xOutHistEtaAMix->Sumw2();
329 sprintf(xname,"%s (radians) ",tit1);
330 xOutHistEtaAMix->GetXaxis()->SetTitle(xname);
331 sprintf(xname,"#frac{%s}{N_{Trig}}#frac{dN}{d%s} ",tit2,tit14);
332 xOutHistEtaAMix->GetYaxis()->SetTitle(xname);
333 SetTitles1D(xOutHistEtaAMix);
334 xOutHistEtaAMix->SetMarkerStyle(21);
335 xOutHistEtaAMix->SetMarkerColor(1);
336 xOutHistEtaAMix->SetLineColor(1);
338 sprintf(xname,"%s %s %s-%s Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",tit12,tit11,tit1,tit14,xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
339 *xOutHistPhiEta=new TH2F("dPhiEta",xname,xnbins2,xmin2,xmax2,ynbins2,ymin2,ymax2);
340 xOutHistPhiEta->Sumw2();
341 sprintf(xname,"%s (radians) ",tit1);
342 xOutHistPhiEta->GetXaxis()->SetTitle(xname);
343 sprintf(xname,"%s ",tit14);
344 xOutHistPhiEta->GetYaxis()->SetTitle(xname);
345 sprintf(xname,"#frac{%s}{N_{Trig}}#frac{dN}{d%sd%s} ",tit2,tit1,tit14);
346 xOutHistPhiEta->GetZaxis()->SetTitle(xname);
347 SetTitles2D(xOutHistPhiEta);
349 sprintf(xname,"%s %s-%s Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",tit11,tit3,tit14,xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
350 *xOutHistPhiEtaMix=new TH2F("dPhiEtaMix",xname,xnbins2,xmin2,xmax2,ynbins2,ymin2,ymax2);
351 xOutHistPhiEtaMix->Sumw2();
352 sprintf(xname,"%s (radians) ",tit1);
353 xOutHistPhiEtaMix->GetXaxis()->SetTitle(xname);
354 sprintf(xname,"%s ",tit14);
355 xOutHistPhiEtaMix->GetYaxis()->SetTitle(xname);
356 sprintf(xname,"#frac{%s}{N_{Trig}}#frac{dN}{d%sd%s} ",tit2,tit1,tit14);
357 xOutHistPhiEtaMix->GetZaxis()->SetTitle(xname);
358 SetTitles2D(xOutHistPhiEtaMix);
360 float xsum1,xsum2,xerr1,xerr2,xsum3,xsum4,xerr3,xerr4;
361 for(int xi=1;xi<=xnbins;xi++){
362 xsum1=0; xerr1=0; xsum2=0; xerr2=0;
363 for(int xj=xapt1; xj<=xapt2;xj++){
364 xsum1+=xDeltaPhi->GetBinContent(xi,xj);
365 xerr1+=pow(xDeltaPhi->GetBinError(xi,xj),2);
366 xsum2+=xDeltaPhiMix->GetBinContent(xi,xj);
367 xerr2+=pow(xDeltaPhiMix->GetBinError(xi,xj),2);
370 xOutHistPhi->SetBinContent(xi,xsum1);
371 xOutHistPhi->SetBinError(xi,sqrt(xerr1));
372 xOutHistPhiMix->SetBinContent(xi,xsum2);
373 xOutHistPhiMix->SetBinError(xi,sqrt(xerr2));
375 for(int xi=1;xi<=xnEbins;xi++){
376 xsum1=0; xerr1=0; xsum2=0; xerr2=0;
377 xsum3=0; xerr3=0; xsum4=0; xerr4=0;
378 //cout << "apt" << xapt1 << " " << xapt2 << endl;
379 for(int xj=xapt1; xj<=xapt2;xj++){
380 xsum1+=xDeltaEtaN->GetBinContent(xi,xj);
381 xerr1+=pow(xDeltaEtaN->GetBinError(xi,xj),2);
382 xsum2+=xDeltaEtaNMix->GetBinContent(xi,xj);
383 xerr2+=pow(xDeltaEtaNMix->GetBinError(xi,xj),2);
384 xsum3+=xDeltaEtaA->GetBinContent(xi,xj);
385 xerr3+=pow(xDeltaEtaA->GetBinError(xi,xj),2);
386 xsum4+=xDeltaEtaAMix->GetBinContent(xi,xj);
387 xerr4+=pow(xDeltaEtaAMix->GetBinError(xi,xj),2);
389 xOutHistEtaN->SetBinContent(xi,xsum1);
390 xOutHistEtaN->SetBinError(xi,sqrt(xerr1));
391 xOutHistEtaNMix->SetBinContent(xi,xsum2);
392 xOutHistEtaNMix->SetBinError(xi,sqrt(xerr2));
393 xOutHistEtaA->SetBinContent(xi,xsum3);
394 xOutHistEtaA->SetBinError(xi,sqrt(xerr3));
395 xOutHistEtaAMix->SetBinContent(xi,xsum4);
396 xOutHistEtaAMix->SetBinError(xi,sqrt(xerr4));
399 for(int xi=1;xi<=xnbins2;xi++){
400 for(int xj=1;xj<=ynbins2;xj++){
401 xsum1=0; xerr1=0; xsum2=0; xerr2=0;
402 for(int xk=xapt1; xk<=xapt2;xk++){
403 xsum1+=xDeltaPhiEta->GetBinContent(xi,xj,xk);
404 xerr1+=pow(xDeltaPhiEta->GetBinError(xi,xj,xk),2);
405 xsum2+=xDeltaPhiEtaMix->GetBinContent(xi,xj,xk);
406 xerr2+=pow(xDeltaPhiEtaMix->GetBinError(xi,xj,xk),2);
408 //cout << xDeltaPhiEtaMix->GetYaxis()->GetBinCenter(xj) << " " << xOutHistPhiEtaMix->GetYaxis()->GetBinCenter(xj) << " " << xsum2 << endl;
409 xOutHistPhiEta->SetBinContent(xi,xj,xsum1);
410 xOutHistPhiEta->SetBinError(xi,xj,sqrt(xerr1));
411 xOutHistPhiEtaMix->SetBinContent(xi,xj,xsum2);
412 xOutHistPhiEtaMix->SetBinError(xi,xj,sqrt(xsum2));
416 //c10=new TCanvas("c10","",800,600);
417 //xOutHistPhi->Draw();
426 //--------------------------------------------------------------------------------------------------------
428 void ZYA1(TH1F *yHistSig, TH1F *yHistBg, float scalea[3], float ZYAMCent=1.,float ZYAMWidth=0.2){
430 //yerr=1 no mixed event
432 //yerr=3 no signal and no mixed
434 //float ZYAMCent=1.3;
435 //float ZYAMWidth=0.2;//window is cent +/- width so its really a 1/2 width of the window
437 //static float scalea[3];
438 float ysumsig=0,ysumbg=0,yerrsig=0,yerrbg=0;
440 int ybins=yHistSig->GetNbinsX();
441 float yPi=3.1415926535898;
442 //cout << ybins << endl;
443 //cout << yHistSig->GetSum() << endl;
444 //c20=new TCanvas("c20","",800,600);
446 cout << "ZYAMRegion: " << (ZYAMCent-ZYAMWidth) << "-" << (ZYAMCent+ZYAMWidth) << endl;
448 for(int yi=1;yi<=ybins;yi++){
449 ycent=yHistSig->GetBinCenter(yi);
450 if((fabs(fabs(ycent)-ZYAMCent)<ZYAMWidth)||(fabs(fabs(ycent)-(2*yPi-ZYAMCent))<ZYAMWidth)){
451 ysumsig+=yHistSig->GetBinContent(yi);
452 yerrsig+=pow(yHistSig->GetBinError(yi),2);
453 ysumbg+=yHistBg->GetBinContent(yi);
454 yerrbg+=pow(yHistBg->GetBinError(yi),2);
457 cout << ysumsig << " " << yerrsig << " " << ysumbg << " " << yerrbg << endl;
458 if(ysumbg==0&&ysumsig==0){
476 yea=a*sqrt(yerrsig/ysumsig/ysumsig+yerrbg/ysumbg/ysumbg);
483 if(yerr) cout << "ZYA1 Error:" << yerr << endl;
486 //----------------------------------------------------------------------------------------------------
487 void ZYAM2D(TH2F *yHistSig, TH2F *yHistBg, Float_t scalea[3], Int_t nMin=10, Int_t nIter=10){
488 //for pp nIter=1 might be fine, for heavy-ions where the background has shape it shouldn't
490 const Int_t NMin=100;
493 float esumSig, esumBg;
494 float sumMin, esumMin;
497 float MinArray[NMin][2];
498 float MinArraySig[NMin][2];
499 float MinArrayBg[NMin][2];
505 for(int i=0;i<nIter;i++){
506 for(int q=0;q<nMin;q++){
507 MinArray[q][0]=10000;
509 for(int x=1;x<=yHistSig->GetNbinsX();x++){
510 for(int y=2;y<=(yHistSig->GetNbinsY()-1);y++){
512 for(int j=0;j<nMin;j++){//Find highest bin
513 if(MinArray[j][0]>maxBinVal){
514 maxBinVal=MinArray[j][0];
518 s=yHistSig->GetBinContent(x,y);
519 b=yHistBg->GetBinContent(x,y);
520 es=yHistSig->GetBinError(x,y);
521 eb=yHistBg->GetBinError(x,y);
523 //float a11=scalea[0];
525 //cout << "s" << s << " " << "b" << b << " " << bin << endl;
526 //cout << bin << " " << maxBinVal << " " << maxBin << endl;
527 if(bin<maxBinVal){//replce highest bin with current if lower
528 MinArray[maxBin][0]=bin;
529 // cout << maxBin << " " << maxBinVal << " " << bin << " " << MinArray[maxBin][0] << endl;
530 //divide by 0 protections
531 if(scalea[0]==0)scalea[0]=1E-10;
532 if(scalea[1]==0)scalea[1]=1E-10;
537 MinArray[maxBin][1]=pow(es,2)+pow(scalea[0]*b,2)*(pow(scalea[1]/scalea[0],2)+pow(eb/b,2));
538 MinArraySig[maxBin][0]=s;
539 MinArraySig[maxBin][1]=es*es;
540 MinArrayBg[maxBin][0]=b;
541 MinArrayBg[maxBin][1]=eb*eb;
542 //cout << s << " " << b << " " << bin << " " << maxBin << endl;
546 sumSig=0, sumBg=0, esumSig=0, esumBg=0, sumMin=0, esumMin=0;
547 for(int j=0;j<nMin;j++){
548 //cout << MinArray[j][0] << endl;
549 if(MinArray[j][0]!=10000&&MinArraySig[j][0]>1E-9&&MinArrayBg[j][0]>1E-9){
550 // cout << MinArraySig[j][0] << endl;
551 sumMin+=MinArray[j][0];
552 esumMin+=MinArray[j][1];
553 sumSig+=MinArraySig[j][0];
554 esumSig+=MinArraySig[j][1];
555 sumBg+=MinArrayBg[j][0];
556 esumBg+=MinArrayBg[j][1];
559 if(sumSig==0){sumSig=1E-10; cout << "Warning: Zero sumSig" << endl;}
560 if(sumBg==0){sumBg=1E-10; cout << "Warning: Zero sumBg" << endl;}
561 scalea[0]=sumSig/sumBg;
562 //cout << sumSig << endl;
563 if(sumSig==1E-10)scalea[0]=0;
564 scalea[1]=scalea[0]*pow(esumSig/sumSig/sumSig+esumBg/sumBg/sumBg,0.5);
565 esumMin=pow(esumMin,0.5);
566 esumSig=pow(esumSig,0.5);
567 esumBg=pow(esumBg,0.5);
568 cout << "Iter: " << i << " Min=" << sumMin << " +/- " << esumMin << " a=" << scalea[0] << endl;
571 //--------------------------------------------------------------------------------------------------
572 void ZYAM2D2(TH2F *yHistSig, TH2F *yHistBg, float scalea[3], float ZYAMCent=1.,float ZYAMWidth=0.2){
574 //yerr=1 no mixed event
576 //yerr=3 no signal and no mixed
578 //float ZYAMCent=1.3;
579 //float ZYAMWidth=0.2;//window is cent +/- width so its really a 1/2 width of the window
581 //static float scalea[3];
582 float ysumsig=0,ysumbg=0,yerrsig=0,yerrbg=0;
584 int xbins=yHistSig->GetNbinsX();
585 int ybins=yHistSig->GetNbinsY();
586 float yPi=3.1415926535898;
587 //cout << ybins << endl;
588 //cout << yHistSig->GetSum() << endl;
589 //c20=new TCanvas("c20","",800,600);
591 cout << "ZYAMRegion: " << (ZYAMCent-ZYAMWidth) << "-" << (ZYAMCent+ZYAMWidth) << endl;
592 for(int xi=1;xi<=xbins;xi++){
593 xcent=yHistSig->GetBinCenter(xi);
594 if((fabs(fabs(xcent)-ZYAMCent)<ZYAMWidth)||(fabs(fabs(xcent)-(2*yPi-ZYAMCent))<ZYAMWidth)){
595 for(int yi=1;yi<=ybins;yi++){
596 ysumsig+=yHistSig->GetBinContent(xi,yi);
597 yerrsig+=pow(yHistSig->GetBinError(xi,yi),2);
598 ysumbg+=yHistBg->GetBinContent(xi,yi);
599 yerrbg+=pow(yHistBg->GetBinError(xi,yi),2);
603 cout << ysumsig << " " << yerrsig << " " << ysumbg << " " << yerrbg << endl;
604 if(ysumbg==0&&ysumsig==0){
622 yea=a*sqrt(yerrsig/ysumsig/ysumsig+yerrbg/ysumbg/ysumbg);
629 if(yerr) cout << "ZYA1 Error:" << yerr << endl;
632 //-------------------------------------------------------------------------------------------------------
633 void EffCorr(Float_t &yTPt1, Float_t &yTPt2, Float_t &yAPt1, Float_t &yAPt2, Int_t yCent, char *yFileName, char *yEffFileName, TH1F *yPhiRaw, TH1F *yPhiCorr, TH1F *yPhiEff, TH1F *yPhiMixRaw, TH1F *yPhiMixCorr, TH1F *yPhiMixEff, TH2F *yPhiEtaRaw, TH2F *yPhiEtaCorr, TH2F *yPhiEtaEff, TH2F *yPhiEtaMixRaw, TH2F *yPhiEtaMixCorr, TH2F *yPhiEtaMixEff, Float_t yMPt[3], Int_t yptweighted=0, Int_t yNotDelta=0, Int_t yMethod=1){
634 char name[120], name2[105];
638 MakeProjections(yTPt1,yTPt2,yAPt1,yAPt2,yCent,yFileName,yPhiRaw,yPhiMixRaw,yPhiEtaRaw,yPhiEtaMixRaw,yMPt,yptweighted,0,yNotDelta);
640 sprintf(name,"yPhiRaw_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
641 yPhiRaw->SetName(name);
643 sprintf(name,"yPhiMixRaw_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
644 yPhiMixRaw->SetName(name);
646 sprintf(name,"yPhiEtaRaw_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
647 yPhiEtaRaw->SetName(name);
649 sprintf(name,"yPhiEtaMixRaw_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
650 yPhiEtaMixRaw->SetName(name);
653 //Projections from MC (from eff file)
654 TH1F *yPhiMC=new TH1F("yPhiMC","",1,0,1);
655 TH1F *yPhiMixMC=new TH1F("yPhiMixMC","",1,0,1);
656 TH2F *yPhiEtaMC=new TH2F("yPhiEtaMC","",1,0,1,1,0,1);
657 TH2F *yPhiEtaMixMC=new TH2F("yPhiEtaMixMC","",1,0,1,1,0,1);
658 MakeProjections(yTPt1,yTPt2,yAPt1,yAPt2,yCent,yEffFileName,yPhiMC,yPhiMixMC,yPhiEtaMC,yPhiEtaMixMC,yMPt2,yptweighted,1,yNotDelta);
659 sprintf(name,"yPhiMC_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
660 yPhiMC->SetName(name);
661 sprintf(name,"yPhiMixMC_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
662 yPhiMixMC->SetName(name);
663 sprintf(name,"yPhiEtaMC_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
664 yPhiEtaMC->SetName(name);
665 sprintf(name,"yPhiEtaMixMC_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
666 yPhiEtaMixMC->SetName(name);
668 //Efficiency Histograms
669 MakeProjections(yTPt1,yTPt2,yAPt1,yAPt2,yCent,yEffFileName,yPhiEff,yPhiMixEff,yPhiEtaEff,yPhiEtaMixEff,yMPt2,yptweighted,0,yNotDelta);
670 sprintf(name,"yPhiEff_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
671 yPhiEff->SetName(name);
672 sprintf(name2,"Efficiency %s",yPhiEff->GetTitle());
673 yPhiEff->SetTitle(name2);
675 sprintf(name,"yPhiMixEff_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
676 yPhiMixEff->SetName(name);
677 sprintf(name2,"Efficiency %s",yPhiMixEff->GetTitle());
678 yPhiMixEff->SetTitle(name2);
680 sprintf(name,"yPhiEtaEff_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
681 yPhiEtaEff->SetName(name);
682 sprintf(name2,"Efficiency %s",yPhiEtaEff->GetTitle());
683 yPhiEtaEff->SetTitle(name2);
685 sprintf(name,"yPhiEtaMixEff_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
686 yPhiEtaMixEff->SetName(name);
687 sprintf(name2,"Efficiency %s",yPhiEtaMixEff->GetTitle());
688 yPhiEtaMixEff->SetTitle(name2);
692 yPhiEff->Divide(yPhiMC);
693 yPhiMixEff->Divide(yPhiMixMC);
694 yPhiEtaEff->Divide(yPhiEtaMC);
695 yPhiEtaMixEff->Divide(yPhiEtaMixMC);
701 *yPhiCorr=(TH1F*)yPhiRaw->Clone();
702 sprintf(name,"yPhiCorr_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
703 yPhiCorr->SetName(name);
704 yPhiCorr->Divide(yPhiEff);
706 *yPhiMixCorr=(TH1F*)yPhiMixRaw->Clone();
707 sprintf(name,"yPhiMixCorr_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
708 yPhiMixCorr->SetName(name);
709 yPhiMixCorr->Divide(yPhiMixEff);
711 *yPhiEtaCorr=(TH2F*)yPhiEtaRaw->Clone();
712 sprintf(name,"yPhiEtaCorr_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
713 yPhiEtaCorr->SetName(name);
714 yPhiEtaCorr->Divide(yPhiEtaEff);
716 *yPhiEtaMixCorr=(TH2F*)yPhiEtaMixRaw->Clone();
717 sprintf(name,"yPhiMixCorr_%2.2fPT%2.2f_%2.2fpt%2.2f_%d",yTPt1,yTPt2,yAPt1,yAPt2,yCent);
718 yPhiEtaMixCorr->SetName(name);
719 yPhiEtaMixCorr->Divide(yPhiEtaMixEff);
722 sprintf(name2,"Uncorrected %s",yPhiRaw->GetTitle());
723 yPhiRaw->SetTitle(name2);
724 sprintf(name2,"Uncorrected %s",yPhiMixRaw->GetTitle());
725 yPhiMixRaw->SetTitle(name2);
726 sprintf(name2,"Uncorrected %s",yPhiEtaRaw->GetTitle());
727 yPhiEtaRaw->SetTitle(name2);
728 sprintf(name2,"Uncorrected %s",yPhiEtaMixRaw->GetTitle());
729 yPhiEtaMixRaw->SetTitle(name2);
731 //Geometry Correction for the eta-phi plots
733 int xbins=yPhiEtaCorr->GetNbinsX();
734 int ybins=yPhiEtaCorr->GetNbinsY();
739 //uses the mc for the geomery correction
740 for(int yx=1;yx<=xbins;yx++){
741 scale+=yPhiEtaMixMC->GetBinContent(yx,ybins/2);
742 scale+=yPhiEtaMixMC->GetBinContent(yx,ybins/2+1);
745 for(int yy=1;yy<=ybins;yy++){
747 for(int yx=1;yx<=xbins;yx++){
748 sumy+=yPhiEtaMixMC->GetBinContent(yx,yy);
750 if(sumy==0)sumy=0.00001;
752 for(int yx=1;yx<=xbins;yx++){
753 yPhiEtaCorr->SetBinContent(yx,yy,corr*yPhiEtaCorr->GetBinContent(yx,yy));
754 yPhiEtaCorr->SetBinError(yx,yy,corr*yPhiEtaCorr->GetBinError(yx,yy));
755 yPhiEtaMixCorr->SetBinContent(yx,yy,corr*yPhiEtaMixCorr->GetBinContent(yx,yy));
756 yPhiEtaMixCorr->SetBinError(yx,yy,corr*yPhiEtaMixCorr->GetBinError(yx,yy));
761 //uses equation for the geometry correct, must be changed if trigger or associtated eta cuts change
762 TAxis *yAxis=yPhiEtaCorr->GetYaxis();
763 for(int yx=1;yx<=xbins;yx++){
764 for(int yy=1;yy<=xbins;yy++){
765 center=yAxis->GetBinCenter(yy);
766 if(center<0)corr=1/(1+center/1.8);
767 else corr=1/(1-center/1.8);
768 yPhiEtaCorr->SetBinContent(yx,yy,corr*yPhiEtaCorr->GetBinContent(yx,yy));
769 yPhiEtaCorr->SetBinError(yx,yy,corr*yPhiEtaCorr->GetBinError(yx,yy));
770 yPhiEtaMixCorr->SetBinContent(yx,yy,corr*yPhiEtaMixCorr->GetBinContent(yx,yy));
771 yPhiEtaMixCorr->SetBinError(yx,yy,corr*yPhiEtaMixCorr->GetBinError(yx,yy));
776 //----------------------------------------------------------------------------------------------------------
777 void EffCorr2(Float_t yTPt1, Float_t yTPt2, Float_t yAPt1, Float_t yAPt2, Int_t yCent, TH1F *yPhiEff, TH1F *yPhiMC, TH1F *yPhiMixEff, TH1F *yPhiMixMC, TH1F *yEtaNEff, TH1F *yEtaNMC, TH1F *yEtaNMixEff, TH1F *yEtaNMixMC, TH1F *yEtaAEff, TH1F *yEtaAMC, TH1F *yEtaAMixEff, TH1F *yEtaAMixMC, TH2F *yPhiEtaEff, TH2F *yPhiEtaMC, TH2F *yPhiEtaMixEff, TH2F *yPhiEtaMixMC, Int_t yMethod=1){//MovingMax is special for yMethod==4
778 char effname[120], effname2[105];
780 for(int i=1;i<=yPhiEff->GetNbinsX();i++){
781 yPhiEff->SetBinContent(i,1);
782 yPhiEff->SetBinError(i,0);
783 yPhiMixEff->SetBinContent(i,1);
784 yPhiMixEff->SetBinError(i,0);
786 for(int i=1;i<=yEtaNEff->GetNbinsX();i++){
787 yEtaNEff->SetBinContent(i,1);
788 yEtaNEff->SetBinError(i,0);
789 yEtaAEff->SetBinContent(i,1);
790 yEtaAEff->SetBinError(i,0);
791 yEtaNMixEff->SetBinContent(i,1);
792 yEtaNMixEff->SetBinError(i,0);
793 yEtaAMixEff->SetBinContent(i,1);
794 yEtaAMixEff->SetBinError(i,0);
796 for(int i=1;i<=yPhiEtaEff->GetXaxis()->GetNbins();i++){
797 for(int j=1;j<=yPhiEtaEff->GetYaxis()->GetNbins();j++){
798 yPhiEtaEff->SetBinContent(i,j,1);
799 yPhiEtaEff->SetBinError(i,j,0);
800 yPhiEtaMixEff->SetBinContent(i,j,1);
801 yPhiEtaMixEff->SetBinError(i,j,0);
806 //Calculate Eff (Method 1)
807 yPhiEff->Divide(yPhiMC);
808 yPhiMixEff->Divide(yPhiMixMC);
809 yEtaNEff->Divide(yEtaNMC);
810 yEtaNMixEff->Divide(yEtaNMixMC);
811 yEtaAEff->Divide(yEtaAMC);
812 yEtaAMixEff->Divide(yEtaAMixMC);
813 yPhiEtaEff->Divide(yPhiEtaMC);
814 yPhiEtaMixEff->Divide(yPhiEtaMixMC);
816 if(yMethod==2){//Use mixed event efficiencys for triggered events
818 yPhiEff=(TH1F*)yPhiMixEff->Clone();
819 yPhiEff->SetName("yPhiEff");
820 yEtaNEff=(TH1F*)yEtaNMixEff->Clone();
821 yEtaNEff->SetName("yEtaNEff");
822 yEtaAEff=(TH1F*)yEtaAMixEff->Clone();
823 yEtaAEff->SetName("yEtaAEff");
824 yPhiEtaEff=(TH1F*)yPhiEtaMixEff->Clone();
825 yPhiEtaEff->SetName("yPhiEtaEff");
827 for(int i=1;i<=yPhiEff->GetNbinsX();i++){
828 yPhiEff->SetBinContent(i,yPhiMixEff->GetBinContent(i));
829 yPhiEff->SetBinError(i,yPhiMixEff->GetBinError(i));
831 for(int i=1;i<=yEtaNEff->GetNbinsX();i++){
832 yEtaNEff->SetBinContent(i,yEtaNMixEff->GetBinContent(i));
833 yEtaNEff->SetBinError(i,yEtaNMixEff->GetBinError(i));
834 yEtaAEff->SetBinContent(i,yEtaAMixEff->GetBinContent(i));
835 yEtaAEff->SetBinError(i,yEtaAMixEff->GetBinError(i));
837 for(int i=1;i<=yPhiEtaEff->GetXaxis()->GetNbins();i++){
838 for(int j=1;j<=yPhiEtaEff->GetYaxis()->GetNbins();j++){
839 yPhiEtaEff->SetBinContent(i,j,yPhiEtaMixEff->GetBinContent(i,j));
840 yPhiEtaEff->SetBinError(i,j,yPhiEtaMixEff->GetBinError(i,j));
844 if(yMethod==3){//Sum one distribution and use it for all
845 float eff=0, effE=0, effM=0, effME=0;
846 for(int i=1;i<=yPhiEff->GetNbinsX();i++){
847 eff+=yPhiEff->GetBinContent(i);
848 effE+=pow(yPhiEff->GetBinError(i),2);
849 effM+=yPhiMixEff->GetBinContent(i);
850 effME+=pow(yPhiMixEff->GetBinError(i),2);
852 eff/=yPhiEff->GetNbinsX();
853 effM/=yPhiEff->GetNbinsX();
854 effE=sqrt(effE)/yPhiEff->GetNbinsX();
855 effME=sqrt(effME)/yPhiEff->GetNbinsX();
856 cout << "Triggered Event Eff: " << eff << " +/- " << effE << endl;
857 cout << "Mixed Event Efficie: " << effM << " +/- " << effME << endl;
859 for(int i=1;i<=yPhiEff->GetNbinsX();i++){
860 yPhiEff->SetBinContent(i,eff);
861 yPhiEff->SetBinError(i,effE);
862 yPhiMixEff->SetBinContent(i,effM);
863 yPhiMixEff->SetBinError(i,effME);
865 for(int i=1;i<=yEtaNEff->GetNbinsX();i++){
866 yEtaNEff->SetBinContent(i,eff);
867 yEtaNEff->SetBinError(i,effE);
868 yEtaNMixEff->SetBinContent(i,effM);
869 yEtaNMixEff->SetBinError(i,effME);
870 yEtaAEff->SetBinContent(i,eff);
871 yEtaAEff->SetBinError(i,effE);
872 yEtaAMixEff->SetBinContent(i,effM);
873 yEtaAMixEff->SetBinError(i,effME);
875 for(int i=1;i<=yPhiEtaEff->GetXaxis()->GetNbins();i++){
876 for(int j=1;j<=yPhiEtaEff->GetYaxis()->GetNbins();j++){
877 yPhiEtaEff->SetBinContent(i,j,eff);
878 yPhiEtaEff->SetBinError(i,j,effE);
879 yPhiEtaMixEff->SetBinContent(i,j,effM);
880 yPhiEtaMixEff->SetBinError(i,j,effME);
887 yPhiEff->GetYaxis()->SetTitle("Efficiency+Contamination");
888 yPhiMixEff->GetYaxis()->SetTitle("Efficiency+Contamination");
889 yEtaNEff->GetYaxis()->SetTitle("Efficiency+Contamination");
890 yEtaNMixEff->GetYaxis()->SetTitle("Efficiency+Contamination");
891 yEtaAEff->GetYaxis()->SetTitle("Efficiency+Contamination");
892 yEtaAMixEff->GetYaxis()->SetTitle("Efficiency+Contamination");
893 yPhiEtaEff->GetZaxis()->SetTitle("Efficiency+Contamination");
894 yPhiEtaMixEff->GetZaxis()->SetTitle("Efficiency+Contamination");
895 sprintf(effname,"Efficiency Triggered %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f",yTPt1,yTPt2,yAPt1,yAPt2);
896 yPhiEff->SetTitle(effname);
897 sprintf(effname,"Efficiency Mixed %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f", yTPt1,yTPt2,yAPt1,yAPt2);
898 yPhiMixEff->SetTitle(effname);
900 sprintf(effname,"Near-Side Efficiency Triggered %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f",yTPt1,yTPt2,yAPt1,yAPt2);
901 yEtaNEff->SetTitle(effname);
902 sprintf(effname,"Near-Side Efficiency Mixed %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f", yTPt1,yTPt2,yAPt1,yAPt2);
903 yEtaNMixEff->SetTitle(effname);
905 sprintf(effname,"Away-Side Efficiency Triggered %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f",yTPt1,yTPt2,yAPt1,yAPt2);
906 yEtaAEff->SetTitle(effname);
907 sprintf(effname,"Away-Side Efficiency Mixed %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f", yTPt1,yTPt2,yAPt1,yAPt2);
908 yEtaAMixEff->SetTitle(effname);
910 sprintf(effname,"Efficiency Triggered %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f",yTPt1,yTPt2,yAPt1,yAPt2);
911 yPhiEtaEff->SetTitle(effname);
912 sprintf(effname,"Efficiency Mixed %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f",yTPt1,yTPt2,yAPt1,yAPt2);
913 yPhiEtaMixEff->SetTitle(effname);
917 //if still problems try shifting this to the other code
918 // yPhiCorr->Divide(yPhiEff);
921 sprintf(effname2,"Uncorrected %s",yPhiRaw->GetTitle());
922 yPhiRaw->SetTitle(effname2);
923 sprintf(effname2,"Uncorrected %s",yPhiMixRaw->GetTitle());
924 yPhiMixRaw->SetTitle(effname2);
925 sprintf(effname2,"Uncorrected %s",yPhiEtaRaw->GetTitle());
926 yPhiEtaRaw->SetTitle(effname2);
927 sprintf(effname2,"Uncorrected %s",yPhiEtaMixRaw->GetTitle());
928 yPhiEtaMixRaw->SetTitle(effname2);
932 //Efficiency Fits-----------------------------------------------------------------------
933 void EffFit(Float_t yAPt1,Float_t yAPt2,Int_t Cent,TList *effList, TH1F *yPhiEff, TH1F *yPhiMixEff, TH1F *yEtaNEff, TH1F *yEtaNMixEff, TH1F* yEtaAEff, TH1F *yEtaAMixEff, TH2F *yPhiEtaEff, TH2F *yPhiEtaMixEff, Int_t LSign=0, Int_t VariablePt=0){
936 //float xptbins[(xnpt+1)]={2.5,3,4,6,8,10,15,20,30,40,50,75,100};
937 float xptbins[(xnpt+1)]={2,2.5,3,4,5,6,8,10,15,20,30,40,50};
939 int maxPtTrig=10;//we don't want to go beyond our resolution/statistics
940 //if(yAPt1>0.5)maxPtTrig=15;
941 if(yAPt1>1)maxPtTrig=8;
942 if(yAPt1>1.5)maxPtTrig=6;
945 //set up trigger array
947 for(int i=0;i<xnpt;i++)if(xptbins[i]>(yAPt1+0.0001)&&xptbins[i]<(maxPtTrig-0.0001))size1++;
948 const int NTPt=size1;
957 Float_t NT0[2][NTPt];
958 Float_t NT1[2][NTPt];
959 Float_t NT2[2][NTPt];
960 Float_t NT3[2][NTPt];
961 Float_t NT4[2][NTPt];
962 Float_t NM0[2][NTPt];
963 Float_t AT0[2][NTPt];
964 Float_t AM0[2][NTPt];
966 TH1F *hPhiEff=new TH1F("hPhiEff","",1,0,1);
967 TH1F *hPhiMC=new TH1F("hPhiMC","",1,0,1);
968 TH1F *hPhiMixEff=new TH1F("hPhiMixEff","",1,0,1);
969 TH1F *hPhiMixMC=new TH1F("hPhiMixMC","",1,0,1);
971 TH1F *hEtaNEff=new TH1F("hEtaNEff","",1,0,1);
972 TH1F *hEtaNMC=new TH1F("hEtaNMC","",1,0,1);
973 TH1F *hEtaNMixEff=new TH1F("hEtaNMixEff","",1,0,1);
974 TH1F *hEtaNMixMC=new TH1F("hEtaNMixMC","",1,0,1);
976 TH1F *hEtaAEff=new TH1F("hEtaAEff","",1,0,1);
977 TH1F *hEtaAMC=new TH1F("hEtaAMC","",1,0,1);
978 TH1F *hEtaAMixEff=new TH1F("hEtaAMixEff","",1,0,1);
979 TH1F *hEtaAMixMC=new TH1F("hEtaAMixMC","",1,0,1);
981 TH2F *hPhiEtaEff=new TH2F("hPhiEtaEff","",1,0,1,1,0,1);
982 TH2F *hPhiEtaMC=new TH2F("hPhiEtaMC","",1,0,1,1,0,1);
983 TH2F *hPhiEtaMixEff=new TH2F("hPhiEtaMixEff","",1,0,1,1,0,1);
984 TH2F *hPhiEtaMixMC=new TH2F("hPhiEtaMixMC","",1,0,1,1,0,1);
986 TF1 *fit1=new TF1("fit1","[0]+[1]/[2]*exp(-0.5*pow(x/[2],2))+[3]/[4]*exp(-0.5*pow((x-3.1415962)/[4],2))",-1.5,6);
987 TF1 *fit2=new TF1("fit2","[0]",-2,6);
988 TF1 *fit3=new TF1("fit3","[0]+[1]/[2]*exp(-0.5*pow(x/[2],2))",-2,6);
989 fit1->SetParameters(1,0.1,0.1,0.1,0.1);
990 fit2->SetParameter(0,1);
991 fit3->SetParameters(1,0.1,0.1);
992 fit1->SetParLimits(0,0,1000);
993 fit1->SetParLimits(1,0,10);
994 fit1->SetParLimits(2,0,10);
995 fit1->SetParLimits(3,0,10);
996 fit1->SetParLimits(4,0,10);
997 fit3->SetParLimits(0,0,1000);
998 fit3->SetParLimits(1,0,10);
999 fit3->SetParLimits(2,0,10);
1002 float TPt1,TPt2,APt1,APt2;
1003 for(int i=0;i<NTPt;i++){
1008 if(VariablePt)APt2=maxPtTrig;
1010 MakeProjections(TPt1,TPt2,APt1,APt2,Cent,effList,hPhiEff,hPhiMixEff,hEtaNEff,hEtaNMixEff,hEtaAEff,hEtaAMixEff,hPhiEtaEff,hPhiEtaMixEff,MPt,0,0,0,LSign);
1011 MakeProjections(TPt1,TPt2,APt1,APt2,Cent,effList,hPhiMC,hPhiMixMC,hEtaNMC,hEtaNMixMC,hEtaAMC,hEtaAMixMC,hPhiEtaMC,hPhiEtaMixMC,MPt,0,1,0,LSign);
1012 // EffCorr2(TPt1,TPt2,APt1,APt2,Cent,hPhiEff,hPhiMC,hPhiMixEff,hPhiMixMC,hEtaNEff,hEtaNMC,hEtaNMixEff,hEtaNMixMC,hEtaAEff,hEtaAMC,hEtaAMixEff,hEtaAMixMC,hPhiEtaEff,hPhiEtaMC,hPhiEtaMixEff,hPhiEtaMixMC,1);
1013 EffCorr2(TPt1,TPt2,APt1,APt2,Cent,hPhiEff,hPhiMC,hPhiMixEff,hPhiMixMC,hEtaNEff,hEtaNMC,hEtaNMixEff,hEtaNMixMC,hEtaAEff,hEtaAMC,hEtaAMixEff,hEtaAMixMC,hPhiEtaEff,hPhiEtaMC,hPhiEtaMixEff,hPhiEtaMixMC,1);
1014 X[i]=(TPt1+TPt2)*0.5;
1016 hPhiEff->Fit("fit1");
1017 T0[0][i]=fit1->GetParameter(0);
1018 T0[1][i]=fit1->GetParError(0);
1019 T1[0][i]=fit1->GetParameter(1);
1020 T1[1][i]=fit1->GetParError(1);
1021 T2[0][i]=fit1->GetParameter(2);
1022 T2[1][i]=fit1->GetParError(2);
1023 T3[0][i]=fit1->GetParameter(3);
1024 T3[1][i]=fit1->GetParError(3);
1025 T4[0][i]=fit1->GetParameter(4);
1026 T4[1][i]=fit1->GetParError(4);
1028 hPhiMixEff->Fit("fit2");
1029 M0[0][i]=fit2->GetParameter(0);
1030 M0[1][i]=fit2->GetParError(0);
1032 hEtaNEff->Fit("fit3");
1033 NT0[0][i]=fit3->GetParameter(0);
1034 NT0[1][i]=fit3->GetParError(0);
1035 NT1[0][i]=fit3->GetParameter(1);
1036 NT1[1][i]=fit3->GetParError(1);
1037 NT2[0][i]=fit3->GetParameter(2);
1038 NT2[1][i]=fit3->GetParError(2);
1041 hEtaNMixEff->Fit("fit2");
1042 NM0[0][i]=fit2->GetParameter(0);
1043 NM0[1][i]=fit2->GetParError(0);
1045 hEtaAEff->Fit("fit2");
1046 AT0[0][i]=fit2->GetParameter(0);
1047 AT0[1][i]=fit2->GetParError(0);
1049 hEtaNMixEff->Fit("fit2");
1050 AM0[0][i]=fit2->GetParameter(0);
1051 AM0[1][i]=fit2->GetParError(0);
1054 gT0=new TGraphErrors(NTPt,X,T0[0],0,T0[1]);
1055 gT1=new TGraphErrors(NTPt,X,T1[0],0,T1[1]);
1056 gT2=new TGraphErrors(NTPt,X,T2[0],0,T2[1]);
1057 gT3=new TGraphErrors(NTPt,X,T3[0],0,T3[1]);
1058 gT4=new TGraphErrors(NTPt,X,T4[0],0,T4[1]);
1060 gM0=new TGraphErrors(NTPt,X,M0[0],0,M0[1]);
1062 gNT0=new TGraphErrors(NTPt,X,NT0[0],0,NT0[1]);
1063 gNT1=new TGraphErrors(NTPt,X,NT1[0],0,NT1[1]);
1064 gNT2=new TGraphErrors(NTPt,X,NT2[0],0,NT2[1]);
1066 gNM0=new TGraphErrors(NTPt,X,NM0[0],0,NM0[1]);
1068 gAT0=new TGraphErrors(NTPt,X,AT0[0],0,AT0[1]);
1069 gAM0=new TGraphErrors(NTPt,X,AM0[0],0,AM0[1]);
1071 float pT0[2],pT1[2],pT2[2],pT3[2],pT4[2];
1073 float pNT0[2],pNT1[2],pNT2[2],pNT3[2],pNT4[2];
1079 pT0[0]=fit2->GetParameter(0);
1080 pT0[1]=fit2->GetParError(0);
1082 pT1[0]=fit2->GetParameter(0);
1083 pT1[1]=fit2->GetParError(0);
1085 pT2[0]=fit2->GetParameter(0);
1086 pT2[1]=fit2->GetParError(0);
1088 pT3[0]=fit2->GetParameter(0);
1089 pT3[1]=fit2->GetParError(0);
1091 pT4[0]=fit2->GetParameter(0);
1092 pT4[1]=fit2->GetParError(0);
1095 pNT0[0]=fit2->GetParameter(0);
1096 pNT0[1]=fit2->GetParError(0);
1098 pNT1[0]=fit2->GetParameter(0);
1099 pNT1[1]=fit2->GetParError(0);
1101 pNT2[0]=fit2->GetParameter(0);
1102 pNT2[1]=fit2->GetParError(0);
1105 pM0[0]=fit2->GetParameter(0);
1106 pM0[1]=fit2->GetParError(0);
1109 pNM0[0]=fit2->GetParameter(0);
1110 pNM0[1]=fit2->GetParError(0);
1113 pAM0[0]=fit2->GetParameter(0);
1114 pAM0[1]=fit2->GetParError(0);
1117 pAT0[0]=fit2->GetParameter(0);
1118 pAT0[1]=fit2->GetParError(0);
1120 float eff,gaus,err,cent;
1122 for(int x=1;x<=yPhiEff->GetNbinsX();x++){
1123 cent=yPhiEff->GetBinCenter(x);
1124 if(pT2[0]==0)cout << "Error pT2[0]" << endl;
1125 gaus=pT1[0]/pT2[0]*exp(-0.5*pow(cent/pT2[0],2));
1126 gausA=pT3[0]/pT4[0]*exp(-0.5*pow((cent-yPi)/pT4[0],2));
1127 eff=gaus+gausA+pT0[0];
1128 if(pT1[0]==0) cout << "Error pT1[0]" << endl;
1129 if(gaus==0)gaus+=1E-10;//divide by 0 protection
1130 if(gausA==0)gausA+=1E-10;
1131 err=pow(pow(pT0[1],2)+pow(pT1[1]*gaus/pT1[0],2)+pow(pT2[1]*gaus/pT2[0]*(pow(cent/pT2[0],2)-1),2)+pow(pT3[1]*gausA/pT3[0],2)+pow(pT4[1]*gausA/pT4[0]*(pow((cent-yPi)/pT4[0],2)-1),2),0.5);
1132 yPhiEff->SetBinContent(x,eff);
1133 yPhiEff->SetBinError(x,err);
1135 yPhiMixEff->SetBinContent(x,pM0[0]);
1136 yPhiMixEff->SetBinError(x,pM0[1]);
1138 for(int x=1;x<=yEtaNEff->GetNbinsX();x++){
1139 cent=yEtaNEff->GetBinCenter(x);
1140 if(pNT2[0]==0)cout << "Error pNT2[0]" << endl;
1141 gaus=pNT1[0]/pNT2[0]*exp(-0.5*pow(cent/pNT2[0],2));
1143 if(pNT1[0]==0) cout << "Error pNT1[0]" << endl;
1144 err=pow(pow(pNT0[1],2)+pow(pNT1[1]*gaus/pNT1[0],2)+pow(pNT2[1]*gaus/pNT2[0]*(pow(cent/pNT2[0],2)-1),2),0.5);
1145 yEtaNEff->SetBinContent(x,eff);
1146 yEtaNEff->SetBinError(x,err);
1148 yEtaNMixEff->SetBinContent(x,pNM0[0]);
1149 yEtaNMixEff->SetBinError(x,pNM0[1]);
1151 yEtaAEff->SetBinContent(x,pAT0[0]);
1152 yEtaAEff->SetBinError(x,pAT0[1]);
1154 yEtaAMixEff->SetBinContent(x,pAM0[0]);
1155 yEtaAMixEff->SetBinError(x,pAM0[1]);
1158 float gaus2,eff2,err2,cent2;
1160 for(int x=1;x<=yPhiEtaEff->GetXaxis()->GetNbins();x++){
1161 cent=yPhiEtaEff->GetXaxis()->GetBinCenter(x);
1162 for(int y=1;y<=yPhiEtaEff->GetYaxis()->GetNbins();y++){
1163 if(fabs(cent)<1.5||fabs(cent+2*yPi)<1.5||fabs(cent-2*yPi)<1.5){
1164 gaus=pT1[0]/pT2[0]*exp(-0.5*pow(cent/pT2[0],2));
1166 if(eff==0)eff+=1E-10;//divide by 0 protection
1167 err=pow(pow(pT1[1]*gaus/pT1[0],2)+pow(pT2[1]*gaus/pT2[0]*(pow(cent/pT2[0],2)-1),2),0.5);
1168 cent2=yPhiEtaEff->GetYaxis()->GetBinCenter(y);
1169 gaus2=pNT1[0]/pNT2[0]*exp(-0.5*pow(cent2/pNT2[0],2));
1171 if(eff2==0)eff2+=1E-10;//divide by 0 protection
1172 err2=pow(pow(pNT1[1]*gaus2/pNT1[0],2)+pow(pNT2[1]*gaus2/pNT2[0]*(pow(cent2/pNT2[0],2)-1),2),0.5);
1173 // eff3=pow(eff*eff2,0.5);
1174 eff3=pow(gaus*gaus2,0.5)+pow((pT0[0])*pNT0[0],0.5);
1175 // eff=pow(pT0[0]*pNT0[0],0.5);
1176 err3=pow(gaus*gaus2*(pow(err/eff,2)+pow(err2/eff2,2))+pT0[0]*pNT0[0]*(pow(pT0[1]/pT0[0],2)+pow(pNT0[1]/pNT0[0],2)),0.5);
1180 gausA=pT3[0]/pT4[0]*exp(-0.5*pow((cent-yPi)/pT4[0],2));
1181 if(gausA==0)gausA+=1E-10;
1182 eff3=pow((pT0[0]+gausA)*pAT0[0],0.5);
1183 //err3=pow(pow(pT0[1]/pT0[0],2)+pow(pAT0[1]/pAT0[0],2),0.5);
1184 err3=eff3*pow((pow(pT0[1],2)+pow(pT3[1]*gausA/pT3[0],2)+pow(pT4[1]*gausA/pT4[0]*(pow((cent-yPi)/pT4[0],2)-1),2))/pow(pT0[0]+gausA,2)+pow(pAT0[1]/pAT0[1],2),0.5);
1186 yPhiEtaEff->SetBinContent(x,y,eff3);
1187 yPhiEtaEff->SetBinError(x,y,err3);
1190 eff3=pow(pM0[0]*pNM0[0],0.5);
1191 err3=pow(pow(pM0[1]/pM0[0],2)+pow(pNM0[1]/pNM0[0],2),0.5);
1194 eff3=pow(pM0[0]*pAM0[0],0.5);
1195 err3=pow(pow(pM0[1]/pM0[0],2)+pow(pAM0[1]/pAM0[0],2),0.5);
1197 yPhiEtaMixEff->SetBinContent(x,y,eff3);
1198 yPhiEtaMixEff->SetBinError(x,y,err3);
1203 //Geometry Correction for the eta-phi plots
1204 //\-------------------------------------------------------------------
1205 void GeoCorr(TH1F *yEtaNCorr, TH1F *yEtaNMixCorr, TH1F *yEtaNMixMC, TH1F *yEtaACorr, TH1F *yEtaAMixCorr, TH1F *yEtaAMixMC, TH2F *yPhiEtaCorr, TH2F *yPhiEtaMixCorr, TH2F *yPhiEtaMixMC){
1207 int xbins=yEtaNCorr->GetNbinsX();
1211 float scale=0,scaleN,scaleA;
1213 float escaleN,escaleA, ecorr;
1215 scaleN=(yEtaNMix->GetBinContent(xbins/2)+yEtaNMix->GetBinContent(xbins/2+1))/2.;
1216 escaleN=pow(yEtaNMix->GetBinError(xbins/2),2)+pow(yEtaNMix->GetBinError(xbins/2+1),2)/4.;
1217 scaleA=(yEtaAMix->GetBinContent(xbins/2)+yEtaAMix->GetBinContent(xbins/2+1))/2.;
1218 escaleA=pow(yEtaAMix->GetBinError(xbins/2),2)+pow(yEtaAMix->GetBinError(xbins/2+1),2)/4.;
1219 if(scaleN==0)scaleN=1E-5;
1220 if(scaleA==0)scaleA=1E-5;
1221 for(int yx=1;yx<=xbins;yx++){
1222 con=yEtaNMixMC->GetBinContent(yx);
1223 if(con==0){con=1E-5;corr=1E-5;}//divide by 0 protection
1224 else corr=scaleN/con;
1225 ecorr=corr*corr*(escaleN/scaleN/scaleN+pow(yEtaNMixMC->GetBinError(yx),2)/con/con);
1226 con=yEtaNCorr->GetBinContent(yx);
1227 err=pow(yEtaNCorr->GetBinError(yx),2);
1228 yEtaNCorr->SetBinContent(yx,corr*con);
1229 if(con==0)con=1E-5;//Divide by 0 protection
1230 if(corr==0)corr=1E-5;
1231 yEtaNCorr->SetBinError(yx,corr*con*pow(ecorr/corr/corr+err/con/con,0.5));
1232 con=yEtaNMixCorr->GetBinContent(yx);
1233 err=pow(yEtaNMixCorr->GetBinError(yx),2);
1234 yEtaNMixCorr->SetBinContent(yx,corr*con);
1236 if(corr==0)corr=1E-5;
1237 yEtaNMixCorr->SetBinError(yx,corr*con*pow(ecorr/corr/corr+err/con/con,0.5));
1239 con=yEtaAMixMC->GetBinContent(yx);
1240 if(con==0){con=1E-5;corr=1E-5;}
1241 else corr=scaleA/con;
1242 ecorr=corr*corr*(escaleA/scaleA/scaleA+pow(yEtaAMixMC->GetBinError(yx),2)/con/con);
1243 con=yEtaACorr->GetBinContent(yx);
1244 err=pow(yEtaACorr->GetBinError(yx),2);
1245 yEtaACorr->SetBinContent(yx,corr*con);
1247 if(corr==0)corr=1E-5;
1248 yEtaACorr->SetBinError(yx,corr*con*pow(ecorr/corr/corr+err/con/con,0.5));
1249 con=yEtaAMixCorr->GetBinContent(yx);
1250 err=pow(yEtaAMixCorr->GetBinError(yx),2);
1251 yEtaAMixCorr->SetBinContent(yx,corr*con);
1253 if(corr==0)corr=1E-5;
1254 yEtaAMixCorr->SetBinError(yx,corr*con*pow(ecorr/corr/corr+err/con/con,0.5));
1257 xbins=yPhiEtaCorr->GetNbinsX();
1258 int ybins=yPhiEtaCorr->GetNbinsY();
1260 //uses the mc for the geomery correction
1261 for(int yx=1;yx<=xbins;yx++){
1262 scale+=yPhiEtaMixMC->GetBinContent(yx,ybins/2);
1263 scale+=yPhiEtaMixMC->GetBinContent(yx,ybins/2+1);
1266 for(int yy=1;yy<=ybins;yy++){
1268 for(int yx=1;yx<=xbins;yx++){
1269 sumy+=yPhiEtaMixMC->GetBinContent(yx,yy);
1271 if(sumy==0)sumy=0.00001;
1273 for(int yx=1;yx<=xbins;yx++){
1274 yPhiEtaCorr->SetBinContent(yx,yy,corr*yPhiEtaCorr->GetBinContent(yx,yy));
1275 yPhiEtaCorr->SetBinError(yx,yy,corr*yPhiEtaCorr->GetBinError(yx,yy));
1276 yPhiEtaMixCorr->SetBinContent(yx,yy,corr*yPhiEtaMixCorr->GetBinContent(yx,yy));
1277 yPhiEtaMixCorr->SetBinError(yx,yy,corr*yPhiEtaMixCorr->GetBinError(yx,yy));
1281 //-----------------------------------------------------------------------------------------------
1282 void GeoCorr2(TH1F *yEtaNCorr, TH1F *yEtaNMixCorr, TH1F *yEtaACorr, TH1F *yEtaAMixCorr, TH2F *yPhiEtaCorr, TH2F *yPhiEtaMixCorr){
1283 int nbins=yEtaNCorr->GetNbinsX();
1284 int nbinsPhi=yPhiEtaCorr->GetNbinsX();
1285 int nbinsEta=yPhiEtaCorr->GetNbinsY();
1286 float EtaCut=yEtaNCorr->GetBinCenter(nbins)+yEtaNCorr->GetBinWidth(nbins)/2.;
1289 for(int i=1;i<=nbins;i++){
1290 cent=yEtaNCorr->GetBinCenter(i);
1291 corr=1-fabs(cent)/EtaCut;
1292 yEtaNCorr->SetBinContent(i,yEtaNCorr->GetBinContent(i)/corr);
1293 yEtaNCorr->SetBinError(i,yEtaNCorr->GetBinError(i)/corr);
1294 yEtaNMixCorr->SetBinContent(i,yEtaNMixCorr->GetBinContent(i)/corr);
1295 yEtaNMixCorr->SetBinError(i,yEtaNMixCorr->GetBinError(i)/corr);
1296 yEtaACorr->SetBinContent(i,yEtaACorr->GetBinContent(i)/corr);
1297 yEtaACorr->SetBinError(i,yEtaACorr->GetBinError(i)/corr);
1298 yEtaAMixCorr->SetBinContent(i,yEtaAMixCorr->GetBinContent(i)/corr);
1299 yEtaAMixCorr->SetBinError(i,yEtaAMixCorr->GetBinError(i)/corr);
1301 for(int i=1;i<=nbinsEta;i++){
1302 cent=yPhiEtaCorr->GetYaxis()->GetBinCenter(i);
1303 corr=1-fabs(cent)/EtaCut;
1304 for(int j=1;j<=nbinsPhi;j++){
1305 yPhiEtaCorr->SetBinContent(j,i,yPhiEtaCorr->GetBinContent(j,i)/corr);
1306 yPhiEtaCorr->SetBinError(j,i,yPhiEtaCorr->GetBinError(j,i)/corr);
1307 yPhiEtaMixCorr->SetBinContent(j,i,yPhiEtaMixCorr->GetBinContent(j,i)/corr);
1308 yPhiEtaMixCorr->SetBinError(j,i,yPhiEtaMixCorr->GetBinError(j,i)/corr);
1312 //---------------------------------------------------------------------------------
1313 void Load3Particle(Float_t &xTPt1, Float_t &xTPt2, Float_t &xAPt1, Float_t &xAPt2,Int_t xCent, TList *xList, TH2F *xPhiPhiRaw,TH2F *xPhiPhiSS,TH2F *xPhiPhiMix, TH2F *xEtaEtaRaw, TH2F *xEtaEtaSS, TH2F *xEtaEtaMix,Int_t xMC=0, Int_t xSign=0){
1315 float xAPt31[xnAPt]={0.5,1.0,1.5,2.0,3,4,1};
1316 float xAPt32[xnAPt]={1.0,1.5,2.0,3.0,4,5,2};
1318 float xTPt[(xnTPt+1)]={2,2.5,3,4,5,6,8,10,15,20,30,40,50};//any element in this array should also been in the one 2 lines down
1319 float xPi=3.1415962;
1323 for(int i=0;i<xnAPt;i++){
1324 if(fabs(xAPt1-xAPt31[i])<0.1&&fabs(xAPt2-xAPt32[i])<0.1){
1331 cout << "Invalid Associated Pt: " << xAPt1 << " " << xAPt2 << endl;
1332 cout << "Valid values are:" << endl;
1333 for(int i=0;i<xnAPt;i++){
1334 cout << "APt1: " << xAPt31[i] << " APt2: " << xAPt32[i] << endl;
1338 for(int i=0;i<xnTPt;i++){
1339 if(fabs(xTPt1-xTPt[i])<0.1){
1343 if(fabs(xTPt2-xTPt[i+1])<0.1){
1348 if(TPtBin1==-1||TPtBin2==-1){
1349 cout << "Invalid Trigger Pt: " << xTPt1 << " " << xTPt2 << end;
1350 cout << "Valid values are:" << endl;
1351 for(int i=0;i<=xnTPt;i++){
1352 cout << xTPt[i] << " ";
1359 char *cmc1[2]={"","_MC"};
1360 sprintf(xname,"fHistNTrigger_C%d%s",xCent,cmc1[xMC]);
1361 TH1F *xNTrig=(TH1F*)xList->FindObject(xname);
1362 sprintf(xname,"fHistNMix_C%d%s",xCent,cmc1[xMC]);
1363 TH1F *xNMix=(TH1F*)xList->FindObject(xname);
1364 int ntriggers=xNTrig->GetBinContent(1);
1365 int nmix=xNMix->GetBinContent(1);
1366 // c100=new TCanvas("c100");
1370 TH2F *xtemphistPMix;
1373 TH2F *xtemphistEMix;
1374 //char *cmc1[2]={"","_MC"};
1375 char *sign1[3]={"","_LS","_ULS"};
1376 char *sign2[3]={""," LikeSign"," UnlikeSign"};
1379 float conP, conPSS, conPMix, conE, conESS, conEMix;
1380 float errP, errPSS, errPMix, errE, errESS, errEMix;
1385 for(int xi=TPtBin1;xi<=TPtBin2;xi++){//Do for all trigger pt ranges we are adding
1386 xntrig+=xNTrig->GetBinContent(xi+1);
1387 //cout << xi << " " << xNTrig->GetBinContent(xi+1) << endl;
1388 xnmix+=xNMix->GetBinContent(xi+1);
1389 sprintf(xname,"fHistDeltaPhiPhi_P%dp%d_C%d%s%s",xi,APtBin,xCent,cmc1[xMC],sign1[xSign]);
1390 xtemphistP=(TH2F*)xList->FindObject(xname);
1392 sprintf(xname,"fHistDeltaPhiPhiSS_P%dp%d_C%d%s%s",xi,APtBin,xCent,cmc1[xMC],sign1[xSign]);
1393 xtemphistPSS=(TH2F*)xList->FindObject(xname);
1395 sprintf(xname,"fHistDeltaPhiPhiMix_P%dp%d_C%d%s%s",xi,APtBin,xCent,cmc1[xMC],sign1[xSign]);
1396 xtemphistPMix=(TH2F*)xList->FindObject(xname);
1398 sprintf(xname,"fHistDeltaEtaEta_P%dp%d_C%d%s%s",xi,APtBin,xCent,cmc1[xMC],sign1[xSign]);
1399 xtemphistE=(TH2F*)xList->FindObject(xname);
1401 sprintf(xname,"fHistDeltaEtaEtaSS_P%dp%d_C%d%s%s",xi,APtBin,xCent,cmc1[xMC],sign1[xSign]);
1402 xtemphistESS=(TH2F*)xList->FindObject(xname);
1404 sprintf(xname,"fHistDeltaEtaEtaMix_P%dp%d_C%d%s%s",xi,APtBin,xCent,cmc1[xMC],sign1[xSign]);
1405 xtemphistEMix=(TH2F*)xList->FindObject(xname);
1408 nbins=xtemphistP->GetNbinsX();
1409 min=xtemphistP->GetBinCenter(1)-xtemphistP->GetBinWidth(1)/2.;
1410 max=xtemphistP->GetBinCenter(nbins)+xtemphistP->GetBinWidth(nbins)/2.;
1412 sprintf(xtit,"#Delta#phi-#Delta#phi Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
1413 *xPhiPhiRaw=new TH2F("dPhiPhiRaw",xtit,nbins,min,max,nbins,min,max);
1414 xPhiPhiRaw->Sumw2();
1415 xPhiPhiRaw->GetXaxis()->SetTitle("#Delta#phi");
1416 xPhiPhiRaw->GetYaxis()->SetTitle("#Delta#phi");
1417 xPhiPhiRaw->GetZaxis()->SetTitle("#frac{1}{N_{Trig}}#frac{d^{2}N_{pairs}}{d#Delta#phid#Delta#phi}");
1418 SetTitles2D(xPhiPhiRaw);
1420 sprintf(xtit,"Soft-Soft #Delta#phi-#Delta#phi Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
1421 *xPhiPhiSS=new TH2F("dPhiPhiSS",xtit,nbins,min,max,nbins,min,max);
1423 xPhiPhiSS->GetXaxis()->SetTitle("#Delta#phi");
1424 xPhiPhiSS->GetYaxis()->SetTitle("#Delta#phi");
1425 xPhiPhiSS->GetZaxis()->SetTitle("#frac{1}{N_{Trig}}#frac{d^{2}N_{pairs}}{d#Delta#phid#Delta#phi}");
1426 SetTitles2D(xPhiPhiSS);
1428 sprintf(xtit,"Mixed #Delta#phi-#Delta#phi Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
1429 *xPhiPhiMix=new TH2F("dPhiPhiMix",xtit,nbins,min,max,nbins,min,max);
1430 xPhiPhiMix->Sumw2();
1431 xPhiPhiMix->GetXaxis()->SetTitle("#Delta#phi");
1432 xPhiPhiMix->GetYaxis()->SetTitle("#Delta#phi");
1433 xPhiPhiMix->GetZaxis()->SetTitle("#frac{1}{N_{Trig}}#frac{d^{2}N_{pairs}}{d#Delta#phid#Delta#phi}");
1434 SetTitles2D(xPhiPhiMix);
1435 nbins=xtemphistE->GetNbinsX();
1436 min=xtemphistE->GetBinCenter(1)-xtemphistE->GetBinWidth(1)/2.;
1437 max=xtemphistE->GetBinCenter(nbins)+xtemphistE->GetBinWidth(nbins)/2.;
1438 sprintf(xtit,"#Delta#eta-#Delta#eta Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
1439 *xEtaEtaRaw=new TH2F("dEtaEtaRaw",xtit,nbins,min,max,nbins,min,max);
1440 xEtaEtaRaw->Sumw2();
1441 xEtaEtaRaw->GetXaxis()->SetTitle("#Delta#eta");
1442 xEtaEtaRaw->GetYaxis()->SetTitle("#Delta#eta");
1443 xEtaEtaRaw->GetZaxis()->SetTitle("#frac{1}{N_{Trig}}#frac{d^{2}N_{pairs}}{d#Delta#etad#Delta#eta}");
1444 SetTitles2D(xEtaEtaRaw);
1446 sprintf(xtit,"Soft-Soft #Delta#eta-#Delta#eta Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
1447 *xEtaEtaSS=new TH2F("dEtaEtaSS",xtit,nbins,min,max,nbins,min,max);
1449 xEtaEtaSS->GetXaxis()->SetTitle("#Delta#eta");
1450 xEtaEtaSS->GetYaxis()->SetTitle("#Delta#eta");
1451 xEtaEtaSS->GetZaxis()->SetTitle("#frac{1}{N_{Trig}}#frac{d^{2}N_{pairs}}{d#Delta#etad#Delta#eta}");
1452 SetTitles2D(xEtaEtaSS);
1454 sprintf(xtit,"Mixed #Delta#eta-#Delta#eta Distribution for %3.1f<p_{T}^{Trig}<%3.1f %2.2f<p_{T}^{Assoc}<%2.2f%s",xTPt1,xTPt2,xAPt1,xAPt2,sign2[xSign]);
1455 *xEtaEtaMix=new TH2F("dEtaEtaMix",xtit,nbins,min,max,nbins,min,max);
1456 xEtaEtaMix->Sumw2();
1457 xEtaEtaMix->GetXaxis()->SetTitle("#Delta#eta");
1458 xEtaEtaMix->GetYaxis()->SetTitle("#Delta#eta");
1459 xEtaEtaMix->GetZaxis()->SetTitle("#frac{1}{N_{Trig}}#frac{d^{2}N_{pairs}}{d#Delta#etad#Delta#eta}");
1460 SetTitles2D(xEtaEtaMix);
1463 for(int x=1;x<=xtemphistP->GetNbinsX();x++){
1464 for(int y=1;y<=xtemphistP->GetNbinsY();y++){
1474 conP=xPhiPhiRaw->GetBinContent(x,y);
1475 errP=xPhiPhiRaw->GetBinError(x,y);
1476 conPSS=xPhiPhiSS->GetBinContent(x,y);
1477 errPSS=xPhiPhiSS->GetBinError(x,y);
1478 conPMix=xPhiPhiMix->GetBinContent(x,y);
1479 errPMix=xPhiPhiMix->GetBinError(x,y);
1481 xPhiPhiRaw->SetBinContent(x,y,conP+xtemphistP->GetBinContent(x,y));
1482 xPhiPhiRaw->SetBinError(x,y,pow(errP*errP+pow(xtemphistP->GetBinError(x,y),2),0.5));
1483 xPhiPhiSS->SetBinContent(x,y,conPSS+xtemphistPSS->GetBinContent(x,y));
1484 xPhiPhiSS->SetBinError(x,y,pow(errPSS*errPSS+pow(xtemphistPSS->GetBinError(x,y),2),0.5));
1485 xPhiPhiMix->SetBinContent(x,y,conPMix+xtemphistPMix->GetBinContent(x,y));
1486 xPhiPhiMix->SetBinError(x,y,pow(errPMix*errPMix+pow(xtemphistPMix->GetBinError(x,y),2),0.5));
1490 for(int x=1;x<=xtemphistE->GetNbinsX();x++){
1491 for(int y=1;y<=xtemphistE->GetNbinsY();y++){
1501 conE=xEtaEtaRaw->GetBinContent(x,y);
1502 errE=xEtaEtaRaw->GetBinError(x,y);
1503 conESS=xEtaEtaSS->GetBinContent(x,y);
1504 errESS=xEtaEtaSS->GetBinError(x,y);
1505 conEMix=xEtaEtaMix->GetBinContent(x,y);
1506 errEMix=xEtaEtaMix->GetBinError(x,y);
1508 xEtaEtaRaw->SetBinContent(x,y,conE+xtemphistE->GetBinContent(x,y));
1509 xEtaEtaRaw->SetBinError(x,y,pow(errE*errE+pow(xtemphistE->GetBinError(x,y),2),0.5));
1510 xEtaEtaSS->SetBinContent(x,y,conESS+xtemphistESS->GetBinContent(x,y));
1511 xEtaEtaSS->SetBinError(x,y,pow(errESS*errESS+pow(xtemphistESS->GetBinError(x,y),2),0.5));
1512 xEtaEtaMix->SetBinContent(x,y,conEMix+xtemphistEMix->GetBinContent(x,y));
1513 xEtaEtaMix->SetBinError(x,y,pow(errEMix*errEMix+pow(xtemphistEMix->GetBinError(x,y),2),0.5));
1519 //Normalize the histograms
1520 //cout << xPi << " " << max << " " << xntrig << " " << xnmix << endl;
1521 float phibins=xPhiPhiRaw->GetNbinsX();
1522 float etabins=xEtaEtaRaw->GetNbinsX();
1523 float scalephi=pow(phibins/(2*xPi),2);
1524 float scaleeta=pow(etabins/(max-min),2);//max still set for eta from making histograms
1525 xPhiPhiRaw->Scale(scalephi/xntrig);
1526 xPhiPhiSS->Scale(scalephi/xnmix);
1527 xPhiPhiMix->Scale(scalephi/(2.*xnmix));
1528 xEtaEtaRaw->Scale(scaleeta/xntrig);
1529 xEtaEtaSS->Scale(scaleeta/xnmix);
1530 xEtaEtaMix->Scale(scaleeta/(2.*xnmix));
1533 //------------------------------------------------------------------------------------
1534 void EffCorr3Part(Float_t TPt1, Float_t TPt2, Float_t APt1, Float_t APt2, Int_t Cent, TH2F *yPhiPhiEff, TH2F *yPhiPhiMC, TH2F *yPhiPhiSSEff, TH2F *yPhiPhiSSMC, TH2F *yPhiPhiMixEff, TH2F *yPhiPhiMixMC, TH2F *yEtaEtaEff, TH2F *yEtaEtaMC, TH2F *yEtaEtaSSEff, TH2F *yEtaEtaSSMC, TH2F *yEtaEtaMixEff, TH2F *yEtaEtaMixMC, Int_t yMethod){
1535 //Right now only putting in for case where efficiency is taken care of before hand. I will add others if used
1537 int nBinPhi=yPhiPhiEff->GetNbinsX();
1538 int nBinEta=yEtaEtaEff->GetNbinsX();
1539 for(int x=1;x<=nBinPhi;x++){
1540 for(int y=1;y<=nBinPhi;y++){
1541 yPhiPhiEff->SetBinContent(x,y,1);
1542 yPhiPhiEff->SetBinError(x,y,0);
1543 yPhiPhiSSEff->SetBinContent(x,y,1);
1544 yPhiPhiSSEff->SetBinError(x,y,0);
1545 yPhiPhiMixEff->SetBinContent(x,y,1);
1546 yPhiPhiMixEff->SetBinError(x,y,0);
1549 for(int x=1;x<=nBinEta;x++){
1550 for(int y=1;y<=nBinEta;y++){
1551 yEtaEtaEff->SetBinContent(x,y,1);
1552 yEtaEtaEff->SetBinError(x,y,0);
1553 yEtaEtaSSEff->SetBinContent(x,y,1);
1554 yEtaEtaSSEff->SetBinError(x,y,0);
1555 yEtaEtaMixEff->SetBinContent(x,y,1);
1556 yEtaEtaMixEff->SetBinError(x,y,0);
1561 Printf("Method needs to be inserted into EffCorr3Part");
1568 //-------------------------------------------------------------------------------------------------------
1569 void GeoCorr3Part2(TH2F *yEtaEtaCorr, TH2F *yEtaEtaSSCorr, TH2F *yEtaEtaMixCorr, TH2F *yEtaEtaHSCorr){//using equation to correct
1570 int bin=yEtaEtaCorr->GetNbinsX();
1572 float corr,corrx,corry,corrz;
1573 float EtaCut=yEtaEtaCorr->GetBinCenter(bin)+yEtaEtaCorr->GetBinWidth(bin)/2.;
1574 cout << "EtaCut " << EtaCut << endl;
1575 for(int x=1;x<=bin;x++){
1576 centx=yEtaEtaCorr->GetXaxis()->GetBinCenter(x);
1577 corrx=1-fabs(centx)/EtaCut;
1578 for(int y=1;y<=bin;y++){
1579 centy=yEtaEtaCorr->GetYaxis()->GetBinCenter(y);
1580 corry=1-fabs(centy)/EtaCut;
1581 corrz=1-fabs(centx-centy)/EtaCut;
1582 if(fabs(centx-centy)>EtaCut)corrz=0;
1583 corr=corrz*pow(corrx*corry,1/2.);
1586 yEtaEtaCorr->SetBinContent(x,y,yEtaEtaCorr->GetBinContent(x,y)/corr);
1587 yEtaEtaCorr->SetBinError(x,y,yEtaEtaCorr->GetBinError(x,y)/corr);
1588 yEtaEtaMixCorr->SetBinContent(x,y,yEtaEtaMixCorr->GetBinContent(x,y)/corr);
1589 yEtaEtaMixCorr->SetBinError(x,y,yEtaEtaMixCorr->GetBinError(x,y)/corr);
1590 yEtaEtaSSCorr->SetBinContent(x,y,yEtaEtaSSCorr->GetBinContent(x,y)/corr);
1591 yEtaEtaSSCorr->SetBinError(x,y,yEtaEtaSSCorr->GetBinError(x,y)/corr);
1592 yEtaEtaHSCorr->SetBinContent(x,y,yEtaEtaHSCorr->GetBinContent(x,y)/corr);
1593 yEtaEtaHSCorr->SetBinError(x,y,yEtaEtaHSCorr->GetBinError(x,y)/corr);
1597 //--------------------------------------------------------------------------------------------------------------------
1598 void ZYAM3(TH1F *yPhi, TH1F *yPhiMix, TH2F *yPhiPhi, TH2F *yPhiPhiSS, TH2F *yPhiPhiMix, Float_t a[3], Float_t b, Int_t nMin=10, Int_t nIter=10){//xxx scale the mixed event to the SS before it comes in
1599 const Int_t NMin=100;
1601 // float sumSig2, sumMix2, sumSig3, sumSS3, sumMix3;
1602 //float esumSig2, esumMix2, esumSig3, esumSS3, esumMix3;
1603 //float sumMin, esumMin;
1608 float MinArray[NMin][2];
1612 float PhiX[NMin][2];
1613 float PhiY[NMin][2];
1614 float MixX[NMin][2];
1615 float MixY[NMin][2];
1616 int nBins2=yPhi->GetNbinsX();
1617 int nBins3=yPhiPhi->GetNbinsX();
1618 int ReBin=nBins2/nBins3;
1619 if(fabs(1.0*nBins2/nBins3-ReBin)>0.01)Printf("Please use a divisor of the 2-particle binning for the 3-particle");
1624 float phi, ss, mix, phiX, mixX, phiY, mixY;
1625 float ephi, ess, emix, ephiX, emixX, ephiY, emixY;
1626 //float b1=yPhiPhi->GetSum()/pow(yPhi->GetSum(),2);
1627 //float b2=yPhiPhiSS->GetSum()/pow(yPhiMix->GetSum(),2);
1629 for(int i=0;i<nIter;i++){
1630 for(int q=0;q<nMin;q++){
1631 MinArray[q][0]=10000;
1633 for(int x=1;x<=yPhiPhi->GetNbinsX();x++){
1634 phiX=0, ephiX=0, mixX=0, emixX=0;
1635 for(int j=(ReBin*(x-1)+1);j<ReBin*x;j++){
1636 phiX+=yPhi->GetBinContent(j);
1637 ephiX+=pow(yPhi->GetBinError(j),2);
1638 mixX+=yPhiMix->GetBinContent(j);
1639 emixX+=pow(yPhiMix->GetBinError(j),2);
1641 for(int y=1;y<=yPhiPhi->GetNbinsY();y++){
1642 phiY=0, ephiY=0, mixY=0, emixY=0;
1643 for(int j=(ReBin*(y-1)+1);j<ReBin*y;j++){
1644 phiY+=yPhi->GetBinContent(j);
1645 ephiY+=pow(yPhi->GetBinError(j),2);
1646 mixY+=yPhiMix->GetBinContent(j);
1647 emixY+=pow(yPhiMix->GetBinError(j),2);
1650 for(int j=0;j<nMin;j++){//Find highest bin
1651 if(MinArray[j][0]>maxBinVal){
1652 maxBinVal=MinArray[j][0];
1656 phi=yPhiPhi->GetBinContent(x,y);
1657 ephi=yPhiPhi->GetBinError(x,y);
1658 ss=yPhiPhiSS->GetBinContent(x,y);
1659 ess=yPhiPhiSS->GetBinError(x,y);
1660 mix=yPhiPhiMix->GetBinContent(x,y);
1661 emix=yPhiPhiMix->GetBinError(x,y);
1663 bin=phi-a[0]*mixY*(phiX-a[0]*mixX)-a[0]*mixX*(phiY-a[0]*mixY)-a[0]*a[0]*b*ss;
1664 //cout << bin << " " << maxBinVal << " " << maxBin << endl;
1665 if(bin<maxBinVal){//replce highest bin with current if lower
1666 MinArray[maxBin][0]=bin;
1667 //divide by 0 protections
1668 if(a[0]==0)a[0]=1E-10;
1669 if(a[1]==0)a[1]=1E-10;
1670 if(ephi==0)ephi=1E-10;
1671 if(ess==0)ess=1E-10;
1672 if(emix==0)emix=1E-10;
1673 if(phi==0)phi=1E-10;
1675 if(mix==0)mix=1E-10;
1676 MinArray[maxBin][1]=ephi*ephi+a[0]*mixY*phiX*(pow(emixY/mixY,2)+pow(ephiX/phiX,2))+2*a[0]*a[0]*mixY*mixX*(pow(emixY/mixY,2)+pow(emixX/mixX,2))+a[0]*mixX*phiY*(pow(emixX/mixX,2)+pow(ephiY/phiY,2))+pow(a[0]*a[0]*b*ess,2);
1680 PhiX[maxBin][0]=phiX;
1681 PhiY[maxBin][0]=phiY;
1682 MixX[maxBin][0]=MixX;
1683 MixY[maxBin][0]=MixY;
1685 //cout << s << " " << b << " " << bin << " " << maxBin << endl;
1689 //sumSig=0, sumBg=0, esumSig=0, esumBg=0, sumMin=0, esumMin=0;
1690 float sumPhi=0,sumHS=0,sumSS=0,sumMix=0,sumMixXY=0, sumMin=0, esumMin=0;
1691 for(int j=0;j<nMin;j++){
1692 sumMin+=MinArray[j][0];
1693 esumMin+=MinArray[j][1];
1695 sumHS+=(PhiX[j][0]*MixY[j][0]+PhiY[j][0]*MixX[j][0]);
1698 sumMixXY+=(2*MixY[j][0]*MixX[j][0]);
1700 // if(sumSig==0){sumSig=1E-10; cout << "Warning: Zero sumSig" << endl;}
1701 // if(sumBg==0){sumBg=1E-10; cout << "Warning: Zero sumBg" << endl;}
1703 // cout << pow(sumHS*sumHS-4*sumPhi*(sumMixXY-sumSS),0.5) << endl;
1704 a1=(sumHS+pow(sumHS*sumHS-4*sumPhi*(sumMixXY-sumSS),0.5))/(2*sumPhi*(sumMixXY-sumSS));
1705 a2=(sumHS-pow(sumHS*sumHS-4*sumPhi*(sumMixXY-sumSS),0.5))/(2*sumPhi*(sumMixXY-sumSS));
1706 if(fabs(oldmin)<fabs(sumMin))itersize/=2;
1709 if(fabs(a1-1)<fabs(a2-1)){
1714 else if(a1<0)a[0]=a2;
1715 else if(a2<0)a[0]=a1;
1716 else if(sumMin<0) a[0]-=itersize;
1717 else a[0]+=itersize;
1721 cout << "a1: " << a1 << " a2: " << a2 << endl;
1722 //scalea[1]=scalea[0]*pow(esumSig/sumSig/sumSig+esumBg/sumBg/sumBg,0.5);
1723 esumMin=pow(esumMin,0.5);
1724 //esumSig=pow(esumSig,0.5);
1725 //esumBg=pow(esumBg,0.5);
1726 cout << "Iter: " << i << " Min=" << sumMin/nMin << " +/- " << esumMin/nMin << " a=" << a[0] << endl;
1731 //----------------------------------------------------------------------------------------------
1732 void Add1D(TH1F *Histo, TH1F *HistAdd, float xscale){
1733 int nbinsx=Histo->GetNbinsX();
1734 for(int xi=1;xi<=nbinsx;xi++){
1735 if(fabs(Histo->GetBinContent(xi)>1E-10)&&fabs(HistAdd->GetBinContent(xi)>1E-10)){//only add if contents in both
1736 Histo->SetBinContent(xi,Histo->GetBinContent(xi)+xscale*HistAdd->GetBinContent(xi));
1737 Histo->SetBinError(xi,sqrt(pow(Histo->GetBinError(xi),2)+pow(xscale*HistAdd->GetBinError(xi),2)));
1742 //----------------------------------------------------------------------------------
1743 void Add2D(TH2F *Histo, TH2F *HistAdd,float xscale){
1744 int nbinsx=Histo->GetNbinsX();
1745 int nbinsy=Histo->GetNbinsY();
1746 //histOut=(TH2F*)Histo->Clone();
1747 // histOut->SetName("Added Histo");
1749 for(int xi=1;xi<=nbinsx;xi++){
1750 for(int yi=1;yi<=nbinsy;yi++){
1751 //cout << Histo->GetBinContent(xi,yi) << endl;
1752 if(fabs(Histo->GetBinContent(xi,yi)>1E-10)&&fabs(HistAdd->GetBinContent(xi,yi))>1E-10){
1753 Histo->SetBinContent(xi,yi,Histo->GetBinContent(xi,yi)+xscale*HistAdd->GetBinContent(xi,yi));
1754 Histo->SetBinError(xi,yi,sqrt(pow(Histo->GetBinError(xi,yi),2)+pow(xscale*HistAdd->GetBinError(xi,yi),2)));
1759 //----------------------------------------------------------------------------------
1760 void DivideMean1D(TH1F *Hist, TH1F *Hist2,float a1, float a2,float ntrig){
1761 int nbinsx=Hist->GetNbinsX();
1762 float bin,err,bin2,err2;
1763 float sigma=(a2-a1)/2;
1764 for(int xi=1;xi<=nbinsx;xi++){
1765 bin=Hist->GetBinContent(xi);
1766 err=Hist->GetBinError(xi);
1767 bin2=Hist2->GetBinContent(xi);
1768 err2=Hist2->GetBinError(xi);
1774 Hist->SetBinContent(xi,bin/bin2);
1775 Hist->SetBinError(xi,sigma/(err2*ntrig*Hist->GetBinWidth(1)));
1779 //---------------------------------------------------------------------------------
1780 //Correction factor screws with the statistics
1781 void DivideMean1DCorr(TH1F *Hist, TH1F *Hist2, TH1F *Hist3, float a1, float a2,float ntrig){
1782 int nbinsx=Hist->GetNbinsX();
1783 float bin,err,bin2,err2, bin3, err3;
1784 float sigma=(a2-a1)/2;
1785 for(int xi=1;xi<=nbinsx;xi++){
1786 bin=Hist->GetBinContent(xi);
1787 err=Hist->GetBinError(xi);
1788 bin2=Hist2->GetBinContent(xi);
1789 err2=Hist2->GetBinError(xi);
1790 bin3=Hist3->GetBinContent(xi);
1791 err3=Hist3->GetBinError(xi);
1798 Hist->SetBinContent(xi,bin/bin2);
1799 Hist->SetBinError(xi,sigma/(err3*ntrig*Hist->GetBinWidth(1)));//error should go with uncorrected counts
1803 //-----------------------------
1804 //Background subtraction screws with them more
1805 void DivideMean1DBgSub(TH1F *Hist, TH1F *Hist2,TH1F *Hist3,TH1F *Hist4,float a1, float a2,float ntrig, float nmix){
1806 int nbinsx=Hist->GetNbinsX();
1807 float bin,err,bin2,err2,bin3,err3,bin4,err4;
1808 float sigma=(a2-a1);
1810 for(int xi=1;xi<=nbinsx;xi++){
1811 bin=Hist->GetBinContent(xi);
1812 err=Hist->GetBinError(xi);
1813 bin2=Hist2->GetBinContent(xi);
1814 err2=Hist2->GetBinError(xi);
1815 bin3=Hist3->GetBinContent(xi);
1816 err3=Hist3->GetBinError(xi);
1817 bin4=Hist4->GetBinContent(xi);
1818 err4=Hist4->GetBinError(xi);
1826 Hist->SetBinContent(xi,bin/bin2);
1827 cout << sigma << endl;
1828 e1=pow(sigma/(err3*ntrig*Hist->GetBinWidth(xi)),2);
1829 e2=pow(sigma/(err4*nmix*Hist->GetBinWidth(xi)),2);
1832 Hist->SetBinError(xi,sqrt(e1));
1835 //----------------------------------------------------------------------------------
1836 void DivideMean2D(TH2F *Hista, TH2F *Hista2, float a1, float a2,float ntrig){
1837 int nbinsx=Hista->GetXaxis()->GetNbins();
1838 int nbinsy=Hista->GetXaxis()->GetNbins();
1839 float bin,err,bin2,err2;
1840 float sigma=(a2-a1)/2;
1841 for(int xi=1;xi<=nbinsx;xi++){
1842 for(int yi=1;yi<=nbinsy;yi++){
1843 bin=Hista->GetBinContent(xi,yi);
1844 err=Hista->GetBinError(xi,yi);
1845 bin2=Hista2->GetBinContent(xi,yi);
1846 err2=Hista2->GetBinError(xi,yi);
1853 Hista->SetBinContent(xi,yi,bin/bin2);
1854 Hista->SetBinError(xi,yi,sigma/(err2*ntrig*HistGetXaxis()->GetBinWidth(1)*HistGetYaxis()->GetBinWidth(1)));
1858 //----------------------------------------------------------------------------------------------------------------
1859 void SetMargins1D(TCanvas *xc){
1860 xc->SetRightMargin(0.02);
1861 xc->SetLeftMargin(0.16);
1862 xc->SetBottomMargin(0.15);
1865 void SetMargins1DCyl(TCanvas *xc){
1866 xc->SetRightMargin(0.1);
1867 xc->SetLeftMargin(0.1);
1868 xc->SetTopMargin(0.05);
1869 xc->SetBottomMargin(0.05);
1871 xc->SetPhi(209);//151,209
1874 void SetMargins2DSurf(TCanvas *xc){
1875 xc->SetBottomMargin(0.15);
1876 xc->SetLeftMargin(0.21);
1877 xc->SetRightMargin(0.05);
1878 xc->SetTopMargin(0.05);
1880 void SetMargins2D(TCanvas *xc){
1881 xc->SetBottomMargin(0.15);
1882 xc->SetLeftMargin(0.12);
1883 xc->SetRightMargin(0.25);
1885 void SetTitles1D(TH1 *xhisto){
1886 xhisto->GetXaxis()->SetTitleColor(1);
1887 xhisto->GetXaxis()->SetTitleSize(0.06);
1888 xhisto->GetYaxis()->SetTitleSize(0.06);
1889 xhisto->GetXaxis()->SetLabelSize(0.05);
1890 xhisto->GetYaxis()->SetLabelSize(0.05);
1891 xhisto->GetYaxis()->SetTitleOffset(1.2);
1893 void SetTitles2D(TH1 *xhisto){
1894 xhisto->GetXaxis()->SetTitleColor(1);
1895 xhisto->GetXaxis()->SetTitleSize(0.06);
1896 xhisto->GetYaxis()->SetTitleSize(0.06);
1897 xhisto->GetZaxis()->SetTitleSize(0.06);
1898 xhisto->GetXaxis()->SetLabelSize(0.05);
1899 xhisto->GetYaxis()->SetLabelSize(0.05);
1900 xhisto->GetZaxis()->SetLabelSize(0.05);
1901 xhisto->GetZaxis()->SetTitleOffset(1.43);
1908 gStyle->SetStatColor(kWhite);
1909 gStyle->SetTitleColor(kWhite);
1910 gStyle->SetPadColor(kWhite);
1911 gStyle->SetCanvasColor(kWhite);
1912 gStyle->SetPadBorderMode(0);
1913 gStyle->SetPadBorderSize(0);
1914 gStyle->SetCanvasBorderMode(0);
1915 gStyle->SetCanvasBorderSize(0);
1916 gStyle->SetFrameBorderMode(0);
1917 gStyle->SetFrameBorderSize(1);
1918 gStyle->SetFrameFillStyle(0);
1919 gStyle->SetOptStat(0);
1920 gStyle->SetOptFit(0);
1921 gStyle->SetPalette(1);
1923 case 2: //paper figure style
1924 gStyle->SetStatColor(kWhite);
1925 gStyle->SetTitleColor(kWhite);
1926 gStyle->SetPadColor(kWhite);
1927 gStyle->SetCanvasColor(kWhite);
1928 gStyle->SetPadBorderMode(0);
1929 gStyle->SetPadBorderSize(0);
1930 gStyle->SetCanvasBorderMode(0);
1931 gStyle->SetCanvasBorderSize(0);
1932 gStyle->SetFrameBorderMode(0);
1933 gStyle->SetFrameBorderSize(1);
1934 gStyle->SetFrameFillStyle(0);
1935 gStyle->SetOptStat(0);
1936 gStyle->SetOptFit(1);
1937 gStyle->SetPalette(1);
1943 //------------------------------------------------------------------
1944 void keySymbol(Float_t x, Float_t y, const Char_t* tt,
1945 Int_t color=1, Int_t marker=1, Float_t tSize=0.04, Float_t Msize=1.0){
1949 TLatex *t = new TLatex();
1951 t->SetTextAlign(12);
1952 t->SetTextSize(tSize);
1953 t->SetTextColor(color);
1954 t->DrawLatex(x+0.025,y,tt);
1957 TMarker *l = new TMarker();
1959 l->SetMarkerStyle(marker);
1960 l->SetMarkerColor(color);
1961 l->SetMarkerSize(Msize);
1962 l->PaintMarkerNDC(x-0.0025,y);
1967 //------------------------------------------------
1968 void keyText(Float_t x, Float_t y, const Char_t* tt,
1969 Int_t color=1, Float_t tSize=0.04, Float_t tangle=0){
1972 Float_t x1 = gPad->GetFrame()->GetX1();
1973 Float_t x2 = gPad->GetFrame()->GetX2();
1976 Float_t y1 = gPad->GetFrame()->GetY1();
1977 Float_t y2 = gPad->GetFrame()->GetY2();
1980 TLatex *t = new TLatex(x,y,tt);
1981 t->SetTextAlign(12);
1982 t->SetTextSize(tSize);
1983 t->SetTextColor(color);
1984 t->SetTextAngle(tangle);
1987 ////////////////////////////////////////////////
1988 void rebin1D(TH1 *&temp1D, int rbins){
1989 int nbinxx1=temp1D->GetNbinsX();
1990 int nbinxx2=nbinxx1/rbins;
1991 float widxx=temp1D->GetBinWidth(1);
1992 float minxx=temp1D->GetBinCenter(1)-widxx/2;
1993 float maxxx=temp1D->GetBinCenter(nbinxx1)+widxx/2;
1994 char *titxx=temp1D->GetTitle();
1996 TH1D *temp1D2=new TH1D("temp1D2",titxx,nbinxx2,minxx,maxxx);
1997 for(int xx1=1;xx1<=nbinxx2;xx1++){
1998 float conx1=0,errx1=0;
1999 for(int xx2=1;xx2<=rbins;xx2++){
2000 conx1+=temp1D->GetBinContent(rbins*(xx1-1)+xx2);
2002 errx1+=pow(temp1D->GetBinError(rbins*(xx1-1)+xx2),2);
2007 errx1=sqrt(errx1)/rbins;
2008 temp1D2->SetBinContent(xx1,conx1);
2009 temp1D2->SetBinError(xx1,errx1);
2011 char *namex=temp1D->GetName();
2012 char *xtit=temp1D->GetXaxis()->GetTitle();
2013 char *ytit=temp1D->GetYaxis()->GetTitle();
2014 int markx=temp1D->GetMarkerStyle();
2015 int colx=temp1D->GetMarkerColor();
2016 temp1D=(TH1D*)temp1D2->Clone();
2017 temp1D->SetName(namex);
2018 temp1D->GetXaxis()->SetTitle(xtit);
2019 temp1D->GetYaxis()->SetTitle(ytit);
2020 temp1D->SetMarkerStyle(markx);
2021 temp1D->SetLineColor(colx);
2022 temp1D->SetMarkerColor(colx);
2023 SetTitles1D(temp1D);
2026 ////////////////////////////////
2027 //Broken need to fix before I use
2028 void rebin2D(TH2D *temp2D,int rbins){
2029 int nbinxx1=temp2D->GetNbinsX();
2030 int nbinxx2=nbinxx2/rbins;
2031 float widxx=temp2D->GetBinWidth(1);
2032 float minxx=temp2D->GetBinCenter(1)-widxx/2;
2033 float maxxx=temp2D->GetBinCenter(nbinxx1)+widxx/2;
2034 char titxx=temp2D->GetTitle();
2035 TH2D *temp2D2=new TH2D("temp2D2",titxx,nbinxx2,minxx,maxxx,nbinxx2,minxx,maxxx);
2036 for(int xx1=1;xx1<=nbinxx2;xx1++){
2037 for(int yy1=1;yy1<=nbinxx2;yy1++){
2038 float conx1=0,errx1=0;
2039 for(int xx2=1;xx2<=rbins;xx2++){
2040 for(int yy2=1;yy2<=rbins;yy2++){
2041 conx1+=temp2D->GetBinContent(rbins*(xx1-1)+xx2,rebins*(yy1-1)+yy2);
2042 errx1+=pow(temp2D->GetBinError(rbins(xx1-1)+xx2,rebins*(yy1-1)+yy2),2);
2045 conx1/=pow(rbins,2);
2046 errx1=sqrt(errx1)/pow(rbins,2);
2047 temp2D2->SetBinContent(xx1,conx1);
2048 temp2D2->SetBinError(xx1,errx1);
2053 //----------------------------------
2054 void DrawLego1D(TCanvas *&tc, TH1 *&thist){
2056 //cout << "off" << thist->GetXaxis()->GetLabelOffset() << endl;
2057 if(thist->GetMinimum()>0)thist->SetMinimum(0);
2058 thist->GetXaxis()->SetLabelOffset(-0.1);
2059 tc1=new TPad("tc1","ytit",0,0.0,0.1,1);
2060 tc2=new TPad("tc2","main",0.1,0,1,1);
2066 tc2->SetRightMargin(0.02);
2067 //xc->SetLeftMargin(0.16);
2068 tc2->SetBottomMargin(0.15);
2069 thist->Draw("lego2");
2071 keyText(.45,.65,"#frac{1}{N_{Trig}}#frac{dN}{d#Delta#phi}",1,0.4,90);
2072 // thist->GetXaxis()->SetLabelOffset(0);
2074 //---------------------------------------
2075 void SaveAsText(TH1 *histo, char *filename){
2077 //I should also make it works with TH2
2079 fp=fopen(filename,"w");
2080 fprintf(fp,"Bin\t%s\tWidth\t%s\tError\n",histo->GetXaxis()->GetTitle(),histo->GetYaxis()->GetTitle());
2081 for(int x=1;x<=histo->GetNbinsX();x++){
2082 fprintf(fp,"%d\t%3.4f\t%3.4f\t%3.4f\t%3.4f\n",x,histo->GetBinCenter(x),histo->GetBinWidth(x),histo->GetBinContent(x),histo->GetBinError(x));
2087 //==========================================
2088 void MixedCorrect(TH1F *hPhi, TH1F *hPhiMix, TH1F *hEtaN, TH1F *hEtaNMix, TH1F *hEtaA, TH1F *hEtaAMix, TH2F *hPhiEta, TH2F *hPhiEtaMix){
2090 //Do not use GeoCorr if using this
2091 // float avePhiMix=hPhiMix->GetSum()/hPhiMix->GetNbinsX();
2092 float avePhiMix=0, eavePhiMix=0;
2093 for(int i=0;i<=hPhiMix->GetNbinsX();i++){
2094 avePhiMix+=hPhiMix->GetBinContent(i);
2095 eavePhiMix+=pow(hPhiMix->GetBinError(i),2);
2097 avePhiMix/=hPhiMix->GetNbinsX();
2098 eavePhiMix=pow(eavePhiMix,0.5)/hPhiMix->GetNbinsX();
2099 hPhiMix->Scale(1/avePhiMix);
2100 hPhi->Divide(hPhiMix);
2103 float maxEtaNMix=hEtaNMix->GetBinContent(hEtaNMix->GetNbinsX()/2);
2104 // float maxEtaNMix=0, emaxEtaNMix=0;
2105 // for(int i=0;i<=hEtaNMix->GetNbinsX();i++){
2106 // aveEtaMix+=hEtaMix->GetBinContent(i);
2107 // eaveEtaMix+=pow(hEtaMix->GetBinError(i),2);
2109 //aveEtaMix/=hEtaMix->GetNbinsX();
2110 // eaveEtaMix=pow(eaveEtaMix,0.5)/hEtaMix->GetNbinsX();
2111 hEtaNMix->Scale(1/maxEtaNMix);
2112 hEtaN->Divide(hEtaNMix);
2114 float maxEtaAMix=hEtaAMix->GetBinContent(hEtaAMix->GetNbinsX()/2);
2115 hEtaAMix->Scale(1/maxEtaAMix);
2116 hEtaA->Divide(hEtaAMix);
2118 float maxavePhiEta=0,emaxavePhiEta=0;
2120 for(int i=1;i<=hPhiEtaMix->GetNbinsX();i++){
2121 maxavePhiEta+=hPhiEtaMix->GetBinContent(i,hPhiEtaMix->GetNbinsY()/2);
2122 emaxavePhiEta+=pow(hPhiEtaMix->GetBinError(i,hPhiEtaMix->GetNbinsY()/2),2);
2124 maxavePhiEta/=hPhiEtaMix->GetNbinsX();
2125 emaxavePhiEta=pow(emaxavePhiEta,0.5)/hPhiEtaMix->GetNbinsX();
2126 hPhiEtaMix->Scale(1/maxavePhiEta);
2127 hPhiEta->Divide(hPhiEtaMix);
2129 for(int i=1;i<=hPhiMix->GetNbinsX();i++){
2130 hPhiMix->SetBinContent(i,avePhiMix);
2131 hPhiMix->SetBinError(i,0);
2134 for(int i=1;i<=hEtaNMix->GetNbinsX();i++){
2135 hEtaNMix->SetBinContent(i,maxEtaNMix);
2136 hEtaAMix->SetBinContent(i,maxEtaAMix);
2137 hEtaNMix->SetBinError(i,0);
2138 hEtaAMix->SetBinError(i,0);
2141 for(int i=1;i<=hPhiEta->GetNbinsX();i++){
2142 for(int j=1;j<=hPhiEta->GetNbinsY();j++){
2143 hPhiEtaMix->SetBinContent(i,j,maxavePhiEta);
2144 hPhiEtaMix->SetBinError(i,j,0);
2149 void MixedCorrect3(TH2F *hPhiPhi, TH2F *hPhiPhiSS, TH2F *hPhiPhiMix,TH2F *hEtaEta, TH2F *hEtaEtaSS, TH2F *hEtaEtaMix){
2150 float avePhiPhiMix=hPhiPhiMix->GetSum()/pow(hPhiPhiMix->GetNbinsX(),2);
2151 cout << "hPhiPhiMix: " << hPhiPhiMix->GetBinContent(1,1) << " " << hPhiPhiMix->GetBinError(1,1) << endl;
2152 hPhiPhiMix->Scale(1/avePhiPhiMix);
2153 cout << "hPhiPhiMix: " << hPhiPhiMix->GetBinContent(1,1) << " " << hPhiPhiMix->GetBinError(1,1) << endl;
2154 hPhiPhi->Divide(hPhiPhiMix);
2155 hPhiPhiSS->Divide(hPhiPhiMix);
2157 float maxEtaEtaMix=hEtaEtaMix->GetBinContent(hEtaEtaMix->GetNbinsX()/2,hEtaEtaMix->GetNbinsX()/2);
2158 hEtaEtaMix->Scale(1/maxEtaEtaMix);
2159 hEtaEta->Divide(hEtaEtaMix);
2160 hEtaEtaSS->Divide(hEtaEtaMix);
2163 int nbin=hEtaEta->GetNbinsX();
2164 float EtaCut=hEtaEta->GetBinCenter(nbin)+hEtaEta->GetBinWidth(1)/2.;
2166 for(int i=1;i<=hPhiPhi->GetNbinsX();i++){
2168 for(int j=0;j<=hPhiPhi->GetNbinsX();j++){
2169 hPhiPhiMix->SetBinContent(i,j,avePhiPhiMix);
2170 hPhiPhiMix->SetBinError(i,j,0);
2173 for(int i=1;i<=hEtaEta->GetNbinsX();i++){
2174 conX=hEtaEta->GetBinCenter(i);
2175 for(int j=0;j<=hEtaEta->GetNbinsX();j++){
2176 conY=hEtaEta->GetBinCenter(j);
2177 if(hEtaEtaMix->GetBinContent(i,j)){
2178 hEtaEtaMix->SetBinContent(i,j,maxEtaEtaMix);
2179 hEtaEtaMix->SetBinError(i,j,0);
2184 //=================================================================
2186 void ProjPhiPhi(TH2F *shist, TH1F *Non1D, TH1F *Noff1D, TH1F *Aon1D, TH1F *Aoff1D , Float_t NearCut=1.5, float DiagWidth=0.35,int nrand=1000){
2188 float pi=3.14159265;
2189 int binxy=shist->GetNbinsX();
2190 float widthxy=shist->GetXaxis()->GetBinWidth(1);
2191 gRandom=new TRandom3();
2192 gRandom->SetSeed(1);
2194 int Nbinxy=2.8*NearCut/widthxy;
2195 float AwayCut=pi-NearCut;
2196 int Abinxy=2.8*AwayCut/widthxy;
2197 *Non1D=new TH1F("Non1D","Near On-Diag",Nbinxy,-NearCut,NearCut);
2198 *Noff1D=new TH1F("Noff1D","Near Off-Diag",Nbinxy,-NearCut,NearCut);
2199 *Aon1D=new TH1F("Aon1D","Away On-Diag",Abinxy,-AwayCut,AwayCut);
2200 *Aoff1D=new TH1F("Aoff1D","Away Off-Diag",Abinxy,-AwayCut,AwayCut);
2202 Non1D->GetXaxis()->SetTitle("#Sigma=(#Delta#phi_{1}+#Delta#phi_{2})/2 or #Delta=(#Delta#phi_{1}-#Delta#phi_{2})/2 ");
2203 Noff1D->GetXaxis()->SetTitle("#Sigma=(#Delta#phi_{1}+#Delta#phi_{2})/2 or #Delta=(#Delta#phi_{1}-#Delta#phi_{2})/2 ");
2204 Aon1D->GetXaxis()->SetTitle("#Sigma=(#Delta#phi_{1}+#Delta#phi_{2})/2-#pi or #Delta=(#Delta#phi_{1}-#Delta#phi_{2})/2 ");
2205 Aoff1D->GetXaxis()->SetTitle("#Sigma=(#Delta#phi_{1}+#Delta#phi_{2})/2-#pi or #Delta=(#Delta#phi_{1}-#Delta#phi_{2})/2 ");
2206 Non1D->GetYaxis()->SetTitle("1/N_{Trig} dN/d(#Sigma or #Delta) ");
2207 Noff1D->GetYaxis()->SetTitle("1/N_{Trig} dN/d(#Sigma or #Delta) ");
2208 Aon1D->GetYaxis()->SetTitle("1/N_{Trig} dN/d(#Sigma or #Delta) ");
2209 Aoff1D->GetYaxis()->SetTitle("1/N_{Trig} dN/d(#Sigma or #Delta) ");
2211 SetTitles1D(Noff1D);
2213 SetTitles1D(Aoff1D);
2215 TH1F *eNon1D=(TH1F*)Non1D->Clone();
2216 eNon1D->SetName("eNon1D");
2217 TH1F *eNoff1D=(TH1F*)Noff1D->Clone();
2218 eNoff1D->SetName("eNoff1D");
2219 TH1F *eAon1D=(TH1F*)Aon1D->Clone();
2220 eAon1D->SetName("eAon1D");
2221 TH1F *eAoff1D=(TH1F*)Aoff1D->Clone();
2222 eAoff1D->SetName("eAoff1D");
2224 //float binsw=2*pi/binxy*2*pi/(2*pi-2);
2226 float NbinsW=Non1D->GetBinWidth(1);
2227 float AbinsW=Aon1D->GetBinWidth(1);
2228 float x10,y10,x20,y20,conp1,errp1;
2230 for(int xx1=1;xx1<=binxy;xx1++){
2231 x10=shist->GetBinCenter(xx1);
2232 for(int yy1=1;yy1<=binxy;yy1++){
2233 y10=shist->GetBinCenter(yy1);
2234 if((x10<NearCut&&y10<NearCut)){binsw=NbinsW/widthxy; nears=1;}
2235 else if((x10>NearCut&&y10>NearCut)){binsw=AbinsW/widthxy;nears=0;}
2237 conp1=shist->GetBinContent(xx1,yy1)*binsw/nrand;
2238 errp1=pow(shist->GetBinError(xx1,yy1)*binsw,2)/nrand;
2239 // cout << conp1 << " " << errp1 << " " << endl;
2240 // cout << shist->GetBinContent(xx1,yy1) << " " << shist->GetBinError(xx1,yy1) << endl;
2241 for(int r1=0;r1<nrand;r1++){
2242 x20=x10+binsw*(gRandom->Rndm()-0.5);
2243 y20=y10+binsw*(gRandom->Rndm()-0.5);
2246 if(fabs(s-pi)<DiagWidth&&nears==0){
2247 Aoff1D->Fill(d,conp1);
2248 eAoff1D->Fill(d,errp1);
2252 if(fabs(s)<DiagWidth&&nears==1){
2253 Noff1D->Fill(d,conp1);
2254 eNoff1D->Fill(d,errp1);
2256 if(d<DiagWidth&&d>0){
2258 Aon1D->Fill((s-pi),2*conp1);//conp1*2
2259 eAon1D->Fill((s-pi),4*errp1);//errp1*4
2262 Non1D->Fill(s,2*conp1);//conp1*2
2263 eNon1D->Fill(s,4*errp1);//errp1*4
2269 for(int xx1=1;xx1<=Nbinxy;xx1++){
2270 Noff1D->SetBinError(xx1,sqrt(eNoff1D->GetBinContent(xx1)));
2271 Non1D->SetBinError(xx1,sqrt(eNon1D->GetBinContent(xx1)));
2273 for(int xx1=1;xx1<=Abinxy;xx1++){
2274 Aoff1D->SetBinError(xx1,sqrt(eAoff1D->GetBinContent(xx1)));
2275 Aon1D->SetBinError(xx1,sqrt(eAon1D->GetBinContent(xx1)));
2277 Non1D->SetMarkerStyle(25);
2278 Non1D->SetMarkerColor(4);
2279 Non1D->SetLineColor(4);
2280 Noff1D->SetMarkerStyle(20);
2281 Noff1D->SetMarkerColor(2);
2282 Noff1D->SetLineColor(2);
2283 Aon1D->SetMarkerStyle(25);
2284 Aon1D->SetMarkerColor(4);
2285 Aon1D->SetLineColor(4);
2286 Aoff1D->SetMarkerStyle(20);
2287 Aoff1D->SetMarkerColor(2);
2288 Aoff1D->SetLineColor(2);
2290 //========================================
2291 ProjEtaEta(TH2F *shist, TH1F *Non1D, TH1F *Noff1D, float DiagWidth=0.35,int nrand=1000){
2292 float pi=3.14159265;
2293 int binxy=shist->GetNbinsX();
2294 float widthxy=shist->GetXaxis()->GetBinWidth(1);
2295 gRandom=new TRandom3();
2296 gRandom->SetSeed(1);
2297 float NearCut=shist->GetBinCenter(binxy)+shist->GetBinWidth(binxy)/2.;
2299 int Nbinxy=2.8*NearCut/widthxy;
2301 *Non1D=new TH1F("NEon1D","Near On-Diag",Nbinxy,-NearCut,NearCut);
2302 *Noff1D=new TH1F("NEoff1D","Near Off-Diag",Nbinxy,-NearCut,NearCut);
2304 Non1D->GetXaxis()->SetTitle("#Sigma=(#Delta#phi_{1}+#Delta#phi_{2})/2 or #Delta=(#Delta#phi_{1}-#Delta#phi_{2})/2 ");
2305 Noff1D->GetXaxis()->SetTitle("#Sigma=(#Delta#phi_{1}+#Delta#phi_{2})/2 or #Delta=(#Delta#phi_{1}-#Delta#phi_{2})/2 ");
2306 Non1D->GetYaxis()->SetTitle("1/N_{Trig} dN/d(#Sigma or #Delta) ");
2307 Noff1D->GetYaxis()->SetTitle("1/N_{Trig} dN/d(#Sigma or #Delta) ");
2309 SetTitles1D(Noff1D);
2311 TH1F *eNon1D=(TH1F*)Non1D->Clone();
2312 eNon1D->SetName("eNEon1D");
2313 TH1F *eNoff1D=(TH1F*)Noff1D->Clone();
2314 eNoff1D->SetName("eNEoff1D");
2316 float binsw=Non1D->GetBinWidth(1);
2317 float x10,y10,x20,y20,conp1,errp1;
2319 for(int xx1=1;xx1<=binxy;xx1++){
2320 x10=shist->GetBinCenter(xx1);
2321 for(int yy1=1;yy1<=binxy;yy1++){
2322 y10=shist->GetBinCenter(yy1);
2323 conp1=shist->GetBinContent(xx1,yy1)*binsw/nrand;
2324 errp1=pow(shist->GetBinError(xx1,yy1)*binsw,2)/nrand;
2325 for(int r1=0;r1<nrand;r1++){
2326 x20=x10+binsw*(gRandom->Rndm()-0.5);
2327 y20=y10+binsw*(gRandom->Rndm()-0.5);
2331 if(fabs(s)<DiagWidth){
2332 Noff1D->Fill(d,conp1);
2333 eNoff1D->Fill(d,errp1);
2335 if(d<DiagWidth&&d>0){
2336 Non1D->Fill(s,2*conp1);//conp1*2
2337 eNon1D->Fill(s,4*errp1);//errp1*4
2342 for(int xx1=1;xx1<=Nbinxy;xx1++){
2343 Noff1D->SetBinError(xx1,sqrt(eNoff1D->GetBinContent(xx1)));
2344 Non1D->SetBinError(xx1,sqrt(eNon1D->GetBinContent(xx1)));
2346 Non1D->SetMarkerStyle(25);
2347 Non1D->SetMarkerColor(4);
2348 Non1D->SetLineColor(4);
2349 Noff1D->SetMarkerStyle(20);
2350 Noff1D->SetMarkerColor(2);
2351 Noff1D->SetLineColor(2);