My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
PtSrcReader.h
Go to the documentation of this file.
1 // $Id: PtSrcReader.h,v 1.1.1.1 2009/07/06 23:57:26 eml Exp $
2 
3 #ifndef GCP_UTIL_PTSRCREADER_H
4 #define GCP_UTIL_PTSRCREADER_H
5 
15 #include "gcp/util/common/Angle.h"
16 #include "gcp/util/common/Declination.h"
17 #include "gcp/util/common/Exception.h"
18 #include "gcp/util/common/Flux.h"
19 #include "gcp/util/common/HourAngle.h"
20 #include "gcp/util/common/String.h"
21 
22 #include "gcp/cfitsio/common/fitsio.h"
23 
24 #include <vector>
25 
26 namespace gcp {
27  namespace util {
28 
29  class PtSrcReader {
30  public:
31 
35  struct Source {
36 
37  // The name of the source
38 
39  String name_;
40 
41  // RA of the source, and estimated error
42 
43  HourAngle ra_;
44  HourAngle raErr_;
45 
46  // DEC of the source, and estimated error
47 
48  Declination dec_;
49  Declination decErr_;
50 
51  // The distance of this source from a field center
52 
53  Angle distance_;
54 
55  // Specific to FIRST -- will be set to 1 (true) if the source
56  // may be a sidelobe of a bright nearby source
57 
58  bool warn_;
59 
60  // Peak flux and error in the flux (technically this is an
61  // intensity, in flux/beam, and not a flux)
62 
63  Flux rawPeak_;
64 
65  Flux peak_;
66  Flux peakErr_;
67 
68  // Rms on the peak flux
69 
70  Flux rms_;
71 
72  // Integrated flux and error
73 
74  Flux int_;
75  Flux intErr_;
76 
77  //------------------------------------------------------------
78  // Fitted parameters
79 
80  // Fitted major axis (before deconvolution with restoring
81  // beam)
82 
83  Angle fitMaj_;
84  Angle fitMajErr_;
85 
86  // Fitted minor axis (before deconvolution with restoring
87  // beam)
88 
89  Angle fitMin_;
90  Angle fitMinErr_;
91 
92  // Fitted position angle (before deconvolution with restoring
93  // beam)
94 
95  Angle fitPa_;
96  Angle fitPaErr_;
97 
98  //------------------------------------------------------------
99  // Deconvolved parameters
100 
101  // Deconvolved major axis
102 
103  Angle decMaj_;
104  Angle decMajErr_;
105 
106  // Deconvolved minor axis
107 
108  Angle decMin_;
109  Angle decMinErr_;
110 
111  // Deconvolved position angle
112 
113  Angle decPa_;
114  Angle decPaErr_;
115 
116  //------------------------------------------------------------
117  // Restoring beam parameters for this source
118 
119  Angle resMaj_;
120  Angle resMin_;
121  Angle resPa_;
122 
123  //------------------------------------------------------------
124  // For some sources, this will record a spectral index
125 
126  double specInd_;
127 
128  //------------------------------------------------------------
129  // For some sources, we will record a survey name
130 
131  std::string survey_;
132 
133  static bool isLessThan(PtSrcReader::Source& src1, PtSrcReader::Source& src2)
134  {
135  return (src1.survey_ < src2.survey_) || (src1.survey_ == src2.survey_ && src1.name_.str() <= src2.name_.str());
136  }
137 
138  static bool isEqualTo(PtSrcReader::Source& src1, PtSrcReader::Source& src2)
139  {
140  return (src1.survey_ == src2.survey_ && src1.name_.str() == src2.name_.str());
141  }
142 
143  };
144 
145  // Constructor.
146 
147  PtSrcReader(std::string catalogFile);
148  PtSrcReader();
149  void initialize();
150 
151  // Destructor.
152 
153  virtual ~PtSrcReader();
154 
155  void setCatalogFile(std::string catalogFile);
156 
157  // Find sources within radius of the requested position
158 
159  std::vector<PtSrcReader::Source> findSources(HourAngle ra, Declination dec, Angle radius,
160  Flux fMin=minFlux_, Flux fMax=maxFlux_, bool doPrint=true);
161 
162  // Return the number of sources
163 
164  unsigned countSources(HourAngle ra, Declination dec, Angle radius,
165  Flux fMin=minFlux_, Flux fMax=maxFlux_);
166 
167 
168  // Index the list of sources
169 
170  void indexSources();
171 
172  // Check if a position if within a given radius of the passed ra and dec
173 
174  bool checkAngle(PtSrcReader::Source& src, HourAngle& ra, Declination& dec, Angle& radius);
175 
176  // Friend funtion to print out source information
177 
178  friend std::ostream& gcp::util::operator<<(std::ostream& os, PtSrcReader::Source& src);
179  void printHeader(std::ostream& os);
180 
181  // Catalog-specific functions to open/cose the catalog file
182 
183  virtual void openCatalogFile() = 0;
184  virtual void closeCatalogFile() = 0;
185 
186  // Catalog-specific function to read the next entry from a file
187 
188  virtual Source readNextEntry() = 0;
189 
190  // Return true if we are at the end of the catalog file
191 
192  virtual bool eof() = 0;
193 
194  // Apply any corrections to convert the catalog values
195 
196  virtual void applyCorrections(Source& src);
197 
198  // Calculate the minimal RA range we need to search
199 
200  virtual void setRaRange(HourAngle& ra, Declination& dec, Angle& radius);
201 
202  // Defaults for flux searching when none are specified
203 
204  static Flux minFlux_;
205  static Flux maxFlux_;
206 
207  HourAngle raMin_;
208  HourAngle raMax_;
209 
210  protected:
211 
212  // The name of the catalog File
213 
214  std::string catalogFile_;
215 
216  //
217  long sourceIndices_[25];
218 
219  // The number of sources in a catalog
220 
221  unsigned nSrc_;
222 
223  // Report an error generated by the cfitsio library
224 
225  void throwCfitsioError(int status);
226 
227  }; // End class PtSrcReader
228 
229  // A predicate for testing if a src equals another
230 
231  class Src_eq : public std::unary_function<PtSrcReader::Source, bool> {
232  PtSrcReader::Source* src_;
233  public:
234  explicit Src_eq(PtSrcReader::Source* src) : src_(src) {}
235  bool operator() (const PtSrcReader::Source* src) const {return (src_ != src && src_->survey_ == src->survey_ && src_->name_ == src->name_);}
236  };
237 
238  // A predicate for testing if a src is lexically less than another
239 
240  struct Src_lt : public std::binary_function<PtSrcReader::Source, PtSrcReader::Source, bool> {
241  bool operator() (PtSrcReader::Source& src1, PtSrcReader::Source& src2) const
242  {
243  COUT("Here: Src_lt");
244  return (src1.survey_ < src2.survey_ && src1.name_.str() < src2.name_.str());
245  }
246  };
247 
248 
249  } // End namespace util
250 } // End namespace gcp
251 
252 
253 
254 #endif // End #ifndef GCP_UTIL_PTSRCREADER_H
virtual void setRaRange(HourAngle &ra, Declination &dec, Angle &radius)
Definition: PtSrcReader.cc:299
PtSrcReader()
Definition: PtSrcReader.cc:30
void printHeader(std::ostream &os)
Definition: PtSrcReader.cc:84
void indexSources()
Definition: PtSrcReader.cc:339
void setCatalogFile(std::string catalogFile)
Definition: PtSrcReader.cc:52
std::vector< PtSrcReader::Source > findSources(HourAngle ra, Declination dec, Angle radius, Flux fMin=minFlux_, Flux fMax=maxFlux_, bool doPrint=true)
Definition: PtSrcReader.cc:187
Definition: String.h:16
virtual ~PtSrcReader()
Definition: PtSrcReader.cc:47
void throwCfitsioError(int status)
Definition: PtSrcReader.cc:325
Definition: Flux.h:25
void initialize()
Definition: PtSrcReader.cc:38
Definition: HourAngle.h:17
Definition: PtSrcReader.h:231
Definition: Angle.h:20
Definition: Declination.h:20
bool checkAngle(PtSrcReader::Source &src, HourAngle &ra, Declination &dec, Angle &radius)
Definition: PtSrcReader.cc:60
Definition: PtSrcReader.h:35
unsigned countSources(HourAngle ra, Declination dec, Angle radius, Flux fMin=minFlux_, Flux fMax=maxFlux_)
Definition: PtSrcReader.cc:249
Definition: PtSrcReader.h:240
Definition: PtSrcReader.h:29