/*! \file \version $Id: TAGactMbsReader.cxx,v 1.12 2003/07/08 18:54:19 mueller Exp $ \brief Implementation of TATOFactMbsReader. */ #include "TRegexp.h" #include "TATOFroot.h" #include "TATOFactMbsReader.h" /*! \class TATOFactMbsReader TATOFactMbsReader.h "TATOFactMbsReader.h" \brief Reader action for MBS files (.lmd format). ** */ ClassImp(TATOFactMbsReaderChannel); ClassImp(TATOFactMbsReader); //------------------------------------------+----------------------------------- //! Default constructor. TATOFactMbsReader::TATOFactMbsReader(const char* name) : TATOFactionFile(name, "TATOFactMbsReader - MBS file reader", "READ"), fpChannelList(0), fpStream(0) { fpChannelList = new TList(); fpChannelList->SetOwner(kTRUE); } //------------------------------------------+----------------------------------- //! Destructor. TATOFactMbsReader::~TATOFactMbsReader() { delete fpChannelList; delete fpStream; } //------------------------------------------+----------------------------------- //! Add input data descriptor. void TATOFactMbsReader::SetupChannel(TATOFdataDsc* p_data, TATOFmbsEventFilter* p_filt) { TATOFactMbsReaderChannel* p_chan = new TATOFactMbsReaderChannel(p_data, p_filt); AddDataOut(p_data, "TATOFmbsEvent"); fpChannelList->Add(p_chan); return; } //------------------------------------------+----------------------------------- //! Open MBS data source. /* Int_t TATOFactMbsReader::Open(const TString& name, Option_t*) { delete fpStream; fpStream = new TATOFmbsIStream(); Bool_t b_bad = fpStream->Open(name); if (b_bad) { delete fpStream; fpStream = 0; } gTATOFroot->SetEventNumber(-1); if (!b_bad) { TRegexp reg_4dig = "[0-9][0-9][0-9][0-9]"; Int_t i_ext = 0; Int_t i_off = name.Index(reg_4dig, &i_ext); if (i_off >= 0) { TString name_runno = name(i_off,i_ext); Int_t i_runno = -1; Int_t i_nconv = sscanf((const char*)name_runno,"%d", &i_runno); if (i_nconv == 1) gTATOFroot->SetRunNumber(i_runno); } } return b_bad; } */ //------------------------------------------+----------------------------------- //! Close input file. /* void TATOFactMbsReader::Close() { delete fpStream; fpStream = 0; return; } */ //------------------------------------------+----------------------------------- //! Returns \a true if an input file or connection is open. /* Bool_t TATOFactMbsReader::IsOpen() const { return fpStream != 0; } */ //------------------------------------------+----------------------------------- //! Process MbsReader. Bool_t TATOFactMbsReader::Process() { if (Valid()) return kTRUE; if (IsZombie()) return kFALSE; if (fpStream) { fpStream->FetchEvent(); if (fpStream->Valid()) SetBit(kValid); else { if (fpStream->Eof()) { SetBit(kEof); SetBitAllDataOut(kEof); } SetBit(kFail); SetBitAllDataOut(kFail); } } else { Error("Process()", "No input source opened"); SetBit(kFail); SetBitAllDataOut(kFail); return kFALSE; } if (Valid()) { for (TObjLink* lnk = fpChannelList->FirstLink(); lnk; lnk=lnk->Next()) { TATOFactMbsReaderChannel* p_chan =(TATOFactMbsReaderChannel*)lnk->GetObject(); TATOFdataDsc* p_data = p_chan->fpDataDsc; TATOFmbsEventFilter* p_filt = p_chan->fpFilter; fpStream->FillEvent((TATOFmbsEvent*)p_data->Object(), p_filt); p_data->SetBit(kValid); } } return Valid(); }