Changeset 1232 for trunk/src


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

Merge from Release2.1.0b tag

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • 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.