casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Utils.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 //# Utils.h: Definition of global functions in Utils.cc
3 //# Copyright (C) 1997,1998,1999,2000,2001,2002,2003
4 //# Associated Universities, Inc. Washington DC, USA.
5 //#
6 //# This library is free software; you can redistribute it and/or modify it
7 //# under the terms of the GNU Library General Public License as published by
8 //# the Free Software Foundation; either version 2 of the License, or (at your
9 //# option) any later version.
10 //#
11 //# This library is distributed in the hope that it will be useful, but WITHOUT
12 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14 //# License for more details.
15 //#
16 //# You should have received a copy of the GNU Library General Public License
17 //# along with this library; if not, write to the Free Software Foundation,
18 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
19 //#
20 //# Correspondence concerning AIPS++ should be addressed as follows:
21 //# Internet email: aips2-request@nrao.edu.
22 //# Postal address: AIPS++ Project Office
23 //# National Radio Astronomy Observatory
24 //# 520 Edgemont Road
25 //# Charlottesville, VA 22903-2475 USA
26 //#
27 //# $Id$
28 #include <casa/aips.h>
29 #include <casa/Exceptions/Error.h>
30 #include <msvis/MSVis/VisBuffer.h>
31 #include <casa/Quanta/Quantum.h>
36 #include <casa/Arrays/Array.h>
37 #include <casa/Logging/LogIO.h>
39 #include <casa/iostream.h>
40 
41 #ifndef SYNTHESIS_UTILS_H
42 #define SYNTHESIS_UTILS_H
43 
44 namespace casa
45 {
48  casacore::Float& maxAbs,casacore::IPosition& posMaxAbs);
51  casacore::Float& maxAbs,casacore::IPosition& posMaxAbs,
52  casacore::Bool flip=false);
53  casacore::Double getCurrentTimeStamp(const VisBuffer& vb);
55  casacore::Double getPA(const VisBuffer& vb);
61 
62  casacore::Bool isVBNaN(const VisBuffer& vb, casacore::String& mesg);
63  namespace SynthesisUtils
64  {
68  casacore::Double dAngleRad,
69  casacore::String interpMathod=casacore::String("CUBIC"),
70  casacore::Bool modifyInCS=true);
80  inline casacore::Int nint(const casacore::Double& v) {return (casacore::Int)std::floor(v+0.5);}
81  inline casacore::Int nint(const casacore::Float& v) {return (casacore::Int)std::floor(v+0.5);}
82  inline casacore::Bool near(const casacore::Double& d1, const casacore::Double& d2,
83  const casacore::Double EPS=1E-6)
84  {
85  casacore::Bool b1=(fabs(d1-d2) < EPS);
86  return b1;
87  }
88  template <class T>
89  inline void SETVEC(casacore::Vector<T>& lhs, const casacore::Vector<T>& rhs)
90  {lhs.resize(rhs.shape()); lhs = rhs;};
91  template <class T>
92  inline void SETVEC(casacore::Array<T>& lhs, const casacore::Array<T>& rhs)
93  {lhs.resize(rhs.shape()); lhs = rhs;};
94 
95  template <class T>
96  T getenv(const char *name, const T defaultVal);
99  void makeFTCoordSys(const casacore::CoordinateSystem& coords,
100  const casacore::Int& convSize,
102  casacore::CoordinateSystem& ftCoords);
103 
105  casacore::Matrix<casacore::Double>& expandedFreqList,
106  casacore::Matrix<casacore::Double>& expandedConjFreqList);
107 
108  template <class T>
110  inline casacore::Double conjFreq(const casacore::Double& freq, const casacore::Double& refFreq)
111  {return sqrt(2*refFreq*refFreq - freq*freq);};
112 
114 
115  template <class T>
116  T stdNearestValue(const std::vector<T>& list, const T& val, casacore::Int& index);
117 
120 
123  void calcIntersection(const casacore::Int blc1[2], const casacore::Int trc1[2], const casacore::Float blc2[2], const casacore::Float trc2[2],
124  casacore::Float blc[2], casacore::Float trc[2]);
125  casacore::Bool checkIntersection(const casacore::Int blc1[2], const casacore::Int trc1[2], const casacore::Float blc2[2], const casacore::Float trc2[2]);
126 
128 
129  template<class Iterator>
130  Iterator Unique(Iterator first, Iterator last);
131 
132  void showCS(const casacore::CoordinateSystem& cs, std::ostream& os, const casacore::String& msg=casacore::String());
134 
135  void rotate2(const double& actualPA, CFCell& baseCFC, CFCell& cfc, const double& rotAngleIncr);
136 
139  casacore::CoordinateSystem& coordSys,
140  casacore::Double& sampling,
141  casacore::Double& paVal,
142  casacore::Int& xSupport, casacore::Int& ySupport,
143  casacore::Double& fVal, casacore::Double& wVal, casacore::Int& mVal,
145  casacore::Bool loadPixels,
146  casacore::Bool loadMiscInfo=true);
147  }
148 
149  void getHADec(casacore::MeasurementSet& ms, const VisBuffer& vb, casacore::Double &HA, casacore::Double& RA, casacore::Double& Dec);
151  //
152  // An interface class to detect changes in the VisBuffer
153  // Exact meaning of the "change" is defined in the derived classes
154  //
156  // return true if a change occurs in the given row since the last call of update
157  virtual casacore::Bool changed(const VisBuffer &vb, casacore::Int row) const = 0;
158  // start looking for a change from the given row of the VisBuffer
159  virtual void update(const VisBuffer &vb, casacore::Int row) = 0;
160 
161  // reset to the state which exists just after construction
162  virtual void reset() = 0;
163 
164  // some derived methods, which use the abstract virtual function changed(vb,row)
165 
166  // return true if a change occurs somewhere in the buffer
167  casacore::Bool changed(const VisBuffer &vb) const;
168  // return true if a change occurs somewhere in the buffer starting from row1
169  // up to row2 (row2=-1 means up to the end of the buffer). The row number,
170  // where the change occurs is returned in the row2 parameter
171  casacore::Bool changedBuffer(const VisBuffer &vb, casacore::Int row1, casacore::Int &row2) const;
172  protected:
173  // a virtual destructor to make the compiler happy
174  virtual ~IChangeDetector();
175  };
176  //
178 
180  //
181  // ParAngleChangeDetector - a class to detect a change in the parallactic
182  // angle.
183  //
185  casacore::Double pa_tolerance_p; // a parallactic angle tolerance. If exeeded,
186  // the angle is considered to be changed.
187  casacore::Double last_pa_p; // last value of the parallactic angle
188  public:
189  // The default constructor
191  // set up the tolerance, which determines how much the position angle should
192  // change to report the change by this class
193  ParAngleChangeDetector(const casacore::Quantity &pa_tolerance);
194 
195  virtual void setTolerance(const casacore::Quantity &pa_tolerance);
196  // reset to the state which exists just after construction
197  virtual void reset();
198 
199  // return parallactic angle tolerance
201 
202  // implementation of the base class' virtual functions
203 
204  // return true if a change occurs in the given row since the last call of update
205  virtual casacore::Bool changed(const VisBuffer &vb, casacore::Int row) const;
206  // start looking for a change from the given row of the VisBuffer
207  virtual void update(const VisBuffer &vb, casacore::Int row);
208  };
209 
210  //
212 
213 }
214 #endif
A Vector of integers, for indexing into Array&lt;T&gt; objects.
Definition: IPosition.h:119
A Measure: astronomical direction.
Definition: MDirection.h:174
int Int
Definition: aipstype.h:50
void rotateComplexArray(casacore::LogIO &logIO, casacore::Array< casacore::Complex > &inArray, casacore::CoordinateSystem &inCS, casacore::Array< casacore::Complex > &outArray, casacore::Double dAngleRad, casacore::String interpMathod=casacore::String("CUBIC"), casacore::Bool modifyInCS=true)
casacore::Double getCurrentTimeStamp(const VisBuffer &vb)
casacore::Bool findMaxAbsLattice(const casacore::ImageInterface< casacore::Float > &lattice, casacore::Float &maxAbs, casacore::IPosition &posMaxAbs)
void SETVEC(casacore::Vector< T > &lhs, const casacore::Vector< T > &rhs)
Definition: Utils.h:89
casacore::Double last_pa_p
the angle is considered to be changed.
Definition: Utils.h:187
virtual void update(const VisBuffer &vb, casacore::Int row)
start looking for a change from the given row of the VisBuffer
struct Node * first
Definition: malloc.h:330
virtual casacore::Bool changed(const VisBuffer &vb, casacore::Int row) const
implementation of the base class&#39; virtual functions
casacore::Double getRefFreq(const VisBuffer &vb)
casacore::CoordinateSystem makeUVCoords(casacore::CoordinateSystem &imageCoordSys, casacore::IPosition &shape)
casacore::Bool near(const casacore::Double &d1, const casacore::Double &d2, const casacore::Double EPS=1E-6)
Definition: Utils.h:82
casacore::Double conjFreq(const casacore::Double &freq, const casacore::Double &refFreq)
Definition: Utils.h:110
const casacore::Array< casacore::Complex > getCFPixels(const casacore::String &Dir, const casacore::String &fileName)
ostream-like interface to creating log messages.
Definition: LogIO.h:167
TableExprNode mjd(const TableExprNode &node)
Definition: ExprNode.h:1464
virtual void reset()=0
reset to the state which exists just after construction
ABSTRACT CLASSES Abstract class for colors Any implementation of color should be able to provide a hexadecimal form of the if a human readable name(i.e."black").In many places throughout the plotter
ParAngleChangeDetector()
The default constructor.
Definition: Utils.h:190
LatticeExprNode floor(const LatticeExprNode &expr)
casacore::Double nearestValue(const casacore::Vector< casacore::Double > &list, const casacore::Double &val, casacore::Int &index)
void makeFTCoordSys(const casacore::CoordinateSystem &coords, const casacore::Int &convSize, const casacore::Vector< casacore::Double > &ftRef, casacore::CoordinateSystem &ftCoords)
virtual void resize()
Make this array a different shape.
casacore::Vector< casacore::Int > mapSpwIDToDDID(const VisBuffer &vb, const casacore::Int &spwID)
void expandFreqSelection(const casacore::Matrix< casacore::Double > &freqSelection, casacore::Matrix< casacore::Double > &expandedFreqList, casacore::Matrix< casacore::Double > &expandedConjFreqList)
virtual ~IChangeDetector()
a virtual destructor to make the compiler happy
casacore::TableRecord getCFParams(const casacore::String &dirName, const casacore::String &fileName, casacore::Array< casacore::Complex > &pixelBuffer, casacore::CoordinateSystem &coordSys, casacore::Double &sampling, casacore::Double &paVal, casacore::Int &xSupport, casacore::Int &ySupport, casacore::Double &fVal, casacore::Double &wVal, casacore::Int &mVal, casacore::Double &conjFreq, casacore::Int &conjPoln, casacore::Bool loadPixels, casacore::Bool loadMiscInfo=true)
casacore::String mjdToString(casacore::Time &mjd)
void getHADec(casacore::MeasurementSet &ms, const VisBuffer &vb, casacore::Double &HA, casacore::Double &RA, casacore::Double &Dec)
casacore::Bool changedBuffer(const VisBuffer &vb, casacore::Int row1, casacore::Int &row2) const
return true if a change occurs somewhere in the buffer starting from row1 up to row2 (row2=-1 means u...
double Double
Definition: aipstype.h:55
virtual void reset()
reset to the state which exists just after construction
const IPosition & shape() const
The length of the Vector.
Definition: Vector.h:293
casacore::Int nint(const casacore::Double &v)
Definition: Utils.h:80
casacore::Double pa_tolerance_p
Definition: Utils.h:185
LatticeExprNode sqrt(const LatticeExprNode &expr)
date and time enquiry functions, with some operations.
Definition: Time.h:88
casacore::Double getPA(const VisBuffer &vb)
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
void storeArrayAsImage(casacore::String fileName, const casacore::CoordinateSystem &coords, const casacore::Array< casacore::Complex > &cf)
void libreConvolver(casacore::Array< T > &c1, const casacore::Array< T > &c2)
casacore::Int getPhaseCenter(casacore::MeasurementSet &ms, casacore::MDirection &dir0, casacore::Int whichField=-1)
casacore::Quantity getParAngleTolerance() const
return parallactic angle tolerance
float Float
Definition: aipstype.h:54
//////////////////////////////////////////////////////////////////////////
Definition: Utils.h:184
TableExprNode shape(const TableExprNode &array)
Function operating on any scalar or array resulting in a Double array containing the shape...
Definition: ExprNode.h:1944
A hierarchical collection of named fields of various types.
Definition: TableRecord.h:182
casacore::Bool isVBNaN(const VisBuffer &vb, casacore::String &mesg)
void storeImg(casacore::String fileName, casacore::ImageInterface< casacore::Complex > &theImg, casacore::Bool writeReIm=false)
A Table intended to hold astronomical data (a set of Measurements).
void showCS(const casacore::CoordinateSystem &cs, std::ostream &os, const casacore::String &msg=casacore::String())
casacore::Vector< casacore::Int > mapSpwIDToPolID(const VisBuffer &vb, const casacore::Int &spwID)
T stdNearestValue(const std::vector< T > &list, const T &val, casacore::Int &index)
virtual void setTolerance(const casacore::Quantity &pa_tolerance)
virtual casacore::Bool changed(const VisBuffer &vb, casacore::Int row) const =0
return true if a change occurs in the given row since the last call of update
void makeStokesAxis(casacore::Int npol_p, casacore::Vector< casacore::String > &polType, casacore::Vector< casacore::Int > &whichStokes)
casacore::Bool checkIntersection(const casacore::Int blc1[2], const casacore::Int trc1[2], const casacore::Float blc2[2], const casacore::Float trc2[2])
template &lt;class t&gt;=&quot;&quot;&gt;
Definition: CFCell.h:92
String: the storage and methods of handling collections of characters.
Definition: String.h:223
VisBuffers encapsulate one chunk of visibility data for processing.
Definition: VisBuffer.h:153
void findLatticeMax(const casacore::Array< casacore::Complex > &lattice, casacore::Vector< casacore::Float > &maxAbs, casacore::Vector< casacore::IPosition > &posMaxAbs)
void resize(size_t len, Bool copyValues=False)
Definition: Vector.h:167
Iterator Unique(Iterator first, Iterator last)
virtual void update(const VisBuffer &vb, casacore::Int row)=0
start looking for a change from the given row of the VisBuffer
void calcIntersection(const casacore::Int blc1[2], const casacore::Int trc1[2], const casacore::Float blc2[2], const casacore::Float trc2[2], casacore::Float blc[2], casacore::Float trc[2])
void rotate2(const double &actualPA, CFCell &baseCFC, CFCell &cfc, const double &rotAngleIncr)
Interconvert pixel and world coordinates.
T getenv(const char *name, const T defaultVal)
casacore::Float libreSpheroidal(casacore::Float nu)
const IPosition & shape() const
The length of each axis.
Definition: ArrayBase.h:121