1 AliAnalysisTask *AddTask_pdill_JPsi(TString config="1",
2 TString cfg="ConfigJpsi_jb_PbPb.C",
3 Bool_t gridconf=kFALSE,
5 ULong64_t triggers=AliVEvent::kAnyINT
8 //get the current analysis manager
9 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
11 Error("AddTask_pdill_JPsi", "No analysis manager found.");
14 printf("------------------------------------------------\n");
16 //Do we have an MC handler?
17 TString list = gSystem->Getenv("LIST");
19 if( list.Contains("LHC10c") || list.Contains("LHC11h") ) hasMC=kFALSE; // add periods
20 if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE; // to be dapated
23 //Do we have an AOD handler?
24 Bool_t isAOD=(mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class() ? kTRUE : kFALSE);
26 // set AOD debug levels
28 mgr->AddClassDebug("AliAODTrack", AliLog::kFatal);
29 mgr->AddClassDebug("AliAODpidUtil", AliLog::kInfo);
32 //set config file name
33 TString configFile("");
34 printf("pwd: %s \n",gSystem->pwd());
35 if(cfg.IsNull()) cfg="ConfigJpsi_pd_pp.C";
37 // the different paths
38 TString alienPath("alien:///alice/cern.ch/user/p/pdillens/PWGDQ/dielectron/macrosJPSI/");
39 TString alirootPath("$ALICE_ROOT/PWGDQ/dielectron/macrosJPSI/");
41 ////////// >>>>>>>>>> alien config
43 if(!gSystem->Exec(Form("alien_cp %s/%s .",alienPath.Data(),cfg.Data()))) {
44 gSystem->Exec(Form("ls -l %s",gSystem->pwd()));
45 configFile=gSystem->pwd();
48 printf("ERROR: couldn't copy file %s/%s from grid \n", alienPath.Data(),cfg.Data() );
52 ///////// >>>>>>>>> aliroot config
53 else if(!gridconf) configFile=alirootPath.Data();
54 ///////// add config to path
56 configFile+=cfg.Data();
59 ULong64_t triggerSets[]={AliVEvent::kAnyINT};
60 const char* triggerNames[]={"MinBias"};
63 // print overall configuration
64 printf("production: %s MC: %d \n", list.Data(),hasMC);
65 printf("triggers: %s \n", triggerNames[j] );
66 printf("config: %s Grid: %d \n",configFile.Data(),gridconf);
67 printf("------------------------------------------------\n");
70 AliAnalysisTaskMultiDielectron *task;
71 // create one multi task
72 task = new AliAnalysisTaskMultiDielectron(Form("MultiDieJB"));
73 task->SetBeamEnergy(3.5);
74 task->SetTriggerMask(triggers);
75 if(!hasMC) task->UsePhysicsSelection();
78 AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("vertex","vertex");
79 if(isAOD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
80 eventCuts->SetRequireVertex();
81 eventCuts->SetMinVtxContributors(1);
82 if(hasMC) eventCuts->SetVertexZ(-10.,+10.); //for data this is done by in the config
84 task->SetEventFilter(eventCuts);
86 //load dielectron configuration file (only once)
87 TString checkconfig="ConfigJpsi_pd_pp";
88 if (!gROOT->GetListOfGlobalFunctions()->FindObject(checkconfig.Data()))
89 gROOT->LoadMacro(configFile.Data());
91 //define default output container
92 TString containerName = "JPSI.root";
94 //add dielectron analysis with different cuts to the task
95 for (Int_t i=0; i<nDie; ++i) { //nDie defined in config file
97 //only configs switched ON will pass
98 if(config.Length()<=i || config(i,1)!="1") {
99 printf("================================================\n Skip config %02d\n",i); continue; }
101 // load configuration
102 AliDielectron *jpsi=ConfigJpsi_pd_pp(i,hasMC,"");
105 // create unique title
106 TString unitit = Form("%s_%s",triggerNames[j],jpsi->GetName());
108 // add dielectron to the task and manager
109 task->AddDielectron(jpsi);
111 printf(" Config %s added\n",jpsi->GetName());
113 } //end : loop over configs
115 // multiple output connection
118 //create output sub containers
119 AliAnalysisDataContainer *cOutputHist1 =
120 mgr->CreateContainer("pdill_QA", TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
121 AliAnalysisDataContainer *cOutputHist2 =
122 mgr->CreateContainer("pdill_CF", TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
123 AliAnalysisDataContainer *cOutputHist3 =
124 mgr->CreateContainer("pdill_EventStat", TH1D::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
126 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
127 // mgr->ConnectOutput(task, 0, coutput1 );
128 mgr->ConnectOutput(task, 1, cOutputHist1);
129 mgr->ConnectOutput(task, 2, cOutputHist2);
130 mgr->ConnectOutput(task, 3, cOutputHist3);