source: trunk/external-alma/components/SpectralComponents/SpectralEstimate.cc @ 2980

Last change on this file since 2980 was 2980, checked in by Malte Marquarding, 10 years ago

Add a copy of casacore/components/SpectralComponents to external-alma directory to prepare for its removal from casacore-trunk. DOn;t activate in SConscript yet.

File size: 5.4 KB
Line 
1//# SpectralEstimate.cc: Get an initial estimate for spectral lines
2//# Copyright (C) 2001,2002,2003,2004
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//#        Internet email: aips2-request@nrao.edu.
21//#        Postal address: AIPS++ Project Office
22//#                        National Radio Astronomy Observatory
23//#                        520 Edgemont Road
24//#                        Charlottesville, VA 22903-2475 USA
25//#
26//# $Id: SpectralEstimate.cc 19933 2007-02-27 05:04:51Z Malte.Marquarding $
27
28//# Includes
29#include <components/SpectralComponents/SpectralEstimate.h>
30#include <casa/Arrays/Vector.h>
31#include <casa/BasicMath/Math.h>
32
33namespace casa { //# NAMESPACE CASA - BEGIN
34
35//# Constructors
36SpectralEstimate::SpectralEstimate(const uInt maxpar) :
37  useWindow_p(False), rms_p(0), cutoff_p(0),
38  windowLow_p(0), windowEnd_p(0),
39  regionLow_p(0), regionEnd_p(0),
40  q_p(2), sigmin_p(0),
41  deriv_p(0), slist_p(maxpar), lprof_p(0) {
42  setQ();
43}
44
45SpectralEstimate::SpectralEstimate(const Double rms,
46                                   const Double cutoff, const Double minsigma,
47                                   const uInt maxpar) :
48  useWindow_p(False), rms_p(rms), cutoff_p(cutoff),
49  windowLow_p(0), windowEnd_p(0),
50  regionLow_p(0), regionEnd_p(0),
51  q_p(2), sigmin_p(minsigma),
52  deriv_p(0), slist_p(maxpar), lprof_p(0) {
53  setQ();
54}
55
56
57SpectralEstimate::SpectralEstimate(const SpectralEstimate &other) :
58  useWindow_p(other.useWindow_p), rms_p(other.rms_p), cutoff_p(other.cutoff_p),
59  windowLow_p(other.windowLow_p), windowEnd_p(other.windowEnd_p),
60  regionLow_p(other.regionLow_p), regionEnd_p(other.regionEnd_p),
61  q_p(other.q_p), sigmin_p(other.sigmin_p),
62  deriv_p(0), slist_p(other.slist_p), lprof_p(other.lprof_p) {
63  setQ(q_p);
64  deriv_p = new Double[lprof_p];
65  for (uInt i=0; i<lprof_p; i++) deriv_p[i] = other.deriv_p[i];
66}
67
68SpectralEstimate::~SpectralEstimate() {
69  delete [] deriv_p; deriv_p = 0; lprof_p = 0;
70}
71
72SpectralEstimate &SpectralEstimate::operator=(const SpectralEstimate &other) {
73  if (this != &other) {
74    useWindow_p = other.useWindow_p;
75    rms_p = other.rms_p;
76    cutoff_p = other.cutoff_p;
77    windowLow_p = other.windowLow_p;
78    windowEnd_p = other.windowEnd_p;
79    regionLow_p = other.regionLow_p;
80    regionEnd_p = other.regionEnd_p;
81    q_p = other.q_p;
82    sigmin_p = other.sigmin_p;
83    deriv_p = 0;
84    slist_p = other.slist_p;
85    lprof_p = other.lprof_p;
86    setQ(q_p);
87    deriv_p = new Double[lprof_p];
88    for (uInt i=0; i<lprof_p; i++) deriv_p[i] = other.deriv_p[i];
89  };
90  return *this;
91}
92
93void SpectralEstimate::setRMS(const Double rms) {
94  rms_p = abs(rms);
95}
96
97void SpectralEstimate::setCutoff(const Double cutoff) {
98  cutoff_p = max(0.0, cutoff);
99}
100
101void SpectralEstimate::setMinSigma(const Double minsigma) {
102  sigmin_p = max(0.0, minsigma);
103}
104
105void SpectralEstimate::setQ(const uInt q) {
106  q_p = max(1, Int(q));
107  a_p = 90.0/(q_p*(q_p+1)*(4*q_p*q_p-1)*(2*q_p+3));
108  b_p = (q_p*(q_p+1))/3.0;
109}
110
111void SpectralEstimate::setRegion(const Int lo, const Int hi) {
112  regionLow_p = regionEnd_p = 0;
113  if (hi > lo) {
114    regionLow_p = lo;
115    regionEnd_p = hi;
116  };
117}
118
119void SpectralEstimate::setWindowing(const Bool win) {
120  useWindow_p = win;
121}
122
123void SpectralEstimate::setMaxN(const uInt maxpar) {
124  slist_p.set(maxpar);
125}
126
127} //# NAMESPACE CASA - END
128
129
130//# Cater for Double and Float
131#ifdef AIPS_NO_TEMPLATE_SRC
132#include <components/SpectralComponents/Spectral2Estimate.tcc>
133
134namespace casa { //# NAMESPACE CASA - BEGIN
135template SpectralList const & SpectralEstimate::estimate<Float>(Vector<Float> const &, Vector<Float> *);
136template SpectralList const & SpectralEstimate::estimate<Float>(Vector<Float> const &, Vector<Float> const &);
137template SpectralElement SpectralEstimate::convertElement<Float>(Vector<Float> const &,
138                                                                 SpectralElement const &) const;
139template void SpectralEstimate::findga<Float>(Vector<Float> const &);
140template uInt SpectralEstimate::window<Float>(Vector<Float> const &);
141template void SpectralEstimate::findc2<Float>(Vector<Float> const &);
142
143template SpectralList const & SpectralEstimate::estimate<Double>(Vector<Double> const &, Vector<Double> *);
144template SpectralList const & SpectralEstimate::estimate<Double>(Vector<Double> const &, Vector<Double> const &);
145template SpectralElement SpectralEstimate::convertElement<Double>(Vector<Double> const &,
146                                                                 SpectralElement const &) const;
147template void SpectralEstimate::findga<Double>(Vector<Double> const &);
148template uInt SpectralEstimate::window<Double>(Vector<Double> const &);
149template void SpectralEstimate::findc2<Double>(Vector<Double> const &);
150} //# NAMESPACE CASA - END
151#endif
Note: See TracBrowser for help on using the repository browser.