]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowTasks/AliAnalysisTaskFlowEvent.cxx
- increase the number of files that can be chained to 200 (from 20)
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowTasks / AliAnalysisTaskFlowEvent.cxx
CommitLineData
1c1d4332 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 *
940a5ed1 13* provided "as is" without express or implied warranty. *
1c1d4332 14**************************************************************************/
15
fdff44c8 16////////////////////////////////////////////////////
17// AliAnalysisTaskFlowEvent:
18//
19// analysis task for filling the flow event
20// from MCEvent, ESD, AOD ....
940a5ed1 21// and put it in an output stream so it can
22// be used by the various flow analysis methods
fdff44c8 23// for cuts the correction framework is used
24// which also outputs QA histograms to view
25// the effects of the cuts
26////////////////////////////////////////////////////
27
1c1d4332 28#include "Riostream.h" //needed as include
29#include "TChain.h"
30#include "TTree.h"
31#include "TFile.h" //needed as include
32#include "TList.h"
44e060e0 33#include "TH2F.h"
489fdf79 34#include "TRandom3.h"
35#include "TTimeStamp.h"
1c1d4332 36
7183fe85 37// ALICE Analysis Framework
1c1d4332 38#include "AliAnalysisManager.h"
fbdb53fa 39#include "AliAnalysisTaskSE.h"
85d2ee8d 40#include "AliESDtrackCuts.h"
1c1d4332 41
7183fe85 42// ESD interface
1c1d4332 43#include "AliESDEvent.h"
44#include "AliESDInputHandler.h"
45
7183fe85 46// AOD interface
1c1d4332 47#include "AliAODEvent.h"
48#include "AliAODInputHandler.h"
49
7183fe85 50// Monte Carlo Event
1c1d4332 51#include "AliMCEventHandler.h"
52#include "AliMCEvent.h"
53
7183fe85 54// ALICE Correction Framework
1c1d4332 55#include "AliCFManager.h"
56
7183fe85 57// Interface to Event generators to get Reaction Plane Angle
58#include "AliGenCocktailEventHeader.h"
59#include "AliGenHijingEventHeader.h"
48ad51a1 60#include "AliGenGeVSimEventHeader.h"
26f120fa 61#include "AliGenEposEventHeader.h"
7183fe85 62
6e214c87 63// Interface to Load short life particles
64#include "TObjArray.h"
65#include "AliFlowCandidateTrack.h"
66
7183fe85 67// Interface to make the Flow Event Simple used in the flow analysis methods
940a5ed1 68#include "AliFlowEvent.h"
daf66719 69#include "AliFlowTrackCuts.h"
70#include "AliFlowEventCuts.h"
d459546b 71#include "AliFlowCommonConstants.h"
7183fe85 72#include "AliAnalysisTaskFlowEvent.h"
73
77111ee6 74#include "AliLog.h"
75
1c1d4332 76ClassImp(AliAnalysisTaskFlowEvent)
940a5ed1 77
1c1d4332 78//________________________________________________________________________
940a5ed1 79AliAnalysisTaskFlowEvent::AliAnalysisTaskFlowEvent() :
80 AliAnalysisTaskSE(),
46bec39c 81 // fOutputFile(NULL),
12b2b8bc 82 fAnalysisType("AUTOMATIC"),
ef4799a7 83 fRPType("Global"),
1c1d4332 84 fCFManager1(NULL),
85 fCFManager2(NULL),
daf66719 86 fCutsEvent(NULL),
87 fCutsRP(NULL),
88 fCutsPOI(NULL),
1c1d4332 89 fQAInt(NULL),
90 fQADiff(NULL),
fdff44c8 91 fMinMult(0),
92 fMaxMult(10000000),
7a01f4a7 93 fMinA(-1.0),
94 fMaxA(-0.01),
95 fMinB(0.01),
96 fMaxB(1.0),
489fdf79 97 fQA(kFALSE),
6e214c87 98 fLoadCandidates(kFALSE),
d459546b 99 fNbinsMult(10000),
100 fNbinsPt(100),
101 fNbinsPhi(100),
102 fNbinsEta(200),
103 fNbinsQ(500),
104 fMultMin(0.),
105 fMultMax(10000.),
106 fPtMin(0.),
107 fPtMax(10.),
108 fPhiMin(0.),
109 fPhiMax(TMath::TwoPi()),
110 fEtaMin(-5.),
111 fEtaMax(5.),
112 fQMin(0.),
113 fQMax(3.),
f6f8c3fc 114 fExcludedEtaMin(0.),
115 fExcludedEtaMax(0.),
116 fExcludedPhiMin(0.),
117 fExcludedPhiMax(0.),
54089829 118 fAfterburnerOn(kFALSE),
119 fNonFlowNumberOfTrackClones(0),
120 fV1(0.),
121 fV2(0.),
122 fV3(0.),
123 fV4(0.),
1a80f9f6 124 fV5(0.),
7d27a354 125 fFlowEvent(NULL),
aab6527a 126 fMyTRandom3(NULL)
1c1d4332 127{
128 // Constructor
129 cout<<"AliAnalysisTaskFlowEvent::AliAnalysisTaskFlowEvent()"<<endl;
130}
131
489fdf79 132//________________________________________________________________________
6e214c87 133AliAnalysisTaskFlowEvent::AliAnalysisTaskFlowEvent(const char *name, TString RPtype, Bool_t on, UInt_t iseed, Bool_t bCandidates) :
940a5ed1 134 AliAnalysisTaskSE(name),
135 // fOutputFile(NULL),
12b2b8bc 136 fAnalysisType("AUTOMATIC"),
44e060e0 137 fRPType(RPtype),
489fdf79 138 fCFManager1(NULL),
139 fCFManager2(NULL),
daf66719 140 fCutsEvent(NULL),
141 fCutsRP(NULL),
142 fCutsPOI(NULL),
489fdf79 143 fQAInt(NULL),
144 fQADiff(NULL),
fdff44c8 145 fMinMult(0),
146 fMaxMult(10000000),
7a01f4a7 147 fMinA(-1.0),
148 fMaxA(-0.01),
149 fMinB(0.01),
150 fMaxB(1.0),
489fdf79 151 fQA(on),
6e214c87 152 fLoadCandidates(bCandidates),
d459546b 153 fNbinsMult(10000),
154 fNbinsPt(100),
155 fNbinsPhi(100),
156 fNbinsEta(200),
157 fNbinsQ(500),
158 fMultMin(0.),
159 fMultMax(10000.),
160 fPtMin(0.),
161 fPtMax(10.),
162 fPhiMin(0.),
163 fPhiMax(TMath::TwoPi()),
164 fEtaMin(-5.),
165 fEtaMax(5.),
166 fQMin(0.),
167 fQMax(3.),
f6f8c3fc 168 fExcludedEtaMin(0.),
169 fExcludedEtaMax(0.),
170 fExcludedPhiMin(0.),
171 fExcludedPhiMax(0.),
54089829 172 fAfterburnerOn(kFALSE),
173 fNonFlowNumberOfTrackClones(0),
174 fV1(0.),
175 fV2(0.),
176 fV3(0.),
177 fV4(0.),
1a80f9f6 178 fV5(0.),
7d27a354 179 fFlowEvent(NULL),
aab6527a 180 fMyTRandom3(NULL)
489fdf79 181{
182 // Constructor
183 cout<<"AliAnalysisTaskFlowEvent::AliAnalysisTaskFlowEvent(const char *name, Bool_t on, UInt_t iseed)"<<endl;
940a5ed1 184 fMyTRandom3 = new TRandom3(iseed);
489fdf79 185 gRandom->SetSeed(fMyTRandom3->Integer(65539));
65201059 186
6e214c87 187 int availableINslot=1;
44e060e0 188 //FMD input slot
189 if (strcmp(RPtype,"FMD")==0) {
6e214c87 190 DefineInput(availableINslot++, TList::Class());
44e060e0 191 }
6e214c87 192 //Candidates input slot
193 if( fLoadCandidates )
194 DefineInput(availableINslot, TObjArray::Class());
65201059 195
196 // Define output slots here
489fdf79 197 // Define here the flow event output
940a5ed1 198 DefineOutput(1, AliFlowEventSimple::Class());
199 if(on)
200 {
65201059 201 DefineOutput(2, TList::Class());
940a5ed1 202 DefineOutput(3, TList::Class());
203 }
6e214c87 204
489fdf79 205 // and for testing open an output file
206 // fOutputFile = new TFile("FlowEvents.root","RECREATE");
207
208}
209
1c1d4332 210//________________________________________________________________________
211AliAnalysisTaskFlowEvent::~AliAnalysisTaskFlowEvent()
212{
213 //
214 // Destructor
215 //
32b846cd 216 delete fMyTRandom3;
940a5ed1 217 // objects in the output list are deleted
1c1d4332 218 // by the TSelector dtor (I hope)
219
220}
221
32b846cd 222//________________________________________________________________________
223void AliAnalysisTaskFlowEvent::NotifyRun()
224{
225 //at the beginning of each new run
226 AliESDEvent* fESD = dynamic_cast<AliESDEvent*> (InputEvent());
2a745a5f 227 if (!fESD) return;
3abf7ecc 228
229 Int_t run = fESD->GetRunNumber();
230 AliInfo(Form("Stariting run #%i",run));
32b846cd 231}
232
1c1d4332 233//________________________________________________________________________
940a5ed1 234void AliAnalysisTaskFlowEvent::UserCreateOutputObjects()
1c1d4332 235{
236 // Called at every worker node to initialize
237 cout<<"AliAnalysisTaskFlowEvent::CreateOutputObjects()"<<endl;
238
12b2b8bc 239 if (!(fAnalysisType == "AOD" || fAnalysisType == "ESD" || fAnalysisType == "ESDMCkineESD" || fAnalysisType == "ESDMCkineMC" || fAnalysisType == "MC" || fAnalysisType == "AUTOMATIC"))
940a5ed1 240 {
12b2b8bc 241 AliError("WRONG ANALYSIS TYPE! only ESD, ESDMCkineESD, ESDMCkineMC, AOD, MC and AUTOMATIC are allowed.");
1c1d4332 242 exit(1);
243 }
d459546b 244
245 //set the common constants
246 AliFlowCommonConstants* cc = AliFlowCommonConstants::GetMaster();
247 cc->SetNbinsMult(fNbinsMult);
248 cc->SetNbinsPt(fNbinsPt);
249 cc->SetNbinsPhi(fNbinsPhi);
250 cc->SetNbinsEta(fNbinsEta);
251 cc->SetNbinsQ(fNbinsQ);
252 cc->SetMultMin(fMultMin);
253 cc->SetMultMax(fMultMax);
254 cc->SetPtMin(fPtMin);
255 cc->SetPtMax(fPtMax);
256 cc->SetPhiMin(fPhiMin);
257 cc->SetPhiMax(fPhiMax);
258 cc->SetEtaMin(fEtaMin);
259 cc->SetEtaMax(fEtaMax);
260 cc->SetQMin(fQMin);
261 cc->SetQMax(fQMax);
262
7d27a354 263 fFlowEvent = new AliFlowEvent(3000);
264
1c1d4332 265}
266
267//________________________________________________________________________
940a5ed1 268void AliAnalysisTaskFlowEvent::UserExec(Option_t *)
1c1d4332 269{
270 // Main loop
271 // Called for each event
7d27a354 272 //delete fFlowEvent;
940a5ed1 273 AliMCEvent* mcEvent = MCEvent(); // from TaskSE
274 AliESDEvent* myESD = dynamic_cast<AliESDEvent*>(InputEvent()); // from TaskSE
275 AliAODEvent* myAOD = dynamic_cast<AliAODEvent*>(InputEvent()); // from TaskSE
ef4799a7 276 AliMultiplicity* myTracklets = NULL;
333ce021 277 AliESDPmdTrack* pmdtracks = NULL;//pmd
ef4799a7 278
6e214c87 279 int availableINslot=1;
3ca4688a 280
2a745a5f 281 if (!(fCutsRP&&fCutsPOI&&fCutsEvent))
282 {
283 AliError("cuts not set");
284 return;
285 }
286
7d27a354 287 //DEFAULT - automatically takes care of everything
12b2b8bc 288 if (fAnalysisType == "AUTOMATIC")
daf66719 289 {
7d9ab4fb 290 //check event cuts
2a745a5f 291 if (!fCutsEvent->IsSelected(InputEvent())) return;
7d9ab4fb 292
03d364db 293 //first attach all possible information to the cuts
441ea1cf 294 fCutsRP->SetEvent( InputEvent(), MCEvent() ); //attach event
295 fCutsPOI->SetEvent( InputEvent(), MCEvent() );
32b846cd 296
03d364db 297 //then make the event
7d27a354 298 fFlowEvent->Fill( fCutsRP, fCutsPOI );
299 //fFlowEvent = new AliFlowEvent( fCutsRP, fCutsPOI );
300
daf66719 301 if (myESD)
7d27a354 302 fFlowEvent->SetReferenceMultiplicity(fCutsEvent->GetReferenceMultiplicity(InputEvent()));
303 if (mcEvent && mcEvent->GenEventHeader()) fFlowEvent->SetMCReactionPlaneAngle(mcEvent);
daf66719 304 }
940a5ed1 305
306 // Make the FlowEvent for MC input
a0241c3a 307 else if (fAnalysisType == "MC")
940a5ed1 308 {
1c1d4332 309 // Process MC truth, therefore we receive the AliAnalysisManager and ask it for the AliMCEventHandler
310 // This handler can return the current MC event
940a5ed1 311 if (!(fCFManager1&&fCFManager2))
312 {
77111ee6 313 AliError("ERROR: No pointer to correction framework cuts! ");
940a5ed1 314 return;
315 }
316 if (!mcEvent)
317 {
77111ee6 318 AliError("ERROR: Could not retrieve MC event");
940a5ed1 319 return;
320 }
1c1d4332 321
6d7734d2 322 fCFManager1->SetMCEventInfo(mcEvent);
323 fCFManager2->SetMCEventInfo(mcEvent);
940a5ed1 324
77111ee6 325 AliInfo(Form("Number of MC particles: %d", mcEvent->GetNumberOfTracks()));
326
327 //check multiplicity
328 if (!fCFManager1->CheckEventCuts(AliCFManager::kEvtGenCuts,mcEvent))
329 {
330 AliWarning("Event does not pass multiplicity cuts"); return;
331 }
332 //make event
7d27a354 333 fFlowEvent = new AliFlowEvent(mcEvent,fCFManager1,fCFManager2);
1c1d4332 334 }
ef4799a7 335
940a5ed1 336 // Make the FlowEvent for ESD input
337 else if (fAnalysisType == "ESD")
338 {
339 if (!(fCFManager1&&fCFManager2))
340 {
77111ee6 341 AliError("ERROR: No pointer to correction framework cuts!");
940a5ed1 342 return;
343 }
344 if (!myESD)
345 {
77111ee6 346 AliError("ERROR: ESD not available");
940a5ed1 347 return;
348 }
77111ee6 349
b0569f96 350 //check the offline trigger (check if the event has the correct trigger)
ade93aa4 351 AliInfo(Form("ESD has %d tracks", fInputEvent->GetNumberOfTracks()));
77111ee6 352
353 //check multiplicity
354 if (!fCFManager1->CheckEventCuts(AliCFManager::kEvtRecCuts,myESD))
355 {
356 AliWarning("Event does not pass multiplicity cuts"); return;
357 }
358
359 //make event
ef4799a7 360 if (fRPType == "Global") {
7d27a354 361 fFlowEvent = new AliFlowEvent(myESD,fCFManager1,fCFManager2);
ef4799a7 362 }
a0241c3a 363 else if (fRPType == "TPCOnly") {
7d27a354 364 fFlowEvent = new AliFlowEvent(myESD,fCFManager2,kFALSE);
cd755f77 365 }
a0241c3a 366 else if (fRPType == "TPCHybrid") {
7d27a354 367 fFlowEvent = new AliFlowEvent(myESD,fCFManager2,kTRUE);
cd755f77 368 }
ef4799a7 369 else if (fRPType == "Tracklet"){
7d27a354 370 fFlowEvent = new AliFlowEvent(myESD,myTracklets,fCFManager2);
ef4799a7 371 }
44e060e0 372 else if (fRPType == "FMD"){
dd60b476 373 TList* FMDdata = dynamic_cast<TList*>(GetInputData(availableINslot++));
374 if(!FMDdata) {
375 cout<<" No FMDdata "<<endl;
376 return;
377 }
378 TH2F* histFMD = dynamic_cast<TH2F*>(FMDdata->FindObject("dNdetadphiHistogramTrVtx"));
379 if (!histFMD) {
380 cout<< "No histFMD"<<endl;
381 return;
382 }
7d27a354 383 fFlowEvent = new AliFlowEvent(myESD,histFMD,fCFManager2);
44e060e0 384 }
333ce021 385 else if (fRPType == "PMD"){
7d27a354 386 fFlowEvent = new AliFlowEvent(myESD,pmdtracks,fCFManager2);
333ce021 387 }
5104aa35 388 else return;
44e060e0 389
ef4799a7 390 // if monte carlo event get reaction plane from monte carlo (depends on generator)
7d27a354 391 if (mcEvent && mcEvent->GenEventHeader()) fFlowEvent->SetMCReactionPlaneAngle(mcEvent);
5104aa35 392 //set reference multiplicity, TODO: maybe move it to the constructor?
7d27a354 393 fFlowEvent->SetReferenceMultiplicity(AliESDtrackCuts::GetReferenceMultiplicity(myESD,kTRUE));
1c1d4332 394 }
ef4799a7 395
940a5ed1 396 // Make the FlowEvent for ESD input combined with MC info
397 else if (fAnalysisType == "ESDMCkineESD" || fAnalysisType == "ESDMCkineMC" )
398 {
399 if (!(fCFManager1&&fCFManager2))
400 {
77111ee6 401 AliError("ERROR: No pointer to correction framework cuts! ");
940a5ed1 402 return;
403 }
404 if (!myESD)
405 {
77111ee6 406 AliError("ERROR: ESD not available");
940a5ed1 407 return;
408 }
77111ee6 409 AliInfo(Form("There are %d tracks in this event", fInputEvent->GetNumberOfTracks()));
940a5ed1 410
411 if (!mcEvent)
412 {
77111ee6 413 AliError("ERROR: Could not retrieve MC event");
940a5ed1 414 return;
415 }
1c1d4332 416
6d7734d2 417 fCFManager1->SetMCEventInfo(mcEvent);
418 fCFManager2->SetMCEventInfo(mcEvent);
1c1d4332 419
77111ee6 420 //check multiplicity
421 if (!fCFManager1->CheckEventCuts(AliCFManager::kEvtRecCuts,myESD))
422 {
423 AliWarning("Event does not pass multiplicity cuts"); return;
424 }
425
426 //make event
940a5ed1 427 if (fAnalysisType == "ESDMCkineESD")
428 {
7d27a354 429 fFlowEvent = new AliFlowEvent(myESD, mcEvent, AliFlowEvent::kESDkine, fCFManager1, fCFManager2 );
940a5ed1 430 }
431 else if (fAnalysisType == "ESDMCkineMC")
432 {
7d27a354 433 fFlowEvent = new AliFlowEvent(myESD, mcEvent, AliFlowEvent::kMCkine, fCFManager1, fCFManager2 );
1c1d4332 434 }
7d27a354 435 if (!fFlowEvent) return;
85d2ee8d 436 // if monte carlo event get reaction plane from monte carlo (depends on generator)
7d27a354 437 if (mcEvent && mcEvent->GenEventHeader()) fFlowEvent->SetMCReactionPlaneAngle(mcEvent);
85d2ee8d 438 //set reference multiplicity, TODO: maybe move it to the constructor?
7d27a354 439 fFlowEvent->SetReferenceMultiplicity(AliESDtrackCuts::GetReferenceMultiplicity(myESD,kTRUE));
1c1d4332 440 }
940a5ed1 441 // Make the FlowEventSimple for AOD input
442 else if (fAnalysisType == "AOD")
443 {
444 if (!myAOD)
445 {
77111ee6 446 AliError("ERROR: AOD not available");
940a5ed1 447 return;
448 }
ade93aa4 449 AliInfo(Form("AOD has %d tracks", myAOD->GetNumberOfTracks()));
7d27a354 450 fFlowEvent = new AliFlowEvent(myAOD);
1c1d4332 451 }
452
6e214c87 453 //inject candidates
454 if(fLoadCandidates) {
455 TObjArray* Candidates = dynamic_cast<TObjArray*>(GetInputData(availableINslot++));
41dc4195 456 //if(Candidates->GetEntriesFast())
457 //printf("I received %d candidates\n",Candidates->GetEntriesFast());
422c61c7 458 if (Candidates)
459 {
41dc4195 460 for(int iCand=0; iCand!=Candidates->GetEntriesFast(); ++iCand ) {
461 AliFlowCandidateTrack *cand = dynamic_cast<AliFlowCandidateTrack*>(Candidates->At(iCand));
422c61c7 462 if (!cand) continue;
41dc4195 463 cand->SetForPOISelection(kTRUE);
464 cand->SetForRPSelection(kFALSE);
465 //printf(" Ⱶ Checking at candidate %d with %d daughters\n",iCand,cand->GetNDaughters());
466 for(int iDau=0; iDau!=cand->GetNDaughters(); ++iDau) {
467 //printf(" Ⱶ Daughter %d with fID %d", iDau, cand->GetIDDaughter(iDau) );
7d27a354 468 for(int iRPs=0; iRPs!=fFlowEvent->NumberOfTracks(); ++iRPs ) {
469 AliFlowTrack *iRP = dynamic_cast<AliFlowTrack*>(fFlowEvent->GetTrack( iRPs ));
41dc4195 470 if (!iRP) continue;
471 if( !iRP->InRPSelection() )
472 continue;
473 if( cand->GetIDDaughter(iDau) == iRP->GetID() ) {
474 //printf(" was in RP set");
475 cand->SetDaughter( iDau, iRP );
476 //temporarily untagging all daugters
477 iRP->SetForRPSelection(kFALSE);
478 }
479 }
480 //printf("\n");
481 }
7d27a354 482 fFlowEvent->AddTrack(cand);
422c61c7 483 }
6e214c87 484 }
485 }
486
7d27a354 487 if (!fFlowEvent) return; //shuts up coverity
a0241c3a 488
77111ee6 489 //check final event cuts
7d27a354 490 Int_t mult = fFlowEvent->NumberOfTracks();
ade93aa4 491 AliInfo(Form("FlowEvent has %i tracks",mult));
492 if (mult<fMinMult || mult>fMaxMult)
77111ee6 493 {
494 AliWarning("FlowEvent cut on multiplicity"); return;
495 }
940a5ed1 496
f6f8c3fc 497 //define dead zone
7d27a354 498 fFlowEvent->DefineDeadZone(fExcludedEtaMin, fExcludedEtaMax, fExcludedPhiMin, fExcludedPhiMax );
f6f8c3fc 499
500
54089829 501 //////////////////////////////////////////////////////////////////////////////
502 ///////////////////////////AFTERBURNER
503 if (fAfterburnerOn)
504 {
505 //if reaction plane not set from elsewhere randomize it before adding flow
7d27a354 506 if (!fFlowEvent->IsSetMCReactionPlaneAngle())
507 fFlowEvent->SetMCReactionPlaneAngle(gRandom->Uniform(0.0,TMath::TwoPi()));
54089829 508
7d27a354 509 fFlowEvent->AddFlow(fV1,fV2,fV3,fV4,fV5); //add flow
510 fFlowEvent->CloneTracks(fNonFlowNumberOfTrackClones); //add nonflow by cloning tracks
54089829 511 }
512 //////////////////////////////////////////////////////////////////////////////
513
ef4799a7 514 //tag subEvents
7d27a354 515 fFlowEvent->TagSubeventsInEta(fMinA,fMaxA,fMinB,fMaxB);
940a5ed1 516
46bec39c 517 //fListHistos->Print();
7d27a354 518 //fOutputFile->WriteObject(fFlowEvent,"myFlowEventSimple");
519 PostData(1,fFlowEvent);
940a5ed1 520 if (fQA)
521 {
65201059 522 PostData(2,fQAInt);
940a5ed1 523 PostData(3,fQADiff);
524 }
525}
1c1d4332 526
527//________________________________________________________________________
940a5ed1 528void AliAnalysisTaskFlowEvent::Terminate(Option_t *)
1c1d4332 529{
530 // Called once at the end of the query -- do not call in case of CAF
1c1d4332 531}
489fdf79 532