]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Tasks/AliAnalysisTaskMultiparticleCorrelations.cxx
65f252be4e13113ba5119933ca4f9e9f67dbf5cc
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / AliAnalysisTaskMultiparticleCorrelations.cxx
1 /*************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  * 
14 **************************************************************************/
15
16 /****************************************
17  * analysis task for flow analysis with *
18  *     multi-particle correlations      * 
19  *                                      * 
20  * author: Ante Bilandzic               *
21  *         (abilandzic@gmail.com)       * 
22  ***************************************/
23   
24 #include "Riostream.h"
25 #include "AliFlowEventSimple.h"
26 #include "AliAnalysisTaskMultiparticleCorrelations.h"
27 #include "AliFlowAnalysisWithMultiparticleCorrelations.h"
28 #include "AliLog.h"
29
30 using std::cout;
31 using std::endl;
32
33 ClassImp(AliAnalysisTaskMultiparticleCorrelations)
34
35 //================================================================================================================
36
37 AliAnalysisTaskMultiparticleCorrelations::AliAnalysisTaskMultiparticleCorrelations(const char *name, Bool_t useParticleWeights): 
38  AliAnalysisTaskSE(name), 
39  fEvent(NULL),
40  fMPC(NULL), 
41  fHistList(NULL),
42  fUseInternalFlags(kFALSE),
43  fMinNoRPs(-44),
44  fMaxNoRPs(-44),
45  fExactNoRPs(-44),
46  fAnalysisTag(""),
47  fDumpThePoints(kFALSE),
48  fMaxNoEventsPerFile(100),
49  fFillControlHistograms(kFALSE),
50  fFillKinematicsHist(kFALSE),
51  fFillMultDistributionsHist(kFALSE),
52  fFillMultCorrelationsHist(kFALSE),
53  fCalculateQvector(kFALSE),
54  fCalculateDiffQvectors(kFALSE),
55  fCalculateCorrelations(kFALSE),
56  fCalculateIsotropic(kFALSE),
57  fCalculateSame(kFALSE),
58  fSkipZeroHarmonics(kFALSE),
59  fCalculateSameIsotropic(kFALSE),
60  fCalculateAll(kFALSE),
61  fDontGoBeyond(0),
62  fCalculateOnlyForHarmonicQC(kFALSE),
63  fCalculateOnlyForSC(kFALSE),
64  fCalculateOnlyCos(kFALSE),
65  fCalculateOnlySin(kFALSE),
66  fCalculateEbECumulants(kFALSE),
67  fCrossCheckWithNestedLoops(kFALSE),
68  fCrossCheckDiffWithNestedLoops(kFALSE),
69  fCalculateStandardCandles(kFALSE),
70  fPropagateErrorSC(kTRUE),
71  fCalculateQcumulants(kFALSE),
72  fHarmonicQC(2),
73  fPropagateErrorQC(kTRUE),
74  fCalculateDiffCorrelations(kFALSE),
75  fCalculateDiffCos(kTRUE),
76  fCalculateDiffSin(kFALSE),
77  fCalculateDiffCorrelationsVsPt(kTRUE),
78  fUseDefaultBinning(kTRUE),
79  fnDiffBins(-44),
80  fRangesDiffBins(NULL)
81  {
82   // Constructor.
83  
84   AliDebug(2,"AliAnalysisTaskMultiparticleCorrelations::AliAnalysisTaskMultiparticleCorrelations(const char *name, Bool_t useParticleWeights)");
85
86   // Define input and output slots here
87   // Input slot #0 works with an AliFlowEventSimple
88   DefineInput(0, AliFlowEventSimple::Class());  
89   // Input slot #1 is needed for the weights input file:
90   if(useParticleWeights)
91   {
92    DefineInput(1, TList::Class());   
93   }  
94   // Output slot #0 is reserved              
95   // Output slot #1 writes into a TList container
96   DefineOutput(1, TList::Class());  
97
98   // Initialize all arrays:
99   for(Int_t rp=0;rp<2;rp++) // [RP,POI]
100   {
101    for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
102    {
103     fUseWeights[rp][ppe] = kFALSE;
104     fWeightsHist[rp][ppe] = NULL; 
105    }
106   }
107   // For nested loops arrays:
108   fCrossCheckDiffCSCOBN[0] = 0; // cos/sin
109   fCrossCheckDiffCSCOBN[1] = 2; // correlator order
110   fCrossCheckDiffCSCOBN[2] = 4; // bin number 
111   // Initialize default binning values for fKinematicsHist[2][3]:
112   // nBins:
113   fnBins[0][0] = 360;  // [RP][phi]
114   fnBins[0][1] = 1000; // [RP][pt]
115   fnBins[0][2] = 1000; // [RP][eta]
116   fnBins[1][0] = 360;  // [POI][phi]
117   fnBins[1][1] = 1000; // [POI][pt]
118   fnBins[1][2] = 1000; // [POI][eta]
119   // Min:
120   fMin[0][0] = 0.;  // [RP][phi]
121   fMin[0][1] = 0.;  // [RP][pt]
122   fMin[0][2] = -1.; // [RP][eta]
123   fMin[1][0] = 0.;  // [POI][phi]
124   fMin[1][1] = 0.;  // [POI][pt]
125   fMin[1][2] = -1.; // [POI][eta]
126   // Max:
127   fMax[0][0] = TMath::TwoPi(); // [RP][phi]
128   fMax[0][1] = 10.;            // [RP][pt]
129   fMax[0][2] = 1.;             // [RP][eta]
130   fMax[1][0] = TMath::TwoPi(); // [POI][phi]
131   fMax[1][1] = 10.;            // [POI][pt]
132   fMax[1][2] = 1.;             // [POI][eta]
133   // Initialize default binning values for fMultCorrelationsHist[3]:
134   // nBins:
135   fnBinsMult[0] = 3000; // [RP]
136   fnBinsMult[1] = 3000; // [POI]
137   fnBinsMult[2] = 3000; // [REF]
138   // Min:
139   fMinMult[0] = 0.; // [RP]
140   fMinMult[1] = 0.; // [POI]
141   fMinMult[2] = 0.; // [REF]
142   // Max:
143   fMaxMult[0] = 3000.; // [RP]
144   fMaxMult[1] = 3000.; // [POI]
145   fMaxMult[2] = 3000.; // [REF]
146
147 } // AliAnalysisTaskMultiparticleCorrelations::AliAnalysisTaskMultiparticleCorrelations(const char *name, Bool_t useParticleWeights): 
148
149 //================================================================================================================
150
151 AliAnalysisTaskMultiparticleCorrelations::AliAnalysisTaskMultiparticleCorrelations(): 
152  AliAnalysisTaskSE(),
153  fEvent(NULL),
154  fMPC(NULL),
155  fHistList(NULL),
156  fUseInternalFlags(kFALSE),
157  fMinNoRPs(-44),
158  fMaxNoRPs(-44),
159  fExactNoRPs(-44),
160  fAnalysisTag(""),
161  fDumpThePoints(kFALSE),
162  fMaxNoEventsPerFile(0),
163  fFillControlHistograms(kFALSE),
164  fFillKinematicsHist(kFALSE),
165  fFillMultDistributionsHist(kFALSE),
166  fFillMultCorrelationsHist(kFALSE),
167  fCalculateQvector(kFALSE),
168  fCalculateDiffQvectors(kFALSE),
169  fCalculateCorrelations(kFALSE),
170  fCalculateIsotropic(kFALSE),
171  fCalculateSame(kFALSE),
172  fSkipZeroHarmonics(kFALSE),
173  fCalculateSameIsotropic(kFALSE),
174  fCalculateAll(kFALSE),
175  fDontGoBeyond(0),
176  fCalculateOnlyForHarmonicQC(kFALSE),
177  fCalculateOnlyForSC(kFALSE),
178  fCalculateOnlyCos(kFALSE),
179  fCalculateOnlySin(kFALSE),
180  fCalculateEbECumulants(kFALSE),
181  fCrossCheckWithNestedLoops(kFALSE),
182  fCrossCheckDiffWithNestedLoops(kFALSE),
183  fCalculateStandardCandles(kFALSE),
184  fPropagateErrorSC(kFALSE),
185  fCalculateQcumulants(kFALSE),
186  fHarmonicQC(0),
187  fPropagateErrorQC(kFALSE),
188  fCalculateDiffCorrelations(kFALSE),
189  fCalculateDiffCos(kTRUE),
190  fCalculateDiffSin(kFALSE),
191  fCalculateDiffCorrelationsVsPt(kTRUE),
192  fUseDefaultBinning(kTRUE),
193  fnDiffBins(-44),
194  fRangesDiffBins(NULL)
195  {
196   // Dummy constructor.
197  
198   AliDebug(2,"AliAnalysisTaskMultiparticleCorrelations::AliAnalysisTaskMultiparticleCorrelations()");
199
200   // Initialize all arrays:
201   for(Int_t rp=0;rp<2;rp++) // [RP,POI]
202   {
203    for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
204    {
205     fUseWeights[rp][ppe] = kFALSE;
206     fWeightsHist[rp][ppe] = NULL; 
207    }
208   }
209   // For nested loops arrays:
210   fCrossCheckDiffCSCOBN[0] = 0; // cos/sin
211   fCrossCheckDiffCSCOBN[1] = 2; // correlator order
212   fCrossCheckDiffCSCOBN[2] = 4; // bin number 
213   // Initialize default binning values for fKinematicsHist[2][3]:
214   // nBins:
215   fnBins[0][0] = 360;  // [RP][phi]
216   fnBins[0][1] = 1000; // [RP][pt]
217   fnBins[0][2] = 1000; // [RP][eta]
218   fnBins[1][0] = 360;  // [POI][phi]
219   fnBins[1][1] = 1000; // [POI][pt]
220   fnBins[1][2] = 1000; // [POI][eta]
221   // Min:
222   fMin[0][0] = 0.;  // [RP][phi]
223   fMin[0][1] = 0.;  // [RP][pt]
224   fMin[0][2] = -1.; // [RP][eta]
225   fMin[1][0] = 0.;  // [POI][phi]
226   fMin[1][1] = 0.;  // [POI][pt]
227   fMin[1][2] = -1.; // [POI][eta]
228   // Max:
229   fMax[0][0] = TMath::TwoPi(); // [RP][phi]
230   fMax[0][1] = 10.;            // [RP][pt]
231   fMax[0][2] = 1.;             // [RP][eta]
232   fMax[1][0] = TMath::TwoPi(); // [POI][phi]
233   fMax[1][1] = 10.;            // [POI][pt]
234   fMax[1][2] = 1.;             // [POI][eta]
235   // Initialize default binning values for fMultCorrelationsHist[3]:
236   // nBins:
237   fnBinsMult[0] = 3000; // [RP]
238   fnBinsMult[1] = 3000; // [POI]
239   fnBinsMult[2] = 3000; // [REF]
240   // Min:
241   fMinMult[0] = 0.; // [RP]
242   fMinMult[1] = 0.; // [POI]
243   fMinMult[2] = 0.; // [REF]
244   // Max:
245   fMaxMult[0] = 3000.; // [RP]
246   fMaxMult[1] = 3000.; // [POI]
247   fMaxMult[2] = 3000.; // [REF]
248
249 } // AliAnalysisTaskMultiparticleCorrelations::AliAnalysisTaskMultiparticleCorrelations():
250
251 //================================================================================================================
252
253 void AliAnalysisTaskMultiparticleCorrelations::UserCreateOutputObjects() 
254 {
255  // Called at every worker node to initialize.
256   
257  AliDebug(2,"AliAnalysisTaskMultiparticleCorrelations::UserCreateOutputObjects()");
258  TString sMethodName = "void AliAnalysisTaskMultiparticleCorrelations::UserCreateOutputObjects()";
259
260  // Analyser:
261  fMPC = new AliFlowAnalysisWithMultiparticleCorrelations();
262  
263  // Setters:
264  if(fUseInternalFlags){fMPC->SetMinNoRPs(fMinNoRPs);}
265  if(fUseInternalFlags){fMPC->SetMaxNoRPs(fMaxNoRPs);}
266  if(fUseInternalFlags){fMPC->SetExactNoRPs(fExactNoRPs);}
267  fMPC->SetAnalysisTag(fAnalysisTag.Data());
268  fMPC->SetDumpThePoints(fDumpThePoints,fMaxNoEventsPerFile);
269  fMPC->SetFillControlHistograms(fFillControlHistograms);
270  fMPC->SetFillKinematicsHist(fFillKinematicsHist);
271  fMPC->SetFillMultDistributionsHist(fFillMultDistributionsHist);
272  fMPC->SetFillMultCorrelationsHist(fFillMultCorrelationsHist);
273  fMPC->SetCalculateQvector(fCalculateQvector);
274  fMPC->SetCalculateDiffQvectors(fCalculateDiffQvectors);
275  fMPC->SetCalculateCorrelations(fCalculateCorrelations);
276  fMPC->SetCalculateIsotropic(fCalculateIsotropic);
277  fMPC->SetCalculateSame(fCalculateSame);
278  fMPC->SetSkipZeroHarmonics(fSkipZeroHarmonics);
279  fMPC->SetCalculateSameIsotropic(fCalculateSameIsotropic);
280  fMPC->SetCalculateAll(fCalculateAll);
281  fMPC->SetDontGoBeyond(fDontGoBeyond);
282  fMPC->SetCalculateOnlyForHarmonicQC(fCalculateOnlyForHarmonicQC);
283  fMPC->SetCalculateOnlyForSC(fCalculateOnlyForSC);
284  fMPC->SetCalculateOnlyCos(fCalculateOnlyCos);
285  fMPC->SetCalculateOnlySin(fCalculateOnlySin);
286  fMPC->SetCalculateEbECumulants(fCalculateEbECumulants);
287  fMPC->SetCrossCheckWithNestedLoops(fCrossCheckWithNestedLoops);
288  fMPC->SetCrossCheckDiffWithNestedLoops(fCrossCheckDiffWithNestedLoops);
289  fMPC->SetCrossCheckDiffCSCOBN(fCrossCheckDiffCSCOBN[0],fCrossCheckDiffCSCOBN[1],fCrossCheckDiffCSCOBN[2]);  
290  fMPC->SetCalculateStandardCandles(fCalculateStandardCandles);
291  fMPC->SetPropagateErrorSC(fPropagateErrorSC);
292  fMPC->SetCalculateQcumulants(fCalculateQcumulants);
293  fMPC->SetHarmonicQC(fHarmonicQC);
294  fMPC->SetPropagateErrorQC(fPropagateErrorQC);
295  fMPC->SetCalculateDiffCorrelations(fCalculateDiffCorrelations);
296  fMPC->SetCalculateDiffCos(fCalculateDiffCos);
297  fMPC->SetCalculateDiffSin(fCalculateDiffSin);
298  fMPC->SetCalculateDiffCorrelationsVsPt(fCalculateDiffCorrelationsVsPt);
299  fMPC->SetUseDefaultBinning(fUseDefaultBinning);
300  fMPC->SetnDiffBins(fnDiffBins);
301  fMPC->SetRangesDiffBins(fRangesDiffBins);
302
303  // Weights:
304  TString type[2] = {"RP","POI"};
305  TString variable[3] = {"phi","pt","eta"}; 
306  for(Int_t rp=0;rp<2;rp++) // [RP,POI]
307  {
308   for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
309   {
310    if(fUseWeights[rp][ppe])
311    {
312     if(!fWeightsHist[rp][ppe])
313     {
314      fWeightsHist[rp][ppe] = GetHistogramWithWeights(TString(Form("%s/%s",gSystem->pwd(),"weights.root")).Data(),TString(this->fName).Data(),type[rp].Data(),variable[ppe].Data());
315     }
316     if(!fWeightsHist[rp][ppe])
317     {
318      Fatal(sMethodName.Data(),"fWeightsHist[%d][%d]",rp,ppe);
319     } else{fMPC->SetWeightsHist(fWeightsHist[rp][ppe],type[rp].Data(),variable[ppe].Data());}
320    } // if(fUseWeights[rp][ppe])
321   } // for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
322  } // for(Int_t rp=0;rp<2;rp++) // [RP,POI]
323
324  // Control histos:
325  // Kinematics:
326  //TString typeKine[2] = {"RP","POI"};
327  //TString variable[3] = {"phi","pt","eta"};
328  for(Int_t rp=0;rp<2;rp++) // [RP,POI]
329  {
330   for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
331   {
332    fMPC->SetnBins(type[rp].Data(),variable[ppe].Data(),fnBins[rp][ppe]);
333    fMPC->SetMin(type[rp].Data(),variable[ppe].Data(),fMin[rp][ppe]);
334    fMPC->SetMax(type[rp].Data(),variable[ppe].Data(),fMax[rp][ppe]);
335   } // for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
336  } // for(Int_t rp=0;rp<2;rp++) // [RP,POI]
337  // Multiplicites:
338  TString typeMult[3] = {"RP","POI","REF"};
339  for(Int_t rpr=0;rpr<3;rpr++) // [RP,POI,REF]
340  {  
341   fMPC->SetnBinsMult(typeMult[rpr].Data(),fnBinsMult[rpr]);
342   fMPC->SetMinMult(typeMult[rpr].Data(),fMinMult[rpr]);
343   fMPC->SetMaxMult(typeMult[rpr].Data(),fMaxMult[rpr]);
344  } // for(Int_t rpr=0;rpr<3;rpr++) // [RP,POI,REF]
345
346  // Initialize:
347  fMPC->Init();
348  if(fMPC->GetHistList()) 
349  {
350   fHistList = fMPC->GetHistList();
351   // fHistList->Print();
352  } else 
353    {
354     Printf("ERROR: Could not retrieve histogram list (MPC, Task::UserCreateOutputObjects()) !!!!"); 
355    }
356  
357  PostData(1,fHistList);
358   
359 } // void AliAnalysisTaskMultiparticleCorrelations::UserCreateOutputObjects() 
360
361 //================================================================================================================
362
363 void AliAnalysisTaskMultiparticleCorrelations::UserExec(Option_t *) 
364 {
365  // Main loop (called for each event).
366
367  fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));
368
369  // It's time for multi-particle correlations:
370  if(fEvent) 
371  {
372   fMPC->Make(fEvent);
373  } else 
374    {
375     cout<<" WARNING: No input data (MPC, Task::UserExec()) !!!!"<<endl;
376     cout<<endl;
377    }
378   
379  PostData(1,fHistList);
380
381 } // void AliAnalysisTaskMultiparticleCorrelations::UserExec(Option_t *) 
382
383 //================================================================================================================
384
385 void AliAnalysisTaskMultiparticleCorrelations::Terminate(Option_t *) 
386 {
387  // Accessing the merged output list. 
388
389  fHistList = (TList*)GetOutputData(1);
390  
391  fMPC = new AliFlowAnalysisWithMultiparticleCorrelations(); 
392  
393  if(fHistList) 
394  {
395   fMPC->GetOutputHistograms(fHistList);
396   fMPC->Finish();
397   PostData(1,fHistList);
398  } else
399    {
400     cout<<" WARNING: fHistList is NULL (MPC, Task::Terminate()) !!!!"<<endl;
401     cout<<endl;
402    }
403     
404 } // end of void AliAnalysisTaskMultiparticleCorrelations::Terminate(Option_t *)
405
406 //================================================================================================================
407
408 void AliAnalysisTaskMultiparticleCorrelations::SetWeightsHist(TH1D* const hist, const char *type, const char *variable)
409 {
410  // Pass histogram holding weights from an external file to the corresponding data member. 
411  
412  TString sMethodName = "void AliAnalysisTaskMultiparticleCorrelations::SetWeightsHist(TH1D* const hist, const char *type, const char *variable)";
413  
414  // Basic protection:
415  if(!hist){Fatal(sMethodName.Data(),"hist");}
416  if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI"))){Fatal(sMethodName.Data(),"!(TString(type).EqualTo... type = %s ",type);}
417  if(!(TString(variable).EqualTo("phi") || TString(variable).EqualTo("pt") || TString(variable).EqualTo("eta"))){Fatal(sMethodName.Data(),"!(TString(variable).EqualTo... variable = %s ",variable);}
418
419  Int_t rp = 0; // [RP,POI]
420  if(TString(type).EqualTo("POI")){rp=1;} 
421
422  Int_t ppe = 0; // [phi,pt,eta]
423  if(TString(variable).EqualTo("pt")){ppe=1;} 
424  if(TString(variable).EqualTo("eta")){ppe=2;} 
425
426  // Finally:
427  hist->SetDirectory(0);
428  fWeightsHist[rp][ppe] = (TH1D*)hist->Clone();
429  if(!fWeightsHist[rp][ppe]){Fatal(sMethodName.Data(),"fWeightsHist[%d][%d]",rp,ppe);}
430
431  fUseWeights[rp][ppe] = kTRUE; 
432
433 } // void AliAnalysisTaskMultiparticleCorrelations::SetWeightsHist(TH1D* const hwh, const char *type, const char *variable)
434
435 //================================================================================================================
436
437 void AliAnalysisTaskMultiparticleCorrelations::SetnBins(const char *type, const char *variable, const Int_t nBins)
438 {
439  // Set number of bins for histograms fKinematicsHist[2][3].
440
441  TString sMethodName = "void AliAnalysisTaskMultiparticleCorrelations::SetnBins(const char *type, const char *variable, const Int_t nBins)";
442  
443  // Basic protection:
444  if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI")))
445  {
446   cout<<"Well, it would be better for you to use RP or POI here..."<<endl;
447   Fatal(sMethodName.Data(),"!(TString(type).EqualTo... type = %s ",type);
448  }
449  if(!(TString(variable).EqualTo("phi") || TString(variable).EqualTo("pt") || TString(variable).EqualTo("eta")))
450  {
451   cout<<"phi, pt or eta, please!"<<endl;
452   Fatal(sMethodName.Data(),"!(TString(variable).EqualTo... variable = %s ",variable);
453  }
454
455  Int_t rp = 0; // [RP,POI]
456  if(TString(type).EqualTo("POI")){rp=1;} 
457
458  Int_t ppe = 0; // [phi,pt,eta]
459  if(TString(variable).EqualTo("pt")){ppe=1;} 
460  if(TString(variable).EqualTo("eta")){ppe=2;} 
461
462  fnBins[rp][ppe] = nBins;
463
464 } // void AliAnalysisTaskMultiparticleCorrelations::SetnBins(const char *type, const char *variable, const Int_t nBins)
465
466 //=======================================================================================================================
467
468 void AliAnalysisTaskMultiparticleCorrelations::SetMin(const char *type, const char *variable, const Double_t min)
469 {
470  // Set min bin range for histograms fKinematicsHist[2][3].
471
472  TString sMethodName = "void AliAnalysisTaskMultiparticleCorrelations::SetMin(const char *type, const char *variable, const Double_t min)";
473  
474  // Basic protection:
475  if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI")))
476  {
477   cout<<"Well, it would be better for you to use RP or POI here..."<<endl;
478   Fatal(sMethodName.Data(),"!(TString(type).EqualTo... type = %s ",type);
479  }
480  if(!(TString(variable).EqualTo("phi") || TString(variable).EqualTo("pt") || TString(variable).EqualTo("eta")))
481  {
482   cout<<"phi, pt or eta, please!"<<endl;
483   Fatal(sMethodName.Data(),"!(TString(variable).EqualTo... variable = %s ",variable);
484  }
485
486  Int_t rp = 0; // [RP,POI]
487  if(TString(type).EqualTo("POI")){rp=1;} 
488
489  Int_t ppe = 0; // [phi,pt,eta]
490  if(TString(variable).EqualTo("pt")){ppe=1;} 
491  if(TString(variable).EqualTo("eta")){ppe=2;} 
492
493  fMin[rp][ppe] = min;
494
495 } // void AliAnalysisTaskMultiparticleCorrelations::SetMin(const char *type, const char *variable, const Double_t min)
496
497 //=======================================================================================================================
498
499 void AliAnalysisTaskMultiparticleCorrelations::SetMax(const char *type, const char *variable, const Double_t max)
500 {
501  // Set max bin range for histograms fKinematicsHist[2][3].
502
503  TString sMethodName = "void AliAnalysisTaskMultiparticleCorrelations::SetMax(const char *type, const char *variable, const Double_t max)";
504  
505  // Basic protection:
506  if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI")))
507  {
508   cout<<"Well, it would be better for you to use RP or POI here..."<<endl;
509   Fatal(sMethodName.Data(),"!(TString(type).EqualTo... type = %s ",type);
510  }
511  if(!(TString(variable).EqualTo("phi") || TString(variable).EqualTo("pt") || TString(variable).EqualTo("eta")))
512  {
513   cout<<"phi, pt or eta, please!"<<endl;
514   Fatal(sMethodName.Data(),"!(TString(variable).EqualTo... variable = %s ",variable);
515  }
516
517  Int_t rp = 0; // [RP,POI]
518  if(TString(type).EqualTo("POI")){rp=1;} 
519
520  Int_t ppe = 0; // [phi,pt,eta]
521  if(TString(variable).EqualTo("pt")){ppe=1;} 
522  if(TString(variable).EqualTo("eta")){ppe=2;} 
523
524  fMax[rp][ppe] = max;
525
526 } // void AliAnalysisTaskMultiparticleCorrelations::SetMax(const char *type, const char *variable, const Double_t min)
527
528 //=======================================================================================================================
529
530 void AliAnalysisTaskMultiparticleCorrelations::SetnBinsMult(const char *type, const Int_t nBinsMult)
531 {
532  // Set number of bins for histograms fMultDistributionsHist[3].
533
534  TString sMethodName = "void AliAnalysisTaskMultiparticleCorrelations::SetnBinsMult(const char *type, const Int_t nBinsMult)";
535  
536  // Basic protection:
537  if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI") || TString(type).EqualTo("REF")))
538  {
539   cout<<"Well, it would be better for you to use RP, POI or REF here..."<<endl;
540   Fatal(sMethodName.Data(),"!(TString(type).EqualTo... type = %s ",type);
541  }
542
543  Int_t rpr = 0; // [RP,POI,REF]
544  if(TString(type).EqualTo("POI")){rpr=1;} 
545  else if(TString(type).EqualTo("REF")){rpr=2;} 
546
547  fnBinsMult[rpr] = nBinsMult;
548
549 } // void AliAnalysisTaskMultiparticleCorrelations::SetnBinsMult(const char *type, const Int_t nBinsMult)
550
551 //=======================================================================================================================
552
553 void AliAnalysisTaskMultiparticleCorrelations::SetMinMult(const char *type, const Double_t minMult)
554 {
555  // Set min bin range for histograms fMultDistributionsHist[3].
556
557  TString sMethodName = "void AliAnalysisTaskMultiparticleCorrelations::SetMinMult(const char *type, const Double_t minMult)";
558  
559  // Basic protection:
560  if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI") || TString(type).EqualTo("REF")))
561  {
562   cout<<"Well, it would be better for you to use RP, POI or REF here..."<<endl;
563   Fatal(sMethodName.Data(),"!(TString(type).EqualTo... type = %s ",type);
564  }
565
566  Int_t rpr = 0; // [RP,POI,REF]
567  if(TString(type).EqualTo("POI")){rpr=1;} 
568  else if(TString(type).EqualTo("REF")){rpr=2;} 
569
570  fMinMult[rpr] = minMult;
571
572 } // void AliAnalysisTaskMultiparticleCorrelations::SetMinMult(const char *type const Double_t minMult)
573
574 //=======================================================================================================================
575
576 void AliAnalysisTaskMultiparticleCorrelations::SetMaxMult(const char *type, const Double_t maxMult)
577 {
578  // Set max bin range for histograms fMultDistributionsHist[3].
579
580  TString sMethodName = "void AliAnalysisTaskMultiparticleCorrelations::SetMaxMult(const char *type, const Double_t maxMult)";
581  
582  // Basic protection:
583  if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI") || TString(type).EqualTo("REF")))
584  {
585   cout<<"Well, it would be better for you to use RP, POI or REF here..."<<endl;
586   Fatal(sMethodName.Data(),"!(TString(type).EqualTo... type = %s ",type);
587  }
588
589  Int_t rpr = 0; // [RP,POI,REF]
590  if(TString(type).EqualTo("POI")){rpr=1;} 
591  else if(TString(type).EqualTo("REF")){rpr=2;} 
592
593  fMaxMult[rpr] = maxMult;
594
595 } // void AliAnalysisTaskMultiparticleCorrelations::SetMaxMult(const char *type, const Double_t minMult)
596
597 //=======================================================================================================================
598
599
600
601
602