1 /*************************************************************************
2 * Copyright(c) 1998-2008, 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 /**************************************
17 * analysis task for Q-cumulants *
19 * authors: Naomi van der Kolk *
22 * (snelling@nikhef.nl) *
25 * ***********************************/
30 class AliAnalysisTaskSE;
32 #include "Riostream.h"
33 #include "AliFlowEventSimple.h"
34 #include "AliAnalysisTaskQCumulants.h"
35 #include "AliFlowAnalysisWithQCumulants.h"
39 ClassImp(AliAnalysisTaskQCumulants)
41 //================================================================================================================
43 AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants(const char *name, Bool_t useParticleWeights):
44 AliAnalysisTaskSE(name),
48 fBookOnlyBasicCCH(kTRUE),
49 fFillMultipleControlHistograms(kFALSE),
51 fApplyCorrectionForNUA(kFALSE),
52 fApplyCorrectionForNUAVsM(kFALSE),
53 fPropagateErrorAlsoFromNIT(kFALSE),
54 fCalculateDiffFlow(kTRUE),
55 fCalculate2DDiffFlow(kFALSE),
56 fCalculateDiffFlowVsEta(kTRUE),
57 fStoreDistributions(kFALSE),
58 fCalculateCumulantsVsM(kFALSE),
59 fCalculateAllCorrelationsVsM(kFALSE),
60 fMinimumBiasReferenceFlow(kTRUE),
61 fForgetAboutCovariances(kFALSE),
62 fStorePhiDistributionForOneEvent(kFALSE),
66 fUseParticleWeights(useParticleWeights),
67 fUsePhiWeights(kFALSE),
68 fUsePtWeights(kFALSE),
69 fUseEtaWeights(kFALSE),
70 fUseTrackWeights(kFALSE),
72 fMultiplicityWeight(NULL)
75 AliDebug(2,"AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants(const char *name, Bool_t useParticleWeights)");
77 // Define input and output slots here
78 // Input slot #0 works with an AliFlowEventSimple
79 DefineInput(0, AliFlowEventSimple::Class());
80 // Input slot #1 is needed for the weights input file:
81 if(useParticleWeights)
83 DefineInput(1, TList::Class());
85 // Output slot #0 is reserved
86 // Output slot #1 writes into a TList container
87 DefineOutput(1, TList::Class());
90 fMultiplicityWeight = new TString("combinations");
92 // Store phi distribution for one event to illustrate flow:
93 for(Int_t p=0;p<4;p++) // [v_min,v_max,refMult_min,refMult_max]
95 fPhiDistributionForOneEventSettings[p] = 0.;
100 AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants():
105 fBookOnlyBasicCCH(kFALSE),
106 fFillMultipleControlHistograms(kFALSE),
108 fApplyCorrectionForNUA(kFALSE),
109 fApplyCorrectionForNUAVsM(kFALSE),
110 fPropagateErrorAlsoFromNIT(kFALSE),
111 fCalculateDiffFlow(kFALSE),
112 fCalculate2DDiffFlow(kFALSE),
113 fCalculateDiffFlowVsEta(kTRUE),
114 fStoreDistributions(kFALSE),
115 fCalculateCumulantsVsM(kFALSE),
116 fCalculateAllCorrelationsVsM(kFALSE),
117 fMinimumBiasReferenceFlow(kFALSE),
118 fForgetAboutCovariances(kFALSE),
119 fStorePhiDistributionForOneEvent(kFALSE),
123 fUseParticleWeights(kFALSE),
124 fUsePhiWeights(kFALSE),
125 fUsePtWeights(kFALSE),
126 fUseEtaWeights(kFALSE),
127 fUseTrackWeights(kFALSE),
129 fMultiplicityWeight(NULL)
132 AliDebug(2,"AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants()");
134 // Store phi distribution for one event to illustrate flow:
135 for(Int_t p=0;p<4;p++) // [v_min,v_max,refMult_min,refMult_max]
137 fPhiDistributionForOneEventSettings[p] = 0.;
142 //================================================================================================================
144 void AliAnalysisTaskQCumulants::UserCreateOutputObjects()
146 // Called at every worker node to initialize
147 AliDebug(2,"AliAnalysisTaskQCumulants::UserCreateOutputObjects()");
150 fQC = new AliFlowAnalysisWithQCumulants();
153 fQC->SetBookOnlyBasicCCH(fBookOnlyBasicCCH);
154 fQC->SetFillMultipleControlHistograms(fFillMultipleControlHistograms);
155 fQC->SetHarmonic(fHarmonic);
156 fQC->SetApplyCorrectionForNUA(fApplyCorrectionForNUA);
157 fQC->SetApplyCorrectionForNUAVsM(fApplyCorrectionForNUAVsM);
158 fQC->SetPropagateErrorAlsoFromNIT(fPropagateErrorAlsoFromNIT);
159 fQC->SetCalculateDiffFlow(fCalculateDiffFlow);
160 fQC->SetCalculate2DDiffFlow(fCalculate2DDiffFlow);
161 fQC->SetCalculateDiffFlowVsEta(fCalculateDiffFlowVsEta);
162 fQC->SetStoreDistributions(fStoreDistributions);
163 fQC->SetCalculateCumulantsVsM(fCalculateCumulantsVsM);
164 fQC->SetCalculateAllCorrelationsVsM(fCalculateAllCorrelationsVsM);
165 fQC->SetMinimumBiasReferenceFlow(fMinimumBiasReferenceFlow);
166 fQC->SetForgetAboutCovariances(fForgetAboutCovariances);
167 // Multiparticle correlations vs multiplicity:
168 fQC->SetnBinsMult(fnBinsMult);
169 fQC->SetMinMult(fMinMult);
170 fQC->SetMaxMult(fMaxMult);
172 if(fUseParticleWeights)
174 // Pass the flags to class:
175 if(fUsePhiWeights){fQC->SetUsePhiWeights(fUsePhiWeights);}
176 if(fUsePtWeights){fQC->SetUsePtWeights(fUsePtWeights);}
177 if(fUseEtaWeights){fQC->SetUseEtaWeights(fUseEtaWeights);}
178 if(fUseTrackWeights){fQC->SetUseTrackWeights(fUseTrackWeights);}
179 // Get data from input slot #1 which is used for weights:
182 fWeightsList = (TList*)GetInputData(1);
184 // Pass the list with weights to class:
185 if(fWeightsList) fQC->SetWeightsList(fWeightsList);
188 if(!(strcmp(fMultiplicityWeight->Data(),"combinations")==0)) // default is "combinations"
190 fQC->SetMultiplicityWeight(fMultiplicityWeight->Data());
193 // Store phi distribution for one event to illustrate flow:
194 fQC->SetStorePhiDistributionForOneEvent(fStorePhiDistributionForOneEvent);
195 for(Int_t i=0;i<4;i++)
197 fQC->SetPhiDistributionForOneEventSettings(fPhiDistributionForOneEventSettings[i],i);
202 if(fQC->GetHistList())
204 fListHistos = fQC->GetHistList();
205 // fListHistos->Print();
208 Printf("ERROR: Could not retrieve histogram list (QC, Task::UserCreateOutputObjects()) !!!!");
211 PostData(1,fListHistos);
213 } // end of void AliAnalysisTaskQCumulants::UserCreateOutputObjects()
215 //================================================================================================================
217 void AliAnalysisTaskQCumulants::UserExec(Option_t *)
219 // main loop (called for each event)
220 fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));
228 cout<<"WARNING: No input data (QC, Task::UserExec()) !!!!"<<endl;
232 PostData(1,fListHistos);
235 //================================================================================================================
237 void AliAnalysisTaskQCumulants::Terminate(Option_t *)
239 //accessing the merged output list:
240 fListHistos = (TList*)GetOutputData(1);
242 fQC = new AliFlowAnalysisWithQCumulants();
246 fQC->GetOutputHistograms(fListHistos);
248 PostData(1,fListHistos);
251 cout<<" WARNING: histogram list pointer is empty (QC, Task::Terminate()) !!!!"<<endl;
255 } // end of void AliAnalysisTaskQCumulants::Terminate(Option_t *)