BRAT 2.4.5
Class index
Full class index
brahmlib
BRAHMS
ROOT page
// $Id: BrSequenceManager.cxx,v 1.1.1.1 2001/06/21 14:55:15 hagel Exp $
// $Author: hagel $
// $Date: 2001/06/21 14:55:15 $
//

#include <BrIostream.h>

//
// ROOT classes

//
// Brat classes
#include "BrSequenceManager.h"
#include <BrException.h>

///////////////////////////////////////////////////////////////////////
//
// This manager class will help the user to get events from
// sequential sequence files from a specific run. 
// The (raw) data files are expected to have the standard 
// name: runAAAAAAseqBBB.cdat, where AAAAAA and BBB are integers.
//
// Example of an event loop:
//
// -------------------------------------------------------------------
//    {
//      input = new BrRawDataInput("data input");
//
//      BrSequenceManager* seqMan = BrSequenceManager::Instance();
//      seqMan->SetDataDirectory("foo");
//      seqMan->SetRunNumber(4711);  
//
//
//      while(1) {
//    
//        if (!input->Open(seqMan->GetNextSequenceFile(),"DISKFILE")) 
//          break;
//    
//        while(!input->Eof()) {
//          BrEvent* event = new BrEvent("event", 1, 1);
//
//          input->Event(event);
//
//          ...
//
//          delete event;
//        }
//        input->Close(); 
//      }
//    }
// -------------------------------------------------------------------
// 
//
 
ClassImp(BrSequenceManager);

//____________________________________________________________________
// Static instance of manager. 
BrSequenceManager* BrSequenceManager::fgInstance = 0;

//____________________________________________________________________
 BrSequenceManager* BrSequenceManager::Instance(){
  // There can be only one!
  if(!fgInstance)
    fgInstance = new BrSequenceManager;
  return fgInstance;
}

//____________________________________________________________________
 BrSequenceManager::BrSequenceManager()
{
  // CTOR
  fgInstance       = this;
  fRunNumber       = 0;
  fSequenceNumber  = -1;
  fDataDir         = 0;     
  fStartSequence   = 0;
  fStopSequence    = 999;
  fDataType        = raw;
}
//____________________________________________________________________
 BrSequenceManager::~BrSequenceManager()
{
  // DTOR
  fgInstance = 0;
  if (fDataDir)
    delete fDataDir;
}

//____________________________________________________________________
void
 BrSequenceManager::SetDataDirectory(const Char_t* directory)
{
  // Set the diretory in wich the manager should look for the 
  // sequence files. 
  if (fDataDir)
    *fDataDir = directory;
  else
    fDataDir = new TString(directory);
}

//____________________________________________________________________
const Char_t*
 BrSequenceManager::GetNextSequenceFile(void)
{
  // Return the name of the next sequence file with full path. It's
  // the users responsibility to copy the string. If the next
  // sequence number is bigger than 999 or less than 0, this method
  // return 0.  
  fSequenceNumber++;

  return GetCurrentSequenceFile();
}


//____________________________________________________________________
const Char_t*
 BrSequenceManager::GetCurrentSequenceFile(void)
{
  // Return the name of the current sequence file with full path. It's
  // the users responsibility to copy the string. If the current
  // sequence number is bigger than 999 or less than 0, this method
  // return 0.  
  if ((fSequenceNumber<0)||(fSequenceNumber>999))
    return 0;

  if ((fSequenceNumber<fStartSequence)||(fSequenceNumber>fStopSequence))
    return 0;
  
  if (fDataType == raw)
    return Form("%srun%06dseq%03d.dat", 
		fDataDir->Data(), fRunNumber, fSequenceNumber);
  else if (fDataType == root)
    return Form("%srun%06dseq%03d.root", 
		fDataDir->Data(), fRunNumber, fSequenceNumber);
  else {
    throw new BrError("BrSequenceManager","Data type unknown!");
    return 0;
  }
}
//____________________________________________________________________
void
 BrSequenceManager::SetDataType(const Char_t* type)
{
  
  TString s(type);
  if (s.Contains("root",TString::kIgnoreCase)) 
    fDataType = root;
  else if (s.Contains("raw",TString::kIgnoreCase)) 
    fDataType = raw;
  else {
    throw new BrError("BrSequenceManager","Data type %s unknown!", type);
    return;
  }
}
//____________________________________________________________________
Bool_t
 BrSequenceManager::IsDataTypeRaw(void)
{
  if (fDataType == raw) 
    return kTRUE;
  return kFALSE;

}
//____________________________________________________________________
Bool_t
 BrSequenceManager::IsDataTypeRoot(void)
{
  if (fDataType == root) 
    return kTRUE;
  return kFALSE;
}

//____________________________________________________________________
Bool_t  
 BrSequenceManager::IsSequence(Int_t seqNo)
{
  // Checks if the sequence file corresponding to the sequence number
  // (seqNo) is in the data directory.
  // ALWAYS RETURNS kTRUE!!!!!!!!!!!!!!!!!!!1

  /*  
  const Char_t* fileName 
    = Form("%srun%06dseq%03d.dat", fDataDir->Data(), fRunNumber, seqNo);
  
  TDirectory* saveDir = gDirectory;
  TFile*      file    = new TFile(fileName, "READ", "file");
  
  Bool_t isSequence = file->IsZombie();

  if(file!=0) {
    file->Close();
    delete file;
  }
  
  saveDir->cd();
  delete saveDir;
  return isSequence;
  */
  return kTRUE;
}



// 
// $Log: BrSequenceManager.cxx,v $
// Revision 1.1.1.1  2001/06/21 14:55:15  hagel
// Initial revision of brat2
//
// Revision 1.3  2000/12/26 22:08:09  bramreco
// use BrIostream
//
// Revision 1.2  2000/11/13 16:34:13  ekman
// Data type (raw or root) added. Start sequence and stop sequence added.
//
// Revision 1.1  2000/10/24 15:19:35  ekman
// Added BrSequenceManager. The purpose of this class is to serve filenames
// of a number of sequences from a single run.
//
// 

This page automatically generated by script docBrat by Christian Holm

Copyright ; 2002 BRAHMS Collaboration <brahmlib@rcf.rhic.bnl.gov>
Last Update on by

Validate HTML
Validate CSS