Diana Software
QFileReader.cc
Go to the documentation of this file.
1 #include "QFileReader.hh"
2 #include "QFileList.hh"
4 #include <fstream>
5 
7 
9 {
10 }
11 
13 {
14 }
15 
17 {
18  fFileNumber = 0;
19  fFileEventNumber = 0;
20  fFileList.clear();
21  fFullPathFilesList.clear();
22 
23  fReadFileList = false;
24  std::string inFile = GetString("InputFile","NODEFAULT");
25  std::string fileExtension = "";
26  size_t dotpos = inFile.find_last_of(".");
27  if(dotpos != std::string::npos)
28  fileExtension = inFile.substr( dotpos+1 );
29  if(fileExtension == "list") fReadFileList = true;
30 
32  if(GetIteration() == 1 && fReadFileList) {
33  fFileListPath = inFile;
35  }
36  if( fRWCommon->fTempOutputFileList == "") {
37  // Open single file
38  fFileList.push_back(inFile);
39  Debug("InputFileName is %s", inFile.c_str());
40  } else {
41  // open file list
42  std::string listPath = fRWCommon->fTempOutputFileList;
43  fFileList = QFileList::Read(listPath,"FULLPATH");
44  Debug("FileList is %s",listPath.c_str());
45  }
46 
47  if(fFileList.empty()) { Panic("No files given"); }
48 
49  fFileListIter = fFileList.begin();
50 
51  fFullPathFilesList.clear();
53 
54  Add(*fFileListIter,evi);
55 }
56 
58 {
59  bool ret = true;
60  if(fFileEventNumber == 0 || Fill(eva) == false) {
61 
62  if(fFileListIter != fFileList.begin()) Close();
63 
64  if(fFileListIter != fFileList.end()) {
65  fFileEventNumber = 0;
66  Open(*fFileListIter,eva);
68  Info("Current input is %s", fFileListIter->c_str());
69  fFileListIter++;
70  ret = Fill(eva);
71  } else {
72  ret = false;
73  }
74 
75  }
77 
78  return ret;
79 }
80 
82 {
83 }
84 
85 const QError& QFileReader::JumpToEvent(Long64_t event)
86 {
88  std::string errDescr;
89  errDescr = "JumpToEvent is not implemented with reader " + GetName();
90  fErr.SetDescription(errDescr);
91  return fErr;
92 }
93 
#define Q_END_NAMESPACE
Definition: QDiana.hh:22
#define Q_BEGIN_NAMESPACE
Definition: QDiana.hh:20
@ QERR_NOT_IMPLEMENTED
Definition: QError.hh:109
const std::string & GetString(const std::string &parname, const std::string &defVal, bool warnCfg=true) const
Get a string parameter from config file ( see GetDouble() )
Definition: QBaseModule.cc:297
void Debug(const char *descr,...) const
Send a debug message (used to debug the module) with printf syntax.
Definition: QBaseModule.hh:208
unsigned int GetIteration() const
Get Current sequence iteration.
Definition: QBaseModule.hh:122
void Info(const char *descr,...) const
Send an info message (information) with printf syntax.
Definition: QBaseModule.hh:218
void Panic(const char *descr,...) const
Send a panic message (stops the framework) with printf syntax.
Definition: QBaseModule.hh:248
const std::string & GetName() const
Get Module name.
Definition: QBaseModule.hh:131
error class with error type and description
Definition: QError.hh:115
void SetDescription(const std::string &descr)
set error description
Definition: QError.hh:147
Visitor class of QEvent that provides full handling of QEvent.
void Read(const std::string &fileListPath)
Definition: QFileList.cc:67
std::list< std::string >::const_iterator fFileListIter
Definition: QFileReader.hh:62
virtual const QError & JumpToEvent(Long64_t event)
Jump to event.
Definition: QFileReader.cc:85
void Init(QEventAssembler &eva)
Init method is called before event loop, getting the QEventAssembler as argument This method must be ...
Definition: QFileReader.cc:16
std::string fFileListPath
file list path
Definition: QFileReader.hh:59
virtual ~QFileReader()
destructor
Definition: QFileReader.cc:12
virtual void Add(const std::string &fileName, QEventAssembler &eva)=0
Add objects to File, called only once in the Init phase.
void Done()
Done method is called after event loop. This method must be implemented by inheriting classes.
Definition: QFileReader.cc:81
virtual void Close()=0
virtual void Open(const std::string &fileName, QEventAssembler &eva)=0
Open File.
std::list< std::string > fFileList
list of files
Definition: QFileReader.hh:51
unsigned int fFileEventNumber
last event read
Definition: QFileReader.hh:54
QFileReader()
Mandatory constructor.
Definition: QFileReader.cc:8
virtual bool Fill(QEventAssembler &eva)=0
Fill event, return false when file has no more events.
bool fReadFileList
read file list
Definition: QFileReader.hh:57
bool Do(Diana::QEventAssembler &eva)
Definition: QFileReader.cc:57
int fReaderFileNumber
Definition: QRWCommon.hh:18
std::string fTempOutputFileList
Definition: QRWCommon.hh:20
Base class for diana event readers.
Definition: QReader.hh:50
QRWCommon * fRWCommon
object to share file names with QWriter
Definition: QReader.hh:108
static std::list< std::string > fFullPathFilesList
list of files
Definition: QReader.hh:96
void OpenNewFile(const std::string &fileName)
Call it when opening new file.
Definition: QReader.cc:181
QError fErr
Error returned by methods.
Definition: QReader.hh:106
int fFileNumber
current file number read
Definition: QReader.hh:92