AddTimeStamp was always increasing track length but accounting
[u/mrichter/AliRoot.git] / ANALYSIS / AliPhysicsSelectionTask.cxx
CommitLineData
78167ba7 1/* $Id$ */
2
3#include "AliPhysicsSelectionTask.h"
4
5#include <TFile.h>
6#include <TH1F.h>
7#include <TH2F.h>
8
9#include <AliLog.h>
10#include <AliESDEvent.h>
11#include <AliHeader.h>
12
13#include "AliPhysicsSelection.h"
14#include "AliAnalysisManager.h"
15#include "AliInputEventHandler.h"
16
17//#include "AliBackgroundSelection.h"
18
19ClassImp(AliPhysicsSelectionTask)
20
21AliPhysicsSelectionTask::AliPhysicsSelectionTask() :
22 AliAnalysisTaskSE("AliPhysicsSelectionTask"),
23 fOutput(0),
24 fOption(""),
25 fPhysicsSelection(0)
26{
27 //
28 // Default event handler
29 //
30}
31
32AliPhysicsSelectionTask::AliPhysicsSelectionTask(const char* opt) :
33 AliAnalysisTaskSE("AliPhysicsSelectionTask"),
34 fOutput(0),
35 fOption(opt),
36 fPhysicsSelection(new AliPhysicsSelection())
37{
38 //
39 // Constructor. Initialization of pointers
40 //
41 AliInputEventHandler* handler = dynamic_cast<AliInputEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
42 if (handler) {
43 handler->SetEventSelection(fPhysicsSelection);
44 AliInfo("Physics Event Selection enabled.");
45 } else {
46 AliError("No input event handler connected to analysis manager. No Physics Event Selection.");
47 }
48 // Define input and output slots here
49 DefineOutput(1, TList::Class());
1ea7a921 50 fBranchNames = "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.,AliESDVZERO.,"
51 "AliESDZDC.,SPDVertex.,PrimaryVertex.,TPCVertex.,Tracks,SPDPileupVertices";
78167ba7 52
53 AliLog::SetClassDebugLevel("AliPhysicsSelectionTask", AliLog::kWarning);
54}
55
56AliPhysicsSelectionTask::~AliPhysicsSelectionTask()
57{
58 //
59 // Destructor
60 //
61
62 // histograms are in the output list and deleted when the output
63 // list is deleted by the TSelector dtor
64
3be0b665 65 if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
78167ba7 66 delete fOutput;
67 fOutput = 0;
68 }
69}
70
71void AliPhysicsSelectionTask::UserCreateOutputObjects()
72{
73 // create result objects and add to output list
74
75 Printf("AliPhysicsSelectionTask::CreateOutputObjects");
76
77 fOutput = new TList;
78 fOutput->SetOwner();
79
80 if (!fPhysicsSelection)
81 fPhysicsSelection = new AliPhysicsSelection;
82
83 fOutput->Add(fPhysicsSelection);
222dc7b5 84 // All tasks must post data once for all outputs (AG)
85 PostData(1, fOutput);
78167ba7 86}
87
88void AliPhysicsSelectionTask::UserExec(Option_t*)
89{
90 // process the event
91
38c52e61 92 // AliPhysicsSelection::IsCollisionCandidate is called from the event handler
93 // post the data here anyway!
78167ba7 94 PostData(1, fOutput);
78167ba7 95}
96
e9247450 97void AliPhysicsSelectionTask::FinishTaskOutput()
98{
99// This gets called at the end of the processing on the worker. It allows dumping
100// statistics printed by the physics selection object to the statistics message
101// handled by the analysis manager.
102 if (fPhysicsSelection) fPhysicsSelection->Print("STAT");
103}
104
78167ba7 105void AliPhysicsSelectionTask::Terminate(Option_t *)
106{
107 // The Terminate() function is the last function to be called during
108 // a query. It always runs on the client, it can be used to present
109 // the results graphically or save the results to file.
110
111 fOutput = dynamic_cast<TList*> (GetOutputData(1));
112 if (!fOutput)
113 Printf("ERROR: fOutput not available");
114
115 if (fOutput)
116 {
117 fPhysicsSelection = dynamic_cast<AliPhysicsSelection*> (fOutput->FindObject("AliPhysicsSelection"));
118 }
119
120 TFile* fout = new TFile("event_stat.root", "RECREATE");
121
122 if (fPhysicsSelection)
123 {
124 fPhysicsSelection->Print();
decf6fd4 125 fPhysicsSelection->SaveHistograms();
78167ba7 126 }
127
128 fout->Write();
129 fout->Close();
130
131 Printf("Writting result to event_stat.root");
132}