]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliAnalysisTaskSEVertexingHFTest.C
e585252a3eedd6a1980caddc8c3624f7d820db8d
[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=kFALSE; // otherwise, ESD\r
9   Bool_t createAOD=kTRUE; // kTRUE: create AOD and use it as input to vertexing\r
10                           // kFALSE: use ESD as input to vertexing\r
11   Bool_t writeKineToAOD = kFALSE;\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->SetOutputFileName(deltaAODfname);\r
83     aodHandler->SetAODExtensionMode();\r
84   }\r
85   mgr->SetOutputEventHandler(aodHandler);\r
86   mgr->RegisterExtraFile(deltaAODfname);  \r
87 \r
88   if(!inputAOD && createAOD) {\r
89     // MC Truth\r
90     AliMCEventHandler* mcHandler = new AliMCEventHandler();\r
91     if(writeKineToAOD) mgr->SetMCtruthEventHandler(mcHandler);\r
92     AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Filter");\r
93     if(writeKineToAOD) mgr->AddTask(kinefilter);  \r
94     // Barrel Tracks\r
95     AliAnalysisTaskESDfilter *filter = new AliAnalysisTaskESDfilter("Filter");\r
96     mgr->AddTask(filter);\r
97 \r
98     AliESDtrackCuts* esdTrackCutsHF = new AliESDtrackCuts("AliESDtrackCuts", "Heavy flavour");\r
99     esdTrackCutsHF->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);\r
100     \r
101     AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");\r
102     trackFilter->AddCuts(esdTrackCutsHF);\r
103 \r
104     filter->SetTrackFilter(trackFilter);\r
105    \r
106     // Pipelining\r
107     mgr->ConnectInput(filter,0,mgr->GetCommonInputContainer());\r
108     mgr->ConnectOutput(filter,0,mgr->GetCommonOutputContainer());\r
109     if(writeKineToAOD) {\r
110       mgr->ConnectInput(kinefilter,0,mgr->GetCommonInputContainer());\r
111       mgr->ConnectOutput(kinefilter,0,mgr->GetCommonOutputContainer());\r
112     }\r
113  \r
114   }\r
115 \r
116   // Vertexing analysis task    \r
117   gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/macros/AddTaskVertexingHF.C");\r
118   AliAnalysisTaskSEVertexingHF *hfTask = AddTaskVertexingHF(deltaAODfname);\r
119   \r
120   \r
121   //\r
122   // Run the analysis\r
123   //    \r
124   printf("CHAIN HAS %d ENTRIES\n",(Int_t)chain->GetEntries());\r
125   if(!mgr->InitAnalysis()) return;\r
126 \r
127   mgr->PrintStatus();\r
128 \r
129   TStopwatch watch;\r
130   watch.Start();\r
131   mgr->StartAnalysis(mode.Data(),chain);\r
132   watch.Stop();\r
133   watch.Print();\r
134 \r
135   return;\r
136 }\r