9 #ifndef GAUDIROOTCNV_ROOTEVTSELECTORCONTEXT_H 10 #define GAUDIROOTCNV_ROOTEVTSELECTORCONTEXT_H 64 m_fiter = m_files.
begin();
86 #endif // GAUDIROOTCNV_ROOTEVTSELECTORCONTEXT_H 100 using namespace Gaudi;
117 return error(
"Error initializing base class Service!" );
122 return error(
"Unable to locate IPersistencySvc interface of " + m_persName );
126 status = ipers->getService( itm.
name(), cnvSvc );
128 status = ipers->getService( itm.
type(), cnvSvc );
130 return error(
"Unable to locate IConversionSvc interface of database type " + m_cnvSvcName );
133 m_dbMgr =
dynamic_cast<RootCnvSvc*
>( cnvSvc );
136 return error(
"Unable to localize service:" + m_cnvSvcName );
141 auto eds = serviceLocator()->service<
IDataManagerSvc>(
"EventDataSvc" );
143 return error(
"Unable to localize service EventDataSvc" );
145 m_rootCLID = eds->rootCLID();
146 m_rootName = eds->rootName();
148 log <<
MSG::DEBUG <<
"Selection root:" << m_rootName <<
" CLID:" << m_rootCLID <<
endmsg;
156 if ( m_dbMgr ) m_dbMgr->release();
176 TBranch* b = pCtxt->
branch();
181 if ( fileit != pCtxt->
files().
end() ) {
186 string section = m_rootName[0] ==
'/' ? m_rootName.substr( 1 ) : m_rootName;
187 b = con->
getBranch( section, m_rootName );
194 m_dbMgr->disconnect( in ).ignore();
200 long ent = pCtxt->
entry();
201 Long64_t nent = b->GetEntries();
202 if ( nent > ( ent + 1 ) ) {
220 for (
int i = 0; i < jump; ++i ) {
234 return error(
"EventSelector Iterator, operator -- not supported " );
241 for (
int i = 0; i < jump; ++i ) {
258 if ( fileit != pCtxt->
files().
end() ) {
259 string input = *fileit;
260 m_dbMgr->disconnect( input ).ignore();
276 long ent = pctxt->
entry();
279 if ( fileit != pctxt->
files().
end() ) {
280 const string par[2] = {pctxt->
fid(), m_rootName};
281 const unsigned long ipar[2] = {0, (
unsigned long)ent};
282 return m_dbMgr->createAddress( m_dbMgr->repSvcType(), m_rootCLID, &par[0], &ipar[0], pAddr );
307 string db, typ, item,
sel, stmt, aut, addr;
309 if ( criteria.
compare( 0, 5,
"FILE " ) == 0 ) {
312 db = criteria.
substr( 5 );
315 for (
auto attrib : Parser( criteria ) ) {
316 string tmp = attrib.tag.substr( 0, 3 );
317 if ( tmp ==
"DAT" ) {
319 }
else if ( tmp ==
"OPT" ) {
320 if ( attrib.value.compare( 0, 3,
"REA" ) != 0 ) {
321 log <<
MSG::ERROR <<
"Option:\"" << attrib.value <<
"\" not valid" <<
endmsg;
324 }
else if ( tmp ==
"TYP" ) {
326 }
else if ( tmp ==
"ADD" ) {
328 }
else if ( tmp ==
"SEL" ) {
330 }
else if ( tmp ==
"FUN" ) {
332 }
else if ( tmp ==
"AUT" ) {
334 }
else if ( tmp ==
"COL" ) {
348 if ( ipos == -1 )
break;
349 rest = rest.
substr( ipos, string::npos );
352 if ( lpos == -1 )
break;
353 rest = rest.
substr( lpos, string::npos );
359 return error(
"Invalid iteration context." );
Parse attribute strings allowing iteration over the various attributes.
StatusCode resetCriteria(const std::string &cr, Context &c) const override
Will set a new criteria for the selection of the next list of events and will change the state of the...
Definition of the MsgStream class used to transmit messages.
StatusCode initialize() override
const Files & files() const
Access to the file container.
Files::const_iterator fileIterator() const
Access to the file iterator.
const std::string & fid() const
Access file id.
RootEvtSelectorContext(const RootEvtSelector *s)
Standard constructor with initialization.
T find_first_not_of(T...args)
StatusCode finalize() override
std::vector< std::string > Files
Definition of the file container.
bool isSuccess() const
Test for a status code of SUCCESS.
std::string m_fid
Connection fid.
StatusCode last(Context &refContext) const override
Access last item in the iteration.
StatusCode releaseContext(Context *&refCtxt) const override
Release existing event iteration context.
~RootEvtSelectorContext() override=default
Standard destructor.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Helper class to parse a string of format "type/name".
StatusCode rewind(Context &refCtxt) const override
Rewind the dataset.
ROOT specific event selector context.
This class is used for returning status codes from appropriate routines.
StatusCode finalize() override
IService implementation: Service finalization.
TBranch * getBranch(const std::string §ion, const std::string &branch_name)
Access data branch by name: Get existing branch in read only mode.
T find_first_of(T...args)
void * identifier() const override
Context identifier.
const RootEvtSelector * m_sel
Reference to the hosting event selector instance.
void setFiles(const Files &f)
Set the file container.
void setBranch(TBranch *b)
Set the top level branch (typically /Event) used to iterate.
StatusCode next(Context &refCtxt) const override
Get next iteration item from the event loop context.
Concrete event selector implementation to access ROOT files.
void setEntry(long e)
Set current event entry number.
virtual unsigned long release()=0
Release Interface instance.
StatusCode createAddress(const Context &refCtxt, IOpaqueAddress *&) const override
Create new Opaque address corresponding to the current record.
const std::string & type() const
const std::string & fid() const
Access connection fid.
void setFID(const std::string &fid)
Set connection FID.
Files::const_iterator m_fiter
The iterator to the.
Data persistency service interface.
void setFileIterator(Files::const_iterator i)
Set file iterator.
TBranch * branch() const
Access to the top level branch (typically /Event) used to iterate.
StatusCode createContext(Context *&refpCtxt) const override
Create a new event loop context.
const std::string & name() const
Opaque address interface definition.
StatusCode initialize() override
IService implementation: Db event selector override.
Files m_files
The file container managed by this context.
Concrete implementation of the IDataConnection interface to access ROOT files.
TBranch * m_branch
Reference to the top level branch (typically /Event) used to iterate.
StatusCode previous(Context &refCtxt) const override
Get previous iteration item from the event loop context.
Helper functions to set/get the application return code.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
long entry() const
Access to the current event entry number.
long m_entry
Current entry of current file.