2e05890561a57a030bcb365249d9baaf0deab23d
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSEVertexingHFTest.C
1 void AliAnalysisTaskSEVertexingHFTest()\r
2 {\r
3   //\r
4   // Test macro for the AliAnalysisTaskSE for heavy-flavour vertexing\r
5   // A.Dainese, andrea.dainese@lnl.infn.it\r
6   //\r
7 \r
8   Bool_t inputAOD=kTRUE; // otherwise, ESD\r
9   Bool_t createAOD=kFALSE; // kTRUE: create AOD and use it as input to vertexing\r
10                           // kFALSE: use ESD as input to vertexing\r
11   Bool_t writeKineToAOD = kTRUE;\r
12   TString mode="local"; // otherwise, "grid" \r
13   Bool_t useParFiles=kFALSE;\r
14 \r
15   gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/macros/LoadLibraries.C");\r
16   LoadLibraries(useParFiles);\r
17 \r
18   TChain *chain = 0;\r
19 \r
20   if(mode=="local") {\r
21     // Local files \r
22     TString treeName,fileName;\r
23     if(inputAOD) {\r
24       treeName="aodTree"; \r
25       fileName="AliAOD.root";\r
26     } else {\r
27       treeName="esdTree"; \r
28       fileName="AliESDs.root";\r
29     }\r
30     chain = new TChain(treeName.Data());\r
31     chain->Add(fileName.Data());\r
32 \r
33   } else if (mode=="grid") {\r
34     //Fetch files with AliEn :\r
35     const char *collectionfile = "Collection.xml";\r
36     TGrid::Connect("alien://") ;\r
37     TAlienCollection *coll   = TAlienCollection::Open(collectionfile);\r
38     if(inputAOD) { // input AOD\r
39       chain = new TChain("aodTree");\r
40       while(coll->Next()) chain->Add(coll->GetTURL(""));\r
41     } else { // input ESD\r
42       //Create an AliRunTagCuts and an AliEventTagCuts Object and impose some selection criteria\r
43       AliRunTagCuts      *runCuts   = new AliRunTagCuts();\r
44       AliEventTagCuts    *eventCuts = new AliEventTagCuts();\r
45       AliLHCTagCuts      *lhcCuts   = new AliLHCTagCuts();\r
46       AliDetectorTagCuts *detCuts   = new AliDetectorTagCuts();\r
47       eventCuts->SetMultiplicityRange(0,20000);\r
48       //Create an AliTagAnalysis Object and chain the tags\r
49       AliTagAnalysis   *tagAna = new AliTagAnalysis();\r
50       tagAna->SetType("ESD");\r
51       TGridResult      *tagResult = coll->GetGridResult("",0,0);\r
52       tagResult->Print();\r
53       tagAna->ChainGridTags(tagResult);\r
54       //Create a new esd chain and assign the chain that is returned by querying the tags\r
55       chain = tagAna->QueryTags(runCuts,lhcCuts,detCuts,eventCuts);\r
56     }\r
57   } else {\r
58     printf("ERROR: mode has to be \"local\" or \"grid\" \n");\r
59     return;\r
60   }\r
61 \r
62 \r
63   // Create the analysis manager\r
64   AliAnalysisManager *mgr  = new AliAnalysisManager("My Manager","My Manager");\r
65   mgr->SetDebugLevel(10);\r
66   \r
67   // Input Handler\r
68   AliInputEventHandler *inputHandler = 0;\r
69   if(inputAOD) {\r
70     inputHandler = new AliAODInputHandler();\r
71   } else {\r
72     inputHandler = new AliESDInputHandler();\r
73   }\r
74   mgr->SetInputEventHandler(inputHandler);\r
75   \r
76   // Output \r
77   AliAODHandler *aodHandler = new AliAODHandler();\r
78   const char* deltaAODfname="AliAOD.VertexingHF.root";\r
79   if(createAOD) {\r
80     aodHandler->SetOutputFileName("AliAOD.root");\r
81   } else {\r
82     aodHandler->SetFillAOD(kFALSE);\r
83     aodHandler->SetOutputFileName(deltaAODfname);\r
84     aodHandler->SetCreateNonStandardAOD();\r
85   }\r
86   mgr->SetOutputEventHandler(aodHandler);\r
87   mgr->RegisterExtraFile(deltaAODfname);  \r
88 \r
89   if(!inputAOD && createAOD) {\r
90     // MC Truth\r
91     AliMCEventHandler* mcHandler = new AliMCEventHandler();\r
92     if(writeKineToAOD) mgr->SetMCtruthEventHandler(mcHandler);\r
93     AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Filter");\r
94     if(writeKineToAOD) mgr->AddTask(kinefilter);  \r
95     // Barrel Tracks\r
96     AliAnalysisTaskESDfilter *filter = new AliAnalysisTaskESDfilter("Filter");\r
97     mgr->AddTask(filter);\r
98 \r
99     AliESDtrackCuts* esdTrackCutsHF = new AliESDtrackCuts("AliESDtrackCuts", "Heavy flavour");\r
100     esdTrackCutsHF->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);\r
101     \r
102     AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");\r
103     trackFilter->AddCuts(esdTrackCutsHF);\r
104 \r
105     filter->SetTrackFilter(trackFilter);\r
106    \r
107     // Pipelining\r
108     mgr->ConnectInput(filter,0,mgr->GetCommonInputContainer());\r
109     mgr->ConnectOutput(filter,0,mgr->GetCommonOutputContainer());\r
110     if(writeKineToAOD) {\r
111       mgr->ConnectInput(kinefilter,0,mgr->GetCommonInputContainer());\r
112       mgr->ConnectOutput(kinefilter,0,mgr->GetCommonOutputContainer());\r
113     }\r
114  \r
115   }\r
116 \r
117   // Vertexing analysis task    \r
118   gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/macros/AddTaskVertexingHF.C");\r
119   AliAnalysisTaskSEVertexingHF *hfTask = AddTaskVertexingHF(deltaAODfname);\r
120   \r
121   \r
122   //\r
123   // Run the analysis\r
124   //    \r
125   printf("CHAIN HAS %d ENTRIES\n",(Int_t)chain->GetEntries());\r
126   if(!mgr->InitAnalysis()) return;\r
127 \r
128   mgr->PrintStatus();\r
129 \r
130   TStopwatch watch;\r
131   watch.Start();\r
132   mgr->StartAnalysis(mode.Data(),chain);\r
133   watch.Stop();\r
134   watch.Print();\r
135 \r
136   return;\r
137 }\r