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"
37 ClassImp(AliAnalysisTaskQCumulants)
39 //================================================================================================================
41 AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants(const char *name, Bool_t useParticleWeights):
42 AliAnalysisTaskSE(name),
46 fBookOnlyBasicCCH(kFALSE),
47 fFillMultipleControlHistograms(kFALSE),
49 fApplyCorrectionForNUA(kFALSE),
50 fApplyCorrectionForNUAVsM(kFALSE),
51 fPropagateErrorAlsoFromNIT(kFALSE),
52 fCalculateDiffFlow(kTRUE),
53 fCalculate2DDiffFlow(kFALSE),
54 fCalculateDiffFlowVsEta(kTRUE),
55 fStoreDistributions(kFALSE),
56 fCalculateCumulantsVsM(kFALSE),
57 fCalculateAllCorrelationsVsM(kFALSE),
58 fMinimumBiasReferenceFlow(kTRUE),
59 fForgetAboutCovariances(kFALSE),
60 fStorePhiDistributionForOneEvent(kFALSE),
64 fUseParticleWeights(useParticleWeights),
65 fUsePhiWeights(kFALSE),
66 fUsePtWeights(kFALSE),
67 fUseEtaWeights(kFALSE),
68 fUseTrackWeights(kFALSE),
70 fMultiplicityWeight(NULL)
73 cout<<"AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants(const char *name, Bool_t useParticleWeights)"<<endl;
75 // Define input and output slots here
76 // Input slot #0 works with an AliFlowEventSimple
77 DefineInput(0, AliFlowEventSimple::Class());
78 // Input slot #1 is needed for the weights input file:
79 if(useParticleWeights)
81 DefineInput(1, TList::Class());
83 // Output slot #0 is reserved
84 // Output slot #1 writes into a TList container
85 DefineOutput(1, TList::Class());
88 fMultiplicityWeight = new TString("combinations");
90 // Store phi distribution for one event to illustrate flow:
91 for(Int_t p=0;p<4;p++) // [v_min,v_max,refMult_min,refMult_max]
93 fPhiDistributionForOneEventSettings[p] = 0.;
98 AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants():
103 fBookOnlyBasicCCH(kFALSE),
104 fFillMultipleControlHistograms(kFALSE),
106 fApplyCorrectionForNUA(kFALSE),
107 fApplyCorrectionForNUAVsM(kFALSE),
108 fPropagateErrorAlsoFromNIT(kFALSE),
109 fCalculateDiffFlow(kFALSE),
110 fCalculate2DDiffFlow(kFALSE),
111 fCalculateDiffFlowVsEta(kTRUE),
112 fStoreDistributions(kFALSE),
113 fCalculateCumulantsVsM(kFALSE),
114 fCalculateAllCorrelationsVsM(kFALSE),
115 fMinimumBiasReferenceFlow(kFALSE),
116 fForgetAboutCovariances(kFALSE),
117 fStorePhiDistributionForOneEvent(kFALSE),
121 fUseParticleWeights(kFALSE),
122 fUsePhiWeights(kFALSE),
123 fUsePtWeights(kFALSE),
124 fUseEtaWeights(kFALSE),
125 fUseTrackWeights(kFALSE),
127 fMultiplicityWeight(NULL)
130 cout<<"AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants()"<<endl;
132 // Store phi distribution for one event to illustrate flow:
133 for(Int_t p=0;p<4;p++) // [v_min,v_max,refMult_min,refMult_max]
135 fPhiDistributionForOneEventSettings[p] = 0.;
140 //================================================================================================================
142 void AliAnalysisTaskQCumulants::UserCreateOutputObjects()
144 // Called at every worker node to initialize
145 cout<<"AliAnalysisTaskQCumulants::UserCreateOutputObjects()"<<endl;
148 fQC = new AliFlowAnalysisWithQCumulants();
151 fQC->SetBookOnlyBasicCCH(fBookOnlyBasicCCH);
152 fQC->SetFillMultipleControlHistograms(fFillMultipleControlHistograms);
153 fQC->SetHarmonic(fHarmonic);
154 fQC->SetApplyCorrectionForNUA(fApplyCorrectionForNUA);
155 fQC->SetApplyCorrectionForNUAVsM(fApplyCorrectionForNUAVsM);
156 fQC->SetPropagateErrorAlsoFromNIT(fPropagateErrorAlsoFromNIT);
157 fQC->SetCalculateDiffFlow(fCalculateDiffFlow);
158 fQC->SetCalculate2DDiffFlow(fCalculate2DDiffFlow);
159 fQC->SetCalculateDiffFlowVsEta(fCalculateDiffFlowVsEta);
160 fQC->SetStoreDistributions(fStoreDistributions);
161 fQC->SetCalculateCumulantsVsM(fCalculateCumulantsVsM);
162 fQC->SetCalculateAllCorrelationsVsM(fCalculateAllCorrelationsVsM);
163 fQC->SetMinimumBiasReferenceFlow(fMinimumBiasReferenceFlow);
164 fQC->SetForgetAboutCovariances(fForgetAboutCovariances);
165 // Multiparticle correlations vs multiplicity:
166 fQC->SetnBinsMult(fnBinsMult);
167 fQC->SetMinMult(fMinMult);
168 fQC->SetMaxMult(fMaxMult);
170 if(fUseParticleWeights)
172 // Pass the flags to class:
173 if(fUsePhiWeights){fQC->SetUsePhiWeights(fUsePhiWeights);}
174 if(fUsePtWeights){fQC->SetUsePtWeights(fUsePtWeights);}
175 if(fUseEtaWeights){fQC->SetUseEtaWeights(fUseEtaWeights);}
176 if(fUseTrackWeights){fQC->SetUseTrackWeights(fUseTrackWeights);}
177 // Get data from input slot #1 which is used for weights:
180 fWeightsList = (TList*)GetInputData(1);
182 // Pass the list with weights to class:
183 if(fWeightsList) fQC->SetWeightsList(fWeightsList);
186 if(!(strcmp(fMultiplicityWeight->Data(),"combinations")==0)) // default is "combinations"
188 fQC->SetMultiplicityWeight(fMultiplicityWeight->Data());
191 // Store phi distribution for one event to illustrate flow:
192 fQC->SetStorePhiDistributionForOneEvent(fStorePhiDistributionForOneEvent);
193 for(Int_t i=0;i<4;i++)
195 fQC->SetPhiDistributionForOneEventSettings(fPhiDistributionForOneEventSettings[i],i);
200 if(fQC->GetHistList())
202 fListHistos = fQC->GetHistList();
203 // fListHistos->Print();
206 Printf("ERROR: Could not retrieve histogram list (QC, Task::UserCreateOutputObjects()) !!!!");
209 PostData(1,fListHistos);
211 } // end of void AliAnalysisTaskQCumulants::UserCreateOutputObjects()
213 //================================================================================================================
215 void AliAnalysisTaskQCumulants::UserExec(Option_t *)
217 // main loop (called for each event)
218 fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));
226 cout<<"WARNING: No input data (QC, Task::UserExec()) !!!!"<<endl;
230 PostData(1,fListHistos);
233 //================================================================================================================
235 void AliAnalysisTaskQCumulants::Terminate(Option_t *)
237 //accessing the merged output list:
238 fListHistos = (TList*)GetOutputData(1);
240 fQC = new AliFlowAnalysisWithQCumulants();
244 fQC->GetOutputHistograms(fListHistos);
246 PostData(1,fListHistos);
249 cout<<" WARNING: histogram list pointer is empty (QC, Task::Terminate()) !!!!"<<endl;
253 } // end of void AliAnalysisTaskQCumulants::Terminate(Option_t *)