]>
Commit | Line | Data |
---|---|---|
1 | AliAnalysisTask *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 | } |