The Gaudi Framework  v38r3 (c3fc9673)
configGenerator Class Reference
Collaboration diagram for configGenerator:

Public Member Functions

 configGenerator (const string &pkgName, const string &outputDirName)
 
int genConfig (const Strings_t &modules, const string &userModule)
 main entry point of this class: More...
 
void setConfigurableModule (const std::string &moduleName)
 customize the Module name where configurable base classes are defined More...
 
void setConfigurableDefaultName (const std::string &defaultName)
 customize the default name for configurable instances More...
 
void setConfigurableAlgorithm (const std::string &cfgAlgorithm)
 customize the configurable base class for Algorithm component More...
 
void setConfigurableAlgTool (const std::string &cfgAlgTool)
 customize the configurable base class for AlgTool component More...
 
void setConfigurableAuditor (const std::string &cfgAuditor)
 customize the configurable base class for AlgTool component More...
 
void setConfigurableService (const std::string &cfgService)
 customize the configurable base class for Service component More...
 

Private Member Functions

bool genComponent (const std::string &libName, const std::string &componentName, component_t componentType, const vector< PropertyBase * > &properties, const std::vector< std::string > &interfaces, const Gaudi::PluginService::Details::Registry::FactoryInfo &info)
 
void genImport (std::ostream &s, std::string_view frmt, std::string indent)
 
void genHeader (std::ostream &pyOut, std::ostream &dbOut)
 
void genBody (std::ostream &pyOut, std::ostream &dbOut)
 
void genTrailer (std::ostream &pyOut, std::ostream &dbOut)
 
void pythonizeValue (const PropertyBase *prop, string &pvalue, string &ptype)
 handle the "marshalling" of Properties More...
 

Private Attributes

string m_pkgName
 name of the package we are processing More...
 
string m_outputDirName
 absolute path to the directory where genconf will store auto-generated files (Configurables and ConfigurableDb) More...
 
stringstream m_pyBuf
 buffer of auto-generated configurables More...
 
bool m_importGaudiHandles = false
 switch to decide if the generated configurables need to import GaudiHandles (ie: if one of the components has a XyzHandle<T>) More...
 
bool m_importDataHandles = false
 
stringstream m_dbBuf
 buffer of generated configurables informations for the "Db" file The "Db" file is holding informations about the generated configurables This file is later one used by the PropertyProxy.py to locate Configurables and know their default values, host module,... More...
 
stringstream m_db2Buf
 
std::map< component_t, std::stringm_configurable
 Configurable customization. More...
 

Detailed Description

Definition at line 174 of file genconf.cpp.

Constructor & Destructor Documentation

◆ configGenerator()

configGenerator::configGenerator ( const string pkgName,
const string outputDirName 
)
inline

Definition at line 206 of file genconf.cpp.

207  : m_pkgName( pkgName ), m_outputDirName( outputDirName ) {}

Member Function Documentation

◆ genBody()

void configGenerator::genBody ( std::ostream pyOut,
std::ostream dbOut 
)
inlineprivate

Definition at line 246 of file genconf.cpp.

246  {
247  pyOut << m_pyBuf.str() << flush;
248  dbOut << m_dbBuf.str() << flush;
249  }

◆ genComponent()

bool configGenerator::genComponent ( const std::string libName,
const std::string componentName,
component_t  componentType,
const vector< PropertyBase * > &  properties,
const std::vector< std::string > &  interfaces,
const Gaudi::PluginService::Details::Registry::FactoryInfo &  info 
)
private

Definition at line 678 of file genconf.cpp.

683 {
684  auto cname = pythonizeName( componentName );
685  const auto decl_loc = info.getprop( "declaration_location" );
686 
688  propDoc.reserve( properties.size() );
689 
690  m_db2Buf << " '" << componentName << "': {\n";
691  m_db2Buf << " '__component_type__': '";
692  switch ( componentType ) {
693  case component_t::Algorithm:
694  m_db2Buf << "Algorithm";
695  break;
696  case component_t::AlgTool:
697  m_db2Buf << "AlgTool";
698  break;
699  case component_t::ApplicationMgr: // FALLTROUGH
700  case component_t::Service:
701  m_db2Buf << "Service";
702  break;
703  case component_t::Auditor:
704  m_db2Buf << "Auditor";
705  break;
706  default:
707  m_db2Buf << "Unknown";
708  }
709  if ( !decl_loc.empty() ) { m_db2Buf << "',\n '__declaration_location__': '" << decl_loc; }
710  m_db2Buf << "',\n '__interfaces__': (";
711  for ( const auto& intf : std::set<std::string>{ begin( interfaces ), end( interfaces ) } ) {
712  if ( ignored_interfaces.find( intf ) == end( ignored_interfaces ) ) { m_db2Buf << '\'' << intf << "', "; }
713  }
714  m_db2Buf << "),\n 'properties': {\n";
715 
716  m_pyBuf << "\nclass " << cname << "( " << m_configurable[componentType] << " ) :\n";
717  m_pyBuf << " __slots__ = { \n";
718  for ( const auto& prop : properties ) {
719  const string& pname = prop->name();
720  // Validate property name (it must be a valid Python identifier)
721  if ( !boost::regex_match( pname, pythonIdentifier ) ) {
722  std::cout << "ERROR: invalid property name \"" << pname << "\" in component " << cname
723  << " (invalid Python identifier)" << std::endl;
724  // try to make the buffer at least more or less valid python code.
725  m_pyBuf << " #ERROR-invalid identifier '" << pname << "'\n"
726  << " }\n";
727  return false;
728  }
729 
730  string pvalue, ptype;
731  pythonizeValue( prop, pvalue, ptype );
732  m_pyBuf << " '" << pname << "' : " << pvalue << ",\n";
733 
734  m_db2Buf << " '" << pname << "': ('" << ptype << "', " << pvalue << ", '''" << prop->documentation()
735  << " [" << prop->ownerTypeName() << "]'''";
736  auto sem = prop->semantics();
737  if ( !sem.empty() ) { m_db2Buf << ", '" << sem << '\''; }
738  m_db2Buf << "),\n";
739 
740  if ( prop->documentation() != "none" ) {
741  propDoc.emplace_back( pname, prop->documentation() + " [" + prop->ownerTypeName() + "]" );
742  }
743  }
744  m_pyBuf << " }\n";
745  m_pyBuf << " _propertyDocDct = { \n";
746  for ( const auto& prop : propDoc ) {
747  m_pyBuf << std::setw( 5 ) << "'" << prop.first << "' : "
748  << "\"\"\" " << prop.second << " \"\"\",\n";
749  }
750  m_pyBuf << " }\n";
751 
752  if ( !decl_loc.empty() ) { m_pyBuf << " __declaration_location__ = '" << decl_loc << "'\n"; }
753  m_pyBuf << " def __init__(self, name = " << m_configurable[component_t::DefaultName] << ", **kwargs):\n"
754  << " super(" << cname << ", self).__init__(name)\n"
755  << " for n,v in kwargs.items():\n"
756  << " setattr(self, n, v)\n"
757  << " def getDlls( self ):\n"
758  << " return '" << libName << "'\n"
759  << " def getType( self ):\n"
760  << " return '" << componentName << "'\n"
761  << " pass # class " << cname << "\n"
762  << flush;
763 
764  // name of the auto-generated module
765  const string pyName = ( fs::path( m_outputDirName ) / fs::path( libName + "Conf.py" ) ).string();
766  const string modName = fs::path( pyName ).filename().stem().string();
767 
768  m_db2Buf << " },\n },\n";
769 
770  // now the db part
771  m_dbBuf << m_pkgName << "." << modName << " " << libName << " " << cname << "\n" << flush;
772 
773  return true;
774 }

◆ genConfig()

int configGenerator::genConfig ( const Strings_t modules,
const string userModule 
)

main entry point of this class:

  • iterate over all the modules (ie: library names)
  • for each module extract component informations
  • eventually generate the header/body/trailer python file and "Db" file

write-out files for this library

Definition at line 440 of file genconf.cpp.

442 {
443  const auto endLib = libs.end();
444 
445  static const std::string gaudiSvc = "GaudiCoreSvc";
446  const bool isGaudiSvc =
447  std::find_if( libs.begin(), endLib, []( const auto& s ) {
448  return s.find( gaudiSvc ) != std::string::npos; // libs can be <name> or path/to/lib<name>.so
449  } ) != endLib;
450 
451  //--- Instantiate ApplicationMgr --------------------------------------------
452  if ( !isGaudiSvc && createAppMgr() ) {
453  cout << "ERROR: ApplicationMgr can not be created. Check environment" << endl;
454  return EXIT_FAILURE;
455  }
456 
457  //--- Iterate over component factories --------------------------------------
458  using Gaudi::PluginService::Details::Registry;
459  const Registry& registry = Registry::instance();
460 
461  auto bkgNames = registry.loadedFactoryNames();
462 
463  ISvcLocator* svcLoc = Gaudi::svcLocator();
464  IInterface* dummySvc = new Service( "DummySvc", svcLoc );
465  dummySvc->addRef();
466 
467  bool allGood = true;
468 
469  // iterate over all the requested libraries
470  for ( const auto& iLib : libs ) {
471  std::string lib = fs::path( iLib ).stem().string();
472  if ( lib.compare( 0, 3, "lib" ) == 0 ) {
473  lib = lib.substr( 3 ); // For *NIX remove "lib"
474  }
475  LOG_INFO << ":::: processing library: " << iLib << "...";
476 
477  // reset state
478  m_importGaudiHandles = false;
479  m_importDataHandles = false;
480  m_pyBuf.str( "" );
481  m_dbBuf.str( "" );
482  m_db2Buf.str( "" );
483 
484  //--- Load component library ----------------------------------------------
485  System::ImageHandle handle;
486  unsigned long err = System::loadDynamicLib( iLib, &handle );
487  if ( err != 1 ) {
489  allGood = false;
490  continue;
491  }
492 
493  const auto& factories = registry.factories();
494  for ( const auto& factoryName : registry.loadedFactoryNames() ) {
495  if ( bkgNames.find( factoryName ) != bkgNames.end() ) {
497  LOG_INFO << "\t==> skipping [" << factoryName << "]...";
498  }
499  continue;
500  }
501  auto entry = factories.find( factoryName );
502  if ( entry == end( factories ) ) {
503  LOG_ERROR << "inconsistency in component factories list: I cannot find anymore " << factoryName;
504  continue;
505  }
506  const auto& info = entry->second;
507  if ( !info.is_set() ) continue;
508 
509  // do not generate configurables for the Reflex-compatible aliases
510  if ( !info.getprop( "ReflexName" ).empty() ) continue;
511 
512  // Atlas contributed code (patch #1247)
513  // Skip the generation of configurables if the component does not come
514  // from the same library we are processing (i.e. we found a symbol that
515  // is coming from a library loaded by the linker).
516  if ( libNativeName( lib ) != info.library ) {
517  LOG_WARNING << "library [" << lib << "] exposes factory [" << factoryName << "] which is declared in ["
518  << info.library << "] !!";
519  continue;
520  }
521 
522  component_t type = component_t::Unknown;
523  {
524  const auto ft = allowedFactories.find( info.factory.type().name() );
525  if ( ft != allowedFactories.end() ) {
526  type = ft->second;
527  } else if ( factoryName == "ApplicationMgr" ) {
528  type = component_t::ApplicationMgr;
529  } else
530  continue;
531  }
532 
533  // handle possible problems with templated components
534  std::string name = boost::trim_copy( factoryName );
535 
536  const auto className = info.getprop( "ClassName" );
537  LOG_INFO << " - component: " << className << " (" << ( className != name ? ( name + ": " ) : std::string() )
538  << type << ")";
539 
540  string cname = "DefaultName";
541  SmartIF<IProperty> prop;
542  try {
543  switch ( type ) {
544  case component_t::Algorithm:
545  prop = SmartIF<IAlgorithm>( Gaudi::Algorithm::Factory::create( factoryName, cname, svcLoc ).release() );
546  break;
547  case component_t::Service:
548  prop = SmartIF<IService>( Service::Factory::create( factoryName, cname, svcLoc ).release() );
549  break;
550  case component_t::AlgTool:
551  prop =
552  SmartIF<IAlgTool>( AlgTool::Factory::create( factoryName, cname, toString( type ), dummySvc ).release() );
553  // FIXME: AlgTool base class increase artificially by 1 the refcount.
554  prop->release();
555  break;
556  case component_t::Auditor:
557  prop = SmartIF<IAuditor>( Auditor::Factory::create( factoryName, cname, svcLoc ).release() );
558  break;
559  case component_t::ApplicationMgr:
560  prop = SmartIF<ISvcLocator>( svcLoc );
561  break;
562  default:
563  continue; // unknown
564  }
565  } catch ( exception& e ) {
566  LOG_ERROR << "Error instantiating " << name << " from " << iLib;
567  LOG_ERROR << "Got exception: " << e.what();
568  allGood = false;
569  continue;
570  } catch ( ... ) {
571  LOG_ERROR << "Error instantiating " << name << " from " << iLib;
572  allGood = false;
573  continue;
574  }
575  if ( prop ) {
576  if ( !genComponent( lib, name, type, prop->getProperties(), prop->getInterfaceNames(), info ) ) {
577  allGood = false;
578  }
579  prop.reset();
580  } else {
581  LOG_ERROR << "could not cast IInterface* object to an IProperty* !";
582  LOG_ERROR << "NO Configurable will be generated for [" << name << "] !";
583  allGood = false;
584  }
585  } //> end loop over factories
586 
590  const std::string pyName = ( fs::path( m_outputDirName ) / fs::path( lib + "Conf.py" ) ).string();
591  const std::string dbName = ( fs::path( m_outputDirName ) / fs::path( lib + ".confdb" ) ).string();
592 
593  std::fstream py( pyName, std::ios_base::out | std::ios_base::trunc );
594  std::fstream db( dbName, std::ios_base::out | std::ios_base::trunc );
595 
596  genHeader( py, db );
597  if ( !userModule.empty() ) py << "from " << userModule << " import *" << endl;
598  genBody( py, db );
599  genTrailer( py, db );
600 
601  {
602  const std::string db2Name = ( fs::path( m_outputDirName ) / fs::path( lib + ".confdb2_part" ) ).string();
603  std::fstream db2( db2Name, std::ios_base::out | std::ios_base::trunc );
604  db2 << "{\n" << m_db2Buf.str() << "}\n";
605  }
606 
607  } //> end loop over libraries
608 
609  dummySvc->release();
610  dummySvc = 0;
611 
612  return allGood ? EXIT_SUCCESS : EXIT_FAILURE;
613 }

◆ genHeader()

void configGenerator::genHeader ( std::ostream pyOut,
std::ostream dbOut 
)
private

Definition at line 646 of file genconf.cpp.

648 {
649  // python file part
650  std::string now = Gaudi::Time::current().format( true );
651  py << "#" << now //<< "\n"
652  << "\"\"\"Automatically generated. DO NOT EDIT please\"\"\"\n"
653  << "import sys\n"
654  << "if sys.version_info >= (3,):\n"
655  << " # Python 2 compatibility\n"
656  << " long = int\n";
657 
658  if ( m_importGaudiHandles ) { py << "from GaudiKernel.GaudiHandles import *\n"; }
659 
660  if ( m_importDataHandles ) { py << "from GaudiKernel.DataHandle import DataHandle\n"; }
661 
662  genImport( py, "from {}.Configurable import *" );
663 
664  // db file part
665  db << "## -*- ascii -*- \n"
666  << "# db file automatically generated by genconf on: " << now << "\n"
667  << flush;
668 }

◆ genImport()

void configGenerator::genImport ( std::ostream s,
std::string_view  frmt,
std::string  indent = "" 
)
private

Definition at line 615 of file genconf.cpp.

615  {
616 
617  std::string::size_type pos = 0, nxtpos = 0;
619 
620  while ( std::string::npos != pos ) {
621  // find end of module name
622  nxtpos = m_configurable[component_t::Module].find_first_of( ',', pos );
623 
624  // Prepare import string
625  mod = m_configurable[component_t::Module].substr( pos, nxtpos - pos );
626  std::ostringstream import;
627  import << fmt::format( fmt::runtime( frmt ), mod );
628 
629  // append a normal import or a try/except enclosed one depending
630  // on availability of a fall-back module (next in the list)
631  if ( std::string::npos == nxtpos ) {
632  // last possible module
633  s << indent << import.str() << "\n" << flush;
634  pos = std::string::npos;
635  } else {
636  // we have a fallback for this
637  s << indent << "try:\n" << indent << py_tab << import.str() << "\n" << indent << "except ImportError:\n" << flush;
638  pos = nxtpos + 1;
639  }
640  // increase indentation level for next iteration
641  indent += py_tab;
642  }
643 }

◆ genTrailer()

void configGenerator::genTrailer ( std::ostream pyOut,
std::ostream dbOut 
)
private

Definition at line 670 of file genconf.cpp.

672 {
673  // db file part
674  db << "## " << m_pkgName << "\n" << std::flush;
675 }

◆ pythonizeValue()

void configGenerator::pythonizeValue ( const PropertyBase prop,
string pvalue,
string ptype 
)
private

handle the "marshalling" of Properties

Definition at line 777 of file genconf.cpp.

779 {
780  const std::string cvalue = p->toString();
781  const std::type_index ti = std::type_index( *p->type_info() );
782  ptype = System::typeinfoName( *p->type_info() );
783 
784  if ( ti == typeIndex<bool>() ) {
785  pvalue = ( cvalue == "0" || cvalue == "False" || cvalue == "false" ) ? "False" : "True";
786  } else if ( ti == typeIndex<char>() || ti == typeIndex<signed char>() || ti == typeIndex<unsigned char>() ||
787  ti == typeIndex<short>() || ti == typeIndex<unsigned short>() || ti == typeIndex<int>() ||
788  ti == typeIndex<unsigned int>() || ti == typeIndex<long>() || ti == typeIndex<unsigned long>() ||
789  ti == typeIndex<long long>() || ti == typeIndex<unsigned long long>() ) {
790  pvalue = cvalue;
791  } else if ( ti == typeIndex<float>() || ti == typeIndex<double>() ) {
792  // forces python to handle this as a float: put a dot in there...
793  pvalue = boost::to_lower_copy( cvalue );
794  if ( std::string::npos != pvalue.find( "nan" ) ) {
795  pvalue = "float('nan')";
796  } else if ( std::string::npos == pvalue.find( "." ) && std::string::npos == pvalue.find( "e" ) ) {
797  pvalue = cvalue + ".0";
798  }
799  } else if ( ti == typeIndex<string>() ) {
800  pvalue = quote( cvalue );
801  } else if ( ti == typeIndex<GaudiHandleBase>() ) {
802  const GaudiHandleProperty& hdl = dynamic_cast<const GaudiHandleProperty&>( *p );
803  const GaudiHandleBase& base = hdl.value();
804 
805  pvalue = base.pythonRepr();
806  ptype = base.pythonPropertyClassName();
807  m_importGaudiHandles = true;
808  } else if ( ti == typeIndex<GaudiHandleArrayBase>() ) {
809  const GaudiHandleArrayProperty& hdl = dynamic_cast<const GaudiHandleArrayProperty&>( *p );
810  const GaudiHandleArrayBase& base = hdl.value();
811 
812  pvalue = base.pythonRepr();
813  ptype = base.pythonPropertyClassName();
814  m_importGaudiHandles = true;
815  } else if ( auto hdl = dynamic_cast<const DataHandleProperty*>( p ); hdl ) {
816  // dynamic_cast to support also classes derived from DataHandleProperty
817  const Gaudi::DataHandle& base = hdl->value();
818 
819  pvalue = base.pythonRepr();
820  m_importDataHandles = true;
821  } else {
822  std::ostringstream v_str;
823  v_str.setf( std::ios::showpoint ); // to correctly display floats
824  p->toStream( v_str );
825  pvalue = v_str.str();
826  }
827 }

◆ setConfigurableAlgorithm()

void configGenerator::setConfigurableAlgorithm ( const std::string cfgAlgorithm)
inline

customize the configurable base class for Algorithm component

Definition at line 224 of file genconf.cpp.

224  {
225  m_configurable[component_t::Algorithm] = cfgAlgorithm;
226  }

◆ setConfigurableAlgTool()

void configGenerator::setConfigurableAlgTool ( const std::string cfgAlgTool)
inline

customize the configurable base class for AlgTool component

Definition at line 229 of file genconf.cpp.

229 { m_configurable[component_t::AlgTool] = cfgAlgTool; }

◆ setConfigurableAuditor()

void configGenerator::setConfigurableAuditor ( const std::string cfgAuditor)
inline

customize the configurable base class for AlgTool component

Definition at line 232 of file genconf.cpp.

232 { m_configurable[component_t::Auditor] = cfgAuditor; }

◆ setConfigurableDefaultName()

void configGenerator::setConfigurableDefaultName ( const std::string defaultName)
inline

customize the default name for configurable instances

Definition at line 219 of file genconf.cpp.

219  {
220  m_configurable[component_t::DefaultName] = defaultName;
221  }

◆ setConfigurableModule()

void configGenerator::setConfigurableModule ( const std::string moduleName)
inline

customize the Module name where configurable base classes are defined

Definition at line 216 of file genconf.cpp.

216 { m_configurable[component_t::Module] = moduleName; }

◆ setConfigurableService()

void configGenerator::setConfigurableService ( const std::string cfgService)
inline

customize the configurable base class for Service component

Definition at line 235 of file genconf.cpp.

235  {
236  m_configurable[component_t::Service] = cfgService;
237  m_configurable[component_t::ApplicationMgr] = cfgService;
238  }

Member Data Documentation

◆ m_configurable

std::map<component_t, std::string> configGenerator::m_configurable
private

Configurable customization.

Contains customization for:

  • Name of the module where configurable base classes are defined
  • Name of the configurable base class for the Algorithm component
  • Name of the configurable base class for the AlgTool component
  • Name of the configurable base class for the Service component

Definition at line 203 of file genconf.cpp.

◆ m_db2Buf

stringstream configGenerator::m_db2Buf
private

Definition at line 196 of file genconf.cpp.

◆ m_dbBuf

stringstream configGenerator::m_dbBuf
private

buffer of generated configurables informations for the "Db" file The "Db" file is holding informations about the generated configurables This file is later one used by the PropertyProxy.py to locate Configurables and know their default values, host module,...

Definition at line 194 of file genconf.cpp.

◆ m_importDataHandles

bool configGenerator::m_importDataHandles = false
private

Definition at line 188 of file genconf.cpp.

◆ m_importGaudiHandles

bool configGenerator::m_importGaudiHandles = false
private

switch to decide if the generated configurables need to import GaudiHandles (ie: if one of the components has a XyzHandle<T>)

Definition at line 187 of file genconf.cpp.

◆ m_outputDirName

string configGenerator::m_outputDirName
private

absolute path to the directory where genconf will store auto-generated files (Configurables and ConfigurableDb)

Definition at line 180 of file genconf.cpp.

◆ m_pkgName

string configGenerator::m_pkgName
private

name of the package we are processing

Definition at line 176 of file genconf.cpp.

◆ m_pyBuf

stringstream configGenerator::m_pyBuf
private

buffer of auto-generated configurables

Definition at line 183 of file genconf.cpp.


The documentation for this class was generated from the following file:
configGenerator::genTrailer
void genTrailer(std::ostream &pyOut, std::ostream &dbOut)
Definition: genconf.cpp:670
System::loadDynamicLib
GAUDI_API unsigned long loadDynamicLib(const std::string &name, ImageHandle *handle)
Load dynamic link library.
Definition: System.cpp:150
std::string
STL class.
std::exception
STL class.
std::fstream
STL class.
GaudiHandleArrayProperty::value
const GaudiHandleArrayBase & value() const
Definition: Property.h:638
GaudiAlg.HistoUtils.path
path
Definition: HistoUtils.py:960
std::vector::reserve
T reserve(T... args)
gaudirun.s
string s
Definition: gaudirun.py:346
std::vector
STL class.
SmartIF::reset
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
Definition: SmartIF.h:96
std::find_if
T find_if(T... args)
ISvcLocator
Definition: ISvcLocator.h:46
fmt::runtime
const T & runtime(const T &v)
Definition: MessageSvcSink.cpp:28
DataHandleProperty
DataHandleProperty.h GaudiKernel/DataHandleProperty.h.
Definition: DataHandleProperty.h:34
configGenerator::genComponent
bool genComponent(const std::string &libName, const std::string &componentName, component_t componentType, const vector< PropertyBase * > &properties, const std::vector< std::string > &interfaces, const Gaudi::PluginService::Details::Registry::FactoryInfo &info)
Definition: genconf.cpp:678
std::type_index
Gaudi::DataHandle
Definition: DataHandle.h:38
createAppMgr
int createAppMgr()
Definition: genconf.cpp:830
System::ImageHandle
void * ImageHandle
Definition of an image handle.
Definition: ModuleInfo.h:40
conf.release
string release
Definition: conf.py:27
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:313
configGenerator::m_dbBuf
stringstream m_dbBuf
buffer of generated configurables informations for the "Db" file The "Db" file is holding information...
Definition: genconf.cpp:194
GaudiHandleBase
Definition: GaudiHandle.h:102
configGenerator::m_importGaudiHandles
bool m_importGaudiHandles
switch to decide if the generated configurables need to import GaudiHandles (ie: if one of the compon...
Definition: genconf.cpp:187
configGenerator::m_pyBuf
stringstream m_pyBuf
buffer of auto-generated configurables
Definition: genconf.cpp:183
Gaudi.CommonGaudiConfigurables.mod
mod
Definition: CommonGaudiConfigurables.py:40
GaudiPluginService.cpluginsvc.registry
def registry()
Definition: cpluginsvc.py:83
Gaudi::svcLocator
GAUDI_API ISvcLocator * svcLocator()
Gaudi::Time::format
std::string format(bool local, std::string spec="%c") const
Format the time using strftime.
Definition: Time.cpp:262
std::cout
CLHEP::begin
double * begin(CLHEP::HepVector &v)
Definition: TupleAlg.cpp:45
std::string::compare
T compare(T... args)
std::ostringstream::setf
T setf(T... args)
configGenerator::m_importDataHandles
bool m_importDataHandles
Definition: genconf.cpp:188
LOG_ERROR
#define LOG_ERROR
Definition: genconf.cpp:83
std::flush
T flush(T... args)
SmartIF< IProperty >
format
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:119
GaudiHandleProperty::value
const GaudiHandleBase & value() const
Definition: Property.h:601
configGenerator::m_pkgName
string m_pkgName
name of the package we are processing
Definition: genconf.cpp:176
gaudirun.level
level
Definition: gaudirun.py:364
configGenerator::genImport
void genImport(std::ostream &s, std::string_view frmt, std::string indent)
Definition: genconf.cpp:615
configGenerator::m_configurable
std::map< component_t, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:203
System::moduleName
GAUDI_API const std::string & moduleName()
Get the name of the (executable/DLL) file without file-type.
Definition: ModuleInfo.cpp:64
GaudiHandleArrayBase
Base class of array's of various gaudihandles.
Definition: GaudiHandle.h:345
GaudiHandleProperty
Definition: Property.h:580
gaudiComponentHelp.properties
properties
Definition: gaudiComponentHelp.py:68
std::string::substr
T substr(T... args)
std::ostringstream
STL class.
LOG_WARNING
#define LOG_WARNING
Definition: genconf.cpp:84
Gaudi::Utils::toString
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string
Definition: ToStream.h:354
gaudirun.type
type
Definition: gaudirun.py:160
std::vector::emplace_back
T emplace_back(T... args)
Gaudi::PluginService::v1::Details::logger
GAUDIPS_API Logger & logger()
Return the current logger instance.
Definition: PluginServiceV1.cpp:318
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
configGenerator::genHeader
void genHeader(std::ostream &pyOut, std::ostream &dbOut)
Definition: genconf.cpp:646
std::endl
T endl(T... args)
LOG_INFO
#define LOG_INFO
Definition: genconf.cpp:85
Gaudi::Time::current
static Time current()
Returns the current time.
Definition: Time.cpp:119
IInterface
Definition: IInterface.h:237
configGenerator::m_outputDirName
string m_outputDirName
absolute path to the directory where genconf will store auto-generated files (Configurables and Confi...
Definition: genconf.cpp:180
std::string::empty
T empty(T... args)
compareOutputFiles.pname
pname
Definition: compareOutputFiles.py:482
std::stringstream::str
T str(T... args)
GaudiPluginService.cpluginsvc.factories
def factories()
Definition: cpluginsvc.py:93
configGenerator::m_db2Buf
stringstream m_db2Buf
Definition: genconf.cpp:196
check_ParticleID.base
base
Definition: check_ParticleID.py:24
IOTest.end
end
Definition: IOTest.py:125
std::setw
T setw(T... args)
IInterface::release
virtual unsigned long release()=0
Release Interface instance.
System::getLastErrorString
GAUDI_API const std::string getLastErrorString()
Get last system error as string.
Definition: System.cpp:277
configGenerator::pythonizeValue
void pythonizeValue(const PropertyBase *prop, string &pvalue, string &ptype)
handle the "marshalling" of Properties
Definition: genconf.cpp:777
configGenerator::genBody
void genBody(std::ostream &pyOut, std::ostream &dbOut)
Definition: genconf.cpp:246
IInterface::addRef
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
GaudiHandleArrayProperty
Definition: Property.h:617
std::set< std::string >
std::exception::what
T what(T... args)
PrepareBase.out
out
Definition: PrepareBase.py:20