1 | // |
---|
2 | // C++ Implementation: STPol |
---|
3 | // |
---|
4 | // Description: |
---|
5 | // |
---|
6 | // |
---|
7 | // Author: Malte Marquarding <asap@atnf.csiro.au>, (C) 2005 |
---|
8 | // |
---|
9 | // Copyright: See COPYING file that comes with this distribution |
---|
10 | // |
---|
11 | // |
---|
12 | |
---|
13 | #include <casa/Exceptions/Error.h> |
---|
14 | #include "STPol.h" |
---|
15 | |
---|
16 | std::map<std::string, std::pair<int, std::string> > asap::STPol::polmap_; |
---|
17 | std::map<std::string, std::map<int, std::string> > asap::STPol::labelmap_; |
---|
18 | |
---|
19 | void asap::STPol::initLabelMap() |
---|
20 | { |
---|
21 | if ( labelmap_.empty() ) { |
---|
22 | std::map<int, std::string> linears; |
---|
23 | linears[0] = "XX";linears[1] = "YY"; |
---|
24 | linears[2] = "Re(XY)";linears[3] = "Imag(XY)"; |
---|
25 | STPol::labelmap_["linear"] = linears; |
---|
26 | std::map<int, std::string> circulars; |
---|
27 | circulars[0] = "RR";circulars[1] = "LL"; |
---|
28 | circulars[2] = "Re(RL)";circulars[3] = "Imag(RL)"; |
---|
29 | STPol::labelmap_["circular"] = circulars; |
---|
30 | std::map<int, std::string> stokes; |
---|
31 | stokes[0]="I";stokes[1]="Q";stokes[2]="U";stokes[3]="V"; |
---|
32 | STPol::labelmap_["stokes"] = stokes; |
---|
33 | std::map<int, std::string> linpol; |
---|
34 | linpol[1] = "Plinear";linpol[2] = "Pangle"; |
---|
35 | STPol::labelmap_["linpol"] = linpol; |
---|
36 | } |
---|
37 | } |
---|
38 | |
---|
39 | std::string asap::STPol::getPolLabel( int index, |
---|
40 | const std::string& type) |
---|
41 | { |
---|
42 | initLabelMap(); |
---|
43 | if ( labelmap_.find(type) == labelmap_.end() ) { |
---|
44 | std::string msg = "Illegal polarisation type "+type; |
---|
45 | throw(casa::AipsError(msg)); |
---|
46 | } else { |
---|
47 | std::map<int, std::string> poltype = labelmap_[type]; |
---|
48 | if ( poltype.find(index) == poltype.end() ) { |
---|
49 | std::string msg = "Illegal polarisation index"; |
---|
50 | throw(casa::AipsError(msg)); |
---|
51 | } else { |
---|
52 | return poltype[index]; |
---|
53 | } |
---|
54 | } |
---|
55 | } |
---|
56 | |
---|
57 | void asap::STPol::initPolMap( ) |
---|
58 | { |
---|
59 | if ( polmap_.empty() ) { |
---|
60 | std::pair<int, std::string> val; |
---|
61 | val.first = 0; val.second = "linear"; |
---|
62 | STPol::polmap_["XX"] = val; |
---|
63 | val.first = 1; |
---|
64 | STPol::polmap_["YY"] = val; |
---|
65 | val.first = 2; |
---|
66 | STPol::polmap_["Re(XY)"] = val; |
---|
67 | val.first = 3; |
---|
68 | STPol::polmap_["Imag(XY)"] = val; |
---|
69 | val.first = 0; val.second = "stokes"; |
---|
70 | STPol::polmap_["I"] = val; |
---|
71 | val.first = 1; |
---|
72 | STPol::polmap_["Q"] = val; |
---|
73 | val.first = 2; |
---|
74 | STPol::polmap_["U"] = val; |
---|
75 | val.first = 3; |
---|
76 | STPol::polmap_["V"] = val; |
---|
77 | val.first = 1; val.second = "linpol"; |
---|
78 | STPol::polmap_["Plinear"] = val; |
---|
79 | val.first = 2; |
---|
80 | STPol::polmap_["Pangle"] = val; |
---|
81 | val.first = 0; val.second = "circular"; |
---|
82 | STPol::polmap_["RR"] = val; |
---|
83 | val.first = 1; |
---|
84 | STPol::polmap_["LL"] = val; |
---|
85 | val.first = 2; |
---|
86 | STPol::polmap_["Re(RL)"] = val; |
---|
87 | val.first = 3; |
---|
88 | STPol::polmap_["Imag(RL)"] = val; |
---|
89 | } |
---|
90 | } |
---|
91 | |
---|
92 | std::pair<int, std::string> asap::STPol::polFromString( const std::string& key ) |
---|
93 | { |
---|
94 | initPolMap(); |
---|
95 | if ( polmap_.find(key) == polmap_.end() ) { |
---|
96 | std::string msg = "Illegal polarisation type "+key; |
---|
97 | throw(casa::AipsError(msg)); |
---|
98 | } else { |
---|
99 | return polmap_[key]; |
---|
100 | } |
---|
101 | } |
---|