Exemplo n.º 1
0
 def __addParameter(self, extrapars, extraparerrors, parnames, ndata,
                    ncorrsyst, errorkey, parindxmaps, ierr):
     extrapars.append(0.0)
     extraparerrors.append(1.0)
     parnames.append(stripLeadingDigits(errorkey))
     indxmap = {}
     for ival in range(ndata):
         indxmap[ival] = ncorrsyst
     parindxmaps[ierr] = indxmap
     return
Exemplo n.º 2
0
 def __addParameter( self, extrapars, extraparerrors, parnames,
                     ndata, ncorrsyst, errorkey, parindxmaps, ierr ):
     extrapars.append( 0.0 )
     extraparerrors.append( 1.0 )
     parnames.append( stripLeadingDigits( errorkey ) )
     indxmap= {}
     for ival in range( ndata ):
         indxmap[ival]= ncorrsyst
     parindxmaps[ierr]= indxmap
     return
Exemplo n.º 3
0
    def __createExtraPars(self):
        dataparser = self._getDataparser()
        herrors = dataparser.getErrors()
        correlations = dataparser.getCorrelations()
        hcovopt = dataparser.getCovoption()
        extrapars = []
        extraparerrors = []
        extraparnames = []
        errorkeys = sorted(herrors.keys())
        ncorrsyst = 0
        parindxmaps = {}
        for errorkey in errorkeys:
            ierr = errorkeys.index(errorkey)
            errlist = herrors[errorkey]
            ndata = len(errlist)
            covopt = hcovopt[errorkey]
            # Fully or globally partially correlated:
            # add measured pseudo-parameter:
            if ("f" in covopt or "gp" in covopt):
                self.__addParameter(extrapars, extraparerrors, extraparnames,
                                    ndata, ncorrsyst, errorkey, parindxmaps,
                                    ierr)
                ncorrsyst += 1
            # Get correlations from matrix, add measured pseudo-
            # parameter for each independent group of variables as
            # detected by equal matrix row patterns.
            elif "m" in covopt:
                covoptlist = correlations[errorkey]
                nsq = len(covoptlist)
                dim = int(sqrt(nsq))
                covoptmatrix = [
                    covoptlist[dim * i:dim * (i + 1)] for i in range(dim)
                ]
                if (("f" in covoptlist or "gp" in covoptlist)
                        and not "p" in covoptlist):
                    rowpatterns = []
                    indxmap = {}
                    for row in covoptmatrix:
                        if row not in rowpatterns:
                            rowpatterns.append(row)
                            extrapars.append(0.0)
                            extraparerrors.append(1.0)
                            extraparname = stripLeadingDigits(errorkey)
                            valuenumbers = ""
                            for icovopt in range(len(row)):
                                if "f" in row[icovopt] or "gp" in row[icovopt]:
                                    indxmap[icovopt] = ncorrsyst
                                    valuenumbers += str(icovopt)
                            if len(valuenumbers) > 0:
                                extraparname += "_" + valuenumbers
                            extraparnames.append(extraparname)
                            ncorrsyst += 1
                    parindxmaps[ierr] = indxmap

        return extrapars, extraparerrors, extraparnames, parindxmaps, errorkeys
Exemplo n.º 4
0
    def __createExtraPars( self ):
        dataparser= self._getDataparser()
        herrors= dataparser.getErrors()
        correlations= dataparser.getCorrelations()
        hcovopt= dataparser.getCovoption()
        extrapars= []
        extraparerrors= []
        extraparnames= []
        errorkeys= sorted( herrors.keys() )
        ncorrsyst= 0
        parindxmaps= {}
        for errorkey in errorkeys:
            ierr= errorkeys.index( errorkey )
            errlist= herrors[errorkey]
            ndata= len(errlist)
            covopt= hcovopt[errorkey]
            # Fully or globally partially correlated: 
            # add measured pseudo-parameter:
            if( "f" in covopt or "gp" in covopt ):
                self.__addParameter( extrapars, extraparerrors, extraparnames,
                                     ndata, ncorrsyst, errorkey, 
                                     parindxmaps, ierr )
                ncorrsyst+= 1
            # Get correlations from matrix, add measured pseudo-
            # parameter for each independent group of variables as
            # detected by equal matrix row patterns.  
            elif "m" in covopt:
                covoptlist= correlations[errorkey]
                nsq= len(covoptlist)
                dim= int(sqrt(nsq))
                covoptmatrix= [ covoptlist[dim*i:dim*(i+1)] 
                                for i in range(dim) ]
                if( ( "f" in covoptlist or "gp" in covoptlist ) and 
                    not "p" in covoptlist ):
                    rowpatterns= []
                    indxmap= {}
                    for row in covoptmatrix:
                        if row not in rowpatterns:
                            rowpatterns.append( row )
                            extrapars.append( 0.0 )
                            extraparerrors.append( 1.0 )
                            extraparname= stripLeadingDigits( errorkey )
                            valuenumbers= ""
                            for icovopt in range(len(row)):
                                if "f" in row[icovopt] or "gp" in row[icovopt]:
                                    indxmap[icovopt]= ncorrsyst
                                    valuenumbers+= str(icovopt)
                            if len(valuenumbers) > 0:
                                extraparname+= "_" + valuenumbers
                            extraparnames.append( extraparname )
                            ncorrsyst+= 1
                    parindxmaps[ierr]= indxmap

        return extrapars, extraparerrors, extraparnames, parindxmaps, errorkeys
Exemplo n.º 5
0
 def printInputs( self, printcovopt=False  ):
     print "\n Best Linear Unbiased Estimator average"
     self.dataparser.printInputs()
     if printcovopt:
         print "\n Covariance matrices:"
         for key in sorted( self.hcov.keys() ):
             print "{0:>10s}:".format( stripLeadingDigits( key ) )
             self.__printMatrix( self.hcov[key] )
         print "Total covariance:"
         self.__printMatrix( self.cov )
         corr= numpy.matrix( self.cov )
         for i in range( corr.shape[0] ):
             for j in range( corr.shape[1] ):
                 corr[i,j]= self.cov[i,j]/sqrt( self.cov[i,i]*self.cov[j,j] )
         print "Total correlation:"
         self.__printMatrix( corr, "6.3f" )
         print "Inverse:"
         self.__printMatrix( self.inv )
     return
Exemplo n.º 6
0
 def printInputs(self, printcovopt=False):
     print "\n Best Linear Unbiased Estimator average"
     self.dataparser.printInputs()
     if printcovopt:
         print "\n Covariance matrices:"
         for key in sorted(self.hcov.keys()):
             print "{0:>10s}:".format(stripLeadingDigits(key))
             self.__printMatrix(self.hcov[key])
         print "Total covariance:"
         self.__printMatrix(self.cov)
         corr = numpy.matrix(self.cov)
         for i in range(corr.shape[0]):
             for j in range(corr.shape[1]):
                 corr[i, j] = self.cov[i, j] / sqrt(
                     self.cov[i, i] * self.cov[j, j])
         print "Total correlation:"
         self.__printMatrix(corr, "6.3f")
         print "Inverse:"
         self.__printMatrix(self.inv)
     return
Exemplo n.º 7
0
 def printErrorsAndWeights(self, optinfo=False):
     errors, weightsmatrix = self.errorAnalysis()
     navg = weightsmatrix.shape[0]
     nval = weightsmatrix.shape[1]
     print "Error composition:"
     if optinfo and navg == 1:
         print "            +/- errors   dI/df/I offd. sums"
         hinfos, hinfosums = self.informationAnalysis(weightsmatrix)
     errorkeys = sorted(errors.keys())
     errorkeys.remove("totalcov")
     errorkeys.remove("systcov")
     for errorkey in errorkeys:
         print "{0:>10s}:".format(stripLeadingDigits(errorkey)),
         for iavg in range(navg):
             error = errors[errorkey]
             print "{0:10.4f}".format(sqrt(error[iavg, iavg])),
             if navg == 1 and optinfo and not ("syst" in errorkey
                                               or "total" in errorkey):
                 print "{0:9.3f}".format(hinfosums[errorkey]),
         print
     names = self.__dataparser.getNames()
     print "\n Variables:",
     for name in names:
         print "{0:>10s}".format(name),
     print
     groups = sorted(set(self.__dataparser.getGroups()))
     for iavg in range(navg):
         txt = "Weights"
         if navg > 1:
             txt += " " + str(groups[iavg])
         print "{0:>10s}:".format(txt),
         for ival in range(nval):
             print "{0:10.4f}".format(float(weightsmatrix[iavg, ival])),
         print
     if optinfo:
         print "  DeltaI/I:",
         totalerrors = self.__dataparser.getTotalErrors()
         for iavg in range(navg):
             if iavg > 0:
                 print "           ",
             deltaIsum = 0.0
             for ival in range(nval):
                 deltaI = errors["total"][iavg, iavg] / totalerrors[ival]**2
                 deltaIsum += deltaI
                 print "{0:10.4f}".format(deltaI),
             print "{0:10.4f}".format(1.0 - deltaIsum)
     print "     Pulls:",
     pulls = self.calcPulls()
     for ival in range(nval):
         print "{0:10.4f}".format(pulls[ival, 0]),
     print
     if navg > 1:
         print "\nCorrelations:"
         totcov = errors["total"]
         for iavg in range(navg):
             for javg in range(navg):
                 corr = totcov[iavg, javg] / sqrt(
                     totcov[iavg, iavg] * totcov[javg, javg])
                 print "{0:6.3f}".format(corr),
             print
     elif optinfo:
         print "\n dI/df/I offdiagonals per error source:"
         keys = sorted(hinfos.keys())
         #keys.remove( "01stat" )
         keys = [key for key in keys if not "stat" in key]
         for key in keys:
             print "{0:>10s}:".format(stripLeadingDigits(key))
             infom = hinfos[key]
             print "       ",
             for name in names[1:]:
                 print "{0:>7s}".format(name),
             print
             for i in range(nval - 1):
                 for j in range(nval):
                     if j == 0 and i < nval - 1:
                         print "{0:>7s}".format(names[i]),
                     elif j > i:
                         print "{0:7.4f}".format(infom[i, j]),
                     else:
                         print "       ",
                 print
             print
     return
Exemplo n.º 8
0
 def test_stripLeadingDigits(self):
     word = "01abc1"
     expectedword = "abc1"
     strippedword = stripLeadingDigits(word)
     self.assertEqual(strippedword, expectedword)
     return
Exemplo n.º 9
0
 def test_stripLeadingDigits( self ):
     word= "01abc1"
     expectedword= "abc1"
     strippedword= stripLeadingDigits( word )
     self.assertEqual( strippedword, expectedword )
     return
Exemplo n.º 10
0
 def printErrorsAndWeights( self, optinfo=False ):
     errors, weightsmatrix= self.errorAnalysis()
     navg= weightsmatrix.shape[0]
     nval= weightsmatrix.shape[1]
     print "Error composition:"
     if optinfo and navg == 1:
         print "            +/- errors   dI/df/I offd. sums"
         hinfos, hinfosums= self.informationAnalysis( weightsmatrix )
     errorkeys= sorted( errors.keys() )
     errorkeys.remove( "totalcov" )
     errorkeys.remove( "systcov" )
     for errorkey in errorkeys:
         print "{0:>10s}:".format( stripLeadingDigits( errorkey ) ),
         for iavg in range( navg ):
             error= errors[errorkey]
             print "{0:10.4f}".format( sqrt(error[iavg,iavg]) ),
             if navg == 1 and optinfo and not ( "syst" in errorkey or
                                                "total" in errorkey ):
                 print "{0:9.3f}".format( hinfosums[errorkey] ),
         print
     names= self.__dataparser.getNames()
     print "\n Variables:",
     for name in names:
         print "{0:>10s}".format( name ),
     print
     groups= sorted(set(self.__dataparser.getGroups()))
     for iavg in range( navg ):
         txt= "Weights"
         if navg > 1:
             txt+= " "+str(groups[iavg])
         print "{0:>10s}:".format( txt ),
         for ival in range( nval ):
             print "{0:10.4f}".format( float(weightsmatrix[iavg,ival]) ),
         print
     if optinfo:
         print "  DeltaI/I:",
         totalerrors= self.__dataparser.getTotalErrors()
         for iavg in range( navg ):
             if iavg > 0:
                 print "           ",
             deltaIsum= 0.0
             for ival in range( nval ):
                 deltaI= errors["total"][iavg,iavg]/totalerrors[ival]**2
                 deltaIsum+= deltaI
                 print "{0:10.4f}".format( deltaI ),
             print "{0:10.4f}".format( 1.0-deltaIsum )
     print "     Pulls:", 
     pulls= self.calcPulls()
     for ival in range( nval ):
         print "{0:10.4f}".format( pulls[ival,0] ),
     print
     if navg > 1:
         print "\nCorrelations:"
         totcov= errors["total"]
         for iavg in range( navg ):
             for javg in range( navg ):
                 corr= totcov[iavg,javg]/sqrt(totcov[iavg,iavg]*totcov[javg,javg])
                 print "{0:6.3f}".format( corr ),
             print
     elif optinfo:
         print "\n dI/df/I offdiagonals per error source:"
         keys= sorted( hinfos.keys() )
         #keys.remove( "01stat" )
         keys= [ key for key in keys if not "stat" in key ]
         for key in keys:
             print "{0:>10s}:".format( stripLeadingDigits( key ) )
             infom= hinfos[key]
             print "       ",
             for name in names[1:]:
                 print "{0:>7s}".format( name ),
             print
             for i in range( nval-1 ):
                 for j in range( nval ):
                     if j == 0 and i < nval-1:
                         print "{0:>7s}".format( names[i] ),
                     elif j > i:
                         print "{0:7.4f}".format( infom[i,j] ),
                     else:
                         print "       ",
                 print
             print
     return