]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/AddTask_jbook_JPsi.C
Merge branch 'master' into TRDdev
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / AddTask_jbook_JPsi.C
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 }