The Gaudi Framework  v28r3 (cc1cf868)
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

int genComponent (const std::string &libName, const std::string &componentName, const std::string &componentType, const vector< PropertyBase * > &properties)
 
void genImport (std::ostream &s, const boost::format &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...
 
void pythonizeName (string &name)
 Translates a valid C++ typename into a valid python one. 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
 switch to decide if the generated configurables need to import GaudiHandles (ie: if one of the components has a XyzHandle<T>) More...
 
bool m_importDataObjectHandles
 
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...
 
GaudiUtils::HashMap< std::string, std::stringm_configurable
 Configurable customization. More...
 

Detailed Description

Definition at line 98 of file genconf.cpp.

Constructor & Destructor Documentation

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

Definition at line 130 of file genconf.cpp.

131  : m_pkgName( pkgName )
132  , m_outputDirName( outputDirName )
133  , m_pyBuf()
134  , m_importGaudiHandles( false )
135  , m_importDataObjectHandles( false )
136  , m_dbBuf()
137  , m_configurable()
138  {
139  }
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127
stringstream m_pyBuf
buffer of auto-generated configurables
Definition: genconf.cpp:108
bool m_importDataObjectHandles
Definition: genconf.cpp:114
stringstream m_dbBuf
buffer of generated configurables informations for the "Db" file The "Db" file is holding information...
Definition: genconf.cpp:120
string m_outputDirName
absolute path to the directory where genconf will store auto-generated files (Configurables and Confi...
Definition: genconf.cpp:105
bool m_importGaudiHandles
switch to decide if the generated configurables need to import GaudiHandles (ie: if one of the compon...
Definition: genconf.cpp:112
string m_pkgName
name of the package we are processing
Definition: genconf.cpp:101

Member Function Documentation

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

Definition at line 174 of file genconf.cpp.

175  {
176  pyOut << m_pyBuf.str() << flush;
177  dbOut << m_dbBuf.str() << flush;
178  }
stringstream m_pyBuf
buffer of auto-generated configurables
Definition: genconf.cpp:108
T str(T...args)
stringstream m_dbBuf
buffer of generated configurables informations for the "Db" file The "Db" file is holding information...
Definition: genconf.cpp:120
T flush(T...args)
int configGenerator::genComponent ( const std::string libName,
const std::string componentName,
const std::string componentType,
const vector< PropertyBase * > &  properties 
)
private

Definition at line 646 of file genconf.cpp.

649 {
650  string cname = componentName;
651  pythonizeName( cname );
652 
653  typedef GaudiUtils::HashMap<std::string, std::string> PropertyDoc_t;
654  PropertyDoc_t propDoc;
655 
656  m_pyBuf << "\n";
657  m_pyBuf << "class " << cname << "( " << m_configurable[componentType] << " ) :"
658  << "\n";
659  m_pyBuf << " __slots__ = { \n";
660  for ( vector<PropertyBase*>::const_iterator it = properties.begin(); it != properties.end(); ++it ) {
661 
662  const string pname = ( *it )->name();
663  // Validate property name (it must be a valid Python identifier)
664  if ( !boost::regex_match( pname, pythonIdentifier ) ) {
665  std::cout << "ERROR: invalid property name \"" << pname << "\" in component " << cname
666  << " (invalid Python identifier)" << std::endl;
667  // try to make the buffer at least more or less valid python code.
668  m_pyBuf << " #ERROR-invalid identifier '" << pname << "'\n"
669  << " }\n";
670  return 1;
671  }
672 
673  string pvalue, ptype;
674  pythonizeValue( ( *it ), pvalue, ptype );
675  m_pyBuf << " '" << pname << "' : " << pvalue << ", # " << ptype << "\n";
676 
677  if ( ( *it )->documentation() != "none" ) {
678  propDoc[pname] = ( *it )->documentation() + " [" + (*it)->ownerTypeName() + "]";
679  }
680  }
681  m_pyBuf << " }\n";
682  m_pyBuf << " _propertyDocDct = { \n";
683  for ( PropertyDoc_t::const_iterator iProp = propDoc.begin(); iProp != propDoc.end(); ++iProp ) {
684  m_pyBuf << std::setw( 5 ) << "'" << iProp->first << "' : "
685  << "\"\"\" " << iProp->second << " \"\"\",\n";
686  }
687  m_pyBuf << " }\n";
688 
689  m_pyBuf << " def __init__(self, name = " << m_configurable["DefaultName"] << ", **kwargs):\n"
690  << " super(" << cname << ", self).__init__(name)\n"
691  << " for n,v in kwargs.items():\n"
692  << " setattr(self, n, v)\n"
693  << " def getDlls( self ):\n"
694  << " return '" << libName << "'\n"
695  << " def getType( self ):\n"
696  << " return '" << componentName << "'\n"
697  << " pass # class " << cname << "\n"
698  << flush;
699 
700  // name of the auto-generated module
701  const string pyName = ( fs::path( m_outputDirName ) / fs::path( libName + "Conf.py" ) ).string();
702  const string modName = fs::basename( fs::path( pyName ).leaf() );
703 
704  // now the db part
705  m_dbBuf << m_pkgName << "." << modName << " " << libName << " " << cname << "\n" << flush;
706 
707  return 0;
708 }
void pythonizeName(string &name)
Translates a valid C++ typename into a valid python one.
Definition: genconf.cpp:710
T endl(T...args)
T end(T...args)
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127
stringstream m_pyBuf
buffer of auto-generated configurables
Definition: genconf.cpp:108
T setw(T...args)
stringstream m_dbBuf
buffer of generated configurables informations for the "Db" file The "Db" file is holding information...
Definition: genconf.cpp:120
T flush(T...args)
string m_outputDirName
absolute path to the directory where genconf will store auto-generated files (Configurables and Confi...
Definition: genconf.cpp:105
STL class.
void pythonizeValue(const PropertyBase *prop, string &pvalue, string &ptype)
handle the "marshalling" of Properties
Definition: genconf.cpp:722
T begin(T...args)
string m_pkgName
name of the package we are processing
Definition: genconf.cpp:101
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

not enough information... skip it

no Properties, so don't bother create Configurables...

write-out files for this library

Definition at line 400 of file genconf.cpp.

402 {
403  //--- Disable checking StatusCode -------------------------------------------
405 
406  const Strings_t::const_iterator endLib = libs.end();
407 
408  const std::string gaudiSvc = "GaudiCoreSvc";
409  const bool isGaudiSvc = ( std::find( libs.begin(), endLib, gaudiSvc ) != endLib );
410 
411  //--- Instantiate ApplicationMgr --------------------------------------------
412  if ( !isGaudiSvc && createAppMgr() ) {
413  cout << "ERROR: ApplicationMgr can not be created. Check environment" << endl;
414  return EXIT_FAILURE;
415  }
416 
417  //--- Iterate over component factories --------------------------------------
419  Registry& registry = Registry::instance();
420 
421  std::set<std::string> bkgNames = registry.loadedFactories();
422 
423  ISvcLocator* svcLoc = Gaudi::svcLocator();
424  IInterface* dummySvc = new Service( "DummySvc", svcLoc );
425  dummySvc->addRef();
426 
427  bool allGood = true;
428 
429  // iterate over all the requested libraries
430  for ( Strings_t::const_iterator iLib = libs.begin(); iLib != endLib; ++iLib ) {
431 
432  LOG_INFO << ":::: processing library: " << *iLib << "...";
433 
434  // reset state
435  m_importGaudiHandles = false;
437  m_pyBuf.str( "" );
438  m_dbBuf.str( "" );
439 
440  //--- Load component library ----------------------------------------------
441  System::ImageHandle handle;
442  unsigned long err = System::loadDynamicLib( *iLib, &handle );
443  if ( err != 1 ) {
445  allGood = false;
446  continue;
447  }
448 
449  std::set<std::string> factories = registry.loadedFactories();
450 
451  for ( std::set<std::string>::iterator it = factories.begin(); it != factories.end(); ++it ) {
452  const string ident = *it;
453  if ( bkgNames.find( ident ) != bkgNames.end() ) {
455  LOG_INFO << "\t==> skipping [" << ident << "]...";
456  }
457  continue;
458  }
459 
460  const Registry::FactoryInfo info = registry.getInfo( *it );
461  const string rtype = info.rtype;
462 
463  // do not generate configurables for the Reflex-compatible aliases
464  if ( info.properties.find( "ReflexName" ) != info.properties.end() ) continue;
465 
466  // Atlas contributed code (patch #1247)
467  // Skip the generation of configurables if the component does not come
468  // from the same library we are processing (i.e. we found a symbol that
469  // is coming from a library loaded by the linker).
470  if ( !DsoUtils::inDso( info.ptr, DsoUtils::libNativeName( *iLib ) ) ) {
471  LOG_WARNING << "library [" << *iLib << "] exposes factory [" << ident << "] which is declared in ["
472  << DsoUtils::dsoName( info.ptr ) << "] !!";
473  continue;
474  }
475 
476  string type;
477  bool known = true;
478  if ( ident == "ApplicationMgr" )
479  type = "ApplicationMgr";
480  else if ( rtype == typeid( IInterface* ).name() )
481  type = "IInterface";
482  else if ( rtype == typeid( IAlgorithm* ).name() )
483  type = "Algorithm";
484  else if ( rtype == typeid( IService* ).name() )
485  type = "Service";
486  else if ( rtype == typeid( IAlgTool* ).name() )
487  type = "AlgTool";
488  else if ( rtype == typeid( IAuditor* ).name() )
489  type = "Auditor";
490  else if ( rtype == typeid( IConverter* ).name() )
491  type = "Converter";
492  else if ( rtype == typeid( DataObject* ).name() )
493  type = "DataObject";
494  else
495  type = "Unknown", known = false;
496  string name = ident;
497  // handle possible problems with templated components
498  boost::trim( name );
499 
500  if ( type == "IInterface" ) {
503  continue;
504  }
505 
506  if ( type == "Converter" || type == "DataObject" ) {
508  continue;
509  }
510 
511  if ( !known ) {
512  LOG_WARNING << "Unknown (return) type [" << System::typeinfoName( rtype.c_str() ) << "] !!"
513  << " Component [" << ident << "] is skipped !";
514  continue;
515  }
516 
517  LOG_INFO << " - component: " << info.className << " ("
518  << ( info.className != name ? ( name + ": " ) : std::string() ) << type << ")";
519 
520  string cname = "DefaultName";
521  SmartIF<IProperty> prop;
522  try {
523  if ( type == "Algorithm" ) {
524  prop = SmartIF<IAlgorithm>( Algorithm::Factory::create( ident, cname, svcLoc ) );
525  } else if ( type == "Service" ) {
526  prop = SmartIF<IService>( Service::Factory::create( ident, cname, svcLoc ) );
527  } else if ( type == "AlgTool" ) {
528  prop = SmartIF<IAlgTool>( AlgTool::Factory::create( ident, cname, type, dummySvc ) );
529  // FIXME: AlgTool base class increase artificially by 1 the refcount.
530  prop->release();
531  } else if ( type == "Auditor" ) {
532  prop = SmartIF<IAuditor>( Auditor::Factory::create( ident, cname, svcLoc ) );
533  } else if ( type == "ApplicationMgr" ) {
534  prop = SmartIF<ISvcLocator>( svcLoc );
535  } else {
536  continue; // unknown
537  }
538  } catch ( exception& e ) {
539  LOG_ERROR << "Error instantiating " << name << " from " << *iLib;
540  LOG_ERROR << "Got exception: " << e.what();
541  allGood = false;
542  continue;
543  } catch ( ... ) {
544  LOG_ERROR << "Error instantiating " << name << " from " << *iLib;
545  allGood = false;
546  continue;
547  }
548  if ( prop ) {
549  if ( genComponent( *iLib, name, type, prop->getProperties() ) ) {
550  allGood = false;
551  }
552  prop.reset();
553  } else {
554  LOG_ERROR << "could not cast IInterface* object to an IProperty* !";
555  LOG_ERROR << "return type from PluginSvc is [" << rtype << "]...";
556  LOG_ERROR << "NO Configurable will be generated for [" << name << "] !";
557  allGood = false;
558  }
559  } //> end loop over factories
560 
564  const std::string pyName = ( fs::path( m_outputDirName ) / fs::path( *iLib + "Conf.py" ) ).string();
565  const std::string dbName = ( fs::path( m_outputDirName ) / fs::path( *iLib + ".confdb" ) ).string();
566 
567  std::fstream py( pyName, std::ios_base::out | std::ios_base::trunc );
568  std::fstream db( dbName, std::ios_base::out | std::ios_base::trunc );
569 
570  genHeader( py, db );
571  if ( !userModule.empty() ) py << "from " << userModule << " import *" << endl;
572  genBody( py, db );
573  genTrailer( py, db );
574 
575  } //> end loop over libraries
576 
577  dummySvc->release();
578  dummySvc = 0;
579 
580  return allGood ? EXIT_SUCCESS : EXIT_FAILURE;
581 }
T empty(T...args)
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
The data converters are responsible to translate data from one representation into another...
Definition: IConverter.h:57
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:299
#define LOG_ERROR
Definition: genconf.cpp:75
T endl(T...args)
T end(T...args)
void * ImageHandle
Definition of an image handle.
Definition: ModuleInfo.h:30
stringstream m_pyBuf
buffer of auto-generated configurables
Definition: genconf.cpp:108
GAUDIPS_API Logger & logger()
Return the current logger instance.
int genComponent(const std::string &libName, const std::string &componentName, const std::string &componentType, const vector< PropertyBase * > &properties)
Definition: genconf.cpp:646
STL class.
bool m_importDataObjectHandles
Definition: genconf.cpp:114
GAUDI_API ISvcLocator * svcLocator()
T what(T...args)
#define LOG_INFO
Definition: genconf.cpp:77
General service interface definition.
Definition: IService.h:18
Definition of the basic interface.
Definition: IInterface.h:234
STL class.
void genHeader(std::ostream &pyOut, std::ostream &dbOut)
Definition: genconf.cpp:615
T str(T...args)
stringstream m_dbBuf
buffer of generated configurables informations for the "Db" file The "Db" file is holding information...
Definition: genconf.cpp:120
STL class.
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:27
virtual const std::vector< Gaudi::Details::PropertyBase * > & getProperties() const =0
Get list of properties.
T find(T...args)
string m_outputDirName
absolute path to the directory where genconf will store auto-generated files (Configurables and Confi...
Definition: genconf.cpp:105
virtual unsigned long release()=0
Release Interface instance.
#define LOG_WARNING
Definition: genconf.cpp:76
T begin(T...args)
bool m_importGaudiHandles
switch to decide if the generated configurables need to import GaudiHandles (ie: if one of the compon...
Definition: genconf.cpp:112
T c_str(T...args)
The interface implemented by the AlgTool base class.
Definition: IAlgTool.h:23
In-memory database of the loaded factories.
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
static GAUDI_API void disableChecking()
Definition: StatusCode.cpp:23
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
Definition: SmartIF.h:88
void genTrailer(std::ostream &pyOut, std::ostream &dbOut)
Definition: genconf.cpp:638
GAUDI_API const std::string getLastErrorString()
Get last system error as string.
Definition: System.cpp:256
Base class for all services.
Definition: Service.h:36
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
int createAppMgr()
Definition: genconf.cpp:783
The IAuditor is the interface implmented by the AlgAuditor base class.
Definition: IAuditor.h:18
std::string libNativeName(const std::string &libName)
Definition: DsoUtils.h:18
void genBody(std::ostream &pyOut, std::ostream &dbOut)
Definition: genconf.cpp:174
GAUDI_API unsigned long loadDynamicLib(const std::string &name, ImageHandle *handle)
Load dynamic link library.
Definition: System.cpp:126
void configGenerator::genHeader ( std::ostream pyOut,
std::ostream dbOut 
)
private

Definition at line 615 of file genconf.cpp.

617 {
618  // python file part
619  std::string now = Gaudi::Time::current().format( true );
620  py << "#" << now //<< "\n"
621  << "\"\"\"Automatically generated. DO NOT EDIT please\"\"\"\n";
622  if ( m_importGaudiHandles ) {
623  py << "from GaudiKernel.GaudiHandles import *\n";
624  }
625 
627  py << "from GaudiKernel.DataObjectHandleBase import *\n";
628  }
629 
630  genImport( py, boost::format( "from %1%.Configurable import *" ) );
631 
632  // db file part
633  db << "## -*- ascii -*- \n"
634  << "# db file automatically generated by genconf on: " << now << "\n"
635  << flush;
636 }
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:121
static Time current()
Returns the current time.
Definition: Time.cpp:113
STL class.
bool m_importDataObjectHandles
Definition: genconf.cpp:114
T flush(T...args)
void genImport(std::ostream &s, const boost::format &frmt, std::string indent)
Definition: genconf.cpp:583
bool m_importGaudiHandles
switch to decide if the generated configurables need to import GaudiHandles (ie: if one of the compon...
Definition: genconf.cpp:112
std::string format(bool local, std::string spec="%c") const
Format the time using strftime.
Definition: Time.cpp:279
void configGenerator::genImport ( std::ostream s,
const boost::format frmt,
std::string  indent = "" 
)
private

Definition at line 583 of file genconf.cpp.

584 {
585 
586  std::string::size_type pos = 0, nxtpos = 0;
588 
589  while ( std::string::npos != pos ) {
590  // find end of module name
591  nxtpos = m_configurable["Module"].find_first_of( ',', pos );
592 
593  // Prepare import string
594  mod = m_configurable["Module"].substr( pos, nxtpos - pos );
595  std::ostringstream import;
596  import << boost::format( frmt ) % mod;
597 
598  // append a normal import or a try/except enclosed one depending
599  // on availability of a fall-back module (next in the list)
600  if ( std::string::npos == nxtpos ) {
601  // last possible module
602  s << indent << import.str() << "\n" << flush;
603  pos = std::string::npos;
604  } else {
605  // we have a fallback for this
606  s << indent << "try:\n" << indent << py_tab << import.str() << "\n" << indent << "except ImportError:\n" << flush;
607  pos = nxtpos + 1;
608  }
609  // increase indentation level for next iteration
610  indent += py_tab;
611  }
612 }
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:121
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127
STL class.
T flush(T...args)
void configGenerator::genTrailer ( std::ostream pyOut,
std::ostream dbOut 
)
private

Definition at line 638 of file genconf.cpp.

640 {
641  // db file part
642  db << "## " << m_pkgName << "\n" << std::flush;
643 }
T flush(T...args)
string m_pkgName
name of the package we are processing
Definition: genconf.cpp:101
void configGenerator::pythonizeName ( string name)
private

Translates a valid C++ typename into a valid python one.

Definition at line 710 of file genconf.cpp.

712 {
713  static string in( "<>&*,: ()." );
714  static string out( "__rp__s___" );
715  boost::algorithm::replace_all( name, ", ", "," );
716  for ( string::iterator i = name.begin(); i != name.end(); ++i ) {
717  if ( in.find( *i ) != string::npos ) *i = out[in.find( *i )];
718  }
719 }
T end(T...args)
T begin(T...args)
void configGenerator::pythonizeValue ( const PropertyBase prop,
string pvalue,
string ptype 
)
private

handle the "marshalling" of Properties

Definition at line 722 of file genconf.cpp.

724 {
725  const std::string cvalue = p->toString();
726  const type_info& ti = *p->type_info();
727  if ( ti == typeid( bool ) ) {
728  pvalue = ( cvalue == "0" || cvalue == "False" || cvalue == "false" ) ? "False" : "True";
729  ptype = "bool";
730  } else if ( ti == typeid( char ) || ti == typeid( signed char ) || ti == typeid( unsigned char ) ||
731  ti == typeid( short ) || ti == typeid( unsigned short ) || ti == typeid( int ) ||
732  ti == typeid( unsigned int ) || ti == typeid( long ) || ti == typeid( unsigned long ) ) {
733  pvalue = cvalue;
734  ptype = "int";
735  } else if ( ti == typeid( long long ) || ti == typeid( unsigned long long ) ) {
736  pvalue = cvalue + "L";
737  ptype = "long";
738  } else if ( ti == typeid( float ) || ti == typeid( double ) ) {
739  // forces python to handle this as a float: put a dot in there...
740  pvalue = boost::to_lower_copy( cvalue );
741  if ( pvalue == "nan" ) {
742  pvalue = "float('nan')";
743  std::cout << "WARNING: default value for [" << p->name() << "] is NaN !!" << std::endl;
744  } else if ( std::string::npos == pvalue.find( "." ) && std::string::npos == pvalue.find( "e" ) ) {
745  pvalue = cvalue + ".0";
746  }
747  ptype = "float";
748  } else if ( ti == typeid( string ) ) {
749 
750  pvalue = "'" + cvalue + "'";
751  ptype = "str";
752  } else if ( ti == typeid( GaudiHandleBase ) ) {
753  m_importGaudiHandles = true;
754  const GaudiHandleProperty& hdl = dynamic_cast<const GaudiHandleProperty&>( *p );
755  const GaudiHandleBase& base = hdl.value();
756 
757  pvalue = base.pythonRepr();
758  ptype = "GaudiHandle";
759  } else if ( ti == typeid( GaudiHandleArrayBase ) ) {
760  m_importGaudiHandles = true;
761  const GaudiHandleArrayProperty& hdl = dynamic_cast<const GaudiHandleArrayProperty&>( *p );
762  const GaudiHandleArrayBase& base = hdl.value();
763 
764  pvalue = base.pythonRepr();
765  ptype = "GaudiHandleArray";
766  } else if ( ti == typeid( DataObjectHandleBase ) ) {
768  const DataObjectHandleProperty& hdl = dynamic_cast<const DataObjectHandleProperty&>( *p );
769  const DataObjectHandleBase& base = hdl.value();
770 
771  pvalue = base.pythonRepr();
772  ptype = "DataObjectHandleBase";
773  } else {
774  std::ostringstream v_str;
775  v_str.setf( std::ios::showpoint ); // to correctly display floats
776  p->toStream( v_str );
777  pvalue = v_str.str();
778  ptype = "list";
779  }
780 }
T setf(T...args)
T endl(T...args)
DataObjectHandleProperty.h GaudiKernel/DataObjectHandleProperty.h.
STL class.
bool m_importDataObjectHandles
Definition: genconf.cpp:114
const GaudiHandleBase & value() const
Definition: Property.h:853
const GaudiHandleArrayBase & value() const
Definition: Property.h:893
std::string pythonRepr() const override
Python representation of array of handles, i.e.
Definition: GaudiHandle.cpp:94
T find(T...args)
Base class of array&#39;s of various gaudihandles.
Definition: GaudiHandle.h:364
DataObjectHandleBase GaudiKernel/DataObjectHandleBase.h.
std::string pythonRepr() const override
Python representation of handle, i.e.
Definition: GaudiHandle.cpp:56
bool m_importGaudiHandles
switch to decide if the generated configurables need to import GaudiHandles (ie: if one of the compon...
Definition: genconf.cpp:112
std::string pythonRepr() const override
const DataObjectHandleBase & value() const
Base class to handles to be used in lieu of naked pointers to various Gaudi components.
Definition: GaudiHandle.h:94
void configGenerator::setConfigurableAlgorithm ( const std::string cfgAlgorithm)
inline

customize the configurable base class for Algorithm component

Definition at line 154 of file genconf.cpp.

154 { m_configurable["Algorithm"] = cfgAlgorithm; }
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127
void configGenerator::setConfigurableAlgTool ( const std::string cfgAlgTool)
inline

customize the configurable base class for AlgTool component

Definition at line 157 of file genconf.cpp.

157 { m_configurable["AlgTool"] = cfgAlgTool; }
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127
void configGenerator::setConfigurableAuditor ( const std::string cfgAuditor)
inline

customize the configurable base class for AlgTool component

Definition at line 160 of file genconf.cpp.

160 { m_configurable["Auditor"] = cfgAuditor; }
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127
void configGenerator::setConfigurableDefaultName ( const std::string defaultName)
inline

customize the default name for configurable instances

Definition at line 151 of file genconf.cpp.

151 { m_configurable["DefaultName"] = defaultName; }
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127
void configGenerator::setConfigurableModule ( const std::string moduleName)
inline

customize the Module name where configurable base classes are defined

Definition at line 148 of file genconf.cpp.

148 { m_configurable["Module"] = moduleName; }
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127
GAUDI_API const std::string & moduleName()
Get the name of the (executable/DLL) file without file-type.
Definition: ModuleInfo.cpp:54
void configGenerator::setConfigurableService ( const std::string cfgService)
inline

customize the configurable base class for Service component

Definition at line 163 of file genconf.cpp.

164  {
165  m_configurable["Service"] = cfgService;
166  m_configurable["ApplicationMgr"] = cfgService;
167  }
GaudiUtils::HashMap< std::string, std::string > m_configurable
Configurable customization.
Definition: genconf.cpp:127

Member Data Documentation

GaudiUtils::HashMap<std::string, 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 127 of file genconf.cpp.

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

bool configGenerator::m_importDataObjectHandles
private

Definition at line 114 of file genconf.cpp.

bool configGenerator::m_importGaudiHandles
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 112 of file genconf.cpp.

string configGenerator::m_outputDirName
private

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

Definition at line 105 of file genconf.cpp.

string configGenerator::m_pkgName
private

name of the package we are processing

Definition at line 101 of file genconf.cpp.

stringstream configGenerator::m_pyBuf
private

buffer of auto-generated configurables

Definition at line 108 of file genconf.cpp.


The documentation for this class was generated from the following file: