Gaudi Framework, version v23r2

Home   Generated: Thu Jun 28 2012
Public Member Functions | Private Attributes

StoreExplorerAlg Class Reference

Small algorith, which traverses the data store and prints generic information about all leaves, which can be loaded/accessed. More...

Inheritance diagram for StoreExplorerAlg:
Inheritance graph
[legend]
Collaboration diagram for StoreExplorerAlg:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 StoreExplorerAlg (const std::string &name, ISvcLocator *pSvcLocator)
 Standard algorithm constructor.
virtual ~StoreExplorerAlg ()
 Standard Destructor.
template<class T >
std::string access (T *p)
void printObj (IRegistry *pReg, std::vector< bool > &flg)
 Print datastore leaf.
void explore (IRegistry *pObj, std::vector< bool > &flg)
virtual StatusCode initialize ()
 Initialize.
virtual StatusCode finalize ()
 Finalize.
virtual StatusCode execute ()
 Execute procedure.

Private Attributes

long m_print
 Job option to limit printout to first nnn events.
double m_frequency
 Job option to set the printout frequency.
bool m_exploreRelations
 Flag to check if relations should be followed.
long m_printMissing
 Flag to indicate if missing entities should be printed.
long m_total
 Internal counter to trigger printouts.
long m_frqPrint
 Internal counter to adjust printout frequency.
bool m_load
 Flag to load non existing items.
bool m_testAccess
 Flag to test access to objects (DataObject and ContainedObject)
bool m_accessForeign
 Flag to indicate if foreign files should be opened.
IDataProviderSvcm_dataSvc
 Reference to data provider service.
std::string m_dataSvcName
 Name of the data provider service.
std::string m_rootName
 Name of the root leaf (obtained at initialize)

Detailed Description

Small algorith, which traverses the data store and prints generic information about all leaves, which can be loaded/accessed.

Author:
: M.Frank
Version:
: 1.0

Definition at line 32 of file StoreExplorerAlg.cpp.


Constructor & Destructor Documentation

StoreExplorerAlg::StoreExplorerAlg ( const std::string name,
ISvcLocator pSvcLocator 
) [inline]

Standard algorithm constructor.

Definition at line 60 of file StoreExplorerAlg.cpp.

  :     Algorithm(name, pSvcLocator), m_dataSvc(0)
  {
    m_total = m_frqPrint = 0;
    declareProperty("Load",             m_load = false);
    declareProperty("PrintEvt",         m_print = 1);
    declareProperty("PrintMissing",     m_printMissing = 0);
    declareProperty("PrintFreq",        m_frequency = 0.0);
    declareProperty("ExploreRelations", m_exploreRelations = false);
    declareProperty("DataSvc",          m_dataSvcName="EventDataSvc");
    declareProperty("TestAccess",       m_testAccess = false);
    declareProperty("AccessForeign",    m_accessForeign = false);
  }
virtual StoreExplorerAlg::~StoreExplorerAlg (  ) [inline, virtual]

Standard Destructor.

Definition at line 74 of file StoreExplorerAlg.cpp.

                                  {
  }

Member Function Documentation

template<class T >
std::string StoreExplorerAlg::access ( T *  p ) [inline]

Definition at line 78 of file StoreExplorerAlg.cpp.

                          {
    if ( p )  {
      std::stringstream s;
      for (typename T::const_iterator i = p->begin(); i != p->end(); ++i )  {
        int idx = p->index(*i);
        s << idx << ":" << (*i)->clID() << ",";
      }
      std::string result = s.str();
      return result.substr(0, result.length()-2);
    }
    return "Access FAILED.";
  }
virtual StatusCode StoreExplorerAlg::execute (  ) [inline, virtual]

Execute procedure.

Definition at line 237 of file StoreExplorerAlg.cpp.

                                  {
    MsgStream log(msgSvc(), name());
    SmartDataPtr<DataObject>   root(m_dataSvc,m_rootName);
    if ( ((m_print > m_total++) || (m_frequency*m_total > m_frqPrint)) && root )    {
      if ( m_frequency*m_total > m_frqPrint )  {
        m_frqPrint++;
      }
      std::string store_name = "Unknown";
      IRegistry* pReg = root->registry();
      if ( pReg )  {
        SmartIF<IService> isvc(pReg->dataSvc());
        if ( isvc )  {
          store_name = isvc->name();
        }
      }
      log << MSG::INFO << "========= " << m_rootName << "["
          << "0x" << std::hex << (unsigned long) root.ptr() << std::dec
          << "@" << store_name << "]:" << endmsg;
      std::vector<bool> flg;
      flg.push_back(true);
      explore(root->registry(), flg);
      return StatusCode::SUCCESS;
    }
    else if ( root )   {
      return StatusCode::SUCCESS;
    }
    log << MSG::ERROR << "Cannot retrieve \"/Event\"!" << endmsg;
    return StatusCode::FAILURE;
  }
void StoreExplorerAlg::explore ( IRegistry pObj,
std::vector< bool > &  flg 
) [inline]

Definition at line 160 of file StoreExplorerAlg.cpp.

                                                         {
    printObj(pObj, flg);
    if ( 0 != pObj )    {
      SmartIF<IDataManagerSvc> mgr(eventSvc());
      if ( mgr )    {
        typedef std::vector<IRegistry*> Leaves;
        Leaves leaves;
        StatusCode sc = mgr->objectLeaves(pObj, leaves);
        const std::string* par0 = 0;
        if ( pObj->address() )  {
          par0 = pObj->address()->par();
        }
        if ( sc.isSuccess() )  {
          for ( Leaves::const_iterator i=leaves.begin(); i != leaves.end(); i++ )   {
            const std::string& id = (*i)->identifier();
            DataObject* p = 0;
            if ( !m_accessForeign && (*i)->address() )  {
              if ( par0 )  {
                const std::string* par1 = (*i)->address()->par();
                if ( par1 )  {
                  if ( par0[0] != par1[0] )  {
                    continue;
                  }
                }
              }
            }
            if ( m_load )  {
              sc = eventSvc()->retrieveObject(id, p);
            }
            else {
              sc = eventSvc()->findObject(id, p);
            }
            if ( sc.isSuccess() )  {
              if ( id != "/Event/Rec/Relations" || m_exploreRelations )   {
                flg.push_back(i+1 == leaves.end());
                explore(*i, flg);
                flg.pop_back();
              }
            }
            else {
              flg.push_back(i+1 == leaves.end());
              printObj(*i, flg);
              flg.pop_back();
            }
          }
        }
      }
    }
  }
virtual StatusCode StoreExplorerAlg::finalize (  ) [inline, virtual]

Finalize.

Reimplemented from Algorithm.

Definition at line 230 of file StoreExplorerAlg.cpp.

virtual StatusCode StoreExplorerAlg::initialize (  ) [inline, virtual]

Initialize.

Reimplemented from Algorithm.

Definition at line 211 of file StoreExplorerAlg.cpp.

                                    {
    MsgStream log(msgSvc(), name());
    m_rootName = "";
    StatusCode sc = service(m_dataSvcName, m_dataSvc, true);
    if ( sc.isSuccess() )  {
      SmartIF<IDataManagerSvc> mgr(m_dataSvc);
      if ( mgr )  {
        m_rootName = mgr->rootName();
        return sc;
      }
      log << MSG::ERROR << "Failed to retrieve IDataManagerSvc interface." << endmsg;
      return StatusCode::FAILURE;
    }
    log << MSG::ERROR << "Failed to access service \""
        << m_dataSvcName << "\"." << endmsg;
    return StatusCode::FAILURE;
  }
void StoreExplorerAlg::printObj ( IRegistry pReg,
std::vector< bool > &  flg 
) [inline]

Print datastore leaf.

Definition at line 93 of file StoreExplorerAlg.cpp.

                                                          {
    MsgStream log(msgSvc(), name());
    log << MSG::INFO;
    for (size_t j = 1; j < flg.size(); j++ )     {
      if ( !flg[j-1] && flg[j] ) log << "| ";
      else if ( flg[j] ) log << "  ";
      else          log << "| ";
    }
    log << "+--> " << pReg->name();
    if ( pReg->address() )  {
      log << " [Address: CLID="
          << std::showbase << std::hex << pReg->address()->clID();
      log << " Type=" << (void*)pReg->address()->svcType() << "]";
    }
    else  {
      log << " [No Address]";
    }
    DataObject* p = pReg->object();
    if ( p )   {
      try  {
        std::string typ = System::typeinfoName(typeid(*p));
        if ( m_testAccess )  {
          p->clID();
        }
        log << "  " << typ.substr(0,32);
      }
      catch (...)  {
        log << "Access test FAILED";
      }
    }
    else    {
      log << "  (Unloaded) ";
    }
    ObjectContainerBase* base = dynamic_cast<ObjectContainerBase*>(p);
    if ( base )  {
      try   {
        int numObj = base->numberOfObjects();
        const CLID id = p->clID();
        log << " [" << numObj << "]";
        if ( m_testAccess )  {
          CLID idd = id>>16;
          switch(idd) {
            case CLID_ObjectList>>16:                /* ObjectList    */
              access((ObjectList<ContainedObject>*)base);
              break;
            case CLID_ObjectVector>>16:              /* ObjectVector  */
              access((ObjectVector<ContainedObject>*)base);
              break;
            case (CLID_ObjectVector+0x00030000)>>16: /* Keyed Map     */
              access((KeyedContainer<KeyedObject<int>,Containers::Map>*)base);
              break;
            case (CLID_ObjectVector+0x00040000)>>16: /* Keyed Hashmap */
              access((KeyedContainer<KeyedObject<int>,Containers::HashMap>*)base);
              break;
            case (CLID_ObjectVector+0x00050000)>>16: /* Keyed array   */
              access((KeyedContainer<KeyedObject<int>,Containers::Array>*)base);
              break;
          }
        }
      }
      catch (...)  {
        log << "Access test FAILED";
      }
    }
    log << endmsg;
  }

Member Data Documentation

Flag to indicate if foreign files should be opened.

Definition at line 50 of file StoreExplorerAlg.cpp.

Reference to data provider service.

Definition at line 52 of file StoreExplorerAlg.cpp.

Name of the data provider service.

Definition at line 54 of file StoreExplorerAlg.cpp.

Flag to check if relations should be followed.

Definition at line 38 of file StoreExplorerAlg.cpp.

Job option to set the printout frequency.

Definition at line 36 of file StoreExplorerAlg.cpp.

Internal counter to adjust printout frequency.

Definition at line 44 of file StoreExplorerAlg.cpp.

bool StoreExplorerAlg::m_load [private]

Flag to load non existing items.

Definition at line 46 of file StoreExplorerAlg.cpp.

long StoreExplorerAlg::m_print [private]

Job option to limit printout to first nnn events.

Definition at line 34 of file StoreExplorerAlg.cpp.

Flag to indicate if missing entities should be printed.

Definition at line 40 of file StoreExplorerAlg.cpp.

Name of the root leaf (obtained at initialize)

Definition at line 56 of file StoreExplorerAlg.cpp.

Flag to test access to objects (DataObject and ContainedObject)

Definition at line 48 of file StoreExplorerAlg.cpp.

long StoreExplorerAlg::m_total [private]

Internal counter to trigger printouts.

Definition at line 42 of file StoreExplorerAlg.cpp.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Thu Jun 28 2012 23:27:45 for Gaudi Framework, version v23r2 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004