]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FLOW/macros/AddTaskJetFlow.C
Redmer Bertens: small update of AddTaskJetFlow.C macro
[u/mrichter/AliRoot.git] / PWGCF / FLOW / macros / AddTaskJetFlow.C
1 ///////////////////////////////////////////////////////////////////
2 //                                                               //            
3 //                     AddTaskJetFlow                            //
4 // Author: Redmer A. Bertens, Utrecht University, 2013           //
5 //                                                               //
6 ///////////////////////////////////////////////////////////////////
7 class AliAnalysisDataContainer;
8 class AliAnalysisTaskRhoVnModulation;
9
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
13
14 AliAnalysisTaskRhoVnModulation* AddTaskJetFlow( 
15         TString name                       = "name",
16         AliAnalysisTaskRhoVnModulation* t  = 0x0,
17         Float_t CCMinPt                    = 1,
18         Float_t CCMaxPt                    = 150,
19         Float_t CCBinsInPt                 = 100,
20         Bool_t VParticle                   = kFALSE,
21         TArrayD* ptArray                   = 0x0,
22         Bool_t VZEROEP                     = kTRUE,
23         Bool_t GQC2                        = kTRUE,
24         Bool_t QC2                         = kTRUE,
25         Bool_t QC4                         = kFALSE,
26         Bool_t FlowPackageSP               = kFALSE,
27         Bool_t FlowPackageQC               = kTRUE,
28         TString LocalRhoName               = "",
29         Double_t jetRadius                 = 0.3,
30         Bool_t debug                       = kFALSE  )
31 {
32     // first check the environment (common to all tasks)
33     if(debug) printf("\n\n  >> AddTaskJetFlow <<\n");
34     TString fileName = AliAnalysisManager::GetCommonFileName();
35     fileName += ":";
36     fileName += t->GetName();
37     fileName += "_PWGCF";
38     if(debug) printf("      - filename: %s \n",fileName.Data());
39     AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
40     if (!mgr) {
41         if(debug) cout << " Fatal error: no analysis manager found! " << endl;
42         return 0x0;
43     }
44     if (!mgr->GetInputEventHandler()) {
45         if(debug) cout << " Fatal error: no imput event handler found!" << endl;
46         return 0x0;
47     }
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)));
54         // create the task
55         AliAnalysisTaskJetFlow* task = new AliAnalysisTaskJetFlow(
56             tempName.Data(),
57             rhoTask,
58             VParticle,
59             VZEROEP,
60             GQC2,            
61             QC2,
62             QC4,
63             FlowPackageSP,
64             FlowPackageQC);
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);
72         if(!task) {
73              if(debug) printf(" --> Unexpected error occurred: NO TASK WAS CREATED! (could be a library problem!)\n ");
74              return 0x0;
75         }
76         // pass specific objects and settigns to the task
77         task->SetMinMaxCentrality(cent->At(i), cent->At(1+i));
78         mgr->AddTask(task);
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);
83         if(FlowPackageSP) {
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;
87         }
88         if(FlowPackageQC) {
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);
91         }
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);
95     }
96     return rhoTask;
97 }
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)
101     {
102         TString fileName = AliAnalysisManager::GetCommonFileName();
103         fileName+=":";
104         fileName+=t->GetName();
105         fileName+="_PWGCF";
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);
114         mgr->AddTask(tskSP);
115         mgr->ConnectInput(tskSP, 0, flowEvent);
116         mgr->ConnectOutput(tskSP, 1, outSP);
117     }
118 //_____________________________________________________________________________
119     void AddQCmethod(char *name, int harmonic, AliAnalysisDataContainer *flowEvent, AliAnalysisTaskRhoVnModulation* t)
120     {
121        TString fileName = AliAnalysisManager::GetCommonFileName();
122        fileName+=":";
123        fileName+=t->GetName();
124        fileName+="_PWGCF";
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);
131        mgr->AddTask(tskQC);
132        mgr->ConnectInput(tskQC, 0, flowEvent);
133        mgr->ConnectOutput(tskQC, 1, outQC);
134     }
135 //_____________________________________________________________________________
136 }// end of namespace TaskJetFlow