source: trunk/src/SDContainer.cc@ 24

Last change on this file since 24 was 18, checked in by mmarquar, 20 years ago

Moved SDHeader from SDReader to SDConatiner. Added header to SDMemTable. Added access funtions to nif,nbema,npol,nchan

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1//#---------------------------------------------------------------------------
2//# SDContainer.cc: A container class for single dish integrations
3//#---------------------------------------------------------------------------
4//# Copyright (C) 2004
5//# Malte Marquarding, ATNF
6//#
7//# This program is free software; you can redistribute it and/or modify it
8//# under the terms of the GNU General Public License as published by the Free
9//# Software Foundation; either version 2 of the License, or (at your option)
10//# any later version.
11//#
12//# This program is distributed in the hope that it will be useful, but
13//# WITHOUT ANY WARRANTY; without even the implied warranty of
14//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15//# Public License for more details.
16//#
17//# You should have received a copy of the GNU General Public License along
18//# with this program; if not, write to the Free Software Foundation, Inc.,
19//# 675 Massachusetts Ave, Cambridge, MA 02139, USA.
20//#
21//# Correspondence concerning this software should be addressed as follows:
22//# Internet email: Malte.Marquarding@csiro.au
23//# Postal address: Malte Marquarding,
24//# Australia Telescope National Facility,
25//# P.O. Box 76,
26//# Epping, NSW, 2121,
27//# AUSTRALIA
28//#
29//# $Id:
30//#---------------------------------------------------------------------------
31#include <aips/Tables/Table.h>
32#include <aips/Arrays/IPosition.h>
33#include <aips/Arrays/ArrayAccessor.h>
34#include <aips/Arrays/Matrix.h>
35#include <aips/Quanta/MVTime.h>
36
37#include "SDContainer.h"
38
39using namespace atnf_sd;
40
41void SDHeader::print() const {
42 MVTime mvt(this->utc);
43
44 cout << "Observer: " << this->observer << endl
45 << "Project: " << this->project << endl
46 << "Obstype: " << this->obstype << endl
47 << "Antenna: " << this->antennaname << endl
48 << "Ant. Position: " << this->antennaposition << endl
49 << "Equinox: " << this->equinox << endl
50 << "Freq. ref.: " << this->freqref << endl
51 << "Ref. frequency: " << this->reffreq << endl
52 << "Bandwidth: " << this->bandwidth << endl
53 << "Time (utc): "
54 << mvt.string()
55 << endl;
56 //setprecision(10) << this->utc << endl;
57}
58
59
60SDContainer::SDContainer(uInt nBeam, uInt nIF, uInt nPol, uInt nChan)
61 : nBeam_(nBeam),
62 nIF_(nIF),
63 nPol_(nPol),
64 nChan_(nChan),
65 spectrum_(IPosition(4,nBeam,nIF,nPol,nChan)),
66 flags_(IPosition(4,nBeam,nIF,nPol,nChan)),
67 tsys_(IPosition(4,nBeam,nIF,nPol,nChan)) {
68 uChar x = 0;
69 flags_ = ~x;
70}
71
72SDContainer::SDContainer(IPosition shp)
73 : nBeam_(shp(0)),
74 nIF_(shp(1)),
75 nPol_(shp(2)),
76 nChan_(shp(3)),
77 spectrum_(shp),
78 flags_(shp),
79 tsys_(shp) {
80 uChar x = 0;
81 flags_ = ~x;
82}
83
84SDContainer::~SDContainer() {
85}
86
87Bool SDContainer::putSpectrum(const Array<Float>& spec) {
88 spectrum_ = spec;
89}
90Bool SDContainer::putFlags(const Array<uChar>& flag) {
91 flags_ = flag;
92}
93Bool SDContainer::putTsys(const Array<Float>& tsys) {
94 tsys_ = tsys;
95}
96
97Bool SDContainer::setSpectrum(const Matrix<Float>& spec,
98 uInt whichBeam, uInt whichIF) {
99
100 ArrayAccessor<Float, Axis<0> > aa0(spectrum_);
101 aa0.reset(aa0.begin(whichBeam));
102 ArrayAccessor<Float, Axis<1> > aa1(aa0);
103 aa1.reset(aa1.begin(whichIF));
104
105 //Vector<Float> pols(nPol);
106 ArrayAccessor<Float, Axis<1> > j(spec);
107 IPosition shp0 = spectrum_.shape();
108 IPosition shp1 = spec.shape();
109 if ( (shp0(2) != shp1(1)) || (shp0(3) != shp1(0)) ) {
110 cerr << "Arrays not conformant" << endl;
111 return False;
112 }
113 // assert dimensions are the same....
114 for (ArrayAccessor<Float, Axis<2> > i(aa1);i != i.end(); ++i) {
115 ArrayAccessor<Float, Axis<0> > jj(j);
116 for (ArrayAccessor<Float, Axis<3> > ii(i);ii != ii.end(); ++ii) {
117 (*ii) = (*jj);
118 jj++;
119 }
120 j++;
121 }
122 // unset flags for this spectrum, they might be set again by the
123 // setFlags method
124
125 IPosition shp = flags_.shape();
126 IPosition start(4,whichBeam,whichIF,0,0);
127 IPosition end(4,whichBeam,whichIF,shp(2)-1,shp(3)-1);
128 Array<uChar> arr(flags_(start,end));
129 arr = uChar(0);
130}
131
132Bool SDContainer::setFlags(const Matrix<uChar>& flag,
133 uInt whichBeam, uInt whichIF) {
134
135 ArrayAccessor<uChar, Axis<0> > aa0(flags_);
136 aa0.reset(aa0.begin(whichBeam));
137 ArrayAccessor<uChar, Axis<1> > aa1(aa0);
138 aa1.reset(aa1.begin(whichIF));
139
140 ArrayAccessor<uChar, Axis<1> > j(flag);
141 IPosition shp0 = flags_.shape();
142 IPosition shp1 = flag.shape();
143 if ( (shp0(2) != shp1(1)) || (shp0(3) != shp1(0)) ) {
144 cerr << "Arrays not conformant" << endl;
145 return False;
146 }
147
148 // assert dimensions are the same....
149 for (ArrayAccessor<uChar, Axis<2> > i(aa1);i != i.end(); ++i) {
150 ArrayAccessor<uChar, Axis<0> > jj(j);
151 for (ArrayAccessor<uChar, Axis<3> > ii(i);ii != ii.end(); ++ii) {
152 (*ii) = (*jj);
153 jj++;
154 }
155 j++;
156 }
157 return True;
158}
159
160Bool SDContainer::setTsys(const Vector<Float>& tsys,
161 uInt whichBeam, uInt whichIF) {
162 ArrayAccessor<Float, Axis<0> > aa0(tsys_);
163 aa0.reset(aa0.begin(whichBeam));
164 ArrayAccessor<Float, Axis<1> > aa1(aa0);
165 aa1.reset(aa1.begin(whichIF));
166 // assert dimensions are the same....
167 for (ArrayAccessor<Float, Axis<3> > i(aa1);i != i.end(); ++i) {
168 ArrayAccessor<Float, Axis<0> > j(tsys);
169 for (ArrayAccessor<Float, Axis<2> > ii(i);ii != ii.end(); ++ii) {
170 (*ii) = (*j);
171 j++;
172 }
173 }
174}
Note: See TracBrowser for help on using the repository browser.