The Gaudi Framework  v36r9p1 (5c15b2bb)
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, string &ptype2)
 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 166 of file genconf.cpp.

Constructor & Destructor Documentation

◆ configGenerator()

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

Definition at line 198 of file genconf.cpp.

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

Member Function Documentation

◆ genBody()

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

Definition at line 238 of file genconf.cpp.

238  {
239  pyOut << m_pyBuf.str() << flush;
240  dbOut << m_dbBuf.str() << flush;
241  }

◆ 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 670 of file genconf.cpp.

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

◆ 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 432 of file genconf.cpp.

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

◆ genHeader()

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

Definition at line 638 of file genconf.cpp.

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

◆ genImport()

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

Definition at line 607 of file genconf.cpp.

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

◆ genTrailer()

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

Definition at line 662 of file genconf.cpp.

664 {
665  // db file part
666  db << "## " << m_pkgName << "\n" << std::flush;
667 }

◆ pythonizeValue()

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

handle the "marshalling" of Properties

Definition at line 769 of file genconf.cpp.

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

◆ setConfigurableAlgorithm()

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

customize the configurable base class for Algorithm component

Definition at line 216 of file genconf.cpp.

216  {
217  m_configurable[component_t::Algorithm] = cfgAlgorithm;
218  }

◆ setConfigurableAlgTool()

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

customize the configurable base class for AlgTool component

Definition at line 221 of file genconf.cpp.

221 { 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 224 of file genconf.cpp.

224 { 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 211 of file genconf.cpp.

211  {
212  m_configurable[component_t::DefaultName] = defaultName;
213  }

◆ setConfigurableModule()

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

customize the Module name where configurable base classes are defined

Definition at line 208 of file genconf.cpp.

208 { 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 227 of file genconf.cpp.

227  {
228  m_configurable[component_t::Service] = cfgService;
229  m_configurable[component_t::ApplicationMgr] = cfgService;
230  }

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 195 of file genconf.cpp.

◆ m_db2Buf

stringstream configGenerator::m_db2Buf
private

Definition at line 188 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 186 of file genconf.cpp.

◆ m_importDataHandles

bool configGenerator::m_importDataHandles = false
private

Definition at line 180 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 179 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 172 of file genconf.cpp.

◆ m_pkgName

string configGenerator::m_pkgName
private

name of the package we are processing

Definition at line 168 of file genconf.cpp.

◆ m_pyBuf

stringstream configGenerator::m_pyBuf
private

buffer of auto-generated configurables

Definition at line 175 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:662
GaudiHandleArrayBase::pythonRepr
std::string pythonRepr() const override
Python representation of array of handles, i.e.
Definition: GaudiHandle.cpp:88
System::loadDynamicLib
GAUDI_API unsigned long loadDynamicLib(const std::string &name, ImageHandle *handle)
Load dynamic link library.
Definition: System.cpp:147
compareOutputFiles.pname
string pname
Definition: compareOutputFiles.py:488
std::string
STL class.
std::exception
STL class.
std::fstream
STL class.
GaudiHandleArrayProperty::value
const GaudiHandleArrayBase & value() const
Definition: Property.h:643
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
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:670
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:28
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:310
Service
Definition: Service.h:46
configGenerator::m_dbBuf
stringstream m_dbBuf
buffer of generated configurables informations for the "Db" file The "Db" file is holding information...
Definition: genconf.cpp:186
GaudiHandleBase
Definition: GaudiHandle.h:99
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:179
configGenerator::m_pyBuf
stringstream m_pyBuf
buffer of auto-generated configurables
Definition: genconf.cpp:175
Gaudi.CommonGaudiConfigurables.mod
mod
Definition: CommonGaudiConfigurables.py:40
GaudiPluginService.cpluginsvc.registry
def registry()
Definition: cpluginsvc.py:84
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
TimingHistograms.name
name
Definition: TimingHistograms.py:25
std::cout
CLHEP::begin
double * begin(CLHEP::HepVector &v)
Definition: TupleAlg.cpp:45
configGenerator::pythonizeValue
void pythonizeValue(const PropertyBase *prop, string &pvalue, string &ptype, string &ptype2)
handle the "marshalling" of Properties
Definition: genconf.cpp:769
GaudiHandleBase::pythonRepr
std::string pythonRepr() const override
Python representation of handle, i.e.
Definition: GaudiHandle.cpp:58
std::string::compare
T compare(T... args)
std::ostringstream::setf
T setf(T... args)
GaudiPython.HistoUtils.path
path
Definition: HistoUtils.py:961
configGenerator::m_importDataHandles
bool m_importDataHandles
Definition: genconf.cpp:180
LOG_ERROR
#define LOG_ERROR
Definition: genconf.cpp:75
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:606
configGenerator::m_pkgName
string m_pkgName
name of the package we are processing
Definition: genconf.cpp:168
gaudirun.level
level
Definition: gaudirun.py:364
configGenerator::genImport
void genImport(std::ostream &s, std::string_view frmt, std::string indent)
Definition: genconf.cpp:607
configGenerator::m_configurable
std::map< component_t, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:195
IOTest.end
def end
Definition: IOTest.py:128
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:342
GaudiHandleProperty
Definition: Property.h:585
gaudiComponentHelp.properties
properties
Definition: gaudiComponentHelp.py:69
std::string::substr
T substr(T... args)
std::ostringstream
STL class.
LOG_WARNING
#define LOG_WARNING
Definition: genconf.cpp:76
Gaudi::Utils::toString
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string
Definition: ToStream.h:353
gaudirun.type
type
Definition: gaudirun.py:160
std::vector::emplace_back
T emplace_back(T... args)
GaudiHandleBase::pythonPropertyClassName
std::string pythonPropertyClassName() const override
Name of the componentType with "Handle" appended.
Definition: GaudiHandle.cpp:50
Gaudi::PluginService::v1::Details::logger
GAUDIPS_API Logger & logger()
Return the current logger instance.
Definition: PluginServiceV1.cpp:318
configGenerator::genHeader
void genHeader(std::ostream &pyOut, std::ostream &dbOut)
Definition: genconf.cpp:638
std::endl
T endl(T... args)
LOG_INFO
#define LOG_INFO
Definition: genconf.cpp:77
Gaudi::Time::current
static Time current()
Returns the current time.
Definition: Time.cpp:119
IInterface
Definition: IInterface.h:237
Gaudi::DataHandle::pythonRepr
virtual std::string pythonRepr() const
Definition: DataHandle.cpp:19
configGenerator::m_outputDirName
string m_outputDirName
absolute path to the directory where genconf will store auto-generated files (Configurables and Confi...
Definition: genconf.cpp:172
std::string::empty
T empty(T... args)
std::stringstream::str
T str(T... args)
GaudiPluginService.cpluginsvc.factories
def factories()
Definition: cpluginsvc.py:94
GaudiHandleArrayBase::pythonPropertyClassName
std::string pythonPropertyClassName() const override
Name of the componentType with "HandleArray" appended.
Definition: GaudiHandle.cpp:86
configGenerator::m_db2Buf
stringstream m_db2Buf
Definition: genconf.cpp:188
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:274
configGenerator::genBody
void genBody(std::ostream &pyOut, std::ostream &dbOut)
Definition: genconf.cpp:238
IInterface::addRef
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
GaudiHandleArrayProperty
Definition: Property.h:622
std::set< std::string >
std::exception::what
T what(T... args)
PrepareBase.out
out
Definition: PrepareBase.py:20