Gaudi Framework, version v23r2

Home   Generated: Thu Jun 28 2012

Pythonizations.py

Go to the documentation of this file.
00001 # File: GaudiPython/Pythonizations.py
00002 # Author: Pere Mato (pere.mato@cern.ch)
00003 
00004 """ This Pythonizations module provides a number of useful pythonizations
00005     of adaptation of some classes.
00006 """
00007 
00008 __all__ = [ ]
00009 
00010 import PyCintex
00011 gbl = PyCintex.gbl
00012 
00013 if not hasattr(gbl,'ostream') : gbl.gROOT.ProcessLine("#include <ostream>")
00014 if not hasattr(gbl,'stringstream') : gbl.gROOT.ProcessLine("#include <sstream>")
00015 
00016 #--- Hack to match the name scheme of dictionary on Linux ----------------------------
00017 _loadDict_save = PyCintex.loadDict
00018 def _loadDict(name):
00019     import sys
00020     if sys.platform != 'win32' and name[:3] != 'lib' : name = 'lib'+name
00021     return _loadDict_save(name)
00022 PyCintex.loadDict = _loadDict
00023 
00024 #--- Adding extra functionality to C++ raw classes------------------------------------
00025 def _printHisto1D(h) :
00026     x = h.axis()
00027     return  'Histogram 1D "%s" %d bins [%f,%f]' % (h.title(), x.bins(), x.lowerEdge(), x.upperEdge())
00028 def _contentsHisto1D(h) :
00029     x = h.axis()
00030     return  map(h.binEntries, range(x.bins()))
00031 def _printHisto2D(h) :
00032     x,y = h.xAxis(),h.yAxis()
00033     return  'Histogram 2D "%s" %d xbins [%f,%f], %d ybins [%f,%f]' % \
00034     (h.title(), x.bins(), x.lowerEdge(), x.upperEdge(), y.bins(), y.lowerEdge(), y.upperEdge() )
00035 def _printStatusCode(s) :
00036     if s.isSuccess() : return 'SUCCESS'
00037     else             : return 'FAILURE'
00038 def _printBitReference(b) :
00039     return str(1==b.bool())
00040 def _printFillStream(o) :
00041     if  o :
00042         s = gbl.stringstream()
00043         o.fillStream(s)
00044         out = s.str()
00045         if out == '' :
00046             out = o.__class__.__name__ + ' object'
00047             if hasattr( o, 'hasKey') and o.hasKey() :
00048                 out += ' key = '+ str(o.key())
00049     else :
00050         out = o.__class__.__name__ + ' NULL object'
00051     return out
00052 def _container__getitem__(self, k) :
00053     return self.containedObject(k)
00054 def _container__len__(self) :
00055     return self.numberOfObjects()
00056 def _container__iter__(self) :
00057     if hasattr(self,'containedObjects') : sequential = self.containedObjects()
00058     else                                : sequential = self
00059     count = 0
00060     limit = self.__len__()
00061     while count < limit :
00062         yield sequential.__getitem__(count)
00063         count += 1
00064 
00065 def _draw_aida_ ( self , *args ) :
00066     """
00067     Draw AIDA histogram (through access to internal ROOT histogram
00068 
00069     >>> aida = ...    # get the historgam
00070     >>> aida.Draw()
00071 
00072     """
00073     _fun = PyCintex.gbl.Gaudi.Utils.Aida2ROOT.aida2root
00074     _root = _fun ( self )
00075     return _root.Draw( *args )
00076 
00077 gbl.AIDA.IHistogram1D.__repr__ = _printHisto1D
00078 gbl.AIDA.IHistogram1D.contents = _contentsHisto1D
00079 gbl.AIDA.IHistogram2D.__repr__ = _printHisto2D
00080 for h in (  gbl.AIDA.IHistogram   ,
00081             gbl.AIDA.IHistogram1D ,
00082             gbl.AIDA.IHistogram2D ,
00083             gbl.AIDA.IHistogram3D ,
00084             gbl.AIDA.IProfile1D   ,
00085             gbl.AIDA.IProfile2D   ) :
00086     h.Draw = _draw_aida_
00087     h.plot = _draw_aida_
00088 
00089 gbl.StatusCode.__repr__ = _printStatusCode
00090 try: gbl._Bit_reference.__repr__ = _printBitReference
00091 except: pass
00092 gbl.ContainedObject.__repr__ = _printFillStream
00093 gbl.DataObject.__repr__ = _printFillStream
00094 gbl.ObjectContainerBase.__getitem__ = _container__getitem__
00095 gbl.ObjectContainerBase.__len__ = _container__len__
00096 gbl.ObjectContainerBase.__iter__ = _container__iter__
00097 
00098 gbl.IUpdateManagerSvc.update = lambda self,obj: gbl.IUpdateManagerSvc.PythonHelper.update(self,obj)
00099 gbl.IUpdateManagerSvc.invalidate = lambda self,obj: gbl.IUpdateManagerSvc.PythonHelper.invalidate(self,obj)
00100 
00101 #---Globals--------------------------------------------------------------------
00102 gbl.StatusCode.SUCCESS = 1
00103 gbl.StatusCode.FAILURE = 0
00104 
00105 # - string key, equality
00106 if hasattr ( gbl.Gaudi.StringKey ,'__cpp_eq__' ) :
00107     _eq = gbl.Gaudi.StringKey.__cpp_eq__
00108     setattr ( gbl.Gaudi.StringKey ,'__eq__' , _eq )
00109 
00110 # - string key, non-equality
00111 if hasattr ( gbl.Gaudi.StringKey ,'__cpp_ne__' ) :
00112     _ne = gbl.Gaudi.StringKey.__cpp_ne__
00113     setattr ( gbl.Gaudi.StringKey ,'__ne__' , _ne )
00114 
00115 
00116 #---Enabling Pickle support----------------------------------------------------
00117 if  gbl.gROOT.GetVersionInt() <= 51800 :
00118     import libPyROOT
00119     gbl.GaudiPython.PyROOTPickle.Initialize(libPyROOT, libPyROOT.ObjectProxy)
00120 
00121 # =============================================================================
00122 ## decorate some map-like objects 
00123 # =============================================================================
00124 ## The iterator for MapBase class
00125 #
00126 #  @code
00127 #
00128 #    >>> m = ...  ## the map
00129 #    >>> for key in m : print key , m[key]
00130 #    
00131 #  @endcode 
00132 #  @see Gaudi::Utils::MapBase
00133 #  @see GaudiUtils::Map
00134 #  @see GaudiUtils::HashMap
00135 #  @see GaudiUtils::VectorMap
00136 #  @see GaudiUtils::Map::key_at
00137 #  @see GaudiUtils::HashMap::key_at
00138 #  @see GaudiUtils::VectorMap::key_at
00139 #  @author Vanya BELYAEV Ivan.Belyaev@itep.ru
00140 #  @date 2010-02-20
00141 def __mapbase_iter__ ( self ) :
00142     """
00143     The iterator for MapBase-based containers
00144     
00145     >>> m = ...  ## the map
00146     >>> for key in m : print key , m[key]
00147     
00148     """
00149     _size  = len ( self )
00150     _index = 0
00151     while _index < _size :
00152         yield self.key_at ( _index )
00153         _index +=1
00154 
00155 # =============================================================================
00156 ## The iterator for MapBase class
00157 #
00158 #  @code
00159 #
00160 #    >>> m = ...  ## the map
00161 #    >>> for key,value in m.iteritems() : print key , value 
00162 #    
00163 #  @endcode 
00164 #  @see Gaudi::Utils::MapBase
00165 #  @see GaudiUtils::Map
00166 #  @see GaudiUtils::HashMap
00167 #  @see GaudiUtils::VectorMap
00168 #  @see GaudiUtils::Map::key_at
00169 #  @see GaudiUtils::HashMap::key_at
00170 #  @see GaudiUtils::VectorMap::key_at
00171 #  @see GaudiUtils::Map::value_at
00172 #  @see GaudiUtils::HashMap::value_at
00173 #  @see GaudiUtils::VectorMap::value_at
00174 #  @author Vanya BELYAEV Ivan.Belyaev@itep.ru
00175 #  @date 2010-02-20
00176 def __mapbase_iteritems__ ( self ) :
00177     """
00178     The iterator for MapBase-based containers
00179     
00180     >>> m = ...  ## the map
00181     >>> for key,value in m.iteritems() : print key, value
00182     
00183     """
00184     _size  = len ( self )
00185     _index = 0
00186     while _index < _size :
00187         _key = self.key_at  ( _index ) 
00188         yield ( _key , self.at ( _key ) ) 
00189         _index +=1
00190         
00191 # ============================================
00192 ## Get the list of keys for the map
00193 #
00194 #  @code
00195 #
00196 #    >>> m    = ...        ## the map
00197 #    >>> keys = m.keys()   ## get the list of keys
00198 #
00199 #  @endcode
00200 #  @see Gaudi::Utils::MapBase
00201 #  @see GaudiUtils::Map
00202 #  @see GaudiUtils::HashMap
00203 #  @see GaudiUtils::VectorMap
00204 #  @see GaudiUtils::Map::key_at
00205 #  @see GaudiUtils::HashMap::key_at
00206 #  @ see GaudiUtils::VectorMap::key_at
00207 #  @author Vanya BELYAEV Ivan.BElyaev@itep.ru
00208 #  @date 2010-02-20
00209 def __mapbase_keys__ ( self ) :
00210     """
00211     Get the list of keys 
00212     
00213     >>> m = ...           ## the map
00214     >>> keys = m.keys()   ## get the list of keys 
00215     
00216     """
00217     _size  = len ( self )
00218     _keys  = [] 
00219     for i in range ( 0 , _size ) : _keys.append ( self.key_at ( i ) ) 
00220     return _keys
00221 
00222 # ============================================
00223 ## Get the list of items for the map
00224 #
00225 #  @code
00226 #
00227 #    >>> m     = ...        ## the map
00228 #    >>> items = m.items()   ## get the list of items
00229 #
00230 #  @endcode
00231 #  @see Gaudi::Utils::MapBase
00232 #  @see GaudiUtils::Map
00233 #  @see GaudiUtils::HashMap
00234 #  @see GaudiUtils::VectorMap
00235 #  @see GaudiUtils::Map::key_at
00236 #  @see GaudiUtils::HashMap::key_at
00237 #  @ see GaudiUtils::VectorMap::key_at
00238 #  @author Vanya BELYAEV Ivan.BElyaev@itep.ru
00239 #  @date 2010-02-20
00240 def __mapbase_items__ ( self ) :
00241     """
00242     Get the list of items
00243     
00244     >>> m     = ...        ## the map
00245     >>> items = m.keys()   ## get the list of items
00246     
00247     """
00248     _size  = len ( self )
00249     _items = []
00250     for i in range ( 0 , _size )  : 
00251         _key   = self.key_at   ( i     )
00252         _value = self.at       ( _key  )  
00253         _items.append ( ( _key , _value ) ) 
00254     return _items
00255 
00256 # ============================================
00257 ## Get the list of values for the map
00258 #
00259 #  @code
00260 #
00261 #    >>> m      = ...           ## the map
00262 #    >>> values = m.values ()   ## get the list of values
00263 #
00264 #  @endcode
00265 #  @see Gaudi::Utils::MapBase
00266 #  @see GaudiUtils::Map
00267 #  @see GaudiUtils::HashMap
00268 #  @see GaudiUtils::VectorMap
00269 #  @see GaudiUtils::Map::value_at
00270 #  @see GaudiUtils::HashMap::value_at
00271 #  @ see GaudiUtils::VectorMap::value_at
00272 #  @author Vanya BELYAEV Ivan.Belyaev@itep.ru
00273 #  @date 2010-02-20
00274 def __mapbase_values__ ( self ) :
00275     """
00276     Get the list of values
00277     
00278     >>> m      = ...          ## the map
00279     >>> values = m.values()   ## get the list of values
00280     
00281     """
00282     _size   = len ( self )
00283     _values = []
00284     for i in range ( 0 , _size ) : 
00285         _value = self.value_at ( i ) 
00286         _values.append ( _value ) 
00287     return _values
00288 
00289 # ============================================
00290 ## Check if the certain key is in the map 
00291 #
00292 #  @code
00293 #
00294 #    >>> m      = ...        ## the map
00295 #    >>> if 'a' in m : print 'key is in the map!'
00296 #
00297 #  @endcode
00298 #  @see Gaudi::Utils::MapBase
00299 #  @see GaudiUtils::Map
00300 #  @see GaudiUtils::HashMap
00301 #  @see GaudiUtils::VectorMap
00302 #  @see GaudiUtils::Map::count
00303 #  @see GaudiUtils::HashMap::count
00304 #  @ see GaudiUtils::VectorMap::count 
00305 #  @author Vanya BELYAEV Ivan.BElyaev@itep.ru
00306 #  @date 2010-02-20
00307 def __mapbase_contains__ ( self , key ) :
00308     """
00309     Check if the certainkey is in the map
00310     
00311     >>> m     = ...        ## the map
00312     >>> if 'a' in m : ...  ##  chekc the presence of the key in the map
00313     
00314     """
00315     _num = self.count ( key )
00316     return False if 0 == _num else True 
00317 
00318 # ============================================
00319 ## Get the value for certain key,
00320 #   return predefined value otherwise 
00321 #
00322 #  @code
00323 #
00324 #    >>> m      = ...          ## the map
00325 #    >>> v = m.get( key , 15 ) ## return the value[key] for existing key, else 15
00326 #
00327 #  @endcode
00328 #  @see Gaudi::Utils::MapBase
00329 #  @see GaudiUtils::Map
00330 #  @see GaudiUtils::HashMap
00331 #  @see GaudiUtils::VectorMap
00332 #  @see GaudiUtils::Map::count
00333 #  @see GaudiUtils::HashMap::count
00334 #  @ see GaudiUtils::VectorMap::count 
00335 #  @author Vanya BELYAEV Ivan.BElyaev@itep.ru
00336 #  @date 2010-02-20
00337 def __mapbase_get__ ( self , key , value = None ) :
00338     """
00339     Get the value for the certain key, or 'value' otherwise 
00340     
00341     >>> m     = ...        ## the map
00342     >>> v = m.get ( key , 15 ) 
00343     
00344     """
00345     if key in self : return self.at( key ) 
00346     return value 
00347 
00348 # ============================================
00349 ## Representation of MapBase-based maps 
00350 #
00351 #  @code
00352 #
00353 #    >>> m      = ...        ## the map
00354 #    >>> print m 
00355 #
00356 #  @endcode
00357 #  @see Gaudi::Utils::MapBase
00358 #  @see GaudiUtils::Map
00359 #  @see GaudiUtils::HashMap
00360 #  @see GaudiUtils::VectorMap
00361 #  @author Vanya BELYAEV Ivan.BElyaev@itep.ru
00362 #  @date 2010-02-20
00363 def __mapbase_str__ ( self  ) :
00364     """
00365     Representation of MapBase-based maps:
00366     
00367     >>> m     = ...        ## the map
00368     >>> print map 
00369     
00370     """
00371     _result  = ' { '
00372     _size  = len ( self )
00373     for i in range ( 0 , _size ) :
00374         _key = self.key_at   ( i    )
00375         _val = self.at       ( _key )  
00376         if 0 != i : _result += ' , '
00377         _result += " %s : %s " % ( str ( _key ) , str ( _val ) )
00378     _result += ' } '
00379     return _result 
00380 
00381 # ============================================
00382 ## "Setitem" for MapBase-based maps:
00383 #
00384 #  @code
00385 #
00386 #    >>> m        = ...        ## the map
00387 #    >>> m [ key] = value    ## set the item 
00388 #
00389 #  @endcode
00390 #  @see Gaudi::Utils::MapBase
00391 #  @see GaudiUtils::Map
00392 #  @see GaudiUtils::HashMap
00393 #  @see GaudiUtils::VectorMap
00394 #  @see GaudiUtils::Map::update
00395 #  @see GaudiUtils::HashMap::update
00396 #  @see GaudiUtils::VectorMap::update
00397 #  @author Vanya BELYAEV Ivan.BElyaev@itep.ru
00398 #  @date 2010-02-20
00399 def __mapbase_setitem__ ( self , key , value ) :
00400     """
00401     'Set-item' for MapBase-based maps:
00402     
00403     >>> m      = ...        ## the map
00404     >>> m[key] = value     ## set the item 
00405     
00406     """
00407     _replaced = True if key in self else False 
00408     self.update ( key , value )
00409     return _replaced
00410 
00411 # ============================================
00412 ## "Del-item" for MapBase-based maps:
00413 #
00414 #  @code
00415 #
00416 #    >>> m        = ...   ## the map
00417 #    >>> del m [ key]     ## del th eitem 
00418 #
00419 #  @endcode
00420 #
00421 #  @see Gaudi::Utils::MapBase
00422 #  @see GaudiUtils::Map
00423 #  @see GaudiUtils::HashMap
00424 #  @see GaudiUtils::VectorMap
00425 #  @see GaudiUtils::Map::erase
00426 #  @see GaudiUtils::HashMap::erase
00427 #  @see GaudiUtils::VectorMap::erase
00428 #  @author Vanya BELYAEV Ivan.BElyaev@itep.ru
00429 #  @date 2010-02-20
00430 def __mapbase_delitem__ ( self , key ) :
00431     """
00432     'Del-item' for MapBase-based maps:
00433     
00434     >>> m      = ...        ## the map
00435     >>> del m[key] 
00436     
00437     """
00438     _erased = True if key in self else False 
00439     self.erase ( key ) 
00440     return _erased
00441 
00442 gbl.Gaudi.Utils.MapBase . __len__       = lambda s   : s.size()
00443 gbl.Gaudi.Utils.MapBase . __iter__      = __mapbase_iter__ 
00444 gbl.Gaudi.Utils.MapBase .   keys        = __mapbase_keys__ 
00445 gbl.Gaudi.Utils.MapBase . __iteritems__ = __mapbase_iteritems__ 
00446 gbl.Gaudi.Utils.MapBase .   iteritems   = __mapbase_iteritems__ 
00447 gbl.Gaudi.Utils.MapBase .   items       = __mapbase_items__ 
00448 gbl.Gaudi.Utils.MapBase .   values      = __mapbase_values__
00449 gbl.Gaudi.Utils.MapBase . __contains__  = __mapbase_contains__ 
00450 gbl.Gaudi.Utils.MapBase .   has_key     = __mapbase_contains__ 
00451 gbl.Gaudi.Utils.MapBase .   get         = __mapbase_get__      
00452 gbl.Gaudi.Utils.MapBase . __str__       = __mapbase_str__     
00453 gbl.Gaudi.Utils.MapBase . __repr__      = __mapbase_str__ 
00454 gbl.Gaudi.Utils.MapBase . __setitem__   = __mapbase_setitem__ 
00455 gbl.Gaudi.Utils.MapBase . __delitem__   = __mapbase_delitem__ 
00456 gbl.Gaudi.Utils.MapBase . __getitem__   = lambda s,key : s.at ( key )  
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

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