]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliAODInputHandler.cxx
added new triggers
[u/mrichter/AliRoot.git] / STEER / AliAODInputHandler.cxx
CommitLineData
397596ed 1/**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18//-------------------------------------------------------------------------
19// Event handler for AOD input
20// Author: Andreas Morsch, CERN
21//-------------------------------------------------------------------------
22
3ba74948 23#include <TSystem.h>
933fd60f 24#include <TTree.h>
26772015 25#include <TList.h>
26#include <TNamed.h>
fb0cfe69 27#include <TFile.h>
70908d05 28#include <TH2.h>
397596ed 29
30#include "AliAODInputHandler.h"
31#include "AliAODEvent.h"
70908d05 32#include "AliVCuts.h"
397596ed 33
34ClassImp(AliAODInputHandler)
35
c2b6979d 36static Option_t *gAODDataType = "AOD";
37
397596ed 38//______________________________________________________________________________
39AliAODInputHandler::AliAODInputHandler() :
90e04a88 40 AliInputEventHandler(),
4195c9c9 41 fEvent(0),
04a79fa0 42 fMCEvent(new AliMCEvent()),
1f842495 43 fFriends(new TList()),
44 fMergeEvents(kFALSE),
45 fFileToMerge(0),
46 fTreeToMerge(0),
04daa8bf 47 fAODEventToMerge(0),
48 fMergeOffset(0)
397596ed 49{
26772015 50 // Default constructor
70908d05 51 fHistStatistics[0] = fHistStatistics[1] = NULL;
397596ed 52}
53
54//______________________________________________________________________________
26772015 55AliAODInputHandler::AliAODInputHandler(const char* name, const char* title):
56 AliInputEventHandler(name, title),
57 fEvent(0),
04a79fa0 58 fMCEvent(new AliMCEvent()),
1f842495 59 fFriends(new TList()),
60 fMergeEvents(kFALSE),
61 fFileToMerge(0),
62 fTreeToMerge(0),
04daa8bf 63 fAODEventToMerge(0),
64 fMergeOffset(0)
397596ed 65{
26772015 66 // Constructor
70908d05 67 fHistStatistics[0] = fHistStatistics[1] = NULL;
397596ed 68}
69
70//______________________________________________________________________________
26772015 71AliAODInputHandler::~AliAODInputHandler()
397596ed 72{
26772015 73// Destructor
70908d05 74 fFriends->Delete();
75 if (fHistStatistics[0]) {
76 delete fHistStatistics[0];
77 fHistStatistics[0] = 0;
78 }
79 if (fHistStatistics[1]) {
80 delete fHistStatistics[1];
81 fHistStatistics[1] = 0;
82 }
397596ed 83}
84
70908d05 85//______________________________________________________________________________
b890a10d 86Bool_t AliAODInputHandler::Init(TTree* tree, Option_t* opt)
397596ed 87{
300d5701 88 // Initialisation necessary for each new tree
70908d05 89 if (!fMergeEvents) {
90 fTree = tree;
91 TIter next(fFriends);
92 TNamed* obj;
1f842495 93
70908d05 94 if (!fTree) return kFALSE;
95 fTree->GetEntry(0);
96 TString aodTreeFName,aodFriendTreeFName;
97 TTree *ttree = fTree->GetTree();
98 if (!ttree) ttree = fTree;
99 aodTreeFName = ttree->GetCurrentFile()->GetName();
100
101 while((obj = (TNamed*)next())) {
102 aodFriendTreeFName = aodTreeFName;
103 aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName());
104 aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName());
105 ttree->AddFriend("aodTree", aodFriendTreeFName.Data());
4195c9c9 106 }
70908d05 107 } else {
108 // Friends have to be merged
109 TNamed* filename = (TNamed*) (fFriends->At(0));
110 fFileToMerge = new TFile(filename->GetName());
111 if (fFileToMerge) {
112 fFileToMerge->GetObject("aodTree", fTreeToMerge);
113 if (!fAODEventToMerge) fAODEventToMerge = new AliAODEvent();
114 fAODEventToMerge->ReadFromTree(fTreeToMerge);
115 }
116 }
d329cad3 117
70908d05 118 SwitchOffBranches();
119 SwitchOnBranches();
4195c9c9 120
70908d05 121 // Get pointer to AOD event
122 if (!fEvent) fEvent = new AliAODEvent();
300d5701 123
70908d05 124 fEvent->ReadFromTree(fTree);
125
126 if (fMixingHandler) fMixingHandler->Init(tree, opt);
04a79fa0 127
70908d05 128 return kTRUE;
397596ed 129}
130
70908d05 131//______________________________________________________________________________
1f842495 132Bool_t AliAODInputHandler::BeginEvent(Long64_t entry)
fbb264e0 133{
134 //
04a79fa0 135 TClonesArray* mcParticles = (TClonesArray*) (fEvent->FindListObject("mcparticles"));
136 if (mcParticles) fMCEvent->SetParticleArray(mcParticles);
04daa8bf 137 if (fTreeToMerge) fTreeToMerge->GetEntry(entry + fMergeOffset);
1f842495 138
0c6c629b 139 fIsSelectedResult = fEvent->GetHeader()->GetOfflineTrigger();
b890a10d 140
141 if (fMixingHandler) fMixingHandler->BeginEvent(entry);
0c6c629b 142
fbb264e0 143 return kTRUE;
144}
145
70908d05 146//______________________________________________________________________________
b890a10d 147Bool_t AliAODInputHandler::Notify(const char* path)
148{
149 // Notifaction of directory change
150 if (fMixingHandler) fMixingHandler->Notify(path);
70908d05 151 TTree *ttree = fTree->GetTree();
152 if (!ttree) ttree = fTree;
3ba74948 153 TString statFname(gSystem->DirName(ttree->GetCurrentFile()->GetName()));
154 statFname += "/EventStat_temp.root";
70908d05 155 TFile *statFile = TFile::Open(statFname, "READ");
156 if (statFile) {
157 TList *list = (TList*)statFile->Get("cstatsout");
158 if (list) {
159 AliVCuts *physSel = (AliVCuts*)list->At(0);
160 if (physSel) {
161 TH2F *hAll = dynamic_cast<TH2F*>(physSel->GetStatistics("ALL"));
162 TH2F *hBin0 = dynamic_cast<TH2F*>(physSel->GetStatistics("BIN0"));
163 if (fHistStatistics[0] && hAll) {
164 TList tmplist;
165 tmplist.Add(hAll);
166 fHistStatistics[0]->Merge(&tmplist);
167 tmplist.Clear();
168 tmplist.Add(hBin0);
169 if (fHistStatistics[1] && hBin0) fHistStatistics[1]->Merge(&tmplist);
170 } else {
3ba74948 171 fHistStatistics[0] = static_cast<TH2F*>(hAll->Clone());
172 fHistStatistics[1] = static_cast<TH2F*>(hBin0->Clone());
173 fHistStatistics[0]->SetDirectory(0);
174 fHistStatistics[1]->SetDirectory(0);
70908d05 175 }
176 }
3ba74948 177 delete list;
70908d05 178 }
b8047d30 179 delete statFile;
70908d05 180 }
b890a10d 181 return kTRUE;
182}
183
70908d05 184//______________________________________________________________________________
b890a10d 185Bool_t AliAODInputHandler::FinishEvent()
186{
187 // Finish event
188 if (fMixingHandler) fMixingHandler->FinishEvent();
189 return kTRUE;
190}
191
70908d05 192//______________________________________________________________________________
26772015 193void AliAODInputHandler::AddFriend(char* filename)
194{
195 // Add a friend tree
196 TNamed* obj = new TNamed(filename, filename);
197 fFriends->Add(obj);
198}
c2b6979d 199
70908d05 200//______________________________________________________________________________
c2b6979d 201Option_t *AliAODInputHandler::GetDataType() const
202{
203// Returns handled data type.
204 return gAODDataType;
205}
70908d05 206
207//______________________________________________________________________________
208TObject *AliAODInputHandler::GetStatistics(Option_t *option) const
209{
210// Get the statistics histogram(s) from the physics selection object. This
211// should be called during FinishTaskOutput(). Option can be empty (default
212// statistics histogram) or BIN0.
213 TString opt(option);
214 opt.ToUpper();
215 if (opt=="BIN0") return fHistStatistics[1];
216 return fHistStatistics[0];
217}