]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FLOW/macros/AddTaskJetFlow.C
3c5e6c22858e602cf239fd7fb2f690b3f5f571e3
[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         Bool_t debug                       = kFALSE  )
30 {
31     // first check the environment (common to all tasks)
32     if(debug) printf("\n\n  >> AddTaskJetFlow <<\n");
33     TString fileName = AliAnalysisManager::GetCommonFileName();
34     fileName += ":";
35     fileName += t->GetName();
36     fileName += "_PWGCF";
37     if(debug) printf("      - filename: %s \n",fileName.Data());
38     AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
39     if (!mgr) {
40         if(debug) cout << " Fatal error: no analysis manager found! " << endl;
41         return 0x0;
42     }
43     if (!mgr->GetInputEventHandler()) {
44         if(debug) cout << " Fatal error: no imput event handler found!" << endl;
45         return 0x0;
46     }
47     AliAnalysisTaskRhoVnModulation* rhoTask = t; 
48     // check the centrality setup
49     TArrayI* cent(rhoTask->GetCentralityClasses());
50     // add the tasks in a loop, one task for each centrality bin
51     for(Int_t i(0); i < cent->GetSize()-1; i++) {
52         TString tempName(Form("%s_%i_%i", name.Data(), cent->At(i), cent->At(i+1)));
53         // create the task
54         AliAnalysisTaskJetFlow* task = new AliAnalysisTaskJetFlow(
55             tempName.Data(),
56             rhoTask,
57             VParticle,
58             VZEROEP,
59             GQC2,            
60             QC2,
61             QC4,
62             FlowPackageSP,
63             FlowPackageQC);
64         task->SetCCMinPt(CCMinPt);
65         task->SetCCMaxPt(CCMaxPt);
66         task->SetCCBinsInPt(CCBinsInPt);
67         task->SetPtBins(ptArray);       // if passed as NULL default a sane default is provided
68         task->SetLocalRhoName(LocalRhoName);
69         task->SetJetRadius(rhoTask->GetJetRadius());
70         (debug) ? task->SetDebugMode(1) : task->SetDebugMode(-1);
71         if(!task) {
72              if(debug) printf(" --> Unexpected error occurred: NO TASK WAS CREATED! (could be a library problem!)\n ");
73              return 0x0;
74         }
75         // pass specific objects and settigns to the task
76         task->SetMinMaxCentrality(cent->At(i), cent->At(1+i));
77         mgr->AddTask(task);
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         Bool_t slotTwoFilled(kFALSE);
82         if(FlowPackageSP) {
83             AliAnalysisDataContainer *flowEvent_VZERO = mgr->CreateContainer(Form("flowEvent_VZERO_%s", tempName.Data()), AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);
84             mgr->ConnectOutput(task, 2, flowEvent_VZERO);
85             slotTwoFilled = kTRUE;
86         }
87         if(FlowPackageQC) {
88             AliAnalysisDataContainer *flowEvent_TPC = mgr->CreateContainer(Form("flowEvent_TPC_%s", tempName.Data()), AliFlowEventSimple::Class(), AliAnalysisManager::kExchangeContainer);
89             (slotTwoFilled) ? mgr->ConnectOutput(task, 3, flowEvent_TPC) : mgr->ConnectOutput(task, 2, flowEvent_TPC);
90         }
91         if(FlowPackageSP) TaskJetFlow::AddSPmethod(Form("SPVZERO_A_%s", tempName.Data()), "Qa", 2, flowEvent_VZERO, t);
92         if(FlowPackageSP) TaskJetFlow::AddSPmethod(Form("SPVZERO_B_%s", tempName.Data()), "Qb", 2, flowEvent_VZERO, t);
93         if(FlowPackageQC) TaskJetFlow::AddQCmethod(Form("QC_%s", tempName.Data()), 2, flowEvent_TPC, t);
94     }
95     return rhoTask;
96 }
97 //_____________________________________________________________________________
98 namespace TaskJetFlow{ // use unique namespace to avoid problems in TRAIN analysis
99     void AddSPmethod(char *name, char *Qvector, int harmonic, AliAnalysisDataContainer *flowEvent, AliAnalysisTaskRhoVnModulation* t)
100     {
101         TString fileName = AliAnalysisManager::GetCommonFileName();
102         fileName+=":";
103         fileName+=t->GetName();
104         fileName+="_PWGCF";
105         AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
106         AliAnalysisDataContainer *outSP = mgr->CreateContainer(name, TList::Class(), AliAnalysisManager::kOutputContainer, fileName);
107         AliAnalysisTaskScalarProduct *tskSP = new AliAnalysisTaskScalarProduct(Form("TaskScalarProduct_%s", name), kFALSE);
108         tskSP->SetApplyCorrectionForNUA(kTRUE);
109         tskSP->SetHarmonic(harmonic);
110         if(!strcmp("Qa", Qvector)) tskSP->SetTotalQvector("Qa");
111         if(!strcmp("Qb", Qvector)) tskSP->SetTotalQvector("Qb");
112         tskSP->SetBookOnlyBasicCCH(kFALSE);
113         mgr->AddTask(tskSP);
114         mgr->ConnectInput(tskSP, 0, flowEvent);
115         mgr->ConnectOutput(tskSP, 1, outSP);
116     }
117 //_____________________________________________________________________________
118     void AddQCmethod(char *name, int harmonic, AliAnalysisDataContainer *flowEvent, AliAnalysisTaskRhoVnModulation* t)
119     {
120        TString fileName = AliAnalysisManager::GetCommonFileName();
121        fileName+=":";
122        fileName+=t->GetName();
123        fileName+="_PWGCF";
124        AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
125        AliAnalysisDataContainer *outQC = mgr->CreateContainer(name, TList::Class(), AliAnalysisManager::kOutputContainer, fileName);
126        AliAnalysisTaskQCumulants *tskQC = new AliAnalysisTaskQCumulants(Form("TaskQCumulants_%s", name), kFALSE);
127        tskQC->SetApplyCorrectionForNUA(kTRUE);
128        tskQC->SetHarmonic(harmonic);
129        tskQC->SetBookOnlyBasicCCH(kFALSE);
130        mgr->AddTask(tskQC);
131        mgr->ConnectInput(tskQC, 0, flowEvent);
132        mgr->ConnectOutput(tskQC, 1, outQC);
133     }
134 //_____________________________________________________________________________
135 }// end of namespace TaskJetFlow