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 **************************************************************************/
15 //2- and 3-particle trigger particle correlation analysis
16 //Author: Jason Glyndwr Ulery, ulery@uni-frankfurt.de
19 #include "Riostream.h"
33 #include "AliAnalysisTask.h"
34 #include "AliAnalysisManager.h"
36 #include "AliESDEvent.h"
37 #include "AliESDInputHandler.h"
38 #include "AliMCEvent.h"
39 #include "AliMCEventHandler.h"
40 #include "AliMCParticle.h"
42 #include "AliESDVertex.h"
43 #include "AliMultiplicity.h"
44 #include "TParticle.h"
47 //#include "AliHeader.h"
48 //#include "AliGenEventHeader.h"
52 #include "AliAnalysisTaskDiHadron.h"
55 ClassImp(AliAnalysisTaskDiHadron)
57 //----------------------------------------
58 AliAnalysisTaskDiHadron::AliAnalysisTaskDiHadron(const char *name):
59 AliAnalysisTask(name,""), fESD(0), fMC(0), fOutput(0),fMinClustersTPC(0),fMinClusterRatio(0),fMaxTPCchi2(0),fMinClustersITS(0),fEtaCut(0),fTrigEtaCut(0),fNearPhiCut(0),fXECut(0),fMaxDCA(0),fMaxDCAXY(0),fMaxDCAZ(0),fDCA2D(0),fTPCRefit(0),fITSRefit(0),fSPDCut(0),fMinPtAssoc(0),fMaxPtAssoc(0),fVzCut(0),fEfficiencyCorr(0),DEBUG(0),fnBinPhi(0),fnBinEta(0),fnBinPhiEtaPhi(0),fnBinPhiEtaEta(0),fnBinPhi3(0),fnBinEta3(0),fPi(3.1415926535898),fdPhiMin(0),fdPhiMax(0),fNTPtBins(0),fNMix(0),fNCentBins(0),fNAPtBins(0),fNAPt3Bins(0),fNVertexBins(0),fNXEBins(0),fNIDs(0),fEffFitPt(0),fNFitLowParam(0),fNFitHighParam(0),fMCHistos(0),fNFitLow(0),fNFitHigh(0),fFitLow(NULL),fFitHigh(NULL),fFitLowParam(NULL),fFitHighParam(NULL),fPtTrigArray(NULL),fPtAssocArray(NULL),fPtAssoc3Array1(NULL),fPtAssoc3Array2(NULL),fCentArrayMin(NULL),fCentArrayMax(NULL),fXEArray(NULL),fTrigIDArray(NULL),tPhi(NULL),tEta(NULL),tPt(NULL),tCharge(NULL),tEff(NULL),tPtAssoc3(NULL),tNPtAssoc3(NULL)
64 DefineInput(0, TChain::Class());
65 DefineOutput(0,TList::Class());
68 for(int c=0;c<fNCentBins;c++){
69 for(int v=0;v<fNVertexBins;v++){
70 for(int jmc=0;jmc<2;jmc++){
71 fMixPointer[c][v][jmc]=-1;
72 fMixEnd[c][v][jmc]=-1;
73 for(int ievts=0;ievts<fNMix;ievts++){
74 fMPt[ievts][c][v][jmc]=NULL;
75 fMPhi[ievts][c][v][jmc]=NULL;
76 fMEta[ievts][c][v][jmc]=NULL;
77 for(int dd=0;dd<10;dd++)fMPtAssoc3[ievts][c][v][jmc][dd]=NULL;
78 fMNPtAssoc3[ievts][c][v][jmc]=NULL;
79 fMixTrack[ievts][c][v][jmc]=0;
88 //fPi=3.1415926535898;
92 //--------------------------------------
93 void AliAnalysisTaskDiHadron::SetCuts(Int_t MinClustersTPC, Float_t MinClusterRatio, Float_t MaxTPCchi2, Int_t MinClustersITS, Float_t EtaCut, Float_t TrigEtaCut, Float_t NearPhiCut, Float_t XECut, Float_t MaxDCA, Float_t MaxDCAXY, Float_t MaxDCAZ, Int_t DCA2D, Int_t TPCRefit, Int_t ITSRefit, Int_t SPDCut, Float_t MinPtAssoc, Float_t MaxPtAssoc, Float_t VzCut, Int_t NIDs, char **TrigIDArray){
94 fMinClustersTPC=MinClustersTPC;
95 fMinClusterRatio=MinClusterRatio;
96 fMaxTPCchi2=MaxTPCchi2;
97 fMinClustersITS=MinClustersITS;
99 fTrigEtaCut=TrigEtaCut;
100 fNearPhiCut=NearPhiCut;
109 fMinPtAssoc=MinPtAssoc;
110 fMaxPtAssoc=MaxPtAssoc;
113 fTrigIDArray=(char**)TrigIDArray;
115 // Printf("TPC%d R%2.1f Chi%2.1f ITS%d Eta%2.1f Near%2.1f NearX%2.1f DCA%2.1f DCAR%2.1f DCAZ%2.1f DCAM%d TPCFit%d ITSFit%d SPD%d MinPt%2.1f MaxPt%2.1f Vz%2.1f Trig_%s",fMinClustersTPC,fMinClusterRatio,fMaxTPCchi2,fMinClustersITS,fEtaCut,fNearPhiCut,fXECut,fMaxDCA,fMaxDCAXY,fMaxDCAZ,fDCA2D,fTPCRefit,fITSRefit,fSPDCut,fMinPtAssoc,fMaxPtAssoc,fVzCut,fTrigIDArray[0]);
117 //--------------------------------------------------------
118 void AliAnalysisTaskDiHadron::SetOptions(Int_t EfficiencyCorr, Int_t fDEBUG, Int_t MCHistos){
119 fEfficiencyCorr=EfficiencyCorr;
122 //Printf("Eff%d DEBUG%d MCHistos%d",fEfficiencyCorr,DEBUG,fMCHistos);
124 //------------------------------------------------------
125 void AliAnalysisTaskDiHadron::SetBins(Int_t nBinPhi, Int_t nBinEta, Int_t nBinPhiEtaPhi, Int_t nBinPhiEtaEta, Int_t nBinPhi3, Int_t nBinEta3,Float_t dPhiMin, Float_t dPhiMax, Int_t NTPtBins, Int_t NMixBins, Int_t NCentBins,Int_t NAPtBins, Int_t NAPt3Bins, Int_t NVertexBins, Int_t NXEBins,Float_t *PtTrigArray, Float_t *PtAssocArray,Float_t *PtAssoc3Array1, Float_t *PtAssoc3Array2, Int_t *CentArrayMin, Int_t *CentArrayMax, Float_t *XEArray){
128 fnBinPhiEtaPhi=nBinPhiEtaPhi;
129 fnBinPhiEtaEta=nBinPhiEtaEta;
136 fNCentBins=NCentBins;
138 fNAPt3Bins=NAPt3Bins;
139 fNVertexBins=NVertexBins;
141 fPtTrigArray=(Float_t*)PtTrigArray;
142 fPtAssocArray=(Float_t*)PtAssocArray;
143 fPtAssoc3Array1=(Float_t*)PtAssoc3Array1;
144 fPtAssoc3Array2=(Float_t*)PtAssoc3Array2;
145 fCentArrayMin=(Int_t*)CentArrayMin;
146 fCentArrayMax=(Int_t*)CentArrayMax;
147 fXEArray=(Float_t*)XEArray;
148 for(int i=0;i<=fNVertexBins;i++)fVertexArray[i]=(2.*i/fNVertexBins-1)*fVzCut;
149 //Printf("BinPhi%d BinEta%d BinPhiEta%d %d Bin3Phi%d Bin3Eta%d VertexArray%2.1f %2.1f",fnBinPhi,fnBinEta,fnBinPhiEtaPhi,fnBinPhiEtaEta,fnBinPhi3,fnBinEta3,fVertexArray[0],fVertexArray[fNVertexBins]);
151 //-------------------------------------------------------
152 void AliAnalysisTaskDiHadron::SetEfficiencies(Float_t EffFitPt, TF1 *FitLow, TF1 *FitHigh, Int_t NFitLowParam, Int_t NFitHighParam, Float_t *FitLowParam, Float_t *FitHighParam){
154 fFitLow=(TF1*)FitLow;
155 fFitHigh=(TF1*)FitHigh;
156 fNFitLowParam=NFitLowParam;
157 fNFitHighParam=NFitHighParam;
158 // Printf("NCent%d NFitLow%d NFitHigh%d",NCent,fNFitLowParam,fNFitHighParam);
159 // Printf("FitLowParm%2.4f",FitLowParam[0]);
160 fFitLowParam=(Float_t*)FitLowParam;
161 fFitHighParam=(Float_t*)FitHighParam;
162 //Printf("fEffFitPt%2.1f FitParam%2.1f",fEffFitPt,fFitLowParam[0]);
165 //-----------------------------------------------------------
166 void AliAnalysisTaskDiHadron::ConnectInputData(Option_t *){
168 if(DEBUG)Printf("Connecting");
169 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
170 if (!tree&&DEBUG) {Printf("ERROR: Could not read chain from input slot 0");}
172 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
173 if (!esdH&&DEBUG) Printf("ERROR: Could not get ESDInputHandler");
174 else fESD = esdH->GetEvent();
176 //MC Data handler (so one can calcualte eff)
177 AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*>((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
178 if(mcH)fMC=mcH->MCEvent();
180 if(DEBUG)Printf("Connected");
183 //---------------------------------------------------------
184 void AliAnalysisTaskDiHadron::CreateOutputObjects(){
185 if(DEBUG)Printf("Output");
186 //Creates the histograms and list
188 fOutput->SetName(GetName());
191 int nptbins=fNAPtBins;
193 char *cmc1[2]={"","_MC"};
194 char *cmc2[2]={""," MC"};
195 char *sign1[3]={"","_LS","_ULS"};
196 char *sign2[3]={""," Like-Sign"," Unlike-Sign"};
197 char *sign31[4]={"","_LS","_ULT","_ULA"};
198 char *sign32[4]={""," Like-Sign"," Trigger-Diff"," Assoc-Diff"};
199 Float_t EtaEdge=2*fEtaCut;
200 Float_t PhiArray[fnBinPhi+1];
201 Float_t EtaArray[fnBinEta+1];
202 Float_t PhiEtaArrayPhi[fnBinPhiEtaPhi+1];
203 Float_t PhiEtaArrayEta[fnBinPhiEtaEta+1];
204 for(int iphi=0;iphi<=fnBinPhi;iphi++){
205 PhiArray[iphi]=fdPhiMin+iphi*2*fPi/fnBinPhi;
207 for(int ieta=0;ieta<=fnBinEta;ieta++){
208 EtaArray[ieta]=-EtaEdge+ieta*2*EtaEdge/fnBinEta;
210 for(int iphi=0;iphi<=fnBinPhiEtaPhi;iphi++){
211 PhiEtaArrayPhi[iphi]=fdPhiMin+iphi*2*fPi/fnBinPhiEtaPhi;
213 for(int ieta=0;ieta<=fnBinPhiEtaEta;ieta++){
214 PhiEtaArrayEta[ieta]=-EtaEdge+ieta*2*EtaEdge/fnBinPhiEtaEta;
216 for(int imc=0;imc<=1;imc++){//MC loop
217 if(imc==1&&!fMCHistos) continue;
218 //Create the histograms
219 sprintf(histname,"fHistMult%s",cmc1[imc]);
220 sprintf(histtitle,"Multiplicity%s",cmc2[imc]);
221 fHistMult[imc]=new TH1F(histname,histtitle,2000,-0.5,1999.5);
222 fHistMult[imc]->Sumw2();
223 fHistMult[imc]->GetXaxis()->SetTitle("Number of tracks");
224 fHistMult[imc]->GetYaxis()->SetTitle("Counts");
225 fOutput->Add(fHistMult[imc]);
227 for(int imult=0;imult<fNCentBins;imult++){//loop for multiplicity bins
229 //Histograms that are independent of the trigger
230 sprintf(histname,"fHistPt_C%d%s",imult,cmc1[imc]);
231 sprintf(histtitle,"P_{T} Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
232 fHistPt[imult][imc]=new TH1F(histname,histtitle,nptbins,fPtAssocArray);
233 fHistPt[imult][imc]->Sumw2();
234 fHistPt[imult][imc]->GetXaxis()->SetTitle("p_{T}");
235 fHistPt[imult][imc]->GetYaxis()->SetTitle("Counts");
236 fOutput->Add(fHistPt[imult][imc]);
238 //Histograms that are independent of the trigger
239 sprintf(histname,"fHistPtEff_C%d%s",imult,cmc1[imc]);
240 sprintf(histtitle,"P_{T} Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
241 fHistPtEff[imult][imc]=new TH1F(histname,histtitle,1000,0,100);
242 fHistPtEff[imult][imc]->Sumw2();
243 fHistPtEff[imult][imc]->GetXaxis()->SetTitle("p_{T}");
244 fHistPtEff[imult][imc]->GetYaxis()->SetTitle("Counts");
245 fOutput->Add(fHistPtEff[imult][imc]);
247 sprintf(histname,"fHistPhi_C%d%s",imult,cmc1[imc]);
248 sprintf(histtitle,"#phi Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
249 fHistPhi[imult][imc]=new TH2F(histname,histtitle,fnBinPhi,PhiArray,nptbins,fPtAssocArray);
250 fHistPhi[imult][imc]->Sumw2();
251 fHistPhi[imult][imc]->GetXaxis()->SetTitle("#phi");
252 fHistPhi[imult][imc]->GetYaxis()->SetTitle("P_{T}");
253 fOutput->Add(fHistPhi[imult][imc]);
255 sprintf(histname,"fHistPhiPt_C%d%s",imult,cmc1[imc]);
256 sprintf(histtitle,"P_{T} weighted #phi Distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
257 fHistPhiPt[imult][imc]=new TH2F(histname,histtitle,fnBinPhi,PhiArray,nptbins,fPtAssocArray);
258 fHistPhiPt[imult][imc]->Sumw2();
259 fHistPhiPt[imult][imc]->GetXaxis()->SetTitle("#phi");
260 fHistPhiPt[imult][imc]->GetYaxis()->SetTitle("P_{T}");
261 fOutput->Add(fHistPhiPt[imult][imc]);
263 sprintf(histname,"fHistEta_C%d%s",imult,cmc1[imc]);
264 sprintf(histtitle,"#eta Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
265 fHistEta[imult][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,nptbins,fPtAssocArray);
266 fHistEta[imult][imc]->Sumw2();
267 fHistEta[imult][imc]->GetXaxis()->SetTitle("#eta");
268 fHistEta[imult][imc]->GetYaxis()->SetTitle("P_{T}");
269 fOutput->Add(fHistEta[imult][imc]);
271 sprintf(histname,"fHistEtaPt_C%d%s",imult,cmc1[imc]);
272 sprintf(histtitle,"P_{T} weighted #eta Distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
273 fHistEtaPt[imult][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,nptbins,fPtAssocArray);
274 fHistEtaPt[imult][imc]->Sumw2();
275 fHistEtaPt[imult][imc]->GetXaxis()->SetTitle("#eta");
276 fHistEtaPt[imult][imc]->GetYaxis()->SetTitle("P_{T}");
277 fOutput->Add(fHistEtaPt[imult][imc]);
279 sprintf(histname,"fHistNEvents_C%d%s",imult,cmc1[imc]);
280 sprintf(histtitle,"Number of Events and Number Passing Cuts %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
281 fHistNEvents[imult][imc]=new TH1F(histname,histtitle,2,-0.5,1.5);
282 fHistNEvents[imult][imc]->Sumw2();
283 fHistNEvents[imult][imc]->GetXaxis()->SetTitle("Events,Passing Cuts");
284 fHistNEvents[imult][imc]->GetYaxis()->SetTitle("Number of Events");
285 fOutput->Add(fHistNEvents[imult][imc]);
287 sprintf(histname,"fHistNTrigger_C%d%s",imult,cmc1[imc]);
288 sprintf(histtitle,"Number of Triggers %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
289 fHistNTrigger[imult][imc]=new TH1F(histname,histtitle,fNTPtBins,-0.5,fNTPtBins-0.5);
290 fHistNTrigger[imult][imc]->Sumw2();
291 fHistNTrigger[imult][imc]->GetXaxis()->SetTitle("Trigger Number");
292 fHistNTrigger[imult][imc]->GetYaxis()->SetTitle("Number of Triggers");
293 fOutput->Add(fHistNTrigger[imult][imc]);
295 sprintf(histname,"fHistNTriggerPt_C%d%s",imult,cmc1[imc]);
296 sprintf(histtitle,"P_{T} Weighted Number of Triggers %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
297 fHistNTriggerPt[imult][imc]=new TH1F(histname,histtitle,fNTPtBins,-0.5,fNTPtBins-0.5);
298 fHistNTriggerPt[imult][imc]->Sumw2();
299 fHistNTriggerPt[imult][imc]->GetXaxis()->SetTitle("Trigger Number");
300 fHistNTriggerPt[imult][imc]->GetYaxis()->SetTitle("Number of Triggers");
301 fOutput->Add(fHistNTriggerPt[imult][imc]);
303 sprintf(histname,"fHistNMix_C%d%s",imult,cmc1[imc]);
304 sprintf(histtitle,"Number of Mixed Events %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
305 fHistNMix[imult][imc]=new TH1F(histname,histtitle,fNTPtBins,-0.5,fNTPtBins-0.5);
306 fHistNMix[imult][imc]->Sumw2();
307 fHistNMix[imult][imc]->GetXaxis()->SetTitle("Trigger Number");
308 fHistNMix[imult][imc]->GetYaxis()->SetTitle("Number of Mixed Events");
309 fOutput->Add(fHistNMix[imult][imc]);
311 sprintf(histname,"fHistPhiEta_C%d%s",imult,cmc1[imc]);
312 sprintf(histtitle,"#phi-#eta distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
313 fHistPhiEta[imult][imc]=new TH3F(histname, histtitle,fnBinPhiEtaPhi,PhiEtaArrayPhi,fnBinPhiEtaEta,PhiEtaArrayEta,nptbins,fPtAssocArray);
314 fHistPhiEta[imult][imc]->Sumw2();
315 fHistPhiEta[imult][imc]->GetXaxis()->SetTitle("#phi");
316 fHistPhiEta[imult][imc]->GetYaxis()->SetTitle("#eta");
317 fHistPhiEta[imult][imc]->GetZaxis()->SetTitle("p_{T}");
318 fOutput->Add(fHistPhiEta[imult][imc]);
320 sprintf(histname,"fHistPhiEtaPt_C%d%s",imult,cmc1[imc]);
321 sprintf(histtitle,"Pt Weighted #phi-#eta distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
322 fHistPhiEtaPt[imult][imc]=new TH3F(histname, histtitle,fnBinPhiEtaPhi,PhiEtaArrayPhi,fnBinPhiEtaEta,PhiEtaArrayEta,nptbins,fPtAssocArray);
323 fHistPhiEtaPt[imult][imc]->Sumw2();
324 fHistPhiEtaPt[imult][imc]->GetXaxis()->SetTitle("#phi");
325 fHistPhiEtaPt[imult][imc]->GetYaxis()->SetTitle("#eta");
326 fHistPhiEtaPt[imult][imc]->GetZaxis()->SetTitle("p_{T}");
327 fOutput->Add(fHistPhiEtaPt[imult][imc]);
329 //if(DEBUG)Printf("OutPut2");
330 //Histograms with a trigger dependence
332 for(int i=0;i<fNTPtBins;i++){
333 for(int j=1;j<fNAPtBins;j++){
334 if(fPtTrigArray[i]==fPtAssocArray[j])lptbins=j;
336 //if(DEBUG)Printf("Loop: %d Pt %3.2f",i,fPtTrigArray[i]/fPtBinWidth);
338 //Ones with no centrality binning
340 sprintf(histname,"fHistMultTrig_P%d%s",i,cmc1[imc]);
341 sprintf(histtitle,"Distrubition of number of tracks in triggered events with %3.1f<p_{T}^{Trig}<%3.1f%s",fPtTrigArray[i],fPtTrigArray[i+1],cmc2[imc]);
342 fHistMultTrig[i][imc]=new TH1F(histname,histtitle,2000,0,2000);
343 fHistMultTrig[i][imc]->Sumw2();
344 fHistMultTrig[i][imc]->GetXaxis()->SetTitle("Number of Tracks");
345 fHistMultTrig[i][imc]->GetYaxis()->SetTitle("Counts");
346 fOutput->Add(fHistMultTrig[i][imc]);
348 sprintf(histname,"fHistPtTrig_P%d_C%d%s",i,imult,cmc1[imc]);
349 sprintf(histtitle,"P_{T} distribution in triggered events with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
350 fHistPtTrig[i][imult][imc]=new TH1F(histname,histtitle,nptbins,fPtAssocArray);
351 fHistPtTrig[i][imult][imc]->Sumw2();
352 fHistPtTrig[i][imult][imc]->GetXaxis()->SetTitle("p_{T}");
353 fHistPtTrig[i][imult][imc]->GetYaxis()->SetTitle("Counts");
354 fOutput->Add(fHistPtTrig[i][imult][imc]);
356 sprintf(histname,"fHistPhiTrig_P%d_C%d%s",i,imult,cmc1[imc]);
357 sprintf(histtitle,"Phi Distribution of triggered events with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
358 fHistPhiTrig[i][imult][imc]=new TH2F(histname,histtitle,fnBinPhi,PhiArray,lptbins,fPtAssocArray);
359 fHistPhiTrig[i][imult][imc]->Sumw2();
360 fHistPhiTrig[i][imult][imc]->GetXaxis()->SetTitle("#phi");
361 fHistPhiTrig[i][imult][imc]->GetYaxis()->SetTitle("p_{T}");
362 fOutput->Add(fHistPhiTrig[i][imult][imc]);
364 sprintf(histname,"fHistPhiTrigPt_P%d_C%d%s",i,imult,cmc1[imc]);
365 sprintf(histtitle,"P_{T} Weighted Phi Distribution of triggered events with %3.1f<p_{T}^{Trig}<%3.1f%s",fPtTrigArray[i],fPtTrigArray[i+1],cmc2[imc]);
366 fHistPhiTrigPt[i][imult][imc]=new TH2F(histname,histtitle,fnBinPhi,PhiArray,lptbins,fPtAssocArray);
367 fHistPhiTrigPt[i][imult][imc]->Sumw2();
368 fHistPhiTrigPt[i][imult][imc]->GetXaxis()->SetTitle("#phi");
369 fHistPhiTrigPt[i][imult][imc]->GetYaxis()->SetTitle("p_{T}");
370 fOutput->Add(fHistPhiTrigPt[i][imult][imc]);
372 sprintf(histname,"fHistEtaTrig_P%d_C%d%s",i,imult,cmc1[imc]);
373 sprintf(histtitle,"Eta Distribution of triggered events with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
374 fHistEtaTrig[i][imult][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
375 fHistEtaTrig[i][imult][imc]->Sumw2();
376 fHistEtaTrig[i][imult][imc]->GetXaxis()->SetTitle("#eta");
377 fHistEtaTrig[i][imult][imc]->GetYaxis()->SetTitle("p_{T}");
378 fOutput->Add(fHistEtaTrig[i][imult][imc]);
380 sprintf(histname,"fHistEtaTrigPt_P%d_C%d%s",i,imult,cmc1[imc]);
381 sprintf(histtitle,"P_{T} Weighted Eta Distribution of triggered events with %3.1f<p_{T}^{Trig}<%3.1f%s",fPtTrigArray[i],fPtTrigArray[i+1],cmc2[imc]);
382 fHistEtaTrigPt[i][imult][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
383 fHistEtaTrigPt[i][imult][imc]->Sumw2();
384 fHistEtaTrigPt[i][imult][imc]->GetXaxis()->SetTitle("#eta");
385 fHistEtaTrigPt[i][imult][imc]->GetYaxis()->SetTitle("p_{T}");
386 fOutput->Add(fHistEtaTrigPt[i][imult][imc]);
388 sprintf(histname,"fHistPhiEtaTrig_P%d_C%d%s",i,imult,cmc1[imc]);
389 sprintf(histtitle,"#phi-#eta distribution in triggered events %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
390 fHistPhiEtaTrig[i][imult][imc]=new TH3F(histname,histtitle,fnBinPhiEtaPhi,PhiEtaArrayPhi,fnBinPhiEtaEta,PhiEtaArrayEta,lptbins,fPtAssocArray);
391 fHistPhiEtaTrig[i][imult][imc]->Sumw2();
392 fHistPhiEtaTrig[i][imult][imc]->GetXaxis()->SetTitle("#phi");
393 fHistPhiEtaTrig[i][imult][imc]->GetYaxis()->SetTitle("#eta");
394 fHistPhiEtaTrig[i][imult][imc]->GetZaxis()->SetTitle("p_{T}");
395 fOutput->Add(fHistPhiEtaTrig[i][imult][imc]);
397 sprintf(histname,"fHistXEN_P%d_C%d%s",i,imult,cmc1[imc]);
398 sprintf(histtitle,"Near-Side X_{E} distribution for %3.1f<p_{T}^{Lead}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
399 fHistXEN[i][imult][imc]=new TH1F(histname,histtitle,fNXEBins,fXEArray);
400 fHistXEN[i][imult][imc]->Sumw2();
401 fHistXEN[i][imult][imc]->GetXaxis()->SetTitle("X_{E}");
402 fOutput->Add(fHistXEN[i][imult][imc]);
404 sprintf(histname,"fHistXENMixed_P%d_C%d%s",i,imult,cmc1[imc]);
405 sprintf(histtitle,"Mixed Near-Side X_{E} distribution for %3.1f<p_{T}^{Lead}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
406 fHistXENMix[i][imult][imc]=new TH1F(histname,histtitle,fNXEBins,fXEArray);
407 fHistXENMix[i][imult][imc]->Sumw2();
408 fHistXENMix[i][imult][imc]->GetXaxis()->SetTitle("X_{E}");
409 fOutput->Add(fHistXENMix[i][imult][imc]);
411 sprintf(histname,"fHistXEA_P%d_C%d%s",i,imult,cmc1[imc]);
412 sprintf(histtitle,"Away-Side X_{E} distribution for %3.1f<p_{T}^{Lead}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
413 fHistXEA[i][imult][imc]=new TH1F(histname,histtitle,fNXEBins,fXEArray);
414 fHistXEA[i][imult][imc]->Sumw2();
415 fHistXEA[i][imult][imc]->GetXaxis()->SetTitle("X_{E}");
416 fOutput->Add(fHistXEA[i][imult][imc]);
418 sprintf(histname,"fHistXEAMixed_P%d_C%d%s",i,imult,cmc1[imc]);
419 sprintf(histtitle,"Mixed Away-Side X_{E} distribution for %3.1f<p_{T}^{Lead}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
420 fHistXEAMix[i][imult][imc]=new TH1F(histname,histtitle,fNXEBins,fXEArray);
421 fHistXEAMix[i][imult][imc]->Sumw2();
422 fHistXEAMix[i][imult][imc]->GetXaxis()->SetTitle("X_{E}");
423 fOutput->Add(fHistXEAMix[i][imult][imc]);
426 for(int isign=0;isign<3;isign++){
427 sprintf(histname,"fHistDeltaPhi_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
428 sprintf(histtitle,"#Delta#phi Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
429 fHistDeltaPhi[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinPhi,PhiArray,lptbins,fPtAssocArray);
430 fHistDeltaPhi[i][imult][isign][imc]->Sumw2();
431 fHistDeltaPhi[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi");
432 fHistDeltaPhi[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
433 fOutput->Add(fHistDeltaPhi[i][imult][isign][imc]);
435 sprintf(histname,"fHistDeltaPhiPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
436 sprintf(histtitle,"P_{T} Weighted #Delta#phi Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
437 fHistDeltaPhiPt[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinPhi,PhiArray,lptbins,fPtAssocArray);
438 fHistDeltaPhiPt[i][imult][isign][imc]->Sumw2();
439 fHistDeltaPhiPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi");
440 fHistDeltaPhiPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
441 fOutput->Add(fHistDeltaPhiPt[i][imult][isign][imc]);
443 sprintf(histname,"fHistDeltaPhiMix_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
444 sprintf(histtitle,"#Delta#phi Mixed Event Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
445 fHistDeltaPhiMix[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinPhi,PhiArray,lptbins,fPtAssocArray);
446 fHistDeltaPhiMix[i][imult][isign][imc]->Sumw2();
447 fHistDeltaPhiMix[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi");
448 fHistDeltaPhiMix[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
449 fOutput->Add(fHistDeltaPhiMix[i][imult][isign][imc]);
451 sprintf(histname,"fHistDeltaPhiMixPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
452 sprintf(histtitle,"P_{T} Weighted #Delta#phi Mixed Event Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
453 fHistDeltaPhiMixPt[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinPhi,PhiArray,lptbins,fPtAssocArray);
454 fHistDeltaPhiMixPt[i][imult][isign][imc]->Sumw2();
455 fHistDeltaPhiMixPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi");
456 fHistDeltaPhiMixPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
457 fOutput->Add(fHistDeltaPhiMixPt[i][imult][isign][imc]);
460 sprintf(histname,"fHistDeltaEtaN_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
461 sprintf(histtitle,"Near-Side #Delta#eta Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
462 fHistDeltaEtaN[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
463 fHistDeltaEtaN[i][imult][isign][imc]->Sumw2();
464 fHistDeltaEtaN[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta");
465 fHistDeltaEtaN[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
466 fOutput->Add(fHistDeltaEtaN[i][imult][isign][imc]);
468 sprintf(histname,"fHistDeltaEtaNPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
469 sprintf(histtitle,"Near-Side P_{T} Weighted #Delta#eta Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
470 fHistDeltaEtaNPt[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
471 fHistDeltaEtaNPt[i][imult][isign][imc]->Sumw2();
472 fHistDeltaEtaNPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta");
473 fHistDeltaEtaNPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
474 fOutput->Add(fHistDeltaEtaNPt[i][imult][isign][imc]);
476 sprintf(histname,"fHistDeltaEtaNMix_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
477 sprintf(histtitle,"Near-Side #Delta#eta Mixed Event Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
478 fHistDeltaEtaNMix[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
479 fHistDeltaEtaNMix[i][imult][isign][imc]->Sumw2();
480 fHistDeltaEtaNMix[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta");
481 fHistDeltaEtaNMix[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
482 fOutput->Add(fHistDeltaEtaNMix[i][imult][isign][imc]);
484 sprintf(histname,"fHistDeltaEtaNMixPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
485 sprintf(histtitle,"Near-Side P_{T} Weighted #Delta#eta Mixed Event Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
486 fHistDeltaEtaNMixPt[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
487 fHistDeltaEtaNMixPt[i][imult][isign][imc]->Sumw2();
488 fHistDeltaEtaNMixPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta");
489 fHistDeltaEtaNMixPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
490 fOutput->Add(fHistDeltaEtaNMixPt[i][imult][isign][imc]);
493 sprintf(histname,"fHistDeltaEtaA_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
494 sprintf(histtitle,"Away-Side #Delta#eta Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
495 fHistDeltaEtaA[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
496 fHistDeltaEtaA[i][imult][isign][imc]->Sumw2();
497 fHistDeltaEtaA[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta");
498 fHistDeltaEtaA[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
499 fOutput->Add(fHistDeltaEtaA[i][imult][isign][imc]);
501 sprintf(histname,"fHistDeltaEtaAPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
502 sprintf(histtitle,"Away-Side P_{T} Weighted #Delta#eta Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
503 fHistDeltaEtaAPt[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
504 fHistDeltaEtaAPt[i][imult][isign][imc]->Sumw2();
505 fHistDeltaEtaAPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta");
506 fHistDeltaEtaAPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
507 fOutput->Add(fHistDeltaEtaAPt[i][imult][isign][imc]);
509 sprintf(histname,"fHistDeltaEtaAMix_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
510 sprintf(histtitle,"Away-Side #Delta#eta Mixed Event Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
511 fHistDeltaEtaAMix[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
512 fHistDeltaEtaAMix[i][imult][isign][imc]->Sumw2();
513 fHistDeltaEtaAMix[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta");
514 fHistDeltaEtaAMix[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
515 fOutput->Add(fHistDeltaEtaAMix[i][imult][isign][imc]);
517 sprintf(histname,"fHistDeltaEtaAMixPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]);
518 sprintf(histtitle,"Away-Side P_{T} Weighted #Delta#eta Mixed Event Distribution with %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],sign2[isign],cmc2[imc]);
519 fHistDeltaEtaAMixPt[i][imult][isign][imc]=new TH2F(histname,histtitle,fnBinEta,EtaArray,lptbins,fPtAssocArray);
520 fHistDeltaEtaAMixPt[i][imult][isign][imc]->Sumw2();
521 fHistDeltaEtaAMixPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta");
522 fHistDeltaEtaAMixPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}");
523 fOutput->Add(fHistDeltaEtaAMixPt[i][imult][isign][imc]);
528 sprintf(histname,"fHistDeltaPhiEta_P%d_C%d%s",i,imult,cmc1[imc]);
529 sprintf(histtitle,"#Delta#phi-#Delta#eta %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
530 fHistDeltaPhiEta[i][imult][imc]=new TH3F(histname,histtitle,fnBinPhiEtaPhi,PhiEtaArrayPhi,fnBinPhiEtaEta,PhiEtaArrayEta,lptbins,fPtAssocArray);
531 fHistDeltaPhiEta[i][imult][imc]->Sumw2();
532 fHistDeltaPhiEta[i][imult][imc]->GetXaxis()->SetTitle("#phi");
533 fHistDeltaPhiEta[i][imult][imc]->GetYaxis()->SetTitle("#eta");
534 fHistDeltaPhiEta[i][imult][imc]->GetZaxis()->SetTitle("p_{T}");
535 fOutput->Add(fHistDeltaPhiEta[i][imult][imc]);
537 sprintf(histname,"fHistDeltaPhiEtaMix_P%d_C%d%s",i,imult,cmc1[imc]);
538 sprintf(histtitle,"#Delta#phi-#Delta#eta from Mixed Events %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
539 fHistDeltaPhiEtaMix[i][imult][imc]=new TH3F(histname,histtitle,fnBinPhiEtaPhi,PhiEtaArrayPhi,fnBinPhiEtaEta,PhiEtaArrayEta,lptbins,fPtAssocArray);
540 fHistDeltaPhiEtaMix[i][imult][imc]->Sumw2();
541 fHistDeltaPhiEtaMix[i][imult][imc]->GetXaxis()->SetTitle("#phi");
542 fHistDeltaPhiEtaMix[i][imult][imc]->GetYaxis()->SetTitle("#eta");
543 fHistDeltaPhiEtaMix[i][imult][imc]->GetZaxis()->SetTitle("p_{T}");
544 fOutput->Add(fHistDeltaPhiEtaMix[i][imult][imc]);
546 sprintf(histname,"fHistPhiEtaTrigPt_P%d_C%d%s",i,imult,cmc1[imc]);
547 sprintf(histtitle,"P_{T}-Weighted #phi-#eta distribution in triggered events %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
548 fHistPhiEtaTrigPt[i][imult][imc]=new TH3F(histname,histtitle,fnBinPhiEtaPhi,PhiEtaArrayPhi,fnBinPhiEtaEta,PhiEtaArrayEta,lptbins,fPtAssocArray);
549 fHistPhiEtaTrigPt[i][imult][imc]->Sumw2();
550 fHistPhiEtaTrigPt[i][imult][imc]->GetXaxis()->SetTitle("#phi");
551 fHistPhiEtaTrigPt[i][imult][imc]->GetYaxis()->SetTitle("#eta");
552 fHistPhiEtaTrigPt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}");
553 fOutput->Add(fHistPhiEtaTrigPt[i][imult][imc]);
555 sprintf(histname,"fHistDeltaPhiEtaPt_P%d_C%d%s",i,imult,cmc1[imc]);
556 sprintf(histtitle,"P_{T}-Weighted #Delta#phi-#Delta#eta %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
557 fHistDeltaPhiEtaPt[i][imult][imc]=new TH3F(histname,histtitle,fnBinPhiEtaPhi,PhiEtaArrayPhi,fnBinPhiEtaEta,PhiEtaArrayEta,lptbins,fPtAssocArray);
558 fHistDeltaPhiEtaPt[i][imult][imc]->Sumw2();
559 fHistDeltaPhiEtaPt[i][imult][imc]->GetXaxis()->SetTitle("#phi");
560 fHistDeltaPhiEtaPt[i][imult][imc]->GetYaxis()->SetTitle("#eta");
561 fHistDeltaPhiEtaPt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}");
562 fOutput->Add(fHistDeltaPhiEtaPt[i][imult][imc]);
564 sprintf(histname,"fHistDeltaPhiEtaMixPt_P%d_C%d%s",i,imult,cmc1[imc]);
565 sprintf(histtitle,"P_{T}-Weighted #Delta#phi-#Delta#eta from Mixed Events %3.1f<p_{T}^{Trig}<%3.1f %dMult%d%s",fPtTrigArray[i],fPtTrigArray[i+1],fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]);
566 fHistDeltaPhiEtaMixPt[i][imult][imc]=new TH3F(histname,histtitle,fnBinPhiEtaPhi,PhiEtaArrayPhi,fnBinPhiEtaEta,PhiEtaArrayEta,lptbins,fPtAssocArray);
567 fHistDeltaPhiEtaMixPt[i][imult][imc]->Sumw2();
568 fHistDeltaPhiEtaMixPt[i][imult][imc]->GetXaxis()->SetTitle("#phi");
569 fHistDeltaPhiEtaMixPt[i][imult][imc]->GetYaxis()->SetTitle("#eta");
570 fHistDeltaPhiEtaMixPt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}");
571 fOutput->Add(fHistDeltaPhiEtaMixPt[i][imult][imc]);
573 //Three-Particle Histograms
574 for(int ipt=0;ipt<fNAPt3Bins;ipt++){
575 for(int iSign=0;iSign<4;iSign++){
576 sprintf(histname,"fHistDeltaPhiPhi_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]);
577 sprintf(histtitle,"Raw #Delta#phi-#Delta#phi %3.1f<p_{T}^{Trig}<%3.1f %3.2f<p_{T}^{Assoc}<%3.2f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fPtAssoc3Array1[ipt],fPtAssoc3Array2[ipt],fCentArrayMin[imult],fCentArrayMax[imult],sign32[iSign],cmc2[imc]);
578 fHistDeltaPhiPhi[i][ipt][imult][iSign][imc]=new TH2F(histname,histtitle,fnBinPhi3,fdPhiMin,fdPhiMax,fnBinPhi3,fdPhiMin,fdPhiMax);
579 fHistDeltaPhiPhi[i][ipt][imult][iSign][imc]->Sumw2();
580 fHistDeltaPhiPhi[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}");
581 fHistDeltaPhiPhi[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}");
582 fOutput->Add(fHistDeltaPhiPhi[i][ipt][imult][iSign][imc]);
584 sprintf(histname,"fHistDeltaPhiPhiMix_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]);
585 sprintf(histtitle,"Mixed #Delta#phi-#Delta#phi %3.1f<p_{T}^{Trig}<%3.1f %3.2f<p_{T}^{Assoc}<%3.2f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fPtAssoc3Array1[ipt],fPtAssoc3Array2[ipt],fCentArrayMin[imult],fCentArrayMax[imult],sign32[iSign],cmc2[imc]);
586 fHistDeltaPhiPhiMix[i][ipt][imult][iSign][imc]=new TH2F(histname,histtitle,fnBinPhi3,fdPhiMin,fdPhiMax,fnBinPhi3,fdPhiMin,fdPhiMax);
587 fHistDeltaPhiPhiMix[i][ipt][imult][iSign][imc]->Sumw2();
588 fHistDeltaPhiPhiMix[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}");
589 fHistDeltaPhiPhiMix[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}");
590 fOutput->Add(fHistDeltaPhiPhiMix[i][ipt][imult][iSign][imc]);
592 sprintf(histname,"fHistDeltaPhiPhiSS_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]);
593 sprintf(histtitle,"Soft-Soft #Delta#phi-#Delta#phi %3.1f<p_{T}^{Trig}<%3.1f %3.2f<p_{T}^{Assoc}<%3.2f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fPtAssoc3Array1[ipt],fPtAssoc3Array2[ipt],fCentArrayMin[imult],fCentArrayMax[imult],sign32[iSign],cmc2[imc]);
594 fHistDeltaPhiPhiSS[i][ipt][imult][iSign][imc]=new TH2F(histname,histtitle,fnBinPhi3,fdPhiMin,fdPhiMax,fnBinPhi3,fdPhiMin,fdPhiMax);
595 fHistDeltaPhiPhiSS[i][ipt][imult][iSign][imc]->Sumw2();
596 fHistDeltaPhiPhiSS[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}");
597 fHistDeltaPhiPhiSS[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}");
598 fOutput->Add(fHistDeltaPhiPhiSS[i][ipt][imult][iSign][imc]);
600 sprintf(histname,"fHistDeltaEtaEta_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]);
601 sprintf(histtitle,"Raw #Delta#eta-#Delta#eta %3.1f<p_{T}^{Trig}<%3.1f %3.2f<p_{T}^{Assoc}<%3.2f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fPtAssoc3Array1[ipt],fPtAssoc3Array2[ipt],fCentArrayMin[imult],fCentArrayMax[imult],sign32[iSign],cmc2[imc]);
602 fHistDeltaEtaEta[i][ipt][imult][iSign][imc]=new TH2F(histname,histtitle,fnBinEta3,-EtaEdge,EtaEdge,fnBinEta3,-EtaEdge,EtaEdge);
603 fHistDeltaEtaEta[i][ipt][imult][iSign][imc]->Sumw2();
604 fHistDeltaEtaEta[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}");
605 fHistDeltaEtaEta[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}");
606 fOutput->Add(fHistDeltaEtaEta[i][ipt][imult][iSign][imc]);
608 sprintf(histname,"fHistDeltaEtaEtaMix_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]);
609 sprintf(histtitle,"Mixed #Delta#eta-#Delta#eta %3.1f<p_{T}^{Trig}<%3.1f %3.2f<p_{T}^{Assoc}<%3.2f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fPtAssoc3Array1[ipt],fPtAssoc3Array2[ipt],fCentArrayMin[imult],fCentArrayMax[imult],sign32[iSign],cmc2[imc]);
610 fHistDeltaEtaEtaMix[i][ipt][imult][iSign][imc]=new TH2F(histname,histtitle,fnBinEta3,-EtaEdge,EtaEdge,fnBinEta3,-EtaEdge,EtaEdge);
611 fHistDeltaEtaEtaMix[i][ipt][imult][iSign][imc]->Sumw2();
612 fHistDeltaEtaEtaMix[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}");
613 fHistDeltaEtaEtaMix[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}");
614 fOutput->Add(fHistDeltaEtaEtaMix[i][ipt][imult][iSign][imc]);
616 sprintf(histname,"fHistDeltaEtaEtaSS_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]);
617 sprintf(histtitle,"Soft-Soft #Delta#eta-#Delta#eta %3.1f<p_{T}^{Trig}<%3.1f %3.2f<p_{T}^{Assoc}<%3.2f %dMult%d%s%s",fPtTrigArray[i],fPtTrigArray[i+1],fPtAssoc3Array1[ipt],fPtAssoc3Array2[ipt],fCentArrayMin[imult],fCentArrayMax[imult],sign32[iSign],cmc2[imc]);
618 fHistDeltaEtaEtaSS[i][ipt][imult][iSign][imc]=new TH2F(histname,histtitle,fnBinEta3,-EtaEdge,EtaEdge,fnBinEta3,-EtaEdge,EtaEdge);
619 fHistDeltaEtaEtaSS[i][ipt][imult][iSign][imc]->Sumw2();
620 fHistDeltaEtaEtaSS[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}");
621 fHistDeltaEtaEtaSS[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}");
622 fOutput->Add(fHistDeltaEtaEtaSS[i][ipt][imult][iSign][imc]);
625 }//associated pt (ipt)
627 }//centrality loop (imult)
629 if(DEBUG)Printf("OutPut Created");
630 }//CreateOutputObjects
632 Int_t AliAnalysisTaskDiHadron::CheckVertex(AliESDEvent *rESD){
635 Vtx[0]=rESD->GetPrimaryVertex()->GetX();
636 Vtx[1]=rESD->GetPrimaryVertex()->GetY();
637 Vtx[2]=rESD->GetPrimaryVertex()->GetZ();
638 if((Vtx[0]*Vtx[0]+Vtx[1]*Vtx[1])<9) rGood=0; //vertex out of beam pipe
639 if(fabs(Vtx[2])<fVzCut)rGood=0;//Vertex Z cut
640 if(DEBUG)Printf("VtxZ %f",Vtx[2]);
641 for(int i=0;i<fNVertexBins;i++){
642 if(Vtx[2]>fVertexArray[i]&&Vtx[2]<=fVertexArray[i+1]&&rGood==0)rGood=i;
647 Int_t AliAnalysisTaskDiHadron::CheckTrigger(AliESDEvent *rESD){
649 TString trigID=rESD->GetFiredTriggerClasses();
650 for(int i=0;i<fNIDs;i++){
651 if(trigID.Contains(fTrigIDArray[i])) rGood=1;
656 Int_t AliAnalysisTaskDiHadron::TrackCuts(AliESDEvent *rESD, Float_t *rPt, Float_t *rEta, Float_t *rPhi, Short_t *rCharge, Float_t *rEff, Int_t **rPtAssoc3, Int_t *rNPtAssoc3, Int_t *rGoodTracks){
657 //fills arrays with all of the tracks passing cuts
661 Int_t rTrack=fESD->GetNumberOfTracks();
662 Float_t sPt, sEta, sPhi, sChi, sb[2], sbCov[3];
663 Int_t sNcls, sNclsF, sITScls;
665 for(int iTrack=0;iTrack<rTrack;iTrack++){
666 AliESDtrack *ESDtrack=rESD->GetTrack(iTrack);
667 const AliExternalTrackParam *ConTrack = ESDtrack->GetConstrainedParam();
668 if(!ConTrack)continue;
670 //if(DEBUG)Printf("Pt%f",rPt);
671 sEta=ConTrack->Eta();
672 sPhi=ConTrack->Phi();
673 sCharge=ConTrack->Charge();
674 if(sPhi<fdPhiMin)sPhi+=2*fPi;
675 if(sPhi>fdPhiMax)sPhi-=2*fPi;
676 if(sPt<fMinPtAssoc||sPt>fMaxPtAssoc)continue;//set Pt range
677 if(fabs(sEta)>fEtaCut)continue;//set Eta Range
678 if(!sCharge)continue;
679 sNcls=ESDtrack->GetTPCNcls();
680 //if(DEBUG)Printf("NCLS%d",sNcls);
681 if(sNcls<fMinClustersTPC)continue;
682 sNclsF=ESDtrack->GetTPCNclsF();
683 if((1.0*sNcls/sNclsF)<fMinClusterRatio)continue;//Clusters fit/ Possible
684 sChi=(ESDtrack->GetTPCchi2())/sNcls;
685 if(sChi>fMaxTPCchi2)continue;
686 sITScls=ESDtrack->GetNcls(0);
687 if(sITScls<fMinClustersITS)continue;
688 ESDtrack->GetImpactParameters(sb,sbCov);
689 if(!fDCA2D&&(sb[0]*sb[0]+sb[1]*sb[1])>(fMaxDCA*fMaxDCA))continue;//DCA cut
690 if(fDCA2D==1&&(sb[0]*sb[0]/fMaxDCAXY/fMaxDCAXY+sb[1]*sb[1]/fMaxDCAZ/fMaxDCAZ)>1)continue;
691 if(fDCA2D==2&&(0.35+0.42*std::pow(double(sPt),-0.9))<(sb[0]*sb[0]))continue;
692 if(ESDtrack->GetKinkIndex(0)>0)continue;//removes kinked tracks
693 if(!ESDtrack->GetStatus()&AliESDtrack::kTPCrefit&&fTPCRefit)continue;//refit in TPC
694 if((fITSRefit==1||(fITSRefit==2&&sPt>5))&&!ESDtrack->GetStatus()&AliESDtrack::kITSrefit)continue;//refit of its tracks either for none,all, or >5 GeV/c
695 if(fSPDCut&&!ESDtrack->HasPointOnITSLayer(0)&&!ESDtrack->HasPointOnITSLayer(1))continue;
696 rPt[rGoodTracks[0]]=sPt;
697 rEta[rGoodTracks[0]]=sEta;
698 rPhi[rGoodTracks[0]]=sPhi;
699 rCharge[rGoodTracks[0]]=sCharge;
701 if(sPt<fEffFitPt)rEff[rGoodTracks[0]]=1./fFitLow->Eval(sPt);
702 else rEff[rGoodTracks[0]]=1./fFitHigh->Eval(sPt);
704 else rEff[rGoodTracks[0]]=1;
705 if(sPt>LeadPt)Lead=rGoodTracks[0];
706 //rPtAssoc3[rGoodTracks[0]]=new Int_t [10];
707 rNPtAssoc3[rGoodTracks[0]]=0;
708 for(int apt3=0;apt3<fNAPt3Bins;apt3++){
709 if(sPt<fPtAssoc3Array2[apt3]&&sPt>=fPtAssoc3Array1[apt3]){
710 rPtAssoc3[rGoodTracks[0]][rNPtAssoc3[rGoodTracks[0]]]=apt3;
711 rNPtAssoc3[rGoodTracks[0]]++;
721 Int_t AliAnalysisTaskDiHadron::TrackCutsMC(AliMCEvent *rMC, Float_t *rPt, Float_t *rEta, Float_t *rPhi, Short_t *rCharge, Float_t *rEff, Int_t **rPtAssoc3, Int_t *rNPtAssoc3, Int_t *rGoodTracks){//Fills Arrays of MC particles
723 AliStack *rStack=rMC->Stack();
724 Int_t rTrack=rStack->GetNtrack();
725 Float_t sPt, sEta, sPhi;
729 for(int iTrack=0;iTrack<rTrack;iTrack++){
730 TParticle *rParticle=rStack->Particle(iTrack);
732 //if(DEBUG)Printf("MCPt%f",rPt);
733 sEta=rParticle->Eta();
734 sPhi=rParticle->Phi();
735 sCharge=rMC->GetTrack(iTrack)->Charge();
736 if(sPhi<fdPhiMin)sPhi+=2*fPi;
737 if(sPhi>fdPhiMax)sPhi-=2*fPi;
738 if(sPt<fMinPtAssoc||sPt>fMaxPtAssoc)continue;//set Pt range
739 if(fabs(sEta)>fEtaCut)continue;//set Eta Range
740 if(!rStack->IsPhysicalPrimary(iTrack))continue;//primary particles only
741 if(!sCharge)continue;//only charged particles kept
742 rPt[rGoodTracks[1]]=sPt;
743 rEta[rGoodTracks[1]]=sEta;
744 rPhi[rGoodTracks[1]]=sPhi;
745 rCharge[rGoodTracks[1]]=sCharge;
746 rEff[rGoodTracks[1]]=1;
747 if(sPt>LeadPt)Lead=rGoodTracks[1];
748 rNPtAssoc3[rGoodTracks[1]]=0;
749 for(int apt3=0;apt3<fNAPt3Bins;apt3++){
750 if(sPt<fPtAssoc3Array2[apt3]&&sPt>=fPtAssoc3Array1[apt3]){
751 rPtAssoc3[rGoodTracks[1]][rNPtAssoc3[rGoodTracks[1]]]=apt3;
752 rNPtAssoc3[rGoodTracks[1]]++;
759 //------------------------------------------------------------
760 void AliAnalysisTaskDiHadron::Exec(Option_t *)
762 if(DEBUG)Printf("Exec");
764 const int NTPtBins=fNTPtBins;
765 const int NCentBins=fNCentBins;
766 for(int ievent=0;ievent<=1;ievent++){
768 if(!fESD&&ievent==0){
769 if(DEBUG)Printf("Error: fESD not found");
775 if(ievent==1&&!fMCHistos)break;//break out if MC event and we don't have fill of those set
778 if(fESD->GetNumberOfTracks()<=0){
779 if(DEBUG)Printf("Error: no tracks");
783 //The previous check doesn't seem to work as a fMC is bad not NULL
785 if(fMC->GetNumberOfTracks()<=0){
786 if(DEBUG)Printf("<=0 MCTracks");
791 //Check for Trigger only on real data
793 if(!CheckTrigger(fESD)) break;
795 //I'll only cut on the reconstructed vertex since these are the events that will be used
797 VertexBin=CheckVertex(fESD);
798 //else VertexBin=CheckVertex(fMC);
799 if(VertexBin<0)break;
801 Int_t nGoodTracks[2]={0,0}, nTriggers[NTPtBins][NCentBins][2];
803 if(!ievent)nTrack=fESD->GetNumberOfTracks();
804 else nTrack=fMC->Stack()->GetNtrack();
806 Float_t tdPhi, tdEta, tXE;
807 Float_t tdPhi2, tdEta2;
808 tPhi=new Float_t [nTrack];
809 tEta=new Float_t [nTrack];
810 tPt=new Float_t [nTrack];
811 tCharge=new Short_t [nTrack];
812 tEff=new Float_t [nTrack];
813 tPtAssoc3=new Int_t *[nTrack];
814 for(int i=0;i<nTrack;i++){
815 tPtAssoc3[i]=new Int_t [10];
817 tNPtAssoc3=new Int_t [nTrack];
820 //will need to do something exta for the effieiency once it comes from embedding
821 for(int i=0;i<fNTPtBins;i++){
822 for(int c=0;c<fNCentBins;c++){
823 nTriggers[i][c][ievent]=0;
826 Int_t tMult=fESD->GetMultiplicity()->GetNumberOfTracklets();//I think this is the correct multiplicity to use
827 if(DEBUG)Printf("Mult%d",tMult);
829 //Decide what multiplicy bins are filled with this event, note set to max of 4 as I didn't think more then 2 overlapping bins likely at one time, easliy changed
830 Int_t MultArray[4]={0,0,0,0};
832 for(int imult=0;imult<fNCentBins;imult++){
833 if(tMult>=fCentArrayMin[imult]&&tMult<fCentArrayMax[imult]){
834 MultArray[MaxArray]=imult;
838 if(DEBUG)Printf("MaxArray%d",MaxArray);
839 //Set Efficiency for the centrality bin (lowest bin used in array if multiple overlap)
840 for(int ipar=0;ipar<fNFitLowParam;ipar++){
841 fFitLow->SetParameter(ipar,fFitLowParam[MultArray[0]*fNCentBins+ipar]);
843 for(int ipar=0;ipar<fNFitHighParam;ipar++){
844 fFitHigh->SetParameter(ipar,fFitHighParam[MultArray[0]*fNCentBins+ipar]);
846 fHistMult[ievent]->Fill(tMult);
847 for(int c=0;c<MaxArray;c++){fHistNEvents[MultArray[c]][ievent]->Fill(0);}//count the number of events used
850 //returns arrays filled up to nGoodTracks with tracks passing cuts
851 if(!ievent)LeadPart=TrackCuts(fESD,tPt,tEta,tPhi,tCharge,tEff,tPtAssoc3,tNPtAssoc3,nGoodTracks);
852 else LeadPart=TrackCutsMC(fMC,tPt,tEta,tPhi,tCharge,tEff,tPtAssoc3,tNPtAssoc3,nGoodTracks);
853 int NearEta=0,NearXE=0;
855 if(DEBUG)Printf("Track Loop");
856 for(int iTrack=0;iTrack<nGoodTracks[ievent];iTrack++){
857 if(DEBUG)Printf("Track%d Pt%f",iTrack,tPt[iTrack]);
858 //if(tPhi[iTrack]<fdPhiMin)tPhi[iTrack]+=2*fPi;
859 //if(tPhi[iTrack]>fdPhiMax)tPhi[iTrack]-=2*fPi;
860 for(int c=0;c<MaxArray;c++){
861 fHistPt[MultArray[c]][ievent]->Fill(tPt[iTrack],tEff[iTrack]);
862 fHistPtEff[MultArray[c]][ievent]->Fill(tPt[iTrack]);
863 fHistPhi[MultArray[c]][ievent]->Fill(tPhi[iTrack],tPt[iTrack],tEff[iTrack]);
864 fHistPhiPt[MultArray[c]][ievent]->Fill(tPhi[iTrack],tPt[iTrack],tPt[iTrack]*tEff[iTrack]);
865 fHistEta[MultArray[c]][ievent]->Fill(tEta[iTrack],tPt[iTrack],tEff[iTrack]);
866 fHistEtaPt[MultArray[c]][ievent]->Fill(tEta[iTrack],tPt[iTrack],tPt[iTrack]*tEff[iTrack]);
867 fHistPhiEta[MultArray[c]][ievent]->Fill(tPhi[iTrack],tEta[iTrack],tPt[iTrack],tEff[iTrack]);
868 fHistPhiEtaPt[MultArray[c]][ievent]->Fill(tPhi[iTrack],tEta[iTrack],tPt[iTrack],tPt[iTrack]*tEff[iTrack]);
870 for(int i=0;i<fNTPtBins;i++){
871 if(tPt[iTrack]>fPtTrigArray[i]&&tPt[iTrack]<fPtTrigArray[i+1]&&fabs(tEta[iTrack])<fTrigEtaCut){
872 if(DEBUG)Printf("In %fpt%f",fPtTrigArray[i],fPtTrigArray[i+1]);
873 fHistMultTrig[i][ievent]->Fill(tMult);
874 for(int c=0;c<MaxArray;c++){
875 nTriggers[i][MultArray[c]][ievent]++;
876 fHistNTrigger[MultArray[c]][ievent]->Fill(i);
877 fHistNTriggerPt[MultArray[c]][ievent]->Fill(i,tPt[iTrack]);
879 if(DEBUG)Printf("Assiciated Particle Loop");
880 for(int iTrack2=0;iTrack2<nGoodTracks[ievent];iTrack2++){
881 if(iTrack==iTrack2) continue;
882 if(tPt[iTrack2]>tPt[iTrack])continue;
883 tdPhi=tPhi[iTrack]-tPhi[iTrack2];
884 if(tdPhi<-fPi)tdPhi+=2*fPi;
885 if(tdPhi>fPi)tdPhi-=2*fPi;
886 if(fabs(tdPhi)<fNearPhiCut)NearEta=1;
888 if(fabs(tdPhi)<fXECut)NearXE=1;
890 if(fabs(tdPhi)<(fPi/2))tdEta=tEta[iTrack]-tEta[iTrack2];
891 else tdEta=tEta[iTrack]+tEta[iTrack2];
892 if(tdPhi<fdPhiMin)tdPhi+=2*fPi;
893 if(tdPhi>fdPhiMax)tdPhi-=2*fPi;
894 if((tCharge[iTrack]<0&&tCharge[iTrack2]<0)||(tCharge[iTrack]>0&&tCharge[iTrack2]>0))Sign=1;
896 if(DEBUG) Printf("dPhi %f dEta %f",tdPhi,tdEta);
897 for(int c=0;c<MaxArray;c++){//loop over multiplicity bins
898 fHistPtTrig[i][MultArray[c]][ievent]->Fill(tPt[iTrack2],tEff[iTrack2]);
899 fHistPhiTrig[i][MultArray[c]][ievent]->Fill(tPhi[iTrack2],tPt[iTrack2],tEff[iTrack2]);
900 fHistPhiTrigPt[i][MultArray[c]][ievent]->Fill(tPhi[iTrack2],tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
901 fHistEtaTrig[i][MultArray[c]][ievent]->Fill(tEta[iTrack2],tPt[iTrack2],tEff[iTrack2]);
902 fHistEtaTrigPt[i][MultArray[c]][ievent]->Fill(tEta[iTrack2],tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
904 fHistPhiEtaTrig[i][MultArray[c]][ievent]->Fill(tPhi[iTrack2],tEta[iTrack2],tPt[iTrack2],tEff[iTrack2]);
905 fHistPhiEtaTrigPt[i][MultArray[c]][ievent]->Fill(tPhi[iTrack2],tEta[iTrack2],tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
906 fHistDeltaPhi[i][MultArray[c]][0][ievent]->Fill(tdPhi,tPt[iTrack2],tEff[iTrack2]);
907 fHistDeltaPhiPt[i][MultArray[c]][0][ievent]->Fill(tdPhi,tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
908 fHistDeltaPhi[i][MultArray[c]][Sign][ievent]->Fill(tdPhi,tPt[iTrack2],tEff[iTrack2]);
909 fHistDeltaPhiPt[i][MultArray[c]][Sign][ievent]->Fill(tdPhi,tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
912 fHistDeltaEtaN[i][MultArray[c]][0][ievent]->Fill(tdEta,tPt[iTrack2],tEff[iTrack2]);
913 fHistDeltaEtaNPt[i][MultArray[c]][0][ievent]->Fill(tdEta,tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
914 fHistDeltaEtaN[i][MultArray[c]][Sign][ievent]->Fill(tdEta,tPt[iTrack2],tEff[iTrack2]);
915 fHistDeltaEtaNPt[i][MultArray[c]][Sign][ievent]->Fill(tdEta,tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
918 fHistDeltaEtaA[i][MultArray[c]][0][ievent]->Fill(tdEta,tPt[iTrack2],tEff[iTrack2]);
919 fHistDeltaEtaAPt[i][MultArray[c]][0][ievent]->Fill(tdEta,tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
920 fHistDeltaEtaA[i][MultArray[c]][Sign][ievent]->Fill(tdEta,tPt[iTrack2],tEff[iTrack2]);
921 fHistDeltaEtaAPt[i][MultArray[c]][Sign][ievent]->Fill(tdEta,tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
923 fHistDeltaPhiEta[i][MultArray[c]][ievent]->Fill(tdPhi,tdEta,tPt[iTrack2],tEff[iTrack2]);
924 fHistDeltaPhiEtaPt[i][MultArray[c]][ievent]->Fill(tdPhi,tdEta,tPt[iTrack2],tPt[iTrack2]*tEff[iTrack2]);
926 //only fill these if trigger particle is the leading particle
927 if(iTrack==LeadPart){
929 tXE=tPt[iTrack2]*cos(tdPhi)/tPt[iTrack];
930 fHistXEN[i][MultArray[c]][ievent]->Fill(tXE,tEff[iTrack2]);
933 tXE=tPt[iTrack2]*cos(tdPhi+fPi)/tPt[iTrack];
934 fHistXEA[i][MultArray[c]][ievent]->Fill(tXE,tEff[iTrack2]);
938 }//Centrality loop (c)
940 //3-particle Correlations
941 for(int iTrack3=0;iTrack3<nGoodTracks[ievent];iTrack3++){
942 if(iTrack2==iTrack3)continue;
943 if(tPt[iTrack3]>tPt[iTrack])continue;
944 tdPhi2=tPhi[iTrack]-tPhi[iTrack3];
945 if(tdPhi2<-fPi)tdPhi2+=2*fPi;
946 if(tdPhi2>fPi)tdPhi2-=2*fPi;
947 if(fabs(tdPhi2)<fNearPhiCut&&NearEta==1)NearEta2=1;
949 //if(fabs(tdPhi)<fXECut)NearXE=1;
951 if(fabs(tdPhi2)<(fPi/2))tdEta2=tEta[iTrack]-tEta[iTrack3];
952 else tdEta2=tEta[iTrack]+tEta[iTrack3];
953 if(tdPhi2<fdPhiMin)tdPhi2+=2*fPi;
954 if(tdPhi2>fdPhiMax)tdPhi2-=2*fPi;
955 // if((tCharge[iTrack]<0&&tCharge[iTrack2]<0)||(tCharge[iTrack]>0&&tCharge[iTrack2]>0))Sign=1;
956 if((tCharge[iTrack]<0&&tCharge[iTrack2]<0&&tCharge[iTrack3]<0)||(tCharge[iTrack]>0&&tCharge[iTrack2]>0&&tCharge[iTrack3]>0))Sign=1;
957 else if((tCharge[iTrack3]<0&&tCharge[iTrack2]<0)||(tCharge[iTrack3]>0&&tCharge[iTrack2]>0))Sign=2;
959 for(int e=0;e<tNPtAssoc3[iTrack2];e++){//check associated pT bin
960 for(int f=0;f<tNPtAssoc3[iTrack3];f++){
961 if(tPtAssoc3[iTrack2][e]==tPtAssoc3[iTrack3][f]){
962 for(int c=0;c<MaxArray;c++){//loop over multiplicity bins
963 fHistDeltaPhiPhi[i][tPtAssoc3[iTrack2][e]][MultArray[c]][0][ievent]->Fill(tdPhi,tdPhi2,tEff[iTrack2]*tEff[iTrack3]);
964 fHistDeltaPhiPhi[i][tPtAssoc3[iTrack2][e]][MultArray[c]][Sign][ievent]->Fill(tdPhi2,tdPhi,tEff[iTrack2]*tEff[iTrack3]);
968 fHistDeltaEtaEta[i][tPtAssoc3[iTrack2][e]][MultArray[c]][0][ievent]->Fill(tdEta,tdEta2,tEff[iTrack2]*tEff[iTrack3]);
969 fHistDeltaEtaEta[i][tPtAssoc3[iTrack2][e]][MultArray[c]][Sign][ievent]->Fill(tdEta,tdEta2,tEff[iTrack2]*tEff[iTrack3]);
971 }//multiplicity loop (c)
974 }//track checking loops
976 }//iTrack2 (associated track loop)
978 if(DEBUG)Printf("Mixed Event Loop");
979 for(int c=0;c<MaxArray;c++){
980 int d=MultArray[c];//Centrality bin we are in
981 if(fMixEnd[d][VertexBin][ievent]>=0){//check if there are any mixed events for this bin
982 for(int imix=0;imix<=fMixEnd[d][VertexBin][ievent];imix++){//loop over the stored mixed events
983 fHistNMix[d][ievent]->Fill(i);
984 for(int iTrack2=0;iTrack2<fMixTrack[imix][d][VertexBin][ievent];iTrack2++){
985 if(tPt[iTrack]<fMPt[imix][d][VertexBin][ievent][iTrack2])continue;
986 tdPhi=tPhi[iTrack]-fMPhi[imix][d][VertexBin][ievent][iTrack2];
987 if(tdPhi<-fPi)tdPhi+=2*fPi;
988 if(tdPhi>fPi)tdPhi-=2*fPi;
989 if(fabs(tdPhi)<fNearPhiCut)NearEta=1;
991 if(fabs(tdPhi)<fXECut)NearXE=1;
993 if(fabs(tdPhi)<(fPi/2))tdEta=tEta[iTrack]-fMEta[imix][d][VertexBin][ievent][iTrack2];
994 else tdEta=tEta[iTrack]+fMEta[imix][d][VertexBin][ievent][iTrack2];
995 if(tdPhi<fdPhiMin)tdPhi+=2*fPi;
996 if(tdPhi>fdPhiMax)tdPhi-=2*fPi;
997 if((tCharge[iTrack]<0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]<0)||(tCharge[iTrack]>0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]>0))Sign=1;
1000 fHistDeltaPhiMix[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][VertexBin][ievent][iTrack2],fMEff[imix][d][VertexBin][ievent][iTrack2]);
1001 fHistDeltaPhiMixPt[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][VertexBin][ievent][iTrack2],fMPt[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack2]);
1002 fHistDeltaPhiMix[i][d][Sign][ievent]->Fill(tdPhi,fMPt[imix][d][VertexBin][ievent][iTrack2],fMEff[imix][d][VertexBin][ievent][iTrack2]);
1003 fHistDeltaPhiMixPt[i][d][Sign][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMPt[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack2]);
1005 fHistDeltaEtaNMix[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMEff[imix][d][VertexBin][ievent][iTrack2]);
1006 fHistDeltaEtaNMixPt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMPt[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack2]);
1007 fHistDeltaEtaNMix[i][d][Sign][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMEff[imix][d][VertexBin][ievent][iTrack2]);
1008 fHistDeltaEtaNMixPt[i][d][Sign][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMPt[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack2]);
1011 fHistDeltaEtaAMix[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMEff[imix][d][VertexBin][ievent][iTrack2]);
1012 fHistDeltaEtaAMixPt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMPt[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack2]);
1013 fHistDeltaEtaAMix[i][d][Sign][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMEff[imix][d][VertexBin][ievent][iTrack2]);
1014 fHistDeltaEtaAMixPt[i][d][Sign][ievent]->Fill(tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMPt[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack2]);
1017 fHistDeltaPhiEtaMix[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMEff[imix][d][VertexBin][ievent][iTrack2]);
1018 fHistDeltaPhiEtaMixPt[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][VertexBin][ievent][iTrack2],fMPt[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack2]);
1020 if(iTrack==LeadPart){
1022 tXE=fMPt[imix][d][VertexBin][ievent][iTrack2]*cos(tdPhi)/tPt[iTrack];
1023 fHistXENMix[i][d][ievent]->Fill(tXE,fMEff[imix][d][VertexBin][ievent][iTrack2]);
1026 tXE=fMPt[imix][d][VertexBin][ievent][iTrack2]*cos(tdPhi+fPi)/tPt[iTrack];
1027 fHistXEAMix[i][MultArray[c]][ievent]->Fill(tXE,fMEff[imix][d][VertexBin][ievent][iTrack2]);
1030 //3-particle correlation soft-soft term (both associated from the same event)
1031 for(int iTrack3=0;iTrack3<fMixTrack[imix][d][VertexBin][ievent];iTrack3++){
1032 if(iTrack3==iTrack2)continue;
1033 if(tPt[iTrack]<fMPt[imix][d][VertexBin][ievent][iTrack3])continue;
1034 tdPhi2=tPhi[iTrack]-fMPhi[imix][d][VertexBin][ievent][iTrack3];
1035 if(tdPhi2<-fPi)tdPhi2+=2*fPi;
1036 if(tdPhi2>fPi)tdPhi2-=2*fPi;
1037 if(fabs(tdPhi2)<fNearPhiCut&&NearEta)NearEta2=1;
1039 if(fabs(tdPhi2)<(fPi/2))tdEta2=tEta[iTrack]-fMEta[imix][d][VertexBin][ievent][iTrack3];
1040 else tdEta2=tEta[iTrack]+fMEta[imix][d][VertexBin][ievent][iTrack3];
1041 if(tdPhi2<fdPhiMin)tdPhi2+=2*fPi;
1042 if(tdPhi2>fdPhiMax)tdPhi2-=2*fPi;
1043 //if((tCharge[iTrack]<0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]<0)||(tCharge[iTrack]>0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]>0))Sign=1;
1045 if((tCharge[iTrack]<0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]<0&&fMCharge[imix][d][VertexBin][ievent][iTrack3]<0)||(tCharge[iTrack]>0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]>0&&fMCharge[imix][d][VertexBin][ievent][iTrack3]>0))Sign=1;
1046 else if((fMCharge[imix][d][VertexBin][ievent][iTrack3]<0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]<0)||(fMCharge[imix][d][VertexBin][ievent][iTrack3]>0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]>0))Sign=2;
1048 for(int e=0;e<fMNPtAssoc3[imix][d][VertexBin][ievent][iTrack2];e++){//check associated pT bin
1049 for(int f=0;f<fMNPtAssoc3[imix][d][VertexBin][ievent][iTrack3];f++){
1050 if(fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]==fMPtAssoc3[imix][d][VertexBin][ievent][f][iTrack3]){
1051 fHistDeltaPhiPhiSS[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack3]);
1052 fHistDeltaPhiPhiSS[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][Sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack3]);
1055 fHistDeltaEtaEtaSS[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack3]);
1056 fHistDeltaEtaEtaSS[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][Sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix][d][VertexBin][ievent][iTrack3]);
1060 }//associated pt bin
1063 //3-particle mixed event (associated from different events)
1064 //for(int imix2=0;imix2<=fMixEnd[d][VertexBin][ievent];imix2++){//loop over the stored mixed events
1065 //if(imix2==imix)continue;
1067 if(imix2>=fMixEnd[d][VertexBin][ievent])imix2=0;
1068 if(imix2==imix)continue;//will kill it when there is only 1 mixed event (remember to scale by 1 less then the number of mixed events in others (number of mixed-mixed is 2*(mixed-1)))
1069 for(int iTrack3=0;iTrack3<fMixTrack[imix2][d][VertexBin][ievent];iTrack3++){
1070 if(tPt[iTrack]<fMPt[imix2][d][VertexBin][ievent][iTrack3])continue;
1071 tdPhi2=tPhi[iTrack]-fMPhi[imix2][d][VertexBin][ievent][iTrack3];
1072 if(tdPhi2<-fPi)tdPhi2+=2*fPi;
1073 if(tdPhi2>fPi)tdPhi2-=2*fPi;
1074 if(fabs(tdPhi2)<fNearPhiCut&&NearEta)NearEta2=1;
1076 if(fabs(tdPhi2)<(fPi/2))tdEta2=tEta[iTrack]-fMEta[imix2][d][VertexBin][ievent][iTrack3];
1077 else tdEta2=tEta[iTrack]+fMEta[imix2][d][VertexBin][ievent][iTrack3];
1078 if(tdPhi2<fdPhiMin)tdPhi2+=2*fPi;
1079 if(tdPhi2>fdPhiMax)tdPhi2-=2*fPi;
1080 //if((tCharge[iTrack]<0&&fMCharge[imix2][d][VertexBin][ievent][iTrack2]<0)||(tCharge[iTrack]>0&&fMCharge[imix2][d][VertexBin][ievent][iTrack2]>0))Sign=1;
1082 if((tCharge[iTrack]<0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]<0&&fMCharge[imix2][d][VertexBin][ievent][iTrack3]<0)||(tCharge[iTrack]>0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]>0&&fMCharge[imix2][d][VertexBin][ievent][iTrack3]>0))Sign=1;
1083 else if((fMCharge[imix2][d][VertexBin][ievent][iTrack3]<0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]<0)||(fMCharge[imix2][d][VertexBin][ievent][iTrack3]>0&&fMCharge[imix][d][VertexBin][ievent][iTrack2]>0))Sign=2;
1085 for(int e=0;e<fMNPtAssoc3[imix][d][VertexBin][ievent][iTrack2];e++){//check associated pT bin
1086 for(int f=0;f<fMNPtAssoc3[imix2][d][VertexBin][ievent][iTrack3];f++){
1087 if(fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]==fMPtAssoc3[imix2][d][VertexBin][ievent][f][iTrack3]){
1088 fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix2][d][VertexBin][ievent][iTrack3]);
1089 fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][Sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix2][d][VertexBin][ievent][iTrack3]);
1090 fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix2][d][VertexBin][ievent][iTrack3]);//free factor of 2 in statistics
1091 fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][Sign][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix2][d][VertexBin][ievent][iTrack3]);
1093 fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix2][d][VertexBin][ievent][iTrack3]);
1094 fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][Sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix2][d][VertexBin][ievent][iTrack3]);
1095 fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix2][d][VertexBin][ievent][iTrack3]);
1096 fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][VertexBin][ievent][e][iTrack2]][d][Sign][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][VertexBin][ievent][iTrack2]*fMEff[imix2][d][VertexBin][ievent][iTrack3]);
1100 }//associated pt bin
1106 }//Centrality bins (c)
1111 //now store this event for mixing (using these dynamic arrays instead of the other fix to save memory)
1112 if(DEBUG)Printf("Store Event For Mixing");
1113 for(int c=0;c<MaxArray;c++){//loops over centrality bins
1114 int d=MultArray[c];//too many nested arrays looked confusing d=which centrality bin
1115 if(fMixEnd[d][VertexBin][ievent]<(fNMix-1))fMixEnd[d][VertexBin][ievent]++;
1116 if(fMixPointer[d][VertexBin][ievent]<(fNMix-1))fMixPointer[d][VertexBin][ievent]++;
1117 else fMixPointer[d][VertexBin][ievent]=0;
1118 int e=fMixPointer[d][VertexBin][ievent];//nested arrays (e is event number in pool)
1119 delete [] fMPt[e][d][VertexBin][ievent];
1120 delete [] fMPhi[e][d][VertexBin][ievent];
1121 delete [] fMEta[e][d][VertexBin][ievent];
1122 delete [] fMCharge[e][d][VertexBin][ievent];
1123 delete [] fMEff[e][d][VertexBin][ievent];
1124 delete [] fMNPtAssoc3[e][d][VertexBin][ievent];
1125 for(int jj=0;jj<10;jj++){
1126 delete [] fMPtAssoc3[e][d][VertexBin][ievent][jj];
1128 fMPt[e][d][VertexBin][ievent]=new Float_t [nGoodTracks[ievent]];
1129 fMPhi[e][d][VertexBin][ievent]=new Float_t [nGoodTracks[ievent]];
1130 fMEta[e][d][VertexBin][ievent]=new Float_t [nGoodTracks[ievent]];
1131 fMCharge[e][d][VertexBin][ievent]=new Short_t [nGoodTracks[ievent]];
1132 fMEff[e][d][VertexBin][ievent]=new Float_t [nGoodTracks[ievent]];
1133 fMixTrack[e][d][VertexBin][ievent]=nGoodTracks[ievent];
1134 fMNPtAssoc3[e][d][VertexBin][ievent]=new Short_t [nGoodTracks[ievent]];
1135 for(int jj=0;jj<10;jj++){
1136 fMPtAssoc3[e][d][VertexBin][ievent][jj]=new Short_t [nGoodTracks[ievent]];
1139 for(int iTrack=0;iTrack<nGoodTracks[ievent];iTrack++){
1140 fMPt[e][d][VertexBin][ievent][iTrack]=tPt[iTrack];
1141 fMPhi[e][d][VertexBin][ievent][iTrack]=tPhi[iTrack];
1142 fMEta[e][d][VertexBin][ievent][iTrack]=tEta[iTrack];
1143 fMCharge[e][d][VertexBin][ievent][iTrack]=tCharge[iTrack];
1144 fMEff[e][d][VertexBin][ievent][iTrack]=tEff[iTrack];
1145 fMNPtAssoc3[e][d][VertexBin][ievent][iTrack]=tNPtAssoc3[iTrack];
1146 // fMPtAssoc3[e][d][VertexBin][ievent][iTrack]=new Int_t [tNPtAssoc3[iTrack]];
1147 for(int jj=0;jj<tNPtAssoc3[iTrack];jj++){
1148 //if(DEBUG) Printf("%d",tPtAssoc3[iTrack][jj]);
1149 fMPtAssoc3[e][d][VertexBin][ievent][jj][iTrack]=tPtAssoc3[iTrack][jj];
1158 PostData(0, fOutput);
1159 //get rid of these arrays from memory
1165 delete [] tNPtAssoc3;
1166 delete [] tPtAssoc3;
1177 //---------------------------------------------------
1178 void AliAnalysisTaskDiHadron::Terminate(Option_t *){
1179 for(int ii=0;ii<fNMix;ii++){
1180 for(int cc=0;cc<fNCentBins;cc++){
1181 for(int vtx=0;vtx<fNVertexBins;vtx++){
1182 for(int jj=0;jj<2;jj++){
1183 delete [] fMPt[ii][cc][vtx][jj];
1184 delete [] fMPhi[ii][cc][vtx][jj];
1185 delete [] fMEta[ii][cc][vtx][jj];
1186 delete [] fMCharge[ii][cc][vtx][jj];
1187 delete [] fMEff[ii][cc][vtx][jj];
1188 delete [] fMNPtAssoc3[ii][cc][vtx][jj];
1189 for(int qq=0;qq<10;qq++){
1190 delete [] fMPtAssoc3[ii][cc][vtx][jj][qq];
1191 fMPtAssoc3[ii][cc][vtx][jj][qq]=NULL;
1193 fMPt[ii][cc][vtx][jj]=NULL;
1194 fMPhi[ii][cc][vtx][jj]=NULL;
1195 fMEta[ii][cc][vtx][jj]=NULL;
1196 fMCharge[ii][cc][vtx][jj]=NULL;
1197 fMEff[ii][cc][vtx][jj]=NULL;
1198 fMNPtAssoc3[ii][cc][vtx][jj]=NULL;
1204 Printf("Terminate AliAnalysisTaskDiHadron");