Changeset 315


Ignore:
Timestamp:
01/28/05 02:09:17 (19 years ago)
Author:
kil064
Message:

add arg 'weightStr' to function SDMath::averagePol

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/SDMath.cc

    r309 r315  
    809809
    810810
    811 SDMemTable* SDMath::averagePol(const SDMemTable& in, const Vector<Bool>& mask) const
     811SDMemTable* SDMath::averagePol(const SDMemTable& in, const Vector<Bool>& mask,
     812                               const String& weightStr) const
    812813//
    813814// Average all polarizations together, weighted by variance
    814815//
    815816{
    816 //   WeightType wtType = NONE;
    817 //   convertWeightString(wtType, weight);
     817   WeightType wtType = NONE;
     818   convertWeightString(wtType, weightStr);
    818819
    819820   const uInt nRows = in.nRow();
     
    832833  IPosition shapeOut(shapeIn);
    833834  shapeOut(asap::PolAxis) = 1;                          // Average all polarizations
     835  if (shapeIn(asap::PolAxis)==1) {
     836     throw(AipsError("The input has only one polarisation"));
     837  }
    834838//
    835839  const uInt nChan = shapeIn(asap::ChanAxis);
     
    874878        Vector<Bool> t2(nChan); t2 = True;
    875879        MaskedArray<Float> vecSum(t1,t2);
    876         Float varSum = 0.0;
     880        Float norm = 0.0;
    877881        {
    878882           ReadOnlyVectorIterator<Float> itDataVec(itDataPlane.array(), 1);
     
    880884           while (!itDataVec.pastEnd()) {     
    881885
    882 // Create MA of data & mask (optionally including OTF mask) and  get variance
     886// Create MA of data & mask (optionally including OTF mask) and  get variance for this spectrum
    883887
    884888              if (useMask) {
    885889                 const MaskedArray<Float> spec(itDataVec.vector(),mask&&itMaskVec.vector());
    886                  fac = 1.0 / variance(spec);
     890                 if (wtType==VAR) fac = 1.0 / variance(spec);
    887891              } else {
    888892                 const MaskedArray<Float> spec(itDataVec.vector(),itMaskVec.vector());
    889                  fac = 1.0 / variance(spec);
     893                 if (wtType==VAR) fac = 1.0 / variance(spec);
    890894              }
    891895
     
    894898              const MaskedArray<Float> spec(fac*itDataVec.vector(), itMaskVec.vector());
    895899              vecSum += spec;
    896               varSum += fac;
     900              norm += fac;
    897901
    898902// Next
     
    905909// Normalize summed spectrum
    906910
    907         vecSum /= varSum;
     911        vecSum /= norm;
    908912
    909913// FInd position in input data array.  We are iterating by pol-channel
  • trunk/src/SDMath.h

    r309 r315  
    116116
    117117// Average polarizations
    118    SDMemTable* averagePol(const SDMemTable& in, const casa::Vector<casa::Bool>& mask) const;
     118   SDMemTable* averagePol(const SDMemTable& in, const casa::Vector<casa::Bool>& mask,
     119                          const casa::String& wtStr) const;
    119120
    120121 private:
  • trunk/src/SDMathWrapper.cc

    r312 r315  
    170170
    171171void SDMathWrapper::averagePolInSitu(SDMemTableWrapper& in,
    172                                      const std::vector<bool>& mask)
     172                                     const std::vector<bool>& mask,
     173                                     const std::string& weightStr)
    173174{
    174175  SDMemTable* pIn = in.getPtr();
    175176  SDMath sdm;
    176177  Vector<Bool> tMask(mask);
    177   SDMemTable* pOut = sdm.averagePol (*pIn, tMask);
     178  SDMemTable* pOut = sdm.averagePol (*pIn, tMask, String(weightStr));
    178179  *pIn = *pOut;
    179180   delete pOut;
     
    181182
    182183SDMemTableWrapper SDMathWrapper::averagePol (const SDMemTableWrapper& in,
    183                                              const std::vector<bool>& mask)
    184 
     184                                             const std::vector<bool>& mask,
     185                                             const std::string& weightStr)
    185186{
    186187  const CountedPtr<SDMemTable>& pIn = in.getCP();
    187188  SDMath sdm;
    188189  Vector<Bool> tMask(mask);
    189   return CountedPtr<SDMemTable>(sdm.averagePol(*pIn, tMask));
     190  return CountedPtr<SDMemTable>(sdm.averagePol(*pIn, tMask, String(weightStr)));
    190191}
    191192
  • trunk/src/SDMathWrapper.h

    r312 r315  
    102102
    103103// Average polarizations
    104   void averagePolInSitu(SDMemTableWrapper& in,  const std::vector<bool>& mask);
     104  void averagePolInSitu(SDMemTableWrapper& in,  const std::vector<bool>& mask,
     105                        const std::string& weightStr);
    105106  SDMemTableWrapper averagePol(const SDMemTableWrapper& in,
    106                                const std::vector<bool>& mask);
     107                               const std::vector<bool>& mask,
     108                               const std::string& weightStr);
    107109
    108110// Statistics
Note: See TracChangeset for help on using the changeset viewer.