]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG0/multVScentPbPb/MyAnalysisMacro.C
- macro for creating OCDB configuration objects of the GlobalHisto component
[u/mrichter/AliRoot.git] / PWG0 / multVScentPbPb / MyAnalysisMacro.C
CommitLineData
a9a39f46 1void MyAnalysisMacro(TString dataset="/alice/sim/LHC10f8f_130844",
2 TString outFName="trbg.root",
3 Bool_t doRec = kTRUE,
4 Bool_t doInj = kTRUE,
5 Bool_t doRot = kTRUE,
6 Bool_t doMix = kFALSE,
7 Bool_t useMC = kTRUE,
8 Bool_t checkReconstructables = kTRUE,
9 //
10 Float_t etaCut = 2.5,
11 //
12 // specific parameters for reconstruction
13 //----------------------- Zv selection parameters important for mixing, to be tuned
14 Float_t zMin = -20,
15 Float_t zMax = 20,
16 Float_t zMixBinSz = 5, //0.1,
17 //---------------------------------------------------------------------------------
18 //
19 //----------------------- Ntracklets selection parameters important for mixing, to be tuned
20 Float_t ntMin = 1,
21 Float_t ntMax = 15000,
22 Float_t ntMixBinSz = 5000,
23 //---------------------------------------------------------------------------------
24 //
25 float phiRot = 3.14159e+00,
26 float injScale = 0.7,
27 Bool_t scaleDTheta = kTRUE,
28 float nStdDev = 25.,
29 float dphi = 0.08,
30 float dtht = 0.025,
31 float phishift = 0.0045,
32 Bool_t remOvl = kTRUE,
33 float ovlPhiCut = 0.005,
34 float ovlZetaCut = 0.05,
35 Int_t nEvents = 50000,
36 Int_t nEventsSkip = 0)
37{
38 //
39 TString format = GetFormatFromDataSet(dataset);
40 //
41 // ALICE stuff
42 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
43 if (!mgr) mgr = new AliAnalysisManager("Test train");
44 //
45 InputHandlerSetup(format,useMC);
46 if (doMix) MixHandlerSetup(ntMin,ntMax,ntMixBinSz, zMin,zMax,zMixBinSz);
47 // compile our task
48 gProof->Load("AliITSMultRecBg.cxx++");
49 gProof->Load("AliTrackletTaskUni.cxx++");
50 //
51 // load and run AddTask macro
52 gROOT->LoadMacro("AddMultTaskRS.C");
53 //
54 // create our task
55 AliTrackletTaskUni *mltTask = AddMultTaskRS(outFName.Data());
56 //
57 mltTask->SetDoNormalReco(doRec);
58 mltTask->SetDoInjection(doInj);
59 mltTask->SetDoRotation(doRot);
60 mltTask->SetDoMixing(doMix);
61 //
62 mltTask->SetUseMC(useMC);
63 mltTask->SetCheckReconstructables(checkReconstructables);
64 //
65 mltTask->SetEtaCut(etaCut);
66 mltTask->SetZVertexMin(zMin);
67 mltTask->SetZVertexMax(zMax);
68 mltTask->SetMultCutMin(ntMin);
69 mltTask->SetMultCutMax(ntMax);
70 //
71 mltTask->SetScaleDThetaBySin2T(scaleDTheta);
72 mltTask->SetNStdDev(nStdDev);
73 mltTask->SetPhiWindow(dphi);
74 mltTask->SetThetaWindow(dtht);
75 mltTask->SetPhiShift(phishift);
76 mltTask->SetPhiOverlapCut(ovlPhiCut);
77 mltTask->SetZetaOverlapCut(ovlZetaCut);
78 mltTask->SetPhiRot(phiRot);
79 mltTask->SetInjScale(injScale);
80 mltTask->SetRemoveOverlaps(remOvl);
81 //
82 printf("new Task: %p\n",mltTask);
83 //
84 AddPhysicsSelection(useMC);
85 mltTask->SelectCollisionCandidates(useMC ? (AliVEvent::kMB) : (AliVEvent::kUserDefined) );
86 //
87 // Run analysis
88 mgr->InitAnalysis();
89 // process dataset
90 mgr->StartAnalysis("proof", dataset.Data(), nEvents, nEventsSkip);
91 //
92 TString evstCmd = "if [ -e event_stat.root ]; then \nmv event_stat.root evstat_";
93 evstCmd += outFName; evstCmd += " \nfi";
94 gSystem->Exec( evstCmd.Data() );
95
96}
97
98
99TString GetFormatFromDataSet(TString dataset) {
100
101// Info("runAAF.C","Detecting format from dataset (may take while, depends on network connection)...");
102 TString dsTreeName;
103 if (dataset.Contains("#")) {
104 Info("runAAF.C",Form("Detecting format from dataset name '%s' ...",dataset.Data()));
105 dsTreeName=dataset(dataset.Last('#'),dataset.Length());
106 } else {
107 Info("runAAF.C",Form("Detecting format from dataset '%s' (may take while, depends on network connection) ...",dataset.Data()));
108 TFileCollection *ds = gProof->GetDataSet(dataset.Data());
109 if (!ds) {
110 Error(Form("Dataset %s doesn't exist on proof cluster!!!!",dataset.Data()));
111 return "";
112 }
113 dsTreeName = ds->GetDefaultTreeName();
114 }
115
116 if (dsTreeName.Contains("esdTree")) {
117 Info("runAAF.C","ESD input format detected ...");
118 return "ESD";
119 } else if (dsTreeName.Contains("aodTree")) {
120 Info("runAAF.C","AOD input format detected ...");
121 return "AOD";
122 } else {
123 Error("runAAF.C",Form("Tree %s is not supported !!!",dsTreeName.Data()));
124 Error("runAAF.C",Form("Maybe set your DS to %s#esdTree or %s#aodTree",dataset.Data(),dataset.Data()));
125 }
126
127 return "";
128}
129
130Bool_t InputHandlerSetup(TString format = "esd", Bool_t useKine = kTRUE)
131{
132 format.ToLower();
133
134 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
135
136 AliAnalysisDataContainer *cin = mgr->GetCommonInputContainer();
137
138 if (cin) return;
139
140 if (!format.CompareTo("esd"))
141 {
142 AliESDInputHandler *esdInputHandler = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
143
144 if (!esdInputHandler)
145 {
146 Info("CustomAnalysisTaskInputSetup", "Creating esdInputHandler ...");
147 esdInputHandler = new AliESDInputHandlerRP();
148 mgr->SetInputEventHandler(esdInputHandler);
149 }
150
151 if (useKine)
152 {
153 AliMCEventHandler* mcInputHandler = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
154
155 if (!mcInputHandler)
156 {
157 Info("CustomAnalysisTaskInputSetup", "Creating mcInputHandler ...");
158 AliMCEventHandler* mcInputHandler = new AliMCEventHandler();
159 mgr->SetMCtruthEventHandler(mcInputHandler);
160 }
161 }
162
163 }
164 else if (!format.CompareTo("aod"))
165 {
166 AliAODInputHandler *aodInputHandler = dynamic_cast<AliAODInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
167
168 if (!aodInputHandler)
169 {
170 Info("CustomAnalysisTaskInputSetup", "Creating aodInputHandler ...");
171 aodInputHandler = new AliAODInputHandler();
172 mgr->SetInputEventHandler(aodInputHandler);
173 }
174 }
175 else
176 {
177 Info("Wrong input format!!! Only ESD and AOD are supported. Skipping Task ...");
178 return kFALSE;
179 }
180
181 return kTRUE;
182}
183
184void MixHandlerSetup(float ntMin,float ntMax,float ntMixBinSz,
185 float zMin, float zMax, float zMixBinSz)
186{
187 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
188 if (!mgr) return;
189 int bufferSize = 1;
190 AliESDInputHandlerRP *esdH = dynamic_cast<AliESDInputHandlerRP*>(mgr->GetInputEventHandler());
191 if (!esdH) return;
192 //
193 AliMixEventInputHandler *esdMixH = new AliMixEventInputHandler(bufferSize);
194 esdMixH->SetInputHandlerForMixing(esdH);
195 AliMixEventPool *evPool = new AliMixEventPool("MyPool");
196 AliMixEventCutObj *tracklets = new AliMixEventCutObj(AliMixEventCutObj::kNumberTracklets, ntMin,ntMax,ntMixBinSz);
197 AliMixEventCutObj *zvertex = new AliMixEventCutObj(AliMixEventCutObj::kZVertex, zMin,zMax, zMixBinSz);
198 // evPool->AddCut(tracklets);
199 evPool->AddCut(zvertex);
200 //evPool->Init();
201 evPool->Print();
202 esdMixH->SetEventPool(evPool);
203 esdH->SetMixingHandler(esdMixH);
204}
205
206void AddPhysicsSelection(Bool_t isMC)
207{
208 // physics selection a la Michele
209 printf("Requesting physics selection in %s mode\n",isMC ? "MC":"Data");
210 gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
211 //isMC is true when processing monte carlo, the second 0 disables the cluster vs tracklets
212 AliPhysicsSelectionTask* physicsSelectionTask = AddTaskPhysicsSelection(isMC,0);
213 if(!isMC) {
214 AliPhysicsSelection * physSel = physicsSelectionTask->GetPhysicsSelection();
215 physSel->AddCollisionTriggerClass("+CMBAC-B-NOPF-ALL");
216 /*
217 physSel->AddCollisionTriggerClass("+CMBS1C-B-NOPF-ALL");
218 physSel->AddCollisionTriggerClass("+CMBS1A-B-NOPF-ALL");
219 */
220 //
221 physSel->AddCollisionTriggerClass("+CMBS2C-B-NOPF-ALL");
222 physSel->AddCollisionTriggerClass("+CMBS2A-B-NOPF-ALL");
223 //
224 // This are needed only to fill the statistics tables
225 physSel->AddBGTriggerClass("+CMBAC-C-NOPF-ALL");
226 physSel->AddBGTriggerClass("+CMBAC-A-NOPF-ALL");
227 physSel->AddBGTriggerClass("+CMBAC-E-NOPF-ALL");
228 //
229 /*
230 physSel->AddBGTriggerClass("+CMBS1C-C-NOPF-ALL");
231 physSel->AddBGTriggerClass("+CMBS1C-A-NOPF-ALL");
232 physSel->AddBGTriggerClass("+CMBS1C-E-NOPF-ALL");
233 //
234 physSel->AddBGTriggerClass("+CMBS1A-C-NOPF-ALL");
235 physSel->AddBGTriggerClass("+CMBS1A-A-NOPF-ALL");
236 physSel->AddBGTriggerClass("+CMBS1A-E-NOPF-ALL");
237 //
238 */
239 /*
240 //
241 physSel->AddBGTriggerClass("+CMBS2C-C-NOPF-ALL");
242 physSel->AddBGTriggerClass("+CMBS2C-A-NOPF-ALL");
243 physSel->AddBGTriggerClass("+CMBS2C-E-NOPF-ALL");
244 //
245 physSel->AddBGTriggerClass("+CMBS2A-C-NOPF-ALL");
246 physSel->AddBGTriggerClass("+CMBS2A-A-NOPF-ALL");
247 physSel->AddBGTriggerClass("+CMBS2A-E-NOPF-ALL");
248 */
249 }
250 // if you use the following line, your task only gets the selected events
251 // task->SelectCollisionCandidates(AliVEvent::kUserDefined);
252 //
253 //Alternatively, in the UserExec of your task:
254 //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kUserDefined);
255 //
256}