1 ///////////////////////////////////////////////////////////////////
4 // Author: Redmer A. Bertens, Utrecht University, 2013 //
6 ///////////////////////////////////////////////////////////////////
7 class AliAnalysisDataContainer;
8 class AliFlowTrackCuts;
10 void AddTaskJetFlow( TString name = "name",
11 TString jets = "jets",
12 TString tracks = "tracks",
15 Float_t MinPOIPt = 0.15,
16 Float_t MaxPOIPt = 150,
17 Float_t CCBinsInPt = 100,
18 Bool_t VParticle = kFALSE,
20 Bool_t testFlow = kFALSE,
23 Bool_t debug = kFALSE )
25 // first check the environment (common to all tasks)
26 if(debug) printf("\n\n >> AddTaskJetFlow <<\n");
27 TString fileName = AliAnalysisManager::GetCommonFileName();
28 fileName += ":JetFlow";
29 if(debug) printf(" - filename: %s \n",fileName.Data());
30 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
32 if(debug) cout << " Fatal error: no analysis manager found! " << endl;
35 if (!mgr->GetInputEventHandler()) {
36 if(debug) cout << " Fatal error: no imput event handler found!" << endl;
39 // check the centrality setup
41 Int_t c[] = {0, 10, 30, 50, 70, 90};
42 cent = new TArrayI(sizeof(c)/sizeof(c[0]), c);
43 printf(" > Setup default centrality binning with %i bins \n ", cent->GetSize());
45 // create the cut objects
46 AliFlowTrackCuts* CutsRP_VZERO = new AliFlowTrackCuts("CutsRP_VZERO");
47 CutsRP_VZERO = CutsRP_VZERO->GetStandardVZEROOnlyTrackCuts();
48 AliFlowTrackCuts* CutsRP_TPC = new AliFlowTrackCuts("CutsRP_TPC");
49 CutsRP_TPC = CutsRP_TPC->GetStandardTPCStandaloneTrackCuts();
50 CutsRP_TPC->SetAODfilterBit(1);
52 // add the tasks in a loop, one task for each centrality bin
53 for(Int_t i(0); i < cent->GetSize()-1; i++) {
54 TString tempName(Form("%s_%i_%i", name.Data(), cent->At(i), cent->At(i+1)));
56 AliAnalysisTaskJetFlow* task = new AliAnalysisTaskJetFlow(
62 task->SetCCMaxPt(MaxPOIPt);
63 task->SetCCBinsInPt(CCBinsInPt);
64 task->SetDoVParticleAnalysis(VParticle);
65 task->SetDoTestFlowAnalysis(testFlow);
66 task->SetExplicitOutlierCut(year);
67 task->SetMinMaxPOIPt(MinPOIPt, MaxPOIPt);
68 (debug) ? task->SetDebugMode(1) : task->SetDebugMode(-1);
70 if(debug) cout << " --> Unexpected error occurred: NO TASK WAS CREATED! (could be a library problem!) " << endl;
73 else printf(" > added task with name %s and jet collection %s < \n", tempName.Data(), jets.Data());
74 // pass specific objects and settigns to the task
75 task->SetMinMaxCentrality(cent->At(i), cent->At(1+i));
76 task->SetPtBump(ptbump);
78 mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
79 mgr->ConnectOutput(task,1,mgr->CreateContainer(Form("%s_histograms", tempName.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, fileName.Data()));
80 // connect flow anaysis task
81 AliAnalysisDataContainer *flowEvent_VZERO = mgr->CreateContainer(Form("flowEvent_VZERO_%s", tempName.Data()), AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);
82 mgr->ConnectOutput(task, 2, flowEvent_VZERO);
83 AliAnalysisDataContainer *flowEvent_TPC = mgr->CreateContainer(Form("flowEvent_TPC_%s", tempName.Data()), AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);
84 mgr->ConnectOutput(task, 3, flowEvent_TPC);
85 if(SP) TaskJetFlow::AddSPmethod(Form("SPVZERO_A_%s", tempName.Data()), "Qa", 2, flowEvent_VZERO);
86 if(SP) TaskJetFlow::AddSPmethod(Form("SPVZERO_B_%s", tempName.Data()), "Qb", 2, flowEvent_VZERO);
87 if(QC) TaskJetFlow::AddQCmethod(Form("QC_%s", tempName.Data()), 2, flowEvent_TPC);
90 //_____________________________________________________________________________
91 namespace TaskJetFlow{ // use unique namespace to avoid problems in TRAIN analysis
92 void AddSPmethod(char *name, char *Qvector, int harmonic, AliAnalysisDataContainer *flowEvent)
94 TString fileName = AliAnalysisManager::GetCommonFileName();
96 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
97 AliAnalysisDataContainer *outSP = mgr->CreateContainer(name, TList::Class(), AliAnalysisManager::kOutputContainer, fileName);
98 AliAnalysisTaskScalarProduct *tskSP = new AliAnalysisTaskScalarProduct(Form("TaskScalarProduct_%s", name), kFALSE);
99 tskSP->SetApplyCorrectionForNUA(kTRUE);
100 tskSP->SetHarmonic(harmonic);
101 if(!strcmp("Qa", Qvector)) tskSP->SetTotalQvector("Qa");
102 if(!strcmp("Qb", Qvector)) tskSP->SetTotalQvector("Qb");
103 tskSP->SetBookOnlyBasicCCH(kFALSE);
105 mgr->ConnectInput(tskSP, 0, flowEvent);
106 mgr->ConnectOutput(tskSP, 1, outSP);
108 //_____________________________________________________________________________
109 void AddQCmethod(char *name, int harmonic, AliAnalysisDataContainer *flowEvent)
111 TString fileName = AliAnalysisManager::GetCommonFileName();
113 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
114 AliAnalysisDataContainer *outQC = mgr->CreateContainer(name, TList::Class(), AliAnalysisManager::kOutputContainer, fileName);
115 AliAnalysisTaskQCumulants *tskQC = new AliAnalysisTaskQCumulants(Form("TaskQCumulants_%s", name), kFALSE);
116 tskQC->SetApplyCorrectionForNUA(kTRUE);
117 tskQC->SetHarmonic(harmonic);
118 tskQC->SetBookOnlyBasicCCH(kFALSE);
120 mgr->ConnectInput(tskQC, 0, flowEvent);
121 mgr->ConnectOutput(tskQC, 1, outQC);
123 //_____________________________________________________________________________
124 }// end of namespace TaskJetFlow