New raw-reader from root chain.
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 29 Jul 2008 12:30:57 +0000 (12:30 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 29 Jul 2008 12:30:57 +0000 (12:30 +0000)
RAW/AliRawReaderChain.cxx [new file with mode: 0644]
RAW/AliRawReaderChain.h [new file with mode: 0644]
RAW/AliRawReaderRoot.cxx
RAW/AliRawReaderRoot.h
RAW/RAWDatarecLinkDef.h
RAW/libRAWDatarec.pkg

diff --git a/RAW/AliRawReaderChain.cxx b/RAW/AliRawReaderChain.cxx
new file mode 100644 (file)
index 0000000..7025cfb
--- /dev/null
@@ -0,0 +1,139 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+///////////////////////////////////////////////////////////////////////////////
+///
+/// This is a class for reading raw data from a root chain.
+/// There are two constructors available - one from a text file containing the
+/// list of root raw-data files to be processed and one directly from
+/// TFileCollection.
+///
+/// cvetan.cheshkov@cern.ch 29/07/2008
+///
+///////////////////////////////////////////////////////////////////////////////
+
+#include <TChain.h>
+#include <TFileCollection.h>
+
+#include "AliRawReaderChain.h"
+#include "AliRawEvent.h"
+
+ClassImp(AliRawReaderChain)
+
+AliRawReaderChain::AliRawReaderChain() :
+  AliRawReaderRoot(),
+  fChain(NULL)
+{
+  // default constructor
+}
+
+AliRawReaderChain::AliRawReaderChain(TString listFileName) :
+  AliRawReaderRoot(),
+  fChain(NULL)
+{
+// create raw-reader objects which takes as an input a root chain
+// from the file list found in 'listFileName'
+
+  TFileCollection collection("RAW",
+                            "Collection with raw-data files",
+                            listFileName.Data());
+
+  TChain* fChain = new TChain("RAW");
+  if (!fChain->AddFileInfoList((TCollection*)(collection.GetList()))) {
+    Error("AliRawReaderChain","Bad file list in collection, the chain is empty");
+    return;
+  }
+
+  fChain->SetBranchStatus("*",0);
+  fChain->SetBranchStatus("rawevent",1);
+
+  fEvent = new AliRawEvent;
+  fChain->SetBranchAddress("rawevent", &fEvent);
+}
+
+AliRawReaderChain::AliRawReaderChain(TFileCollection *collection) :
+  AliRawReaderRoot(),
+  fChain(NULL)
+{
+// create raw-reader objects which takes as an input a root chain
+// from a root file collection
+
+  TChain* fChain = new TChain("RAW");
+  if (!fChain->AddFileInfoList((TCollection*)(collection->GetList()))) {
+    Error("AliRawReaderChain","Bad file list in collection, the chain is empty");
+    return;
+  }
+
+  fChain->SetBranchStatus("*",0);
+  fChain->SetBranchStatus("rawevent",1);
+
+  fEvent = new AliRawEvent;
+  fChain->SetBranchAddress("rawevent", &fEvent);
+}
+
+AliRawReaderChain::AliRawReaderChain(const AliRawReaderChain& rawReader) :
+  AliRawReaderRoot(rawReader),
+  fChain(rawReader.fChain)
+{
+// copy constructor
+}
+
+AliRawReaderChain& AliRawReaderChain::operator = (const AliRawReaderChain& 
+                                                 rawReader)
+{
+// assignment operator
+
+  this->~AliRawReaderChain();
+  new(this) AliRawReaderChain(rawReader);
+  return *this;
+}
+
+AliRawReaderChain::~AliRawReaderChain()
+{
+// delete objects and close root file
+
+  if (fChain) {
+    delete fChain;
+    fChain = NULL;
+  }
+}
+
+Bool_t AliRawReaderChain::NextEvent()
+{
+// go to the next event in the root file
+
+  if (!fChain || !fChain->GetListOfFiles()->GetEntriesFast()) return kFALSE;
+
+  do {
+    delete fEvent;
+    fEvent = new AliRawEvent;
+    if (fChain->GetEntry(fEventIndex+1) <= 0)
+      return kFALSE;
+    fEventIndex++;
+  } while (!IsEventSelected());
+  fEventNumber++;
+  return Reset();
+}
+
+Bool_t AliRawReaderChain::RewindEvents()
+{
+// go back to the beginning of the root file
+
+  fEventIndex = -1;
+  delete fEvent;
+  fEvent = new AliRawEvent;
+  fEventNumber = -1;
+  return Reset();
+}
diff --git a/RAW/AliRawReaderChain.h b/RAW/AliRawReaderChain.h
new file mode 100644 (file)
index 0000000..e2dea34
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef ALIRAWREADERCHAIN_H
+#define ALIRAWREADERCHAIN_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+///////////////////////////////////////////////////////////////////////////////
+///
+/// This is a class for reading raw data from a root chain.
+///
+///////////////////////////////////////////////////////////////////////////////
+
+#include <TString.h>
+
+#include "AliRawReaderRoot.h"
+
+class TChain;
+class TFileCollection;
+
+class AliRawReaderChain: public AliRawReaderRoot {
+  public :
+    AliRawReaderChain();
+    AliRawReaderChain(TString listFileName);
+    AliRawReaderChain(TFileCollection *collection);
+    AliRawReaderChain(const AliRawReaderChain& rawReader);
+    AliRawReaderChain& operator = (const AliRawReaderChain& rawReader);
+    virtual ~AliRawReaderChain();
+
+    virtual Bool_t   NextEvent();
+    virtual Bool_t   RewindEvents();
+
+  protected :
+    TChain*          fChain;        // root chain with raw events
+
+    ClassDef(AliRawReaderChain, 0) // class for reading raw digits from a root file
+};
+
+#endif
index f720d42..9b51241 100644 (file)
 
 ClassImp(AliRawReaderRoot)
 
+AliRawReaderRoot::AliRawReaderRoot() :
+  fFile(NULL),
+  fBranch(NULL),
+  fEventIndex(-1),
+  fEvent(NULL),
+  fSubEventIndex(0),
+  fSubEvent(NULL),
+  fEquipmentIndex(0),
+  fEquipment(NULL),
+  fRawData(NULL),
+  fPosition(NULL),
+  fEnd(NULL)
+{
+// default constructor
+
+}
 
 AliRawReaderRoot::AliRawReaderRoot(const char* fileName, Int_t eventNumber) :
   fFile(NULL),
index f315613..3c6e731 100644 (file)
@@ -22,6 +22,7 @@ class TBranch;
 
 class AliRawReaderRoot: public AliRawReader {
   public :
+    AliRawReaderRoot();
     AliRawReaderRoot(const char* fileName, Int_t eventNumber = -1);
     AliRawReaderRoot(AliRawEvent* event);
     AliRawReaderRoot(const AliRawReaderRoot& rawReader);
index 7f852de..8b549ad 100644 (file)
@@ -8,6 +8,7 @@
 #pragma link C++ class AliRawReader+;
 #pragma link C++ class AliRawReaderFile+;
 #pragma link C++ class AliRawReaderRoot+;
+#pragma link C++ class AliRawReaderChain+;
 #pragma link C++ class AliRawReaderDate+;
 #pragma link C++ class AliRawReaderDateV3+;
 #pragma link C++ class AliRawReaderMemory+;
index dadccab..ad34347 100644 (file)
@@ -2,6 +2,7 @@
 
 SRCS:=  AliFilter.cxx \
        AliRawReader.cxx AliRawReaderFile.cxx AliRawReaderRoot.cxx \
+       AliRawReaderChain.cxx \
        AliRawReaderDate.cxx AliRawReaderDateV3.cxx \
        AliRawReaderMemory.cxx \
        AliRawHLTManager.cxx \