1 void MyAnalysisMacro(TString dataset="/alice/sim/LHC10f8f_130844",
2 TString outFName="trbg.root",
8 Bool_t checkReconstructables = kTRUE,
12 // specific parameters for reconstruction
13 //----------------------- Zv selection parameters important for mixing, to be tuned
16 Float_t zMixBinSz = 5, //0.1,
17 //---------------------------------------------------------------------------------
19 //----------------------- Ntracklets selection parameters important for mixing, to be tuned
21 Float_t ntMax = 15000,
22 Float_t ntMixBinSz = 5000,
23 //---------------------------------------------------------------------------------
25 float phiRot = 3.14159e+00,
27 Bool_t scaleDTheta = kTRUE,
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)
39 TString format = GetFormatFromDataSet(dataset);
42 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
43 if (!mgr) mgr = new AliAnalysisManager("Test train");
45 InputHandlerSetup(format,useMC);
46 if (doMix) MixHandlerSetup(ntMin,ntMax,ntMixBinSz, zMin,zMax,zMixBinSz);
48 gProof->Load("AliITSMultRecBg.cxx++");
49 gProof->Load("AliTrackletTaskUni.cxx++");
51 // load and run AddTask macro
52 gROOT->LoadMacro("AddMultTaskRS.C");
55 AliTrackletTaskUni *mltTask = AddMultTaskRS(outFName.Data());
57 mltTask->SetDoNormalReco(doRec);
58 mltTask->SetDoInjection(doInj);
59 mltTask->SetDoRotation(doRot);
60 mltTask->SetDoMixing(doMix);
62 mltTask->SetUseMC(useMC);
63 mltTask->SetCheckReconstructables(checkReconstructables);
65 mltTask->SetEtaCut(etaCut);
66 mltTask->SetZVertexMin(zMin);
67 mltTask->SetZVertexMax(zMax);
68 mltTask->SetMultCutMin(ntMin);
69 mltTask->SetMultCutMax(ntMax);
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);
82 printf("new Task: %p\n",mltTask);
84 AddPhysicsSelection(useMC);
85 mltTask->SelectCollisionCandidates(useMC ? (AliVEvent::kMB) : (AliVEvent::kUserDefined) );
90 mgr->StartAnalysis("proof", dataset.Data(), nEvents, nEventsSkip);
92 TString evstCmd = "if [ -e event_stat.root ]; then \nmv event_stat.root evstat_";
93 evstCmd += outFName; evstCmd += " \nfi";
94 gSystem->Exec( evstCmd.Data() );
99 TString GetFormatFromDataSet(TString dataset) {
101 // Info("runAAF.C","Detecting format from dataset (may take while, depends on network connection)...");
103 if (dataset.Contains("#")) {
104 Info("runAAF.C",Form("Detecting format from dataset name '%s' ...",dataset.Data()));
105 dsTreeName=dataset(dataset.Last('#'),dataset.Length());
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());
110 Error(Form("Dataset %s doesn't exist on proof cluster!!!!",dataset.Data()));
113 dsTreeName = ds->GetDefaultTreeName();
116 if (dsTreeName.Contains("esdTree")) {
117 Info("runAAF.C","ESD input format detected ...");
119 } else if (dsTreeName.Contains("aodTree")) {
120 Info("runAAF.C","AOD input format detected ...");
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()));
130 Bool_t InputHandlerSetup(TString format = "esd", Bool_t useKine = kTRUE)
134 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
136 AliAnalysisDataContainer *cin = mgr->GetCommonInputContainer();
140 if (!format.CompareTo("esd"))
142 AliESDInputHandler *esdInputHandler = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
144 if (!esdInputHandler)
146 Info("CustomAnalysisTaskInputSetup", "Creating esdInputHandler ...");
147 esdInputHandler = new AliESDInputHandlerRP();
148 mgr->SetInputEventHandler(esdInputHandler);
153 AliMCEventHandler* mcInputHandler = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
157 Info("CustomAnalysisTaskInputSetup", "Creating mcInputHandler ...");
158 AliMCEventHandler* mcInputHandler = new AliMCEventHandler();
159 mgr->SetMCtruthEventHandler(mcInputHandler);
164 else if (!format.CompareTo("aod"))
166 AliAODInputHandler *aodInputHandler = dynamic_cast<AliAODInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
168 if (!aodInputHandler)
170 Info("CustomAnalysisTaskInputSetup", "Creating aodInputHandler ...");
171 aodInputHandler = new AliAODInputHandler();
172 mgr->SetInputEventHandler(aodInputHandler);
177 Info("Wrong input format!!! Only ESD and AOD are supported. Skipping Task ...");
184 void MixHandlerSetup(float ntMin,float ntMax,float ntMixBinSz,
185 float zMin, float zMax, float zMixBinSz)
187 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
190 AliESDInputHandlerRP *esdH = dynamic_cast<AliESDInputHandlerRP*>(mgr->GetInputEventHandler());
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);
202 esdMixH->SetEventPool(evPool);
203 esdH->SetMixingHandler(esdMixH);
206 void AddPhysicsSelection(Bool_t isMC)
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);
214 AliPhysicsSelection * physSel = physicsSelectionTask->GetPhysicsSelection();
215 physSel->AddCollisionTriggerClass("+CMBAC-B-NOPF-ALL");
217 physSel->AddCollisionTriggerClass("+CMBS1C-B-NOPF-ALL");
218 physSel->AddCollisionTriggerClass("+CMBS1A-B-NOPF-ALL");
221 physSel->AddCollisionTriggerClass("+CMBS2C-B-NOPF-ALL");
222 physSel->AddCollisionTriggerClass("+CMBS2A-B-NOPF-ALL");
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");
230 physSel->AddBGTriggerClass("+CMBS1C-C-NOPF-ALL");
231 physSel->AddBGTriggerClass("+CMBS1C-A-NOPF-ALL");
232 physSel->AddBGTriggerClass("+CMBS1C-E-NOPF-ALL");
234 physSel->AddBGTriggerClass("+CMBS1A-C-NOPF-ALL");
235 physSel->AddBGTriggerClass("+CMBS1A-A-NOPF-ALL");
236 physSel->AddBGTriggerClass("+CMBS1A-E-NOPF-ALL");
241 physSel->AddBGTriggerClass("+CMBS2C-C-NOPF-ALL");
242 physSel->AddBGTriggerClass("+CMBS2C-A-NOPF-ALL");
243 physSel->AddBGTriggerClass("+CMBS2C-E-NOPF-ALL");
245 physSel->AddBGTriggerClass("+CMBS2A-C-NOPF-ALL");
246 physSel->AddBGTriggerClass("+CMBS2A-A-NOPF-ALL");
247 physSel->AddBGTriggerClass("+CMBS2A-E-NOPF-ALL");
250 // if you use the following line, your task only gets the selected events
251 // task->SelectCollisionCandidates(AliVEvent::kUserDefined);
253 //Alternatively, in the UserExec of your task:
254 //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kUserDefined);