New IsRawReaderValid() method which returns false in case the raw-data file, chain...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Aug 2008 11:34:01 +0000 (11:34 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Aug 2008 11:34:01 +0000 (11:34 +0000)
RAW/AliRawReader.cxx
RAW/AliRawReader.h
RAW/AliRawReaderChain.cxx
RAW/AliRawReaderDate.cxx
RAW/AliRawReaderDateV3.cxx
RAW/AliRawReaderFile.cxx
RAW/AliRawReaderRoot.cxx

index fc7cb3e..f00be98 100644 (file)
@@ -67,7 +67,8 @@ AliRawReader::AliRawReader() :
   fErrorCode(0),
   fEventNumber(-1),
   fErrorLogs("AliRawDataErrorLog",100),
-  fHeaderSwapped(NULL)
+  fHeaderSwapped(NULL),
+  fIsValid(kTRUE)
 {
 // default constructor: initialize data members
 // Allocate the swapped header in case of Mac
@@ -124,7 +125,8 @@ AliRawReader::AliRawReader(const AliRawReader& rawReader) :
   fErrorCode(0),
   fEventNumber(-1),
   fErrorLogs("AliRawDataErrorLog",100),
-  fHeaderSwapped(NULL)
+  fHeaderSwapped(NULL),
+  fIsValid(rawReader.fIsValid)
 {
 // copy constructor
 // Allocate the swapped header in case of Mac
@@ -154,6 +156,8 @@ AliRawReader& AliRawReader::operator = (const AliRawReader& rawReader)
   fEventNumber = rawReader.fEventNumber;
   fErrorLogs = *((TClonesArray*)rawReader.fErrorLogs.Clone());
 
+  fIsValid = rawReader.fIsValid;
+
   return *this;
 }
 
@@ -226,6 +230,14 @@ AliRawReader* AliRawReader::Create(const char *uri)
     }
   }
 
+  if (!rawReader->IsRawReaderValid()) {
+    AliErrorClass(Form("Raw-reader is invalid - check the input URI (%s)",fileURI.Data()));
+    delete rawReader;
+    fields->Delete();
+    delete fields;
+    return NULL;
+  }
+
   // Now apply event selection criteria (if specified)
   if (fields->GetEntries() > 1) {
     Int_t eventType = -1;
index 0df2ad8..9eca4c9 100644 (file)
@@ -158,6 +158,8 @@ class AliRawReader: public TObject {
     virtual Bool_t   UseAutoSaveESD() const { return kFALSE; }
     virtual TChain*  GetChain() const { return NULL; }
 
+    Bool_t           IsRawReaderValid() const { return fIsValid; }
+
   protected :
     virtual void     SelectEvents(Int_t type, ULong64_t triggerMask = 0);
     Bool_t           IsSelected() const;
@@ -188,6 +190,8 @@ class AliRawReader: public TObject {
     UInt_t SwapWord(UInt_t x) const;
     UShort_t SwapShort(UShort_t x) const;
 
+    Bool_t           fIsValid;              // is raw-reader created successfully
+
     ClassDef(AliRawReader, 0) // base class for reading raw digits
 };
 
index da665f2..0d4aacb 100644 (file)
@@ -53,6 +53,7 @@ AliRawReaderChain::AliRawReaderChain(const char* listFileName) :
   fChain = new TChain("RAW");
   if (!fChain->AddFileInfoList((TCollection*)(collection.GetList()))) {
     Error("AliRawReaderChain","Bad file list in collection, the chain is empty");
+    fIsValid = kFALSE;
     return;
   }
 
@@ -72,6 +73,7 @@ AliRawReaderChain::AliRawReaderChain(TFileCollection *collection) :
   fChain = new TChain("RAW");
   if (!fChain->AddFileInfoList((TCollection*)(collection->GetList()))) {
     Error("AliRawReaderChain","Bad file list in collection, the chain is empty");
+    fIsValid = kFALSE;
     return;
   }
 
@@ -88,6 +90,8 @@ AliRawReaderChain::AliRawReaderChain(TChain *chain) :
 // create raw-reader objects which takes as an input a root chain
 // from a root file collection
 
+  if (!fChain) fIsValid = kFALSE;
+
   fChain->SetBranchStatus("*",1);
 
   fEvent = new AliRawEvent;
index 88c3e65..6d414f6 100644 (file)
@@ -76,6 +76,7 @@ AliRawReaderDate::AliRawReaderDate(
   fFile = fopen(fileName, "rb");
   if (!fFile) {
     Error("AliRawReaderDate", "could not open file %s", fileName);
+    fIsValid = kFALSE;
     return;
   }
   if (eventNumber < 0) return;
index de82a38..1523fe6 100644 (file)
@@ -77,6 +77,7 @@ AliRawReaderDateV3::AliRawReaderDateV3(const char* fileName,
   fFile = fopen(fileName, "rb");
   if (!fFile) {
     Error("AliRawReaderDateV3", "could not open file %s", fileName);
+    fIsValid = kFALSE;
     return;
   }
   if (eventNumber < 0) return;
index 22f29c5..560c4f9 100644 (file)
@@ -60,7 +60,8 @@ AliRawReaderFile::AliRawReaderFile(Int_t eventNumber) :
 // in the current directory
 
   fDirectory = OpenDirectory();
-  OpenNextFile();
+  if (!fDirectory) fIsValid = kFALSE;
+  if (!OpenNextFile()) fIsValid = kFALSE;
   fHeader = new AliRawDataHeader;
 
   fId[0] = fId[1] = 0;
@@ -86,7 +87,8 @@ AliRawReaderFile::AliRawReaderFile(const char* dirName, Int_t eventNumber) :
 // create an object to read digits from the given directory
 
   fDirectory = OpenDirectory();
-  OpenNextFile();
+  if (!fDirectory) fIsValid = kFALSE;
+  if (!OpenNextFile()) fIsValid = kFALSE;
   fHeader = new AliRawDataHeader;
 
   fId[0] = fId[1] = 0;
index 7bf441e..27f4d26 100644 (file)
@@ -78,16 +78,19 @@ AliRawReaderRoot::AliRawReaderRoot(const char* fileName, Int_t eventNumber) :
   dir->cd();
   if (!fFile || !fFile->IsOpen()) {
     Error("AliRawReaderRoot", "could not open file %s", fileName);
+    fIsValid = kFALSE;
     return;
   }
   TTree* tree = (TTree*) fFile->Get("RAW");
   if (!tree) {
     Error("AliRawReaderRoot", "no raw data tree found");
+    fIsValid = kFALSE;
     return;
   }
   fBranch = tree->GetBranch("rawevent");
   if (!fBranch) {
     Error("AliRawReaderRoot", "no raw data branch found");
+    fIsValid = kFALSE;
     return;
   }
 
@@ -96,6 +99,7 @@ AliRawReaderRoot::AliRawReaderRoot(const char* fileName, Int_t eventNumber) :
   if (fEventIndex >= 0) {
     if (fBranch->GetEntry(fEventIndex) <= 0) {
       Error("AliRawReaderRoot", "no event with number %d found", fEventIndex);
+      fIsValid = kFALSE;
       return;
     }
   }
@@ -115,7 +119,7 @@ AliRawReaderRoot::AliRawReaderRoot(AliRawEvent* event) :
   fEnd(NULL)
 {
 // create an object to read digits from the given raw event
-
+  if (!fEvent) fIsValid = kFALSE;
 }
 
 AliRawReaderRoot::AliRawReaderRoot(const AliRawReaderRoot& rawReader) :
@@ -141,16 +145,19 @@ AliRawReaderRoot::AliRawReaderRoot(const AliRawReaderRoot& rawReader) :
     if (!fFile || !fFile->IsOpen()) {
       Error("AliRawReaderRoot", "could not open file %s", 
            rawReader.fFile->GetName());
+      fIsValid = kFALSE;
       return;
     }
     TTree* tree = (TTree*) fFile->Get("RAW");
     if (!tree) {
       Error("AliRawReaderRoot", "no raw data tree found");
+      fIsValid = kFALSE;
       return;
     }
     fBranch = tree->GetBranch("rawevent");
     if (!fBranch) {
       Error("AliRawReaderRoot", "no raw data branch found");
+      fIsValid = kFALSE;
       return;
     }
 
@@ -160,6 +167,7 @@ AliRawReaderRoot::AliRawReaderRoot(const AliRawReaderRoot& rawReader) :
       if (fBranch->GetEntry(fEventIndex) <= 0) {
        Error("AliRawReaderRoot", "no event with number %d found", 
              fEventIndex);
+       fIsValid = kFALSE;
        return;
       }
     }