]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/SPECTRA/AliProtonFeedDownAnalysisTask.cxx
Code to combine and fit ID spectra (pi/K/p).
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliProtonFeedDownAnalysisTask.cxx
1 #include "TChain.h"\r
2 #include "TTree.h"\r
3 #include "TString.h"\r
4 #include "TList.h"\r
5 #include "TH2F.h"\r
6 \r
7 #include "AliAnalysisTask.h"\r
8 #include "AliAnalysisManager.h"\r
9 \r
10 #include "AliESDEvent.h"\r
11 #include "AliESDInputHandler.h"\r
12 #include "AliAODEvent.h"\r
13 #include "AliAODInputHandler.h"\r
14 #include "AliMCEventHandler.h"\r
15 #include "AliMCEvent.h"\r
16 #include "AliStack.h"\r
17 #include "AliESDVertex.h"\r
18 \r
19 #include "AliProtonFeedDownAnalysis.h"\r
20 #include "AliProtonAnalysisBase.h"\r
21 #include "AliProtonFeedDownAnalysisTask.h"\r
22 #include <Riostream.h>\r
23 \r
24 ClassImp(AliProtonFeedDownAnalysisTask)\r
25   \r
26 //________________________________________________________________________ \r
27 AliProtonFeedDownAnalysisTask::AliProtonFeedDownAnalysisTask()\r
28   : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0),\r
29     fList(0), fProtonAnalysis(0),fStatHist(0)\r
30  {\r
31   //Dummy constructor\r
32   \r
33 }\r
34 \r
35 //________________________________________________________________________\r
36 AliProtonFeedDownAnalysisTask::AliProtonFeedDownAnalysisTask(const char *name) \r
37   : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0),\r
38     fList(0), fProtonAnalysis(0),fStatHist(0)\r
39     {\r
40         // Constructor\r
41         \r
42         // Define input and output slots here\r
43         // Input slot #0 works with a TChain\r
44         DefineInput(0, TChain::Class());\r
45         // Output slot #0 writes into a TList container\r
46         DefineOutput(0, TList::Class());\r
47 }\r
48 \r
49 //________________________________________________________________________\r
50 void AliProtonFeedDownAnalysisTask::ConnectInputData(Option_t *) \r
51 {\r
52         // Connect ESD or AOD here\r
53         // Called once\r
54         TString gAnalysisLevel = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); \r
55         \r
56         TTree* tree = dynamic_cast<TTree*> (GetInputData(0));\r
57         if (!tree) \r
58         {\r
59                 Printf("ERROR: Could not read chain from input slot 0");\r
60         } \r
61         else \r
62         {\r
63                 if(gAnalysisLevel == "ESD") \r
64                 {\r
65                         AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());   \r
66                         if (!esdH) \r
67                         {\r
68                                 Printf("ERROR: Could not get ESDInputHandler");\r
69                         } \r
70                         else\r
71                                 fESD = esdH->GetEvent();\r
72                         AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());\r
73                         if (!mcH) \r
74                         {\r
75                                 Printf("ERROR: Could not retrieve MC event handler");\r
76                         }\r
77                         else\r
78                                 fMC = mcH->MCEvent();\r
79                 }\r
80                 else if(gAnalysisLevel == "AOD") \r
81                 {\r
82                         AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());        \r
83                         if (!aodH) \r
84                         {\r
85                                 Printf("ERROR: Could not get AODInputHandler");\r
86                         }\r
87                          else\r
88                                 fAOD = aodH->GetEvent();\r
89                 }\r
90                 else\r
91                         Printf("Wrong analysis type: Only ESD, AOD  types are allowed!");\r
92         }\r
93 }\r
94 //________________________________________________________________________\r
95 void AliProtonFeedDownAnalysisTask::CreateOutputObjects() \r
96 {\r
97         // Create output objects\r
98         // Called once\r
99         fList = new TList();\r
100         fList->Add(fProtonAnalysis->GetProtonContainer());\r
101         fList->Add(fProtonAnalysis->GetAntiProtonContainer());\r
102         fList->Add(fProtonAnalysis->GetLambdaHist());\r
103         fList->Add(fProtonAnalysis->GetLambdaweightedHist());\r
104         fList->Add(fProtonAnalysis->GetAntiLambdaHist());\r
105         fList->Add(fProtonAnalysis->GetAntiLambdaweightedHist());\r
106         fStatHist=new TH1F("StatsHist","StatsHist",10,-0.5,9.5);\r
107         fList->Add(fStatHist);\r
108         fStatHist->GetXaxis()->SetBinLabel(1,"level1cut");\r
109         fStatHist->GetXaxis()->SetBinLabel(2,"level2cut");\r
110         fStatHist->GetXaxis()->SetBinLabel(3,"level3cut");\r
111         fStatHist->GetXaxis()->SetBinLabel(4,"level4cut");\r
112 }\r
113 //________________________________________________________________________\r
114 void AliProtonFeedDownAnalysisTask::Exec(Option_t *) \r
115 {\r
116         // Main loop\r
117         // Called for each event\r
118         TString gAnalysisLevel = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); \r
119         //TString gAnalysisLevel = (fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); \r
120         if(gAnalysisLevel == "ESD") \r
121         {\r
122                 if (!fESD) \r
123                 {\r
124                         Printf("ERROR: fESD not available");\r
125                         return;\r
126                 }\r
127                 fStatHist->Fill(0);\r
128                 if(dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsEventTriggered(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetTriggerMode())) \r
129                 {\r
130                         fStatHist->Fill(1);\r
131                         const AliESDVertex *vertex = dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast<AliProtonAnalysisBase*>(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVzMax());\r
132                         if(vertex) \r
133                         {\r
134                                 fStatHist->Fill(2);\r
135                                 Printf("Proton ESD analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks());\r
136                                 AliStack* stack1=0x0;\r
137                                 if(!fMC)\r
138                                         return;                 \r
139                                 stack1 = fMC->Stack();\r
140                                 if(!stack1)\r
141                                         return;\r
142                                 fStatHist->Fill(3);     \r
143                                 fProtonAnalysis->Analyze(fESD,vertex,stack1);\r
144                                 fProtonAnalysis->Analyze(stack1);\r
145 \r
146                         }//reconstructed vertex\r
147                 }//triggered event\r
148         }//ESD analysis              \r
149         \r
150         else if(gAnalysisLevel == "AOD") \r
151         {\r
152                 if (!fAOD) \r
153                 {\r
154                         Printf("ERROR: fAOD not available");\r
155                         return;\r
156                 }\r
157                 Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks());\r
158                 fProtonAnalysis->Analyze(fAOD);\r
159         }//AOD analysis\r
160                          \r
161         \r
162         // Post output data.\r
163         PostData(0, fList);\r
164 }    \r
165 //__________________________________________________________________________________________\r
166 void AliProtonFeedDownAnalysisTask::Terminate(Option_t *) \r
167 {\r
168 \r
169 }\r
170 \r
171 \r