def setHistogram(self, hist): hist = af.string2nestlist(hist) jj = 0 for ii in hist: if len(ii) == 1: self._Histogram.append([ii[0], 'Histogram_%s.png' % ii[0]]) elif len(ii) == 2: self._Histogram.append([ii[0], '%s.png' % ii[1]]) self._FigNames.append(self._Histogram[jj][1]) jj += 1
def setScatter(self, scatter): scatter = af.string2nestlist(scatter) jj = 0 for ii in scatter: if len(ii) == 2: self._Scatter.append( [ii[0], ii[1], 'Scatter_%s_%s.png' % (ii[0], ii[1])]) elif len(ii) == 3: self._Scatter.append([ii[0], ii[1], '%s.png' % ii[2]]) self._FigNames.append(self._Scatter[jj][2]) jj += 1
def setContour(self, Contour): Contour = af.string2nestlist(Contour) jj = 0 for ii in Contour: if len(ii) == 3: self._Contour.append([ ii[0], ii[1], ii[2], 'Contour_%s_%s_%s.png' % (ii[0], ii[1], ii[2]) ]) elif len(ii) == 4: self._Contour.append([ii[0], ii[1], ii[2], '%s.png' % ii[3]]) self._FigNames.append(self._Contour[jj][3]) jj += 1
def setColor(self, color): color = af.string2nestlist(color) jj = 0 for ii in color: if len(ii) == 3: self._Color.append([ ii[0], ii[1], ii[2], 'Color_%s_%s_%s.png' % (ii[0], ii[1], ii[2]) ]) elif len(ii) == 4: self._Color.append([ii[0], ii[1], ii[2], '%s.png' % ii[3]]) self._FigNames.append(self._Color[jj][3]) jj += 1
def setFreeFormChi2(self, var): var = af.string2nestlist(var) af.Info('FreeFormChi2:') for ii in var: if len(ii) in [1, 2]: if len(ii) == 1: jj = ii + ['FreeFormChi2_%s' % ii[0]] else: jj = ii self._FreeFormChi2.append(jj) af.Info(' varID= %s\tName= %s' % (jj[0], jj[1])) self.Chi2[jj[1]] = af.NaN else: af.ErrorStop( 'The "FreeFormChi2" constraint on "%s" need 1 item or 2 items( VarID [, Name] ).' % (ii[0])) self.Chi2 = af.sortDic(self.Chi2)
def setGaussian(self, var): var = af.string2nestlist(var) af.Info('Gaussian Constraint:') for ii in var: if len(ii) in [3]: jj = ii + ['symm', 'Gaussian_%s' % ii[0]] self._Gaussian.append(jj) self.Chi2[jj[4]] = af.NaN af.Info( ' varID= %s\tMean= %e\tDeviation= %e\tType= %s\tName= %s' % (jj[0], jj[1], jj[2], jj[3], jj[4])) elif len(ii) in [4, 5]: if not ii[3].lower() in ['symm', 'lower', 'upper']: af.ErrorStop( 'For the "Gaussian" constraint on "%s", the "Type" can only be "symm", "upper" or "lower", not "%s".' % (ii[0], ii[3])) ## new 20180428 liang if len(ii) == 4: jj = ii + ['Gaussian_%s' % ii[0]] else: jj = ii self._Gaussian.append(jj) self.Chi2[jj[4]] = af.NaN af.Info( ' varID= %s\tMean= %e\tDeviation= %e\tType= %s\tName= %s' % (jj[0], jj[1], jj[2], jj[3], jj[4])) else: af.ErrorStop( 'The "Gaussian" constraint on "%s" need 4 or 5 items( ID, Mean, Deviation, Type [, Name] ).' % (ii[0])) ## new 20180428 liang self.Chi2 = af.sortDic(self.Chi2)
def setInputPar(self, inputvar): inputvar = af.string2nestlist(inputvar) # inputvar is list of list of input parameters define in section [scan] af.Info('Input parameters = ') for ii in inputvar: lenii = len(ii) if self._ScanMethod == af._postprocess: self.InPar[ii[0]] = af.NaN self.AllPar[ii[0]] = af.NaN af.Info(' ID= %s, read from previous '%(ii[0])) continue if lenii < 3 : af.ErrorStop(self.InputCheck(ii[0], 3, "Value")) # Set fixed par if ii[1].upper() == "FIXED": if lenii > 3 : af.WarningNoWait(self.InputCheck(ii[0], 3, "Value")) af.WarningWait("The rest %i values will be ignore."%(lenii-3) ) af.Info(' ID= %s\tPrior= %s\t =%f'%(ii[0],ii[1],ii[2])) self.FixedPar[ii[0]] = ii[2] self.AllPar[ii[0]] = ii[2] continue # Initialize other input par to NaN self.InputPar[ii[0]] = ii self.InPar[ii[0]] = af.NaN self.AllPar[ii[0]] = af.NaN if lenii < 4 : af.ErrorStop(self.InputCheck(ii[0], 4, "Minimum, Maximum")) if self._ScanMethod in [af._random, af._multinest]: if lenii > 4 : af.WarningNoWait(self.InputCheck(ii[0], 4, "Minimum, Maximum")) af.WarningWait("The rest %i values will be ignore."%(lenii-4) ) af.Info(' ID= %s\tPrior= %s\tMin= %f\tMax= %f'%(ii[0],ii[1],ii[2],ii[3])) continue if self._ScanMethod == af._grid: if lenii == 4: self.GridBin[ii[0]]=20 af.WarningNoWait(self.InputCheck(ii[0], 5, "Minimum, Maximum, Number of bins")) af.WarningWait("'Number of bins' will take default value, 20.") else: self.GridBin[ii[0]]=ii[4] if self.GridBin[ii[0]] < 0 or type(ii[4]) != int: af.WarningNoWait(InputCheck(ii[0], 5, "Minimum, Maximum, Number of bins")) af.ErrorStop("'Number of bins' is not a positive integer.") if lenii> 5: af.WarningNoWait(self.InputCheck(ii[0], 5, "Minimum, Maximum, Number of bins")) af.WarningWait("The rest %i values will be ignore."%(lenii-5) ) af.Info(' ID= %s\tPrior= %s\tMin= %f\tMax= %f\tNbin=%i'%(ii[0],ii[1],ii[2],ii[3],self.GridBin[ii[0]])) continue if self._ScanMethod == af._mcmc: if lenii < 6: af.WarningNoWait(self.InputCheck(ii[0], 6, "Minimum, Maximum, Interval, Initial value")) self.MCMCiv[ii[0]] = 1./2. IniV = float(ii[3]+ii[2])/2. af.WarningWait("'Initial value' will take default value, (Max-Min)/2.") if lenii < 5: self.MCMCss[ii[0]] = 1./30. Step = float(ii[3]-ii[2])/30. af.WarningWait("'Interval' will take default value, (Max-Min)/30.") else: # The scan range is normalized to 1 self.MCMCss[ii[0]] = 1.0/float(ii[4]) Step = float(ii[3]-ii[2])/float(ii[4]) if ii[1].lower() == 'flat': self.MCMCiv[ii[0]] = float(ii[5]-ii[2])/float(ii[3]-ii[2]) elif ii[1].lower() == 'log': self.MCMCiv[ii[0]] = (log10(ii[5])-log10(ii[2]))/(log10(ii[3]) - log10(ii[2])) IniV = ii[5] if lenii > 6: af.WarningNoWait(self.InputCheck(ii[0], 6, "Minimum, Maximum, Interval, Initial value")) af.WarningWait("The rest %i values will be ignore."%(lenii-6) ) af.Info(' ID= %s\tPrior= %s\tMin= %f\tMax= %f\tStep=%f\tIniV=%f'%(ii[0],ii[1],ii[2],ii[3],Step,self.MCMCiv[ii[0]])) continue