Changeset 1232 for trunk


Ignore:
Timestamp:
09/01/06 13:14:11 (18 years ago)
Author:
mar637
Message:

Merge from Release2.1.0b tag

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/SConstruct

    r1202 r1232  
    7676    env = conf.Finish()
    7777
    78 env["version"] = "2.1.0b"
     78env["version"] = "2.1.0b1"
    7979
    8080# general CPPFLAGS
  • trunk/bin/install

    r1210 r1232  
    2929    for l in p.readlines():
    3030        lsp = l.split()
    31         if lsp[2] == "not":
    32             unresolved.append(lsp[0])
    33         else:
    34             resolved.append(lsp[2])
     31        # test this to avoid fails on linux_gate, which has no library
     32        if len(lsp) >= 3:
     33            if lsp[2] == "not":
     34                unresolved.append(lsp[0])
     35            else:
     36                resolved.append(lsp[2])
    3537    return resolved, unresolved
    3638
     
    7981        print "   All required libraries are present."
    8082except IOError,msg:
    81     print msg+" Skipping test."
     83    print "Skipping test. (%s)" % msg
    8284
    8385print 'Looking for dependent python modules...'
  • trunk/python/asapfit.py

    r974 r1232  
    5555                  }
    5656            comp.append(d)
     57            k+=1
    5758        out.append(comp)
    5859        return out
     60
     61    def save(self, filename):
     62        f = file(filename, 'w')
     63        parstr = ""
     64        for i in xrange(self.getcomponents()[0]):
     65            pname = "P%d"% (i)
     66            parstr += "%-12s " % (pname)
     67        header = "#%-12s %s\n" % ("Function", parstr)
     68        f.write(header)
     69        i = 0
     70        funcs=self.getfunctions()
     71        pars=self.getparameters()
     72        for c in self.getcomponents():
     73            line = " %-12s " % (funcs[i])
     74            for j in xrange(c):
     75                line += "%3.8f " % (pars[i*c+j])
     76            i+=1
     77            f.write(line+"\n")
     78        f.close()
    5979
    6080    def _format_pars(self, pars, ftype, unit):
     
    6383            i = 0
    6484            for p in pars:
    65                 out += ' p%d = %3.3f %s,' % (i,p,unit)
     85                out += ' p%d = %3.6f %s,' % (i,p,unit)
    6686                i+=1
    6787            out = out[1:-1]
    6888        elif ftype == 'gauss':
    69             out += 'peak = %3.3f , centre = %3.3f %s, FWHM = %3.3f %s' % (pars[0],pars[1],unit,pars[2],unit)
     89            out += 'peak = %3.6f , centre = %3.6f %s, FWHM = %3.6f %s' % (pars[0],pars[1],unit,pars[2],unit)
    7090        return out
  • trunk/python/asapfitter.py

    r1217 r1232  
    100100
    101101        self.fitter.setexpression(self.fitfunc,n)
     102        self.fitted = False
    102103        return
    103104
     
    142143                self.fitter.estimate()
    143144        try:
     145            fxdpar = list(self.fitter.getfixedparameters())
     146            if len(fxdpar) and fxdpar.count(0) == 0:
     147                 raise RuntimeError,"No point fitting, if all parameters are fixed."
    144148            converged = self.fitter.fit()
    145149            if not converged:
     
    155159        return
    156160
    157     def store_fit(self):
    158         """
    159         Store the fit parameters in the scantable.
     161    def store_fit(self, filename=None):
     162        """
     163        Save the fit parameters.
     164        Parameters:
     165            filename:    if specified save as an ASCII file, if None (default)
     166                         store it in the scnatable
    160167        """
    161168        if self.fitted and self.data is not None:
     
    169176            fit.setcomponents(self.components)
    170177            fit.setframeinfo(self.data._getcoordinfo())
    171             self.data._addfit(fit,self._fittedrow)
     178            if filename is not None:
     179                import os
     180                filename = os.path.expandvars(os.path.expanduser(filename))
     181                if os.path.exists(filename):
     182                    raise IOError("File '%s' exists." % filename)
     183                fit.save(filename)
     184            else:
     185                self.data._addfit(fit,self._fittedrow)
    172186
    173187    #def set_parameters(self, params, fixed=None, component=None):
     
    224238        Set the Parameters of a 'Gaussian' component, set with set_function.
    225239        Parameters:
    226             peak, centre, fhwm:  The gaussian parameters
     240            peak, centre, fwhm:  The gaussian parameters
    227241            peakfixed,
    228242            centerfixed,
     
    352366            for i in range(len(pars)):
    353367                fix = ""
    354                 if fixed[i]: fix = "(fixed)"
     368                if len(fixed) and fixed[i]: fix = "(fixed)"
    355369                if errors :
    356370                    out += '  p%d%s= %3.6f (%1.6f),' % (c,fix,pars[i], errors[i])
  • trunk/python/asapmath.py

    r1085 r1232  
    1212        scanav:   True averages each scan separately.
    1313                  False (default) averages all scans together,
    14         weight:   Weighting scheme. 'none, 'var' (1/var(spec)
    15                   weighted), 'tsys' (1/Tsys**2 weighted), 'tint'
    16                   (integration time weighted) or 'tintsys' (Tsys
    17                   and tint). The default is 'tint'
     14        weight:   Weighting scheme.
     15                    'none'     (mean no weight)
     16                    'var'      (1/var(spec) weighted)
     17                    'tsys'     (1/Tsys**2 weighted)
     18                    'tint'     (integration time weighted)
     19                    'tintsys'  (Tint/Tsys**2)
     20                    'median'   ( median averaging)
    1821        align:    align the spectra in velocity before averaging. It takes
    1922                  the time of the first spectrum in the first scantable
     
    7073    else:
    7174        alignedlst = lst
    72     s = scantable(stm._average(alignedlst, mask, weight.upper(), scanav))
     75    if weight.upper() == 'MEDIAN':
     76        # median doesn't support list of scantables - merge first
     77        merged = None
     78        if len(alignedlst) > 1:
     79            merged = merge(alignedlst)
     80        else:
     81            merged = alignedlst[0]
     82        s = scantable(stm._averagechannel(merged, 'MEDIAN', scanav))
     83        del merged
     84    else:
     85        s = scantable(stm._average(alignedlst, mask, weight.upper(), scanav))
    7386    s._add_history("average_time",varlist)
    7487    print_log()
  • trunk/python/asapplotter.py

    r1217 r1232  
    123123        del self._plotter.axes.patches[-1]
    124124    axvspan. __doc__ = matplotlib.axes.Axes.axvspan.__doc__
     125
    125126    def axhspan(self, *args, **kwargs):
    126         self._axes_callback("ahvspan", *args, **kwargs)
     127        self._axes_callback("axhspan", *args, **kwargs)
    127128        # hack to preventy mpl from redrawing the patch
    128129        # it seem to convert the patch into lines on every draw.
  • trunk/src/STFitter.cpp

    r1067 r1232  
    6464  funcs_.resize(0,True);
    6565  parameters_.resize();
     66  fixedpar_.resize();
    6667  error_.resize();
    6768  thefit_.resize();
     
    205206    if (parameters_.nelements() > 0 && tmppar.nelements() != parameters_.nelements())
    206207        throw (AipsError("Number of parameters inconsistent with function."));
    207     if (parameters_.nelements() == 0)
     208    if (parameters_.nelements() == 0) {
    208209        parameters_.resize(tmppar.nelements());
    209         fixedpar_.resize(tmppar.nelements());
    210         fixedpar_ = False;
     210        if (tmppar.nelements() != fixedpar_.nelements()) {
     211            fixedpar_.resize(tmppar.nelements());
     212            fixedpar_ = False;
     213        }
     214    }
    211215    if (dynamic_cast<Gaussian1D<Float>* >(funcs_[0]) != 0) {
    212216        uInt count = 0;
     
    224228        }
    225229    }
     230    // reset
     231    if (params.size() == 0) {
     232        parameters_.resize();
     233        fixedpar_.resize();
     234    }
    226235    return true;
    227236}
     
    229238bool Fitter::setFixedParameters(std::vector<bool> fixed)
    230239{
    231     Vector<Bool> tmp(fixed);
    232240    if (funcs_.nelements() == 0)
    233241        throw (AipsError("Function not yet set."));
    234     if (fixedpar_.nelements() > 0 && tmp.nelements() != fixedpar_.nelements())
     242    if (fixedpar_.nelements() > 0 && fixed.size() != fixedpar_.nelements())
    235243        throw (AipsError("Number of mask elements inconsistent with function."));
     244    if (fixedpar_.nelements() == 0) {
     245        fixedpar_.resize(parameters_.nelements());
     246        fixedpar_ = False;
     247    }
    236248    if (dynamic_cast<Gaussian1D<Float>* >(funcs_[0]) != 0) {
    237249        uInt count = 0;
    238250        for (uInt j=0; j < funcs_.nelements(); ++j) {
    239251            for (uInt i=0; i < funcs_[j]->nparameters(); ++i) {
    240                 funcs_[j]->mask(i) = !tmp[count];
    241                 fixedpar_[count] = !tmp[count];
     252                funcs_[j]->mask(i) = !fixed[count];
     253                fixedpar_[count] = fixed[count];
    242254                ++count;
    243255            }
     
    245257    } else if (dynamic_cast<Polynomial<Float>* >(funcs_[0]) != 0) {
    246258        for (uInt i=0; i < funcs_[0]->nparameters(); ++i) {
    247             fixedpar_[i] = tmp[i];
    248             funcs_[0]->mask(i) =  tmp[i];
    249         }
    250     }
    251     //fixedpar_ = !tmpmsk;
     259            fixedpar_[i] = fixed[i];
     260            funcs_[0]->mask(i) =  !fixed[i];
     261        }
     262    }
    252263    return true;
    253264}
     
    263274  Vector<Bool> out(parameters_.nelements());
    264275  if (fixedpar_.nelements() == 0) {
    265     out = False;
     276    return std::vector<bool>();
    266277    //throw (AipsError("No parameter mask set."));
    267278  } else {
     
    312323  residual_ =  y_;
    313324  fitter.residual(residual_,x_);
    314 
    315325  // use fitter.residual(model=True) to get the model
    316326  thefit_.resize(x_.nelements());
  • trunk/src/STMath.cpp

    r1203 r1232  
    211211  ArrayColumn<Float> tsysColOut(tout,"TSYS");
    212212  ScalarColumn<uInt> scanColOut(tout,"SCANNO");
     213  ScalarColumn<Double> intColOut(tout, "INTERVAL");
    213214  Table tmp = in->table().sort("BEAMNO");
    214215  Block<String> cols(3);
     
    227228    ROArrayColumn<Float> specCol, tsysCol;
    228229    ROArrayColumn<uChar> flagCol;
     230    ROScalarColumn<Double> intCol(subt, "INTERVAL");
    229231    specCol.attach(subt,"SPECTRA");
    230232    flagCol.attach(subt,"FLAGTRA");
     
    255257    flagColOut.put(outrowCount, outflag);
    256258    tsysColOut.put(outrowCount, outtsys);
    257 
     259    Double intsum = sum(intCol.getColumn());
     260    intColOut.put(outrowCount, intsum);
    258261    ++outrowCount;
    259262    ++iter;
     
    11261129                                const std::string& weight )
    11271130{
    1128   if (in->getPolType() != "linear"  || in->npol() != 2 )
    1129     throw(AipsError("averagePolarisations can only be applied to two linear polarisations."));
     1131  if (in->npol() < 2 )
     1132    throw(AipsError("averagePolarisations can only be applied to two or more"
     1133                    "polarisations"));
    11301134  bool insitu = insitu_;
    11311135  setInsitu(false);
    1132   CountedPtr< Scantable > pols = getScantable(in, false);
     1136  CountedPtr< Scantable > pols = getScantable(in, true);
    11331137  setInsitu(insitu);
    11341138  Table& tout = pols->table();
    1135   // give all rows the same POLNO
     1139  std::string taql = "SELECT FROM $1 WHERE POLNO IN [0,1]";
     1140  Table tab = tableCommand(taql, in->table());
     1141  if (tab.nrow() == 0 )
     1142    throw(AipsError("Could not find  any rows with POLNO==0 and POLNO==1"));
     1143  TableCopy::copyRows(tout, tab);
    11361144  TableVector<uInt> vec(tout, "POLNO");
    11371145  vec = 0;
    11381146  pols->table_.rwKeywordSet().define("nPol", Int(1));
     1147  pols->table_.rwKeywordSet().define("POLTYPE", String("stokes"));
    11391148  std::vector<CountedPtr<Scantable> > vpols;
    11401149  vpols.push_back(pols);
    1141   CountedPtr< Scantable > out = average(vpols, mask, weight, "NONE");
     1150  CountedPtr< Scantable > out = average(vpols, mask, weight, "SCAN");
    11421151  return out;
    11431152}
     
    11591168  std::vector<CountedPtr<Scantable> > vbeams;
    11601169  vbeams.push_back(beams);
    1161   CountedPtr< Scantable > out = average(vbeams, mask, weight, "NONE");
     1170  CountedPtr< Scantable > out = average(vbeams, mask, weight, "SCAN");
    11621171  return out;
    11631172}
Note: See TracChangeset for help on using the changeset viewer.