]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/macrosJPSI/AddTask_jbook_JPsi.C
-change multi task to single tasks (reduced cf container)
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / AddTask_jbook_JPsi.C
1 AliAnalysisTask *AddTask_jbook_JPsi(Bool_t gridconf=kFALSE,
2                                     Bool_t hasMC=kFALSE,
3                                     ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB){
4
5   //get the current analysis manager
6   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
7   if (!mgr) {
8     Error("AddTask_jbook_JPsi", "No analysis manager found.");
9     return 0;
10   }
11
12   //Do we have an MC handler?
13   TString list = gSystem->Getenv("LIST");
14   if(!list.IsNull()) {
15     if( list.Contains("LHC10h")   || list.Contains("LHC11h")   ) hasMC=kFALSE;
16     if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
17   }
18
19   //Do we have an AOD handler?
20   Bool_t isAOD=(mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class() ? kTRUE : kFALSE);
21
22   // set AOD debug levels
23   if(isAOD) {
24     mgr->AddClassDebug("AliAODTrack", AliLog::kFatal);
25     mgr->AddClassDebug("AliAODpidUtil", AliLog::kInfo);
26   }
27
28   //set config file name
29   TString configFile("");
30   printf("%s \n",gSystem->pwd());
31   TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
32   if (!trainRoot.IsNull())
33     configFile="$TRAIN_ROOT/jbook_jpsi/ConfigJpsi_jb_PbPb.C";   // gsi config
34   else if(!gSystem->Exec("alien_cp alien:///alice/cern.ch/user/j/jbook/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C .")) {
35     gSystem->Exec(Form("ls -l %s",gSystem->pwd()));
36     configFile=Form("%s/ConfigJpsi_jb_PbPb.C",gSystem->pwd());                        // alien config
37   }
38   else {
39     printf("ERROR: couldn't copy file %s from grid \n",
40            "alien:///alice/cern.ch/user/j/jbook/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C");
41     return;
42   }
43
44   // using aliroot config
45   if(!gridconf && trainRoot.IsNull())
46     configFile="$ALICE_ROOT/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_jb_PbPb.C"; // aliroot config
47
48
49   //create task
50   AliAnalysisTaskMultiDielectron *task;
51
52   // trigger selection
53   ULong64_t triggerSets[]={AliVEvent::kCentral , AliVEvent::kSemiCentral , AliVEvent::kMB,
54                            AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB};
55   const char* triggerNames[]={"Central","SemiCentral","MB","ALL"};
56   const char* onlineRejection[]={"","CCENT","",""};
57
58   // find out the configured triggers
59   Int_t j=0;
60   for(j=0; j<4; j++) {
61     if(triggers!=triggerSets[j]) continue;
62     else break;
63   }
64
65   // print overall configuration
66   printf("production: %s MC: %d \n",  list.Data(),hasMC);
67   printf("triggers:   %s \n",         triggerNames[j]  );
68   printf("config:     %s Grid: %d \n",configFile.Data(),gridconf);
69
70   //load dielectron configuration file
71   TString checkconfig="ConfigJpsi_jb_PbPb";
72   if (!gROOT->GetListOfGlobalFunctions()->FindObject(checkconfig.Data()))
73     gROOT->LoadMacro(configFile.Data());
74
75   //define default output container
76   TString containerName = "JPSI.root";
77
78   //add dielectron analysis with different cuts to the task
79   for (Int_t i=0; i<nDie; ++i) { //nDie defined in config file
80
81     // load configuration
82     AliDielectron *jpsi=ConfigJpsi_jb_PbPb(i,hasMC,triggers);
83     if(!jpsi) continue;
84
85     // create unique title
86     TString unitit = Form("%s_%s",triggerNames[j],jpsi->GetName());
87
88     // create single tasks instead of a multi task
89     task = new AliAnalysisTaskMultiDielectron(Form("MultiDieJB_%s",unitit.Data()));
90     task->SetBeamEnergy(1380.);
91     task->SetTriggerMask(triggers);
92     if(strlen(onlineRejection[j])) task->SetFiredTriggerName(onlineRejection[j],kTRUE);
93     if(!hasMC) task->UsePhysicsSelection();
94
95     // add dielectron to the task and manager
96     task->AddDielectron(jpsi);
97     mgr->AddTask(task);
98
99     //create output sub containers
100     AliAnalysisDataContainer *cOutputHist1 =
101       mgr->CreateContainer(Form("jbook_QA_%s",unitit.Data()),
102                            TList::Class(),
103                            AliAnalysisManager::kOutputContainer,
104                            containerName.Data());
105     
106     AliAnalysisDataContainer *cOutputHist2 =
107       mgr->CreateContainer(Form("jbook_CF_%s",unitit.Data()),
108                            TList::Class(),
109                            AliAnalysisManager::kOutputContainer,
110                            containerName.Data());
111     
112     AliAnalysisDataContainer *cOutputHist3 =
113       mgr->CreateContainer(Form("jbook_EventStat_%s",unitit.Data()),
114                            TH1D::Class(),
115                            AliAnalysisManager::kOutputContainer,
116                            containerName.Data());
117
118     mgr->ConnectInput(task,  0, mgr->GetCommonInputContainer());
119     //  mgr->ConnectOutput(task, 0, coutput1 );
120     mgr->ConnectOutput(task, 1, cOutputHist1);
121     mgr->ConnectOutput(task, 2, cOutputHist2);
122     mgr->ConnectOutput(task, 3, cOutputHist3);
123
124     printf(" %s added\n",jpsi->GetName());
125
126   }
127
128
129   return task;
130 }