]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/EVCHAR/runProofSPDdNdEta.C
Update for PbPb analysis (Mariella)
[u/mrichter/AliRoot.git] / PWG2 / EVCHAR / runProofSPDdNdEta.C
1 void runProofSPDdNdEta (TString proofCluster="mnicassi@alice-caf.cern.ch",//skaf.saske.sk", 
2           TString alirootVer="VO_ALICE@AliRoot::v4-21-02-AN", TString rootVer="VO_ALICE@ROOT::v5-27-06a-1", 
3           TString dataset="/PWG4/morsch/MC_LHC10f10a",///alice/sim/LHC10g2d_130844",///PWG4/morsch/MC_LHC10f10a",///PWG2/mnicassi/LHC10g1a_130844",//"/alice/sim/LHC10f8a_130844",
4           Bool_t useMC=kTRUE, Bool_t kpbpb=kTRUE, Bool_t readtr=kFALSE, Bool_t recotracklets = kFALSE, Bool_t dataonalien = kFALSE,
5           Float_t centrlowlim=0., Float_t centruplim=5., TString centrest="",
6           Int_t nEvents=1.0*1e7, Int_t nEventsSkip=0) { //1.0*1e7
7
8
9       gEnv->SetValue("XSec.GSI.DelegProxy","2");
10
11       TString alirootMode="";    // STEERBase,ESD,AOD,ANALYSIS,ANALYSISalice (default aliroot mode)
12       TString extraLibs;
13       TList *list = new TList();
14       if (recotracklets) {
15         alirootMode="REC";     // $ALICE_ROOT/macros/loadlibsrec.C
16         extraLibs= "ITSrec:CDB:Geom:"; // not needed in default aliroot mode
17       } else {
18         alirootMode="ALIROOT";
19       }
20       extraLibs+= "ANALYSIS:ANALYSISalice";
21       // sets $ALIROOT_MODE on each worker to let proof to know to run in special mode
22       list->Add(new TNamed("ALIROOT_MODE", alirootMode.Data()));
23       list->Add(new TNamed("ALIROOT_EXTRA_LIBS", extraLibs.Data()));
24       if (recotracklets||dataonalien) list->Add(new TNamed("ALIROOT_ENABLE_ALIEN", "1"));
25
26       //REM: same version of AliRoot on client!
27       TProof::Mgr(proofCluster.Data())->SetROOTVersion(rootVer.Data()); //If not using the default version
28 //      TProof::Open(proofCluster.Data());
29       // enable n workers per machine
30 //      TProof::Open(proofCluster.Data(),"workers=nx")       
31       // enable less workers
32       TProof::Open(proofCluster.Data(),"workers=20"); //For performance reasons, try to avoid it.
33       if (!gProof) {
34         Error("runSPDdNdEtaAna.C","Connection to AF failed.");
35         return;
36       }
37       gProof->EnablePackage(alirootVer.Data(), list);
38
39       Analysis(dataset.Data(), useMC, kpbpb, readtr, recotracklets, nEvents, nEventsSkip, centrlowlim, centruplim, centrest);
40
41 }
42
43 void Analysis(TString dataset, Bool_t useMC, Bool_t kpbpb, Bool_t readtr, Bool_t recotracklets, Int_t nEvents, Int_t nEventsSkip, Float_t centrlowlim, Float_t centruplim, TString centrest) {
44
45   TString format = GetFormatFromDataSet(dataset);
46
47   // ALICE stuff
48   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
49   if (!mgr) mgr = new AliAnalysisManager("Test train");
50
51   InputHandlerSetup(format,useMC,recotracklets);
52
53   // compile the tracklet reconstruction class
54   gProof->Load("AliTrackletAlg.cxx++");
55   // compile analysis task
56   gProof->Load("AliAnalysisTaskSPDdNdEta.cxx++");
57
58   // create manager
59   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
60   if (!mgr) mgr = new AliAnalysisManager("SPD analysis");
61
62   // create task
63   AliAnalysisTaskSPDdNdEta *task = new AliAnalysisTaskSPDdNdEta("AliAnalysisTaskSPDdNdEta");
64
65   AliTriggerAnalysis::Trigger trigg = AliTriggerAnalysis::kAcceptAll; // to be changed every time
66   AliAnalysisTaskSPDdNdEta::MCCentralityBin kmccentrbin = AliAnalysisTaskSPDdNdEta::kall; // idem
67
68   task->SetReadMC(useMC);
69   task->SetTrigger(trigg);
70   task->SetReadPbPb(kpbpb);
71   task->SetReadTrackRefs(readtr);
72   task->SetRecoTracklets(recotracklets);
73   task->SetMCCentralityBin(kmccentrbin);
74   task->SetCentralityLowLim(centrlowlim);
75   task->SetCentralityUpLim(centruplim);
76   task->SetCentralityEst(centrest);
77
78   // physics selection
79 //  gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
80 //  physicsSelectionTask = AddTaskPhysicsSelection(useMC);
81
82   // centrality selection
83   gProof->Load("$ALICE_ROOT/ANALYSIS/AliCentralitySelectionTask.cxx++g");
84   AliCentralitySelectionTask *taskCentr = new AliCentralitySelectionTask("CentralitySelection");
85   taskCentr->SetPercentileFile("$ALICE_ROOT/ANALYSIS/macros/test_AliCentralityBy1D.root");
86   taskCentr->SetPercentileFile2("./test_AliCentralityByFunction.root");
87   mgr->AddTask(taskCentr);
88   mgr->ConnectInput (taskCentr,0, mgr->GetCommonInputContainer());
89
90
91   // create output container
92   if (useMC) AliAnalysisDataContainer *output = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer, "SPDdNdEtaCorr.root");
93   else AliAnalysisDataContainer *output = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer, "SPDdNdEtaData.root");
94
95   // add task to the manager
96   mgr->AddTask(task);
97
98   // connect input and output
99   mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
100   mgr->ConnectOutput(task, 1, output);
101
102   // run analysis
103   mgr->InitAnalysis();
104   // process dataset  
105   mgr->StartAnalysis("proof", dataset.Data(), nEvents, nEventsSkip);
106
107 }
108
109
110 TString GetFormatFromDataSet(TString dataset) {
111
112 //   Info("runAAF.C","Detecting format from dataset (may take while, depends on network connection)...");
113   TString dsTreeName;
114   if (dataset.Contains("#")) {
115     Info("runSPDdNdEta.C",Form("Detecting format from dataset name '%s' ...",dataset.Data()));
116     dsTreeName=dataset(dataset.Last('#'),dataset.Length());
117   } else {
118     Info("runSPDdNdEta.C",Form("Detecting format from dataset '%s' (may take while, depends on network connection) ...",dataset.Data()));
119     TFileCollection *ds = gProof->GetDataSet(dataset.Data());
120     if (!ds) {
121       Error(Form("Dataset %s doesn't exist on proof cluster!!!!",dataset.Data()));
122       return "";
123     }
124     dsTreeName = ds->GetDefaultTreeName();
125   }
126
127   if (dsTreeName.Contains("esdTree")) {
128     Info("runSPDdNdEta.C","ESD input format detected ...");
129     return "ESD";
130   } else if (dsTreeName.Contains("aodTree"))  {
131     Info("runSPDdNdEta.C","AOD input format detected ...");
132     return "AOD";
133   } else {
134     Error("runSPDdNdEta.C",Form("Tree %s is not supported !!!",dsTreeName.Data()));
135     Error("runSPDdNdEta.C",Form("Maybe set your DS to %s#esdTree or %s#aodTree",dataset.Data(),dataset.Data()));
136   }
137
138   return "";
139 }
140
141 Bool_t InputHandlerSetup(TString format = "esd", Bool_t useKine = kTRUE, Bool_t recotracklets)
142 {
143   format.ToLower();
144
145   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
146
147   AliAnalysisDataContainer *cin = mgr->GetCommonInputContainer();
148
149   if (cin) return;
150
151   if (!format.CompareTo("esd"))
152   {
153     AliESDInputHandler *esdInputHandler = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
154
155     if (!esdInputHandler)
156     {
157       Info("CustomAnalysisTaskInputSetup", "Creating esdInputHandler ...");
158       if(recotracklets) esdInputHandler = new AliESDInputHandlerRP();
159       else esdInputHandler = new AliESDInputHandler();
160       mgr->SetInputEventHandler(esdInputHandler);
161     }
162
163     if (useKine)
164     {
165       AliMCEventHandler* mcInputHandler = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
166
167       if (!mcInputHandler)
168       {
169         Info("CustomAnalysisTaskInputSetup", "Creating mcInputHandler ...");
170         AliMCEventHandler* mcInputHandler = new AliMCEventHandler();
171         mgr->SetMCtruthEventHandler(mcInputHandler);
172       }
173     }
174
175   }
176   else if (!format.CompareTo("aod"))
177   {
178     AliAODInputHandler *aodInputHandler = dynamic_cast<AliAODInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
179
180     if (!aodInputHandler)
181     {
182       Info("CustomAnalysisTaskInputSetup", "Creating aodInputHandler ...");
183       aodInputHandler = new AliAODInputHandler();
184       mgr->SetInputEventHandler(aodInputHandler);
185     }
186   }
187   else
188   {
189     AliWarning("Wrong input format!!! Only ESD and AOD are supported. Skipping Task ...");
190     return kFALSE;
191   }
192
193   return kTRUE;
194 }