| # Gaudi Framework, version v23r1 |

Home |  | Generated: Wed Feb 29 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:
[legend]
Collaboration diagram for StoreExplorerAlg:
[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.
IDataProviderSvc * | m_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 | ( | void | ) | `[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 | ( | void | ) | `[inline, virtual]`

Finalize.

Reimplemented from Algorithm.

Definition at line 230 of file StoreExplorerAlg.cpp.

                                    {
        if ( m_dataSvc ) m_dataSvc->release();
        m_dataSvc = 0;
        return StatusCode::SUCCESS;
      }

virtual StatusCode StoreExplorerAlg::initialize | ( | void | ) | `[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

bool StoreExplorerAlg::m_accessForeign`[private]`

Flag to indicate if foreign files should be opened.

Definition at line 50 of file StoreExplorerAlg.cpp.

IDataProviderSvc* StoreExplorerAlg::m_dataSvc`[private]`

Reference to data provider service.

Definition at line 52 of file StoreExplorerAlg.cpp.

std::string StoreExplorerAlg::m_dataSvcName`[private]`

Name of the data provider service.

Definition at line 54 of file StoreExplorerAlg.cpp.

bool StoreExplorerAlg::m_exploreRelations`[private]`

Flag to check if relations should be followed.

Definition at line 38 of file StoreExplorerAlg.cpp.

double StoreExplorerAlg::m_frequency`[private]`

Job option to set the printout frequency.

Definition at line 36 of file StoreExplorerAlg.cpp.

long StoreExplorerAlg::m_frqPrint`[private]`

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.

long StoreExplorerAlg::m_printMissing`[private]`

Flag to indicate if missing entities should be printed.

Definition at line 40 of file StoreExplorerAlg.cpp.

std::string StoreExplorerAlg::m_rootName`[private]`

Name of the root leaf (obtained at initialize)

Definition at line 56 of file StoreExplorerAlg.cpp.

bool StoreExplorerAlg::m_testAccess`[private]`

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:

- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v23r1/GaudiCommonSvc/src/DataSvc/StoreExplorerAlg.cpp

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines