//*-- Author : Peter Zumbruch
//*-- Derived from: Manuel Sanchez
//*-- Modified : 12/Nov/2003 by P. Zumbruch
//*-- Modified : 07/Jun/2006 by J. Wuestenfeld

//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////
// HRFIORootSource
//
// This data source can read data from a ROOT file generated by
// HYDRA, this includes both the reconstruction and simulation software.
//
// The data source takes care of instantiating the appropriate classes even
// if they are non-standard. That is, if you have an input file with
// HMdcHitSim instead of HMdcHit; HRFIORootSource will take care of using
// HMdcHitSim during the analysis.
//
////////////////////////////////////////////////////////////////////////////
using namespace std;
#include "rawapin.h"
#include "hrfiorootsource.h"
#include "TPluginManager.h"
#include "TROOT.h"

ClassImp(HRFIORootSource)

// ----------------------------------------------------------------------

HRFIORootSource::HRFIORootSource(Bool_t fPers, Bool_t fMerg)
 : HRootSource(fPers, fMerg)
{
  // for fPers==kFALSE, input cats are suppressed in output
  // for fMerg==kTRUE, partial events in input tree are merged into current
  // event, if it exists already at init().

  fDirectory="";
  fServer="lxgstore";
  fArchive="hades";

  // Needed to tell ROOT which Class to use for RFIO access to *.root files.
  // Nonstandard class HTRFIOFile instead of TRFIOFile used for access.
  // So for successfull access to files from taperobot in compiled programs
  // libRFIO.so is not needed any more (Does not link at GSI anyhow!)
  gROOT->GetPluginManager()-> AddHandler("TFile", "^rfio:", "HTRFIOFile","RFIOtsm","HTRFIOFile(const Char_t*, Option_t *, const Char_t *, Int_t)");
}

// ----------------------------------------------------------------------

HRFIORootSource::~HRFIORootSource(void) {
  //Class destructor, it clears the data source.
  Clear();
}

// ----------------------------------------------------------------------

void HRFIORootSource::setArchive(const Text_t archiveName[]) {
  //Sets the archive where to read files from.
  fArchive=archiveName;
}

// ----------------------------------------------------------------------

Bool_t HRFIORootSource::access(const TString &inname, Int_t mode){
  //return 0;  // always true switched off because CINT does not like rfio_fopen !! to be fixed
  TString name = inname;
  name.ReplaceAll("rfio:","");
  Char_t *nn = new char[name.Length()];
  Bool_t val = rfio_access(nn,mode);
  delete nn;
  return val;

//   if (mode == 0)
//     {
//           RFILE *fRemote = NULL;

//           printf("-M- preparing access to remote file %s\n", name.Data());
// 	  Char_t tmp[400];
// 	  sprintf(tmp,name.Data());
//           fRemote = rfio_fopen(tmp, "rb");
//           if (!(fRemote == NULL))
// 	    {
//               printf("-M- access to remote file\n %s\npossible \n", name.Data());
//               if (rfio_fclose(fRemote))
// 		{
// 		  Warning("access","-E- closing remote file %s\n", name.Data());
// 		  perror("    ");
// 		}
// 	    }
// 	  return 0;
//     }
//   else
//     {
//       Warning("access","mode value (2nd argument): %i different from only supported 0",mode);
//       return 1;
//     }
}

// ----------------------------------------------------------------------
TString HRFIORootSource::getFileName(const Text_t *file)
{
  TString fname;
  if (file[0] == '/') { // beginning with / ?
    fname="rfio:";
    fname+=file;
  } else {
    fname="rfio:";
    fname+=fServer;
    fname+="/";
    fname+=fArchive;
    fname+="/";
    fname+=fDirectory;
    fname+="/";
    fname+=file;
  }
  return fname;
}

// ----------------------------------------------------------------------

Bool_t HRFIORootSource::setInput(const Text_t *fileName,const Text_t *archiveName,const Text_t *treeName) {
  setArchive(archiveName);
  if (strcmp(treeName,"T") != 0) return kFALSE;
  return addFile(fileName);
}

TFile* HRFIORootSource::getFile(TString name)
{
  return TFile::Open(name.Data(),"READ");
};

Last change: Sat May 22 13:07:54 2010
Last generated: 2010-05-22 13:07

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.