From bb0edcaffc239a22efd66120b3b5b7588142e934 Mon Sep 17 00:00:00 2001 From: cvetan Date: Thu, 1 Oct 2009 21:43:06 +0000 Subject: [PATCH] Adding new URI for raw data - 'raw://run<#>', where <#> is the run number. The URI is handled by AliRawReaderChain. The corresponding chain is created by querying the alien FC. The URI is supposed to be used mainly within the PROOF reco. --- RAW/AliRawReader.cxx | 11 ++++++++++ RAW/AliRawReaderChain.cxx | 44 +++++++++++++++++++++++++++++++++++++++ RAW/AliRawReaderChain.h | 1 + 3 files changed, 56 insertions(+) diff --git a/RAW/AliRawReader.cxx b/RAW/AliRawReader.cxx index beb5a7ee145..a336d4693f7 100644 --- a/RAW/AliRawReader.cxx +++ b/RAW/AliRawReader.cxx @@ -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())); diff --git a/RAW/AliRawReaderChain.cxx b/RAW/AliRawReaderChain.cxx index 0022a2a66e4..33b6953f84b 100644 --- a/RAW/AliRawReaderChain.cxx +++ b/RAW/AliRawReaderChain.cxx @@ -33,6 +33,8 @@ #include #include #include +#include +#include #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) diff --git a/RAW/AliRawReaderChain.h b/RAW/AliRawReaderChain.h index f3a17cf2667..8ef50e3ad7d 100644 --- a/RAW/AliRawReaderChain.h +++ b/RAW/AliRawReaderChain.h @@ -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(); -- 2.43.0