Adding new URI for raw data - 'raw://run<#>', where <#> is the run number. The URI...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 1 Oct 2009 21:43:06 +0000 (21:43 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 1 Oct 2009 21:43:06 +0000 (21:43 +0000)
RAW/AliRawReader.cxx
RAW/AliRawReaderChain.cxx
RAW/AliRawReaderChain.h

index beb5a7e..a336d46 100644 (file)
@@ -232,6 +232,17 @@ AliRawReader* AliRawReader::Create(const char *uri)
     AliInfoClass(Form("Creating raw-reader in order to read raw-data files collection defined in %s",fileURI.Data()));
     rawReader = new AliRawReaderChain(fileURI);
   }
+  else if (fileURI.BeginsWith("raw://run")) {
+    fileURI.ReplaceAll("raw://run","");
+    if (fileURI.IsDigit()) {
+      rawReader = new AliRawReaderChain(fileURI.Atoi());
+    }
+    else {
+      AliErrorClass(Form("Invalid syntax: %s",fileURI.Data()));
+      fields->Delete();
+      return NULL;
+    }
+  }
   else {
     AliInfoClass(Form("Creating raw-reader in order to read raw-data file: %s",fileURI.Data()));
     TString filename(gSystem->ExpandPathName(fileURI.Data()));
index 0022a2a..33b6953 100644 (file)
@@ -33,6 +33,8 @@
 #include <TSystem.h>
 #include <TFile.h>
 #include <TKey.h>
+#include <TGrid.h>
+#include <TGridResult.h>
 
 #include "AliRawReaderChain.h"
 #include "AliRawVEvent.h"
@@ -202,6 +204,48 @@ AliRawReaderChain::AliRawReaderChain(TEntryList *elist) :
   fChain->SetBranchAddress("rawevent",&fEvent,&fBranch);
 }
 
+AliRawReaderChain::AliRawReaderChain(Int_t runNumber) :
+  AliRawReaderRoot(),
+  fChain(NULL)
+{
+// create raw-reader objects which takes as an input a root chain
+// with the raw-data files for a given run
+// It queries alien FC in order to do that and therefore
+// it needs alien API to be enabled
+
+  if (runNumber <= 0) {
+    Error("AliRawReaderChain","Bad run number:%d",runNumber);
+    fIsValid = kFALSE;
+  }
+
+  if (!gGrid) TGrid::Connect("alien://");
+  if (!gGrid) {
+    fIsValid = kFALSE;
+    return;
+  }
+
+  TGridResult *res = gGrid->Query("/alice/data",Form("%09d/raw/*%09d*0.root",runNumber,runNumber));
+  Int_t nFiles = res->GetEntries();
+  if (!nFiles) {
+    Error("AliRawReaderChain","No raw-data files found for run %d",runNumber);
+    fIsValid = kFALSE;
+    delete res;
+    return;
+  }
+
+  fChain = new TChain("RAW");
+  for (Int_t i = 0; i < nFiles; i++) {
+    TString filename = res->GetKey(i, "turl");
+    if(filename == "") continue;
+    fChain->Add(filename.Data());
+  }
+  delete res;
+
+  fChain->SetBranchStatus("*",1);
+  fChain->SetBranchAddress("rawevent",&fEvent,&fBranch);
+}
+
+
 AliRawReaderChain::AliRawReaderChain(const AliRawReaderChain& rawReader) :
   AliRawReaderRoot(rawReader),
   fChain(rawReader.fChain)
index f3a17cf..8ef50e3 100644 (file)
@@ -22,6 +22,7 @@ class AliRawReaderChain: public AliRawReaderRoot {
     AliRawReaderChain(TFileCollection *collection);
     AliRawReaderChain(TChain *chain);
     AliRawReaderChain(TEntryList *elist);
+    AliRawReaderChain(Int_t runNumber);
     AliRawReaderChain(const AliRawReaderChain& rawReader);
     AliRawReaderChain& operator = (const AliRawReaderChain& rawReader);
     virtual ~AliRawReaderChain();