]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PWGDQ/dielectron/macrosJPSI/AddTask_jbook_JPsi.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / AddTask_jbook_JPsi.C
... / ...
CommitLineData
1AliAnalysisTask *AddTask_jbook_JPsi(TString config="1",
2 TString cfg="ConfigJpsi_jb_PbPb.C",
3 Bool_t gridconf=kFALSE,
4 Bool_t hasMC=kFALSE,
5 ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB,
6 Bool_t bMultiToSingle=kTRUE){
7
8 //get the current analysis manager
9 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
10 if (!mgr) {
11 Error("AddTask_jbook_JPsi", "No analysis manager found.");
12 return 0;
13 }
14
15 //Do we have an MC handler?
16 TString list = gSystem->Getenv("LIST");
17 if(!list.IsNull()) {
18 if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
19 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
20 }
21
22 //Do we have an AOD handler?
23 Bool_t isAOD=(mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class() ? kTRUE : kFALSE);
24
25 // set AOD debug levels
26 if(isAOD) {
27 mgr->AddClassDebug("AliAODTrack", AliLog::kFatal);
28 mgr->AddClassDebug("AliAODpidUtil", AliLog::kInfo);
29 }
30
31 //set config file name
32 TString configFile("");
33 printf("%s \n",gSystem->pwd());
34 TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
35 if(cfg.IsNull()) cfg="ConfigJpsi_jb_PbPb.C";
36
37 // the different paths
38 TString gsiPath("$TRAIN_ROOT/jbook_jpsi/");
39 TString alienPath("alien:///alice/cern.ch/user/j/jbook/PWGDQ/dielectron/macrosJPSI/");
40 TString alirootPath("$ALICE_ROOT/PWGDQ/dielectron/macrosJPSI/");
41
42 ////////// >>>>>>>>>> gsi config
43 if (!trainRoot.IsNull()) configFile=gsiPath.Data();
44 ////////// >>>>>>>>>> alien config
45 else if(!gSystem->Exec(Form("alien_cp %s/%s .",alienPath.Data(),cfg.Data()))) {
46 gSystem->Exec(Form("ls -l %s",gSystem->pwd()));
47 configFile=gSystem->pwd();
48 }
49 else {
50 printf("ERROR: couldn't copy file %s/%s from grid \n", alienPath.Data(),cfg.Data() );
51 return;
52 }
53 ///////// >>>>>>>>> aliroot config
54 if(!gridconf && trainRoot.IsNull()) configFile=alirootPath.Data();
55 ///////// add config to path
56 configFile+="/";
57 configFile+=cfg.Data();
58
59 // trigger selection
60 ULong64_t triggerSets[]={AliVEvent::kCentral , AliVEvent::kSemiCentral , AliVEvent::kMB,
61 AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB};
62 const char* triggerNames[]={"Central","SemiCentral","MB","ALL"};
63 const char* onlineRejection[]={"","CCENT","",""};
64
65 // find out the configured triggers
66 Int_t j=0;
67 for(j=0; j<4; j++) {
68 if(triggers!=triggerSets[j]) continue;
69 else break;
70 }
71
72 // print overall configuration
73 printf("production: %s MC: %d \n", list.Data(),hasMC);
74 printf("triggers: %s \n", triggerNames[j] );
75 printf("config: %s Grid: %d \n",configFile.Data(),gridconf);
76
77 //create task(s)
78 AliAnalysisTaskMultiDielectron *task;
79 if(!bMultiToSingle) {
80 // create one multi task
81 task = new AliAnalysisTaskMultiDielectron(Form("MultiDieJB"));
82 task->SetBeamEnergy(1380.);
83 task->SetTriggerMask(triggers);
84 if(strlen(onlineRejection[j])) task->SetFiredTriggerName(onlineRejection[j],kTRUE);
85 if(!hasMC) task->UsePhysicsSelection();
86 }
87
88 // event filter
89 AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("vertex","vertex");
90 if(isAOD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
91 eventCuts->SetRequireVertex();
92 eventCuts->SetMinVtxContributors(1);
93 if(hasMC) eventCuts->SetVertexZ(-10.,+10.); //for data this is done by in the config
94 eventCuts->SetCentralityRange(0,90.);
95 eventCuts->Print();
96 if(!bMultiToSingle) task->SetEventFilter(eventCuts);
97
98 //load dielectron configuration file (only once)
99 TString checkconfig="ConfigJpsi_jb_PbPb";
100 if (!gROOT->GetListOfGlobalFunctions()->FindObject(checkconfig.Data()))
101 gROOT->LoadMacro(configFile.Data());
102
103 //define default output container
104 TString containerName = "JPSI.root";
105
106 //add dielectron analysis with different cuts to the task
107 for (Int_t i=0; i<nDie; ++i) { //nDie defined in config file
108
109 //only configs switched ON will pass
110 if(config.Length()<=i || config(i,1)!="1") { printf(" %d switched OFF \n",i); continue; }
111
112 // load configuration
113 AliDielectron *jpsi=ConfigJpsi_jb_PbPb(i,hasMC,triggers);
114 if(!jpsi) continue;
115
116 // create unique title
117 TString unitit = Form("%s_%s",triggerNames[j],jpsi->GetName());
118
119 // create single tasks instead of one multi task (decreasing size of CF container)
120 if(bMultiToSingle) {
121 task = new AliAnalysisTaskMultiDielectron(Form("MultiDieJB_%s",unitit.Data()));
122 task->SetBeamEnergy(1380.);
123 task->SetTriggerMask(triggers);
124 if(strlen(onlineRejection[j])) task->SetFiredTriggerName(onlineRejection[j],kTRUE);
125 if(!hasMC) task->UsePhysicsSelection();
126 }
127
128 // add dielectron to the task and manager
129 task->AddDielectron(jpsi);
130
131 // multiple output connection
132 if(bMultiToSingle) {
133 task->SetEventFilter(eventCuts);
134 mgr->AddTask(task);
135
136 //create output sub containers
137 unitit.Prepend("jbook_QA_");
138 AliAnalysisDataContainer *cOutputHist1 =
139 mgr->CreateContainer(unitit.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,containerName.Data());
140 unitit.ReplaceAll("_QA_","_CF_");
141 AliAnalysisDataContainer *cOutputHist2 =
142 mgr->CreateContainer(unitit.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,containerName.Data());
143 unitit.ReplaceAll("_CF_","_EventStat_");
144 AliAnalysisDataContainer *cOutputHist3 =
145 mgr->CreateContainer(unitit.Data(), TH1D::Class(), AliAnalysisManager::kOutputContainer,containerName.Data());
146
147 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
148 // mgr->ConnectOutput(task, 0, coutput1 );
149 mgr->ConnectOutput(task, 1, cOutputHist1);
150 mgr->ConnectOutput(task, 2, cOutputHist2);
151 mgr->ConnectOutput(task, 3, cOutputHist3);
152 }
153
154 printf(" %s added\n",jpsi->GetName());
155
156 } //end : loop over configs
157
158
159 // multiple output connection
160 if(!bMultiToSingle) {
161 mgr->AddTask(task);
162
163 //create output sub containers
164 AliAnalysisDataContainer *cOutputHist1 =
165 mgr->CreateContainer("jbook_QA", TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
166 AliAnalysisDataContainer *cOutputHist2 =
167 mgr->CreateContainer("jbook_CF", TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
168 AliAnalysisDataContainer *cOutputHist3 =
169 mgr->CreateContainer("jbook_EventStat", TH1D::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
170
171 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
172 // mgr->ConnectOutput(task, 0, coutput1 );
173 mgr->ConnectOutput(task, 1, cOutputHist1);
174 mgr->ConnectOutput(task, 2, cOutputHist2);
175 mgr->ConnectOutput(task, 3, cOutputHist3);
176 }
177
178
179 return task;
180}