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
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
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
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
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
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
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
def test_stripLeadingDigits(self): word = "01abc1" expectedword = "abc1" strippedword = stripLeadingDigits(word) self.assertEqual(strippedword, expectedword) return
def test_stripLeadingDigits( self ): word= "01abc1" expectedword= "abc1" strippedword= stripLeadingDigits( word ) self.assertEqual( strippedword, expectedword ) return
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