Source code for fudge.gnds.covariances.distributions

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

from xData.ancestry import ancestry
from fudge.gnds import suites as suitesModule
from . import mixed, covarianceMatrix

"""Special classes for storing covariances for product distributions."""

__metaclass__ = type

[docs]class LegendreOrderCovarianceForm( ancestry ): """ Stores covariance between energy-dependent Legendre coefficients for a reaction. This class contains one or more LegendreLValue sections, each section containing the matrix between a pair of L-values """ moniker = 'LegendreOrderCovariance' def __init__(self, label = None, lvalues=None): ancestry.__init__( self ) self.__label = label self.lvalues = lvalues or [] #: the l values of course def __getitem__(self, index): return self.lvalues[index] @property def label( self ) : return( self.__label )
[docs] def addLegendreOrder( self, LValue ): LValue.setAncestor( self ) self.lvalues.append( LValue )
[docs] def check( self, info ): from fudge.gnds import warning warnings = [] for Lvalue in self: Lvalue_warnings = Lvalue.check( info ) if Lvalue_warnings: warnings.append( warning.context( '%s L=%i vs %i' % (Lvalue.moniker,Lvalue.L1,Lvalue.L2), Lvalue_warnings ) ) return warnings
[docs] def convertUnits( self, unitMap ): for lvalue in self: lvalue.convertUnits( unitMap )
[docs] def fix( self, **kw ): return []
[docs] def toXMLList( self, indent = '', **kwargs ) : indent2 = indent + kwargs.get( 'incrementalIndent', ' ' ) xmlString = [ '%s<%s label="%s">' % ( indent, self.moniker, self.label ) ] for lvalue in self.lvalues : xmlString += lvalue.toXMLList( indent2, **kwargs ) xmlString[-1] += '</%s>' % self.moniker return xmlString
[docs] @classmethod def parseXMLNode( cls, element, xPath, linkData ): xPath.append( element.tag ) form = LegendreOrderCovarianceForm( label = element.get( "label" ) ) # add L's to each component: for lValue in element: form.addLegendreOrder( LegendreLValue.parseXMLNode( lValue, xPath, linkData ) ) xPath.pop() return form
[docs]class LegendreLValue( suitesModule.suite ): """ Represents one subsection of the Legendre coefficient covariance matrix: covariance between coefficients for two Legendre orders at various energies """ moniker = 'LegendreLValue' def __init__(self, L1, L2, frame): suitesModule.suite.__init__( self, [covarianceMatrix, mixed.mixedForm] ) self.L1 = L1 #: self.L2 = L2 #: self.frame = frame #:
[docs] def check( self, info ): warnings = [] if self.L1 == self.L2: for form in self: warnings += form.check( info ) # FIXME what about cross-terms between L-values? return warnings
[docs] def fix( self, **kw ): return []
[docs] def toXMLList( self, indent = '', **kwargs ) : indent2 = indent + kwargs.get( 'incrementalIndent', ' ' ) xmlString = [ '%s<%s L1="%i" L2="%i" frame="%s">' % ( indent, self.moniker, self.L1, self.L2, self.frame ) ] for form in self: xmlString += form.toXMLList( indent2, **kwargs ) xmlString[-1] += '</%s>' % self.moniker return xmlString
[docs] @classmethod def parseXMLNode( cls, element, xPath, linkData ): xPath.append( element.tag ) component = LegendreLValue( int(element.get("L1")), int(element.get("L2")), element.get("frame") ) for form in element: formCls = { covarianceMatrix.moniker: covarianceMatrix, mixed.mixedForm.moniker: mixed.mixedForm }.get( form.tag ) if formCls is None: raise TypeError("Encountered unknown covariance type '%s'" % form.tag) component.add( formCls.parseXMLNode( form, xPath, linkData ) ) xPath.pop() return component