]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FLOW/macros/AddTaskJetFlow.C
from Redmer Bertens:
[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 AliFlowTrackCuts;
9
10 void AddTaskJetFlow( TString name       = "name",
11                      TString jets       = "jets",
12                      TString tracks     = "tracks",
13                      Float_t ptbump     = 0,
14                      TArrayI* cent      = 0x0,
15                      Float_t MinPOIPt   = 0.15,
16                      Float_t MaxPOIPt   = 150,
17                      Float_t CCBinsInPt = 100,
18                      Bool_t VParticle   = kFALSE,
19                      Int_t year         = -1,
20                      Bool_t testFlow    = kFALSE,
21                      Bool_t SP          = kFALSE,
22                      Bool_t QC          = kFALSE,
23                      Bool_t debug       = kFALSE  )
24 {
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();
31     if (!mgr) {
32         if(debug) cout << " Fatal error: no analysis manager found! " << endl;
33         return 0x0;
34     }
35     if (!mgr->GetInputEventHandler()) {
36         if(debug) cout << " Fatal error: no imput event handler found!" << endl;
37         return 0x0;
38     }
39     // check the centrality setup
40     if(!cent) {
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());
44     }
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);
51
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)));
55         // create the task
56         AliAnalysisTaskJetFlow* task = new AliAnalysisTaskJetFlow(
57             tempName.Data(),
58             CutsRP_TPC,
59             CutsRP_VZERO,
60             jets,
61             tracks);
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);
69         if(!task) {
70              if(debug) cout << " --> Unexpected error occurred: NO TASK WAS CREATED! (could be a library problem!) " << endl;
71              return 0x0;
72         }
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);
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         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);
88     }
89 }
90 //_____________________________________________________________________________
91 namespace TaskJetFlow{ // use unique namespace to avoid problems in TRAIN analysis
92     void AddSPmethod(char *name, char *Qvector, int harmonic, AliAnalysisDataContainer *flowEvent)
93     {
94         TString fileName = AliAnalysisManager::GetCommonFileName();
95         fileName+=":SP";
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);
104         mgr->AddTask(tskSP);
105         mgr->ConnectInput(tskSP, 0, flowEvent);
106         mgr->ConnectOutput(tskSP, 1, outSP);
107     }
108 //_____________________________________________________________________________
109     void AddQCmethod(char *name, int harmonic, AliAnalysisDataContainer *flowEvent)
110     {
111        TString fileName = AliAnalysisManager::GetCommonFileName();
112        fileName+=":QC";
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);
119        mgr->AddTask(tskQC);
120        mgr->ConnectInput(tskQC, 0, flowEvent);
121        mgr->ConnectOutput(tskQC, 1, outQC);
122     }
123 //_____________________________________________________________________________
124 }// end of namespace TaskJetFlow