]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGUD/multVScentPbPb/MyAnalysisMacroUni.C
ATO-17 Removing compilation warnings (copy constructor)
[u/mrichter/AliRoot.git] / PWGUD / multVScentPbPb / MyAnalysisMacroUni.C
CommitLineData
3c78f321 1Bool_t needRecPoints = kFALSE;
2
3void MyAnalysisMacroUni
4(
5 TString dataset="/alice/sim/LHC10f8c_130844",
6 TString outFName = "trbg.root",
7 TString noMergeDir = "",
8 Int_t nEvents = -1,
9 Bool_t useMC = kTRUE, // fill MC info (doRec=kTRUE)
10 Float_t etaMin =-0.5, // min eta range to fill in histos
11 Float_t etaMax = 0.5, // max eta range to fill in histos
12 Float_t zMin = -7, // process events with Z vertex min
13 Float_t zMax = 7, // max positions
14 Int_t ntMin = 1,
15 Int_t ntMax = 999999,
16 float injScale = 1., // inject injScale*Ncl(Lr1/Lr2) hits
17 Bool_t scaleDTheta = kTRUE, // scale dTheta by 1/sin^2(theta) in trackleting
18 float nStdDev = 25., // number of st.dev. for tracklet cut to keep
19 float dphi = 0.06, // dphi window (sigma of tracklet cut)
20 float dtht = 0.025, // dtheta .... (if negative, abs will be used with additional cut on |dthetaX|, apart from w.distance
21 float phishift = 0.0045, // bending shift
22 Bool_t remOvl = kTRUE,
23 float ovlPhiCut = 0.005,
24 float ovlZetaCut = 0.05,
25 Float_t scaleMCV0 = 0.8, // rescale MC V0 to match data
26 Bool_t checkReconstructables = kFALSE//kTRUE, // fill histos for reconstructable (needs useMC and doRec)
27 )
28{
29 //
30 //
31 needRecPoints = kTRUE; //doRec || doInj || doRot || doMix;
32 //
33 printf("Start Analysis for %s, max %d Events, Event Cuts: %.1f<eta<%.1f, %.2f<Zv<%.2f\n",
34 dataset.Data(),nEvents,etaMin,etaMax,zMin,zMax);
35 printf("Tracklet cuts: dPhi:%.3f dTheta:%.3f phiShift:%.4f | Keep %.1f NstDev\n"
36 "Scale dTheta: %s\n",
37 dphi,dtht,phishift,nStdDev,scaleDTheta ? "ON":"OFF");
38 //
39 printf("UseMC: %s. V0 scale: %.4f\n",useMC ? "ON":"OFF",scaleMCV0);
40 //
41 if (nEvents<0) nEvents = int(1e9);
42 TString format = GetFormatFromDataSet(dataset);
43 //
44 // ALICE stuff
45 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
46 if (!mgr) mgr = new AliAnalysisManager("Test train");
47 //
48 InputHandlerSetup(format,useMC);
49 // compile our task
50 gProof->Load("AliITSMultRecBg.cxx++");
51 gProof->Load("AliTrackletTaskUni.cxx++");
52 //
53 // load and run AddTask macro
54 gROOT->LoadMacro("AddMultTaskTrackletUni.C");
55 //
56 // create our task
57 AliTrackletTaskUni *mltTask = AddMultTaskTrackletUni(outFName.Data(),noMergeDir);
58
59 //
60 mltTask->SetDoNormalReco(kTRUE);
61 mltTask->SetDoInjection(kTRUE);
62 mltTask->SetDoRotation(kFALSE);
63 mltTask->SetDoMixing(kFALSE);
64 //
65 mltTask->SetUseMC(useMC);
66 mltTask->SetCheckReconstructables(checkReconstructables);
67 //
68 mltTask->SetEtaMin(etaMin);
69 mltTask->SetEtaMax(etaMax);
70 mltTask->SetZVertexMin(zMin);
71 mltTask->SetZVertexMax(zMax);
72 //
73 mltTask->SetMultCutMin(ntMin);
74 mltTask->SetMultCutMax(ntMax);
75 //
76 // mltTask->SetNStdCut(cutSigNStd);
77 mltTask->SetScaleMCV0(scaleMCV0);
78 //
79 mltTask->SetScaleDThetaBySin2T(scaleDTheta);
80 mltTask->SetNStdDev(nStdDev);
81 mltTask->SetPhiWindow(dphi);
82 mltTask->SetThetaWindow(dtht);
83 mltTask->SetPhiShift(phishift);
84 mltTask->SetPhiOverlapCut(ovlPhiCut);
85 mltTask->SetZetaOverlapCut(ovlZetaCut);
86 mltTask->SetInjScale(injScale);
87 mltTask->SetRemoveOverlaps(remOvl);
88 //
89 printf("new Task: %p\n",mltTask);
90 //
91 printf("Requesting physics selection in %s mode\n",useMC ? "MC":"Data");
92 gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
93 // /*
94 //gROOT->ProcessLine(".L AddTaskPhysicsSelection.C");
95 AliPhysicsSelectionTask* physicsSelectionTask = AddTaskPhysicsSelection(useMC,0);
96 mltTask->SelectCollisionCandidates();//AliVEvent::kMB);
97 //
98 // */
99 // Run analysis
100 mgr->InitAnalysis();
101 // process dataset
102 mgr->StartAnalysis("proof", dataset.Data(), nEvents, 0);
103 //
104 TString evstCmd = "if [ -e event_stat.root ]; then \nmv event_stat.root evstat_";
105 evstCmd += outFName; evstCmd += " \nfi";
106 gSystem->Exec( evstCmd.Data() );
107
108}
109
110
111TString GetFormatFromDataSet(TString dataset) {
112
113// Info("runAAF.C","Detecting format from dataset (may take while, depends on network connection)...");
114 TString dsTreeName;
115 if (dataset.Contains("#")) {
116 Info("runAAF.C",Form("Detecting format from dataset name '%s' ...",dataset.Data()));
117 dsTreeName=dataset(dataset.Last('#'),dataset.Length());
118 } else {
119 Info("runAAF.C",Form("Detecting format from dataset '%s' (may take while, depends on network connection) ...",dataset.Data()));
120 TFileCollection *ds = gProof->GetDataSet(dataset.Data());
121 if (!ds) {
122 Error(Form("Dataset %s doesn't exist on proof cluster!!!!",dataset.Data()));
123 return "";
124 }
125 dsTreeName = ds->GetDefaultTreeName();
126 }
127
128 if (dsTreeName.Contains("esdTree")) {
129 Info("runAAF.C","ESD input format detected ...");
130 return "ESD";
131 } else if (dsTreeName.Contains("aodTree")) {
132 Info("runAAF.C","AOD input format detected ...");
133 return "AOD";
134 } else {
135 Error("runAAF.C",Form("Tree %s is not supported !!!",dsTreeName.Data()));
136 Error("runAAF.C",Form("Maybe set your DS to %s#esdTree or %s#aodTree",dataset.Data(),dataset.Data()));
137 }
138
139 return "";
140}
141
142Bool_t InputHandlerSetup(TString format = "esd", Bool_t useKine = kTRUE)
143{
144 format.ToLower();
145
146 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
147
148 AliAnalysisDataContainer *cin = mgr->GetCommonInputContainer();
149
150 if (cin) return;
151
152 if (!format.CompareTo("esd"))
153 {
154 AliESDInputHandler *esdInputHandler = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
155
156 if (!esdInputHandler)
157 {
158 Info("CustomAnalysisTaskInputSetup", "Creating esdInputHandler ...");
159 if (needRecPoints)
160 esdInputHandler = new AliESDInputHandlerRP();
161 else
162 esdInputHandler = new AliESDInputHandler();
163 //
164 mgr->SetInputEventHandler(esdInputHandler);
165 }
166 //
167 if (useKine)
168 {
169 AliMCEventHandler* mcInputHandler = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
170
171 if (!mcInputHandler)
172 {
173 Info("CustomAnalysisTaskInputSetup", "Creating mcInputHandler ...");
174 AliMCEventHandler* mcInputHandler = new AliMCEventHandler();
175 mgr->SetMCtruthEventHandler(mcInputHandler);
176 }
177 }
178
179 }
180 else if (!format.CompareTo("aod"))
181 {
182 AliAODInputHandler *aodInputHandler = dynamic_cast<AliAODInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
183
184 if (!aodInputHandler)
185 {
186 Info("CustomAnalysisTaskInputSetup", "Creating aodInputHandler ...");
187 aodInputHandler = new AliAODInputHandler();
188 mgr->SetInputEventHandler(aodInputHandler);
189 }
190 }
191 else
192 {
193 Info("Wrong input format!!! Only ESD and AOD are supported. Skipping Task ...");
194 return kFALSE;
195 }
196
197 return kTRUE;
198}
199
200void MixHandlerSetup(float ntMin,float ntMax,float ntMixBinSz,
201 float zMin, float zMax, float zMixBinSz)
202{
203 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
204 if (!mgr) return;
205 int bufferSize = 1;
206 AliESDInputHandlerRP *esdH = dynamic_cast<AliESDInputHandlerRP*>(mgr->GetInputEventHandler());
207 if (!esdH) return;
208 //
209 AliMixEventInputHandler *esdMixH = new AliMixEventInputHandler(bufferSize);
210 esdMixH->SetInputHandlerForMixing(esdH);
211 AliMixEventPool *evPool = new AliMixEventPool("MyPool");
212 AliMixEventCutObj *tracklets = new AliMixEventCutObj(AliMixEventCutObj::kNumberTracklets, ntMin,ntMax,ntMixBinSz);
213 AliMixEventCutObj *zvertex = new AliMixEventCutObj(AliMixEventCutObj::kZVertex, zMin,zMax, zMixBinSz);
214 // evPool->AddCut(tracklets);
215 evPool->AddCut(zvertex);
216 //evPool->Init();
217 evPool->Print();
218 esdMixH->SetEventPool(evPool);
219 esdH->SetMixingHandler(esdMixH);
220}
221
222void AddPhysicsSelection(Bool_t isMC)
223{
224 // physics selection a la Michele
225 if(!isMC) {
226 //AliPhysicsSelection * physSel = physicsSelectionTask->GetPhysicsSelection();
227 // physSel->AddCollisionTriggerClass("+CMBAC-B-NOPF-ALL");
228 /*
229 physSel->AddCollisionTriggerClass("+CMBS1C-B-NOPF-ALL");
230 physSel->AddCollisionTriggerClass("+CMBS1A-B-NOPF-ALL");
231 */
232 //
233 // physSel->AddCollisionTriggerClass("+CMBS2C-B-NOPF-ALL");
234 // physSel->AddCollisionTriggerClass("+CMBS2A-B-NOPF-ALL");
235 //
236 // This are needed only to fill the statistics tables
237 // physSel->AddBGTriggerClass("+CMBAC-C-NOPF-ALL");
238 // physSel->AddBGTriggerClass("+CMBAC-A-NOPF-ALL");
239 // physSel->AddBGTriggerClass("+CMBAC-E-NOPF-ALL");
240 //
241 /*
242 physSel->AddBGTriggerClass("+CMBS1C-C-NOPF-ALL");
243 physSel->AddBGTriggerClass("+CMBS1C-A-NOPF-ALL");
244 physSel->AddBGTriggerClass("+CMBS1C-E-NOPF-ALL");
245 //
246 physSel->AddBGTriggerClass("+CMBS1A-C-NOPF-ALL");
247 physSel->AddBGTriggerClass("+CMBS1A-A-NOPF-ALL");
248 physSel->AddBGTriggerClass("+CMBS1A-E-NOPF-ALL");
249 //
250 */
251 /*
252 //
253 physSel->AddBGTriggerClass("+CMBS2C-C-NOPF-ALL");
254 physSel->AddBGTriggerClass("+CMBS2C-A-NOPF-ALL");
255 physSel->AddBGTriggerClass("+CMBS2C-E-NOPF-ALL");
256 //
257 physSel->AddBGTriggerClass("+CMBS2A-C-NOPF-ALL");
258 physSel->AddBGTriggerClass("+CMBS2A-A-NOPF-ALL");
259 physSel->AddBGTriggerClass("+CMBS2A-E-NOPF-ALL");
260 */
261 }
262 // if you use the following line, your task only gets the selected events
263 // task->SelectCollisionCandidates(AliVEvent::kUserDefined);
264 // task->SelectCollisionCandidates();
265 //
266 //Alternatively, in the UserExec of your task:
267 //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kUserDefined);
268 //
269}