Source code for fudge.processing.processingInfo

# <<BEGIN-copyright>>
# <<END-copyright>>

__metaclass__ = type

conserveParticle = 'conserveParticle'
conserveEnergy = 'conserveEnergy'
conserveParticleAndEnergy = 'conserveParticleAndEnergy'

from PoPs import IDs as IDsPoPsModule

from fudge.gnds import styles as stylesModule
from fudge.gnds import reactionSuite as reactionSuiteModule

[docs]class tempInfo : def __init__( self ) : self.dict = {} def __contains__( self, key ) : return( key in self.dict ) def __delitem__( self, key ) : del self.dict[key] def __getitem__( self, key ) : return( self.dict[key] ) def __setitem__( self, key, value ) : self.dict[key] = value
[docs] def get( self, key, default=None ): return self.dict.get( key, default )
[docs] def keys( self ) : return( self.dict.keys( ) )
[docs]class processInfo2 : def __init__( self, style, reactionSuite, flux = None, logFile = None, verbosity = 0, verbosityIndentStep = ' ', energyAccuracy = 1e-6, momentumAccuracy = 1e-3 ) : if( not( isinstance( style, stylesModule.style ) ) ) : raise TypeError( 'invalid style' ) self.__style = style if( not( isinstance( reactionSuite, reactionSuiteModule.reactionSuite ) ) ) : raise TypeError( 'invalid reactionSuite' ) self.__reactionSuite = reactionSuite self.__flux = flux self.__logFile = logFile self.__verbosity = int( verbosity ) if( not( isinstance( verbosityIndentStep, str ) ) ) : raise TypeError( 'invalid verbosityIndentStep' ) if( len( verbosityIndentStep ) != verbosityIndentStep.count( ' ' ) ) : raise ValueError( 'verbosityIndentStep must only contain the space character' ) self.__verbosityIndentStep = verbosityIndentStep self.__energyAccuracy = energyAccuracy self.__momentumAccuracy = momentumAccuracy @property def energyAccuracy( self ) : return( self.__energyAccuracy ) @property def momentumAccuracy( self ) : return( self.__momentumAccuracy ) @property def reactionSuite( self ) : return( self.__reactionSuite ) @property def style( self ) : return( self.__style ) @property def verbosityIndentStep( self ) : return( self.__verbosityIndentStep ) @property def flux( self ) : return( self.__flux ) @property def logFile( self ) : return( self.__logFile ) @property def verbosity( self ) : return( self.__verbosity )
[docs] def checkStyle( self, _class ) : if( not( issubclass( _class, stylesModule.style ) ) ) : raise TypeError( 'class not a sub-class of style' ) if( isinstance( self.style, _class ) ) : return raise TypeError( 'style %s not of style %s' % ( _class.moniker, self.style.moniker ) )
[docs]class processInfo : def __init__( self, target, particles = None, flux = None, logFile = None, verbosity = 0 ) : self.target = target self.dict = {} self['particles'] = {} if( not( particles is None ) ) : for name in particles : self.addParticle( particles[name] ) if( not flux is None ) : self['flux'] = flux self['verbosityIndent'] = '' self['verbosity'] = verbosity self['logFile'] = logFile def __getitem__( self, key ) : return( self.dict[key] ) def __setitem__( self, key, value ) : self.dict[key] = value
[docs] def addParticle( self, particle ) : self['particles'][particle.id] = particle
[docs] def getParticleGroups( self, name ) : return( self['particles'][name].groups )
[docs] def getParticle_lMax( self, name ) : return( self['particles'][name].lMax )
[docs] def getProjectileName( self ) : return( self.target.projectile.pid )
[docs] def getTargetName( self ) : return( self.target.target.pid )
[docs] def isProcessParticle( self, name ) : return( name in self['particles'] )
[docs] def process( self, verbosity = None, verbosityIndent = None ) : verbositySave = self['verbosity'] if( not ( verbosity is None ) ) : self['verbosity'] = verbosity if( verbosityIndent is None ) : verbosityIndent = self['verbosityIndent'] doRaise = False try : self.target.process( self, verbosityIndent ) except : doRaise = True self['verbosity'] = verbositySave if( doRaise ) : raise
[docs]class processInfoParticle : def __init__( self, name, groups, lMax, conservationFlag = conserveParticle ) : self.pid = name self.groups = groups self.lMax = lMax self.conservationFlag = conservationFlag def __repr__( self ) : s = '\n%s %s %s\n' % ( self.pid, self.lMax, self.conservationFlag ) s += `self.groups` return( s )
[docs]class processInfoLLNL( processInfo ) : def __init__( self, target, groups = None, flux = None, LLNL_Pn = True, lMax = 3, logFile = None, verbosity = 0 ) : particles = {} for particle in groups : lMax_ = 0 if( particle == target.projectile.pid ) : lMax_ = lMax conservationFlag = conserveParticleAndEnergy if( particle == 'n' ) : conservationFlag = conserveParticle if( particle == IDsPoPsModule.photon ) : conservationFlag = conserveEnergy particles[particle] = processInfoParticle( particle, groups[particle], lMax_, conservationFlag ) processInfo.__init__( self, target, particles, flux = flux, logFile = logFile, verbosity = verbosity ) self['workDir'] = 'xndfgen.work' styles = [] if( LLNL_Pn ) : styles.append( 'LLNL_Pn' ) self['styles'] = styles