source: branches/newfiller/src/STPolStokes.cpp@ 3102

Last change on this file since 3102 was 1007, checked in by mar637, 19 years ago

Fixed computiaons of stokes and back after discussions with Jim Caswell.

File size: 2.1 KB
Line 
1//
2// C++ Implementation: STPolStokes
3//
4// Description:
5//
6//
7// Author: Malte Marquarding <Malte.Marquarding@csiro.au>, (C) 2006
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12
13#include <casa/Arrays/ArrayMath.h>
14#include <casa/BasicMath/Math.h>
15#include <casa/Exceptions/Error.h>
16#include <casa/BasicSL/Constants.h>
17#include "STPolStokes.h"
18
19using namespace casa;
20
21namespace asap {
22
23Factory<STPol,STPolStokes> STPolStokes::myFactory;
24
25STPolStokes::~STPolStokes()
26{
27}
28
29
30Vector<Float> asap::STPolStokes::getStokes( uint index )
31{
32 return getSpectrum(index);
33}
34
35Vector<Float> asap::STPolStokes::getLinPol( uInt index )
36{
37 if ( index < 0 || index >4 ) throw(AipsError("LinPol index out of range"));
38 Vector<Float> out;
39 if ( nspec() == 4) {
40 switch(index) {
41 case 1:
42 out = Vector<Float>(sqrt(pow(getSpectrum(1),Float(2.0))
43 +pow(getSpectrum(2), Float(2.0))));
44 break;
45 case 2:
46 out = Vector<Float>(Float(180.0/C::pi/2.0)
47 * atan2(getSpectrum(2),getSpectrum(1)));
48 break;
49 default:
50 out = getSpectrum(index);
51 }
52 }
53 return out;
54}
55
56Vector<Float> asap::STPolStokes::getLinear(uInt index )
57{
58 Vector<Float> out;
59 switch(index) {
60 case 0:
61 out = (getSpectrum(0)+getSpectrum(1))/Float(2.0);
62 break;
63 case 1:
64 out = (getSpectrum(0)-getSpectrum(1))/Float(2.0);
65 break;
66 case 2:
67 out = getSpectrum(2)/Float(2.0);
68 break;
69 case 3:
70 out = getSpectrum(3)/Float(2.0);
71 break;
72 default:
73 out = Vector<Float>();
74 }
75 return out;
76
77}
78
79Vector<Float> asap::STPolStokes::getCircular(uInt index )
80{
81 // convert to stokes I/ V first
82 //
83 // We use the convention
84 // I = (RR+LL) // definition changed
85
86 if ( index == 2 || index ==3 ) throw(AipsError("Re/Imag RL not implemented"));
87 Vector<Float> out;
88 switch(index) {
89 case 0:
90 out = (getSpectrum(0) + getSpectrum(3))/Float(2.0);
91 break;
92 case 1:
93 out = (getSpectrum(0) - getSpectrum(3))/Float(2.0);
94 break;
95 default:
96 out = Vector<Float>();
97 }
98 return out;
99}
100
101}
Note: See TracBrowser for help on using the repository browser.