1. Proper (?) handling of the branches in AliRawReaderChain. 2. New virtual GotoEvent...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 5 Aug 2008 11:26:30 +0000 (11:26 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 5 Aug 2008 11:26:30 +0000 (11:26 +0000)
RAW/AliRawReader.cxx
RAW/AliRawReader.h
RAW/AliRawReaderChain.cxx
RAW/AliRawReaderChain.h
RAW/AliRawReaderRoot.cxx
RAW/AliRawReaderRoot.h

index bb6f2c7..fc7cb3e 100644 (file)
@@ -481,6 +481,11 @@ Bool_t AliRawReader::ReadNextChar(UChar_t& data)
   return kTRUE;
 }
 
+Bool_t  AliRawReader::GotoEvent(Int_t event)
+{
+  Error("GotoEvent","Method not implemented! Nothing done");
+  return kFALSE;
+}
 
 Int_t AliRawReader::CheckData() const
 {
index 9913c33..d559c63 100644 (file)
@@ -18,6 +18,7 @@
 #include "AliRawDataErrorLog.h"
 #include "AliRawDataHeader.h"
 
+class TChain;
 class AliRawEventHeaderBase;
 
 class AliRawReader: public TObject {
@@ -119,6 +120,8 @@ class AliRawReader: public TObject {
 
     virtual Bool_t   NextEvent() = 0;
     virtual Bool_t   RewindEvents() = 0;
+    virtual Bool_t   GotoEvent(Int_t event);
+    virtual Int_t    GetEventIndex() const { return -1; }
 
     enum {kErrMagic=1, kErrNoDataHeader=2, 
          kErrSize=4, kErrOutOfBounds=8};
@@ -152,6 +155,7 @@ class AliRawReader: public TObject {
     // ESD tree inside AliReconstruction. For the moment it will be
     // activated only for AliRawReaderDateOnline.
     virtual Bool_t   UseAutoSaveESD() const { return kFALSE; }
+    virtual TChain*  GetChain() const { return NULL; }
 
   protected :
     virtual void     SelectEvents(Int_t type, ULong64_t triggerMask = 0);
index bb774b1..729dcfc 100644 (file)
@@ -56,8 +56,7 @@ AliRawReaderChain::AliRawReaderChain(const char* listFileName) :
     return;
   }
 
-  fChain->SetBranchStatus("*",0);
-  fChain->SetBranchStatus("rawevent",1);
+  fChain->SetBranchStatus("*",1);
 
   fEvent = new AliRawEvent;
   fChain->SetBranchAddress("rawevent", &fEvent);
@@ -76,8 +75,20 @@ AliRawReaderChain::AliRawReaderChain(TFileCollection *collection) :
     return;
   }
 
-  fChain->SetBranchStatus("*",0);
-  fChain->SetBranchStatus("rawevent",1);
+  fChain->SetBranchStatus("*",1);
+
+  fEvent = new AliRawEvent;
+  fChain->SetBranchAddress("rawevent", &fEvent);
+}
+
+AliRawReaderChain::AliRawReaderChain(TChain *chain) :
+  AliRawReaderRoot(),
+  fChain(chain)
+{
+// create raw-reader objects which takes as an input a root chain
+// from a root file collection
+
+  fChain->SetBranchStatus("*",1);
 
   fEvent = new AliRawEvent;
   fChain->SetBranchAddress("rawevent", &fEvent);
@@ -119,7 +130,10 @@ Bool_t AliRawReaderChain::NextEvent()
   do {
     delete fEvent;
     fEvent = new AliRawEvent;
-    if (fChain->GetEntry(fEventIndex+1) <= 0)
+    TBranch *branch = fChain->GetBranch("rawevent");
+    if (!branch)
+      return kFALSE;
+    if (branch->GetEntry(fEventIndex+1) <= 0)
       return kFALSE;
     fEventIndex++;
   } while (!IsEventSelected());
@@ -137,3 +151,23 @@ Bool_t AliRawReaderChain::RewindEvents()
   fEventNumber = -1;
   return Reset();
 }
+
+Bool_t  AliRawReaderChain::GotoEvent(Int_t event)
+{
+  // go to a particular event
+  // Uses the absolute event index inside the
+  // chain with raw data
+
+  if (!fChain || !fChain->GetListOfFiles()->GetEntriesFast()) return kFALSE;
+
+  delete fEvent;
+  fEvent = new AliRawEvent;
+  TBranch *branch = fChain->GetBranch("rawevent");
+  if (!branch)
+    return kFALSE;
+  if (branch->GetEntry(event) <= 0)
+    return kFALSE;
+  fEventIndex = event;
+  fEventNumber++;
+  return Reset();
+}
index 940d73c..afebb84 100644 (file)
@@ -19,12 +19,16 @@ class AliRawReaderChain: public AliRawReaderRoot {
     AliRawReaderChain();
     AliRawReaderChain(const char* listFileName);
     AliRawReaderChain(TFileCollection *collection);
+    AliRawReaderChain(TChain *chain);
     AliRawReaderChain(const AliRawReaderChain& rawReader);
     AliRawReaderChain& operator = (const AliRawReaderChain& rawReader);
     virtual ~AliRawReaderChain();
 
     virtual Bool_t   NextEvent();
     virtual Bool_t   RewindEvents();
+    virtual Bool_t   GotoEvent(Int_t event);
+
+    virtual TChain*  GetChain() const { return fChain; }
 
   protected :
     TChain*          fChain;        // root chain with raw events
index 9b51241..4fad681 100644 (file)
@@ -542,6 +542,23 @@ Bool_t AliRawReaderRoot::RewindEvents()
   return Reset();
 }
 
+Bool_t  AliRawReaderRoot::GotoEvent(Int_t event)
+{
+  // go to a particular event
+  // Uses the absolute event index inside the
+  // raw-data file
+
+  if (!fBranch) return kFALSE;
+
+  delete fEvent;
+  fEvent = new AliRawEvent;
+  fBranch->SetAddress(&fEvent);
+  if (fBranch->GetEntry(event) <= 0)
+    return kFALSE;
+  fEventIndex = event;
+  fEventNumber++;
+  return Reset();
+}
 
 Int_t AliRawReaderRoot::CheckData() const
 {
index 3c6e731..c178b71 100644 (file)
@@ -57,6 +57,8 @@ class AliRawReaderRoot: public AliRawReader {
 
     virtual Bool_t   NextEvent();
     virtual Bool_t   RewindEvents();
+    virtual Bool_t   GotoEvent(Int_t event);
+    virtual Int_t    GetEventIndex() const { return fEventIndex; }
 
     virtual Int_t    CheckData() const;