1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 ///////////////////////////////////////////////////////////////////////////////
18 /// This is a class for reading raw data from a root chain.
19 /// There are two constructors available - one from a text file containing the
20 /// list of root raw-data files to be processed and one directly from
23 /// cvetan.cheshkov@cern.ch 29/07/2008
25 ///////////////////////////////////////////////////////////////////////////////
28 #include <TFileCollection.h>
30 #include "AliRawReaderChain.h"
31 #include "AliRawEvent.h"
33 ClassImp(AliRawReaderChain)
35 AliRawReaderChain::AliRawReaderChain() :
39 // default constructor
42 AliRawReaderChain::AliRawReaderChain(const char* listFileName) :
46 // create raw-reader objects which takes as an input a root chain
47 // from the file list found in 'listFileName'
49 TFileCollection collection("RAW",
50 "Collection with raw-data files",
53 fChain = new TChain("RAW");
54 if (!fChain->AddFileInfoList((TCollection*)(collection.GetList()))) {
55 Error("AliRawReaderChain","Bad file list in collection, the chain is empty");
59 fChain->SetBranchStatus("*",1);
61 fEvent = new AliRawEvent;
62 fChain->SetBranchAddress("rawevent", &fEvent);
65 AliRawReaderChain::AliRawReaderChain(TFileCollection *collection) :
69 // create raw-reader objects which takes as an input a root chain
70 // from a root file collection
72 fChain = new TChain("RAW");
73 if (!fChain->AddFileInfoList((TCollection*)(collection->GetList()))) {
74 Error("AliRawReaderChain","Bad file list in collection, the chain is empty");
78 fChain->SetBranchStatus("*",1);
80 fEvent = new AliRawEvent;
81 fChain->SetBranchAddress("rawevent", &fEvent);
84 AliRawReaderChain::AliRawReaderChain(TChain *chain) :
88 // create raw-reader objects which takes as an input a root chain
89 // from a root file collection
91 fChain->SetBranchStatus("*",1);
93 fEvent = new AliRawEvent;
94 fChain->SetBranchAddress("rawevent", &fEvent);
97 AliRawReaderChain::AliRawReaderChain(const AliRawReaderChain& rawReader) :
98 AliRawReaderRoot(rawReader),
99 fChain(rawReader.fChain)
104 AliRawReaderChain& AliRawReaderChain::operator = (const AliRawReaderChain&
107 // assignment operator
109 this->~AliRawReaderChain();
110 new(this) AliRawReaderChain(rawReader);
114 AliRawReaderChain::~AliRawReaderChain()
116 // delete objects and close root file
124 Bool_t AliRawReaderChain::NextEvent()
126 // go to the next event in the root file
128 if (!fChain || !fChain->GetListOfFiles()->GetEntriesFast()) return kFALSE;
132 fEvent = new AliRawEvent;
133 TBranch *branch = fChain->GetBranch("rawevent");
136 if (branch->GetEntry(fEventIndex+1) <= 0)
139 } while (!IsEventSelected());
144 Bool_t AliRawReaderChain::RewindEvents()
146 // go back to the beginning of the root file
150 fEvent = new AliRawEvent;
155 Bool_t AliRawReaderChain::GotoEvent(Int_t event)
157 // go to a particular event
158 // Uses the absolute event index inside the
159 // chain with raw data
161 if (!fChain || !fChain->GetListOfFiles()->GetEntriesFast()) return kFALSE;
164 fEvent = new AliRawEvent;
165 TBranch *branch = fChain->GetBranch("rawevent");
168 if (branch->GetEntry(event) <= 0)
175 Int_t AliRawReaderChain::GetNumberOfEvents() const
177 // Get the total number of events in the chain
180 if (!fChain) return -1;
182 return fChain->GetEntries();