예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
0
    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