32 #include "MFMCommonFrame.h"
48 fCurrentFileNumber(0u),
69 if ( fCurrentFile > 0 ) {
70 ::close(fCurrentFile);
72 Log <<
info <<
"the input file " << fFiles2Read[fCurrentFileNumber-1]
73 <<
" has just been closed " << fTotBytesRead <<
" Bytes read " <<
nline;
76 while ( fCurrentFileNumber < fFiles2Read.size() ) {
78 fCurrentFile = ::open(fFiles2Read[fCurrentFileNumber].data(),(O_RDONLY));
79 if ( fCurrentFile < 0 ) {
81 Log <<
warning <<
"File " << fFiles2Read[fCurrentFileNumber] <<
" is not a valid file " <<
nline ;
85 Log <<
info <<
"A new input file has just been open " << fFiles2Read[fCurrentFileNumber] <<
nline;
93 if ( fCurrentFile == 0 ) {
95 Log <<
info <<
"All input file have been read " <<
nline;
108 if ( (*error_code) == 0u ) {
118 out.
Rewind(ConfAgent::kWrite);
120 if (
GetFrameIO().GetStatus() == BaseFrameIO::kFinished ) {
125 Bool_t ok =
true, check_previous =
true; Int_t framesize = 0, vectorsize;
char **pvector;
128 vectorsize = MFM_BLOB_HEADER_SIZE; pvector = &fMFMVector;
130 if (check_previous) {
131 if ( fBufferIO.
Offset() ) {
135 check_previous =
false;
138 framesize = fMFMFrame->ReadInFile(&fCurrentFile, pvector, &vectorsize);
139 if (framesize <= 0) {
149 fTotBytesRead+=framesize;
151 the_anc_key.length = framesize +
sizeof(ANC_KEY);
152 the_anc_key.type = 0xFA0201A0;
153 the_anc_key.eventnumber = fMFMFrame->GetEventNumber();
154 the_anc_key.timestamp = fMFMFrame->GetTimeStamp();
156 fBufferIO.
Import((Char_t *)(&the_anc_key),20);
157 fBufferIO.
Import((Char_t *)fMFMFrame->GetPointHeader(),framesize);
160 if ( out.
AddFrame(fBufferIO) == false )
172 std::string
tmp, option, filename;
177 std::string conffile =
GetConfPath() +
"MFM2ADF.conf";
179 std::ifstream filein(conffile.data());
180 if ( filein.is_open() == true ) {
183 while ( filein.good() && !filein.eof() ) {
184 if ( tmp[0] ==
'#' ) {
190 std::istringstream decode(tmp);
192 if( tmp[0] ==
'l' ) {
193 decode >> option >> filename;
195 fFiles2Read.push_back(filename);
203 Log <<
" " << fFiles2Read.size() <<
" file(s) is(are) to be read by MFM2ADF Producer " <<
nline;
210 fMFMFrame =
new MFMCommonFrame();
212 fMFMVector = (
char*) (malloc(MFM_BLOB_HEADER_SIZE));
223 if ( fCurrentFile ) {
224 ::close(fCurrentFile); fCurrentFile = 0;
227 Log << fCurrentFileNumber <<
" file(s) read "
228 <<
" Total number of events " << fEventsRead <<
" within " << fTotBytesRead <<
" bytes read"
232 delete fMFMVector; fMFMVector = 0x0;
235 delete fMFMFrame; fMFMFrame = 0x0;
virtual UInt_t ProcessBlock(ADF::FrameBlock &)
Produce one block of data.
It defines the interface needed to be a narval actor (producer).
LogMessage & error(LogMessage &)
LogMessage & warning(LogMessage &)
static void process_config(const Char_t *, UInt_t *)
to init globals (static) from a directory
virtual void process_initialise(UInt_t *error_code)
Constructor implementation.
LogMessage & nline(LogMessage &)
UInt_t Offset() const
it returns the current position in the buffer
LogMessage & info(LogMessage &)
manipulator to modify the LogMessage
const std::string & GetConfPath()
To get the algo path associated with the current actor.
void SetStatus(EStatus stat)
virtual void SetProcessMethod(const char *)
To set the current method.
LogMessage & dolog(LogMessage &)
virtual void ClearMessage()
To clear the current message.
virtual Bool_t AddFrame(const BufferIO &, UInt_t=0u)
Add a Frame to the block.
virtual void process_reset(UInt_t *error_code)
Destructor implementation.
UInt_t SetEffectiveSize(UInt_t size=kMaxUInt_t)
in case the buffer is partly filled and you would like to read it again
UInt_t Import(const Char_t *from, UInt_t size_ext_buf)
Import the given array in this buffer.
virtual std::string & GetProcessName()
To get the Process name.
virtual void Rewind(ConfAgent::EMode mode=ConfAgent::kRead)=0
Rewind to be ready to be used again.
LogMessage Log
to send messages to the log server
header file for MFM2ADF.cpp