1 ///////////////////////////////////////////////////////////////////
4 // Author: Redmer A. Bertens, Utrecht University, 2013 //
6 ///////////////////////////////////////////////////////////////////
7 class AliAnalysisDataContainer;
8 class AliAnalysisTaskRhoVnModulation;
10 // AddTask macro for the jet flow analysis task
11 // this task uses an instance AliAnalysisTaskRhoVnModulation
12 // as a 'master' object for analysis flags and track and event cuts
14 AliAnalysisTaskRhoVnModulation* AddTaskJetFlow(
15 TString name = "name",
16 AliAnalysisTaskRhoVnModulation* t = 0x0,
18 Float_t CCMaxPt = 150,
19 Float_t CCBinsInPt = 100,
20 Bool_t VParticle = kFALSE,
21 TArrayD* ptArray = 0x0,
22 Bool_t VZEROEP = kTRUE,
26 Bool_t FlowPackageSP = kFALSE,
27 Bool_t FlowPackageQC = kTRUE,
28 TString LocalRhoName = "",
29 Double_t jetRadius = 0.3,
30 Bool_t debug = kFALSE )
32 // first check the environment (common to all tasks)
33 if(debug) printf("\n\n >> AddTaskJetFlow <<\n");
34 TString fileName = AliAnalysisManager::GetCommonFileName();
36 fileName += t->GetName();
38 if(debug) printf(" - filename: %s \n",fileName.Data());
39 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
41 if(debug) cout << " Fatal error: no analysis manager found! " << endl;
44 if (!mgr->GetInputEventHandler()) {
45 if(debug) cout << " Fatal error: no imput event handler found!" << endl;
48 AliAnalysisTaskRhoVnModulation* rhoTask = t;
49 // check the centrality setup
50 TArrayI* cent(rhoTask->GetCentralityClasses());
51 // add the tasks in a loop, one task for each centrality bin
52 for(Int_t i(0); i < cent->GetSize()-1; i++) {
53 TString tempName(Form("%s_%i_%i", name.Data(), cent->At(i), cent->At(i+1)));
55 AliAnalysisTaskJetFlow* task = new AliAnalysisTaskJetFlow(
65 task->SetCCMinPt(CCMinPt);
66 task->SetCCMaxPt(CCMaxPt);
67 task->SetCCBinsInPt(CCBinsInPt);
68 task->SetPtBins(ptArray); // if passed as NULL default a sane default is provided
69 task->SetLocalRhoName(LocalRhoName);
70 task->SetJetRadius(jetRadius);
71 (debug) ? task->SetDebugMode(1) : task->SetDebugMode(-1);
73 if(debug) printf(" --> Unexpected error occurred: NO TASK WAS CREATED! (could be a library problem!)\n ");
76 // pass specific objects and settigns to the task
77 task->SetMinMaxCentrality(cent->At(i), cent->At(1+i));
79 mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
80 mgr->ConnectOutput(task,1,mgr->CreateContainer(Form("%s_histograms", tempName.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, fileName.Data()));
81 // connect flow anaysis task
82 Bool_t slotTwoFilled(kFALSE);
84 AliAnalysisDataContainer *flowEvent_VZERO = mgr->CreateContainer(Form("flowEvent_VZERO_%s", tempName.Data()), AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);
85 mgr->ConnectOutput(task, 2, flowEvent_VZERO);
86 slotTwoFilled = kTRUE;
89 AliAnalysisDataContainer *flowEvent_TPC = mgr->CreateContainer(Form("flowEvent_TPC_%s", tempName.Data()), AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);
90 (slotTwoFilled) ? mgr->ConnectOutput(task, 3, flowEvent_TPC) : mgr->ConnectOutput(task, 2, flowEvent_TPC);
92 if(FlowPackageSP) TaskJetFlow::AddSPmethod(Form("SPVZERO_A_%s", tempName.Data()), "Qa", 2, flowEvent_VZERO, t);
93 if(FlowPackageSP) TaskJetFlow::AddSPmethod(Form("SPVZERO_B_%s", tempName.Data()), "Qb", 2, flowEvent_VZERO, t);
94 if(FlowPackageQC) TaskJetFlow::AddQCmethod(Form("QC_%s", tempName.Data()), 2, flowEvent_TPC, t);
98 //_____________________________________________________________________________
99 namespace TaskJetFlow{ // use unique namespace to avoid problems in TRAIN analysis
100 void AddSPmethod(char *name, char *Qvector, int harmonic, AliAnalysisDataContainer *flowEvent, AliAnalysisTaskRhoVnModulation* t)
102 TString fileName = AliAnalysisManager::GetCommonFileName();
104 fileName+=t->GetName();
106 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
107 AliAnalysisDataContainer *outSP = mgr->CreateContainer(name, TList::Class(), AliAnalysisManager::kOutputContainer, fileName);
108 AliAnalysisTaskScalarProduct *tskSP = new AliAnalysisTaskScalarProduct(Form("TaskScalarProduct_%s", name), kFALSE);
109 tskSP->SetApplyCorrectionForNUA(kTRUE);
110 tskSP->SetHarmonic(harmonic);
111 if(!strcmp("Qa", Qvector)) tskSP->SetTotalQvector("Qa");
112 if(!strcmp("Qb", Qvector)) tskSP->SetTotalQvector("Qb");
113 tskSP->SetBookOnlyBasicCCH(kFALSE);
115 mgr->ConnectInput(tskSP, 0, flowEvent);
116 mgr->ConnectOutput(tskSP, 1, outSP);
118 //_____________________________________________________________________________
119 void AddQCmethod(char *name, int harmonic, AliAnalysisDataContainer *flowEvent, AliAnalysisTaskRhoVnModulation* t)
121 TString fileName = AliAnalysisManager::GetCommonFileName();
123 fileName+=t->GetName();
125 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
126 AliAnalysisDataContainer *outQC = mgr->CreateContainer(name, TList::Class(), AliAnalysisManager::kOutputContainer, fileName);
127 AliAnalysisTaskQCumulants *tskQC = new AliAnalysisTaskQCumulants(Form("TaskQCumulants_%s", name), kFALSE);
128 tskQC->SetApplyCorrectionForNUA(kTRUE);
129 tskQC->SetHarmonic(harmonic);
130 tskQC->SetBookOnlyBasicCCH(kFALSE);
132 mgr->ConnectInput(tskQC, 0, flowEvent);
133 mgr->ConnectOutput(tskQC, 1, outQC);
135 //_____________________________________________________________________________
136 }// end of namespace TaskJetFlow