source: trunk/src/RowAccumulator.h @ 2580

Last change on this file since 2580 was 2580, checked in by ShinnosukeKawakami, 12 years ago

hpc33 merged asap-trunk

File size: 4.4 KB
RevLine 
[814]1//
2// C++ Interface: RowAccumulator
3//
4// Description:
5//
6//
7// Author: Malte Marquarding <Malte.Marquarding@csiro.au>, (C) 2005
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
[1114]12#ifndef ASAPROWACCUMULATOR_H
13#define ASAPROWACCUMULATOR_H
[814]14
[2125]15#include <math.h>
[814]16#include <casa/aips.h>
17#include <casa/Arrays/Vector.h>
18#include <casa/Arrays/MaskedArray.h>
[831]19#include "STDefs.h"
[814]20
21namespace asap {
[1104]22/**
23  * This class accumulates spectra and weights and returns the averaged data
24  * @brief Class for averaging of spectra
25  * @author Malte Marquarding
26  * @date $Date:$
27  * @version
28  */
[814]29class RowAccumulator {
30
31public:
32
[1104]33  /**
34   * Constructor taking a weight type as defined in @ref STDefs
35   */
[1569]36  explicit RowAccumulator(WeightType wt = asap::W_NONE);
[814]37
38 ~RowAccumulator();
39
[1114]40  /**
41    * add a new "row" to the accumulator
42    * @param v the spectrum
43    * @param m the mask for the spectrum
44    * @param tsys the Tsys corresponing to the spectrum
45    * @param interval the intergration time
[1295]46    * @param time the time of the observation
[1114]47    */
[814]48  void add(const casa::Vector<casa::Float>& v,
49           const casa::Vector<casa::Bool>& m,
50           const casa::Vector<casa::Float>& tsys,
[2125]51           const casa::Double interval,
52           const casa::Double time);
[1114]53  /**
54    * Also set a user mask which get combined with the individual masks
55    * from the spectra
56    * @param m a boolean mask of teh same length as the spectrum
57    */
[814]58  void setUserMask(const casa::Vector<casa::Bool>& m);
[1114]59  /**
60    * Get the spectrum. Applies the normalisation (averaging)
61    * @return the spectrum vector
62    */
[814]63  casa::Vector<casa::Float> getSpectrum() const;
[1114]64  /**
65    * Get the Tsys. Applies the normalisation (averaging)
66    * @return the Tsys vector
67    */
[814]68  casa::Vector<casa::Float> getTsys() const;
[1114]69  /**
70    * Get the spectrum's mask. Applies the normalisation (averaging)
71    * @return the mask vector
72    */
[814]73  casa::Vector<casa::Bool> getMask() const;
[1114]74  /**
75    * Get the total interval.
76    * @return the integration time
77    */
[814]78  casa::Double getInterval() const;
[1114]79  /**
80    * Get the time of the observation. Retrieves the "mean" time.
81    * @return the integration time
82    */
[814]83  casa::Double getTime() const;
[1114]84  /**
85    * Reset the acummulator to the state at construction.
86    */
[2125]87  void reset(const casa::uInt size=0, const casa::uInt tsysSize=0);
88  void initialize(const casa::uInt size, const casa::uInt tsysSize);
[1819]89  /**
90    * check the initialization state
91    */
92  casa::Bool state() const;
[2125]93  /**
94    * replace NaN values with (normal) values at the same channels in the given spetrum.
95    * (CAS-2776; 2011/04/07 by Wataru Kawasaki)
96    */
97  void replaceNaN();
[814]98
99private:
[2125]100  void addSpectrum(const casa::Vector<casa::Float>& v,
101                   const casa::Vector<casa::Bool>& m,
102                   const casa::Vector<casa::Float>& tsys,
103                   const casa::Double interval,
104                   const casa::Double time);
105  void doAddSpectrum(const casa::Vector<casa::Float>& v,
106                     const casa::Vector<casa::Bool>& m,
107                     const casa::Vector<casa::Float>& tsys,
108                     const casa::Double interval,
109                     const casa::Double time,
[2141]110                     const casa::Bool inverseMask);
[2580]111  void doAddSpectrum2(const casa::Vector<casa::Float>& v,
112                      const casa::Vector<casa::Bool>& m,
113                      const casa::Vector<casa::Float>& tsys,
114                      const casa::Double interval,
115                      const casa::Double time);
[2125]116  casa::Float getTotalWeight(const casa::MaskedArray<casa::Float>& data,
117                             const casa::Vector<casa::Float>& tsys,
118                             const casa::Double interval,
119                             const casa::Double time,
[2141]120                             const casa::Bool inverseMask);
121  casa::Float addTsys(const casa::Vector<casa::Float>& v, casa::Bool inverseMask);
122  casa::Float addInterval(casa::Double inter, casa::Bool inverseMask);
123  void addTime(casa::Double t, casa::Bool inverseMask);
[814]124
125  WeightType weightType_;
126  casa::Bool initialized_;
[1104]127  //these are Vectors
[814]128  casa::MaskedArray<casa::Float> spectrum_;
[1398]129  casa::MaskedArray<casa::Float> weightSum_;
130  casa::MaskedArray<casa::uInt> n_;
[814]131
[2125]132  //these three are used for normalise() (CAS-2776; 2011/04/07 by WK)
133  casa::MaskedArray<casa::Float> spectrumNoMask_;
134  casa::MaskedArray<casa::Float> weightSumNoMask_;
135  casa::MaskedArray<casa::uInt> nNoMask_;
136
[814]137  casa::Vector<casa::Bool> userMask_;
138
[2125]139  casa::Vector<casa::Float> tsysSum_, tsysSumNoMask_;
140  casa::Double timeSum_, timeSumNoMask_;
141  casa::Double intervalSum_, intervalSumNoMask_;
[814]142};
143
144}
[1114]145#endif
Note: See TracBrowser for help on using the repository browser.