- Location:
- /trunk/src
- Files:
-
- 3 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
/trunk/src/SDContainer.cc
r20 r30 173 173 } 174 174 } 175 176 Array<Float> SDContainer::getSpectrum(uInt whichBeam, uInt whichIF) const 177 { 178 Matrix<Float> spectra(nChan_, nPol_); 179 180 // Beam. 181 ArrayAccessor<Float, Axis<0> > i0(spectrum_); 182 i0.reset(i0.begin(whichBeam)); 183 184 // IF. 185 ArrayAccessor<Float, Axis<1> > i1(i0); 186 i1.reset(i1.begin(whichIF)); 187 188 // Polarization. 189 ArrayAccessor<Float, Axis<2> > i2(i1); 190 ArrayAccessor<Float, Axis<1> > o1(spectra); 191 192 while (i2 != i2.end()) { 193 // Channel. 194 ArrayAccessor<Float, Axis<3> > i3(i2); 195 ArrayAccessor<Float, Axis<0> > o0(o1); 196 197 while (i3 != i3.end()) { 198 *o0 = *i3; 199 200 i3++; 201 o0++; 202 } 203 204 i2++; 205 o1++; 206 } 207 208 return spectra; 209 } 210 211 Array<uChar> SDContainer::getFlags(uInt whichBeam, uInt whichIF) const 212 { 213 Matrix<uChar> flagtra(nChan_, nPol_); 214 215 // Beam. 216 ArrayAccessor<uChar, Axis<0> > i0(flags_); 217 i0.reset(i0.begin(whichBeam)); 218 219 // IF. 220 ArrayAccessor<uChar, Axis<1> > i1(i0); 221 i1.reset(i1.begin(whichIF)); 222 223 // Polarization. 224 ArrayAccessor<uChar, Axis<2> > i2(i1); 225 ArrayAccessor<uChar, Axis<1> > o1(flagtra); 226 227 while (i2 != i2.end()) { 228 // Channel. 229 ArrayAccessor<uChar, Axis<3> > i3(i2); 230 ArrayAccessor<uChar, Axis<0> > o0(o1); 231 232 while (i3 != i3.end()) { 233 *o0 = *i3; 234 235 i3++; 236 o0++; 237 } 238 239 i2++; 240 o1++; 241 } 242 243 return flagtra; 244 } 245 246 Array<Float> SDContainer::getTsys(uInt whichBeam, uInt whichIF) const 247 { 248 Vector<Float> tsys(nPol_); 249 250 // Beam. 251 ArrayAccessor<Float, Axis<0> > i0(tsys_); 252 i0.reset(i0.begin(whichBeam)); 253 254 // IF. 255 ArrayAccessor<Float, Axis<1> > i1(i0); 256 i1.reset(i1.begin(whichIF)); 257 258 // Channel. 259 ArrayAccessor<Float, Axis<3> > i3(i1); 260 261 // Polarization. 262 ArrayAccessor<Float, Axis<2> > i2(i3); 263 ArrayAccessor<Float, Axis<0> > o0(tsys); 264 265 while (i2 != i2.end()) { 266 *o0 = *i2; 267 268 i2++; 269 o0++; 270 } 271 272 return tsys; 273 } -
/trunk/src/SDContainer.h
r20 r30 109 109 const Array<uChar>& getFlags() const { return flags_; } 110 110 const Array<Float>& getTsys() const { return tsys_; } 111 112 Array<Float> getSpectrum(uInt whichBeam, uInt whichIF) const; 113 Array<uChar> getFlags(uInt whichBeam, uInt whichIF) const; 114 Array<Float> getTsys(uInt whichBeam, uInt whichIF) const; 111 115 112 116 Double timestamp; 113 117 String sourcename; 114 118 Double interval; 115 uInt scanid;119 Int scanid; 116 120 117 121 private: -
/trunk/src/SDMemTable.cc
r20 r30 65 65 beamSel_(0), 66 66 polSel_(0) { 67 name_ = String(name); 68 Table tab(name_); 69 table_ = tab.copyToMemoryTable(name_); 67 Table tab("dummy"); 68 table_ = tab.copyToMemoryTable("dummy"); 70 69 } 71 70 … … 75 74 this->polSel_= other.polSel_; 76 75 this->chanMask_ = other.chanMask_; 77 this->name_ = String("dummy");78 76 this->table_ = other.table_.copyToMemoryTable(String("dummy")); 79 77 // clear all rows() … … 91 89 beamSel_(0), 92 90 polSel_(0) { 93 name_ = String("SDMemTable");94 91 String exprs = String("select * from $1 where SCANID == ") 95 92 +String::toString(scanID); 96 93 cerr << exprs << endl; 97 94 Table t = tableCommand(exprs,tab); 98 table_ = t.copyToMemoryTable( name_);95 table_ = t.copyToMemoryTable("dummy"); 99 96 } 100 97 … … 119 116 // Now create a new table from the description. 120 117 121 SetupNewTable aNewTab( name_, td, Table::New);118 SetupNewTable aNewTab("dummy", td, Table::New); 122 119 table_ = Table(aNewTab, Table::Memory, 0); 123 }124 125 std::string SDMemTable::name() const {126 return name_;127 120 } 128 121 … … 206 199 return mask; 207 200 } 208 std::vector<float> SDMemTable::getSpectrum(Int whichRow) const{201 std::vector<float> SDMemTable::getSpectrum(Int whichRow) { 209 202 210 203 std::vector<float> spectrum; … … 222 215 } 223 216 return spectrum; 217 } 218 void SDMemTable::getSpectrum(Vector<Float>& spectrum, Int whichRow=0) { 219 ROArrayColumn<Float> spec(table_, "SPECTRA"); 220 Array<Float> arr; 221 spec.get(whichRow, arr); 222 spectrum.resize(arr.shape()(3)); 223 ArrayAccessor<Float, Axis<0> > aa0(arr); 224 aa0.reset(aa0.begin(uInt(beamSel_)));//go to beam 225 ArrayAccessor<Float, Axis<1> > aa1(aa0); 226 aa1.reset(aa1.begin(uInt(IFSel_)));// go to IF 227 ArrayAccessor<Float, Axis<2> > aa2(aa1); 228 aa2.reset(aa2.begin(uInt(polSel_)));// go to pol 229 230 ArrayAccessor<Float, Axis<0> > va(spectrum); 231 for (ArrayAccessor<Float, Axis<3> > i(aa2); i != i.end(); ++i) { 232 (*va) = (*i); 233 va++; 234 } 235 } 236 237 void SDMemTable::getMask(Vector<Bool>& mask, Int whichRow=0) const { 238 ROArrayColumn<uChar> spec(table_, "FLAGTRA"); 239 Array<uChar> arr; 240 spec.get(whichRow, arr); 241 mask.resize(arr.shape()(3)); 242 243 ArrayAccessor<uChar, Axis<0> > aa0(arr); 244 aa0.reset(aa0.begin(uInt(beamSel_)));//go to beam 245 ArrayAccessor<uChar, Axis<1> > aa1(aa0); 246 aa1.reset(aa1.begin(uInt(IFSel_)));// go to IF 247 ArrayAccessor<uChar, Axis<2> > aa2(aa1); 248 aa2.reset(aa2.begin(uInt(polSel_)));// go to pol 249 250 Bool useUserMask = ( chanMask_.size() == arr.shape()(3) ); 251 252 ArrayAccessor<Bool, Axis<0> > va(mask); 253 std::vector<bool> tmp; 254 tmp = chanMask_; // WHY the fxxx do I have to make a copy here. The 255 // iterator should work on chanMask_?? 256 std::vector<bool>::iterator miter; 257 miter = tmp.begin(); 258 259 for (ArrayAccessor<uChar, Axis<3> > i(aa2); i != i.end(); ++i) { 260 bool out =!static_cast<bool>(*i); 261 if (useUserMask) { 262 out = out && (*miter); 263 miter++; 264 } 265 (*va) = out; 266 va++; 267 } 224 268 } 225 269 … … 303 347 } 304 348 349 SDContainer SDMemTable::getSDContainer(uInt whichRow) const { 350 ROScalarColumn<Double> mjd(table_, "TIME"); 351 ROScalarColumn<String> srcn(table_, "SRCNAME"); 352 ROArrayColumn<Float> spec(table_, "SPECTRA"); 353 ROArrayColumn<uChar> flags(table_, "FLAGTRA"); 354 ROArrayColumn<Float> ts(table_, "TSYS"); 355 ROScalarColumn<Int> scan(table_, "SCANID"); 356 ROScalarColumn<Double> integr(table_, "INTERVAL"); 357 358 SDContainer sdc(nBeam(),nIF(),nPol(),nChan()); 359 mjd.get(whichRow, sdc.timestamp); 360 srcn.get(whichRow, sdc.sourcename); 361 integr.get(whichRow, sdc.interval); 362 scan.get(whichRow, sdc.scanid); 363 Array<Float> spectrum; 364 Array<Float> tsys; 365 Array<uChar> flagtrum; 366 spec.get(whichRow, spectrum); 367 sdc.putSpectrum(spectrum); 368 flags.get(whichRow, flagtrum); 369 sdc.putFlags(flagtrum); 370 ts.get(whichRow, tsys); 371 sdc.putTsys(tsys); 372 return sdc; 373 } 305 374 bool SDMemTable::putSDHeader(const SDHeader& sdh) { 306 375 table_.lock(); … … 322 391 cerr << "Table Header set" << endl; 323 392 return true; 324 } 325 393 }\ 394 395 SDHeader SDMemTable::getSDHeader() const { 396 SDHeader sdh; 397 table_.keywordSet().get("nBeam",sdh.nbeam); 398 table_.keywordSet().get("nIF",sdh.nif); 399 table_.keywordSet().get("nPol",sdh.npol); 400 table_.keywordSet().get("nChan",sdh.nchan); 401 table_.keywordSet().get("Observer", sdh.observer); 402 table_.keywordSet().get("Project", sdh.project); 403 table_.keywordSet().get("Obstype", sdh.obstype); 404 table_.keywordSet().get("AntennaName", sdh.antennaname); 405 table_.keywordSet().get("AntennaPosition", sdh.antennaposition); 406 table_.keywordSet().get("Equinox", sdh.equinox); 407 table_.keywordSet().get("FreqRefFrame", sdh.freqref); 408 table_.keywordSet().get("FreqRefVal", sdh.reffreq); 409 table_.keywordSet().get("Bandwidth", sdh.bandwidth); 410 table_.keywordSet().get("UTC", sdh.utc); 411 return sdh; 412 } 326 413 void SDMemTable::makePersistent(const std::string& filename) { 327 414 table_.deepCopy(filename,Table::New); … … 376 463 return n; 377 464 } 378 379 465 /* 380 466 void SDMemTable::maskChannels(const std::vector<Int>& whichChans ) { -
/trunk/src/SDMemTable.h
r20 r30 69 69 virtual bool putSDHeader(const SDHeader& sdh); 70 70 virtual bool putSDFreqTable(const SDFrequencyTable& sdft) {;} 71 72 //get the dat wrapped up in a meta container 73 virtual SDContainer getSDContainer(uInt whichRow=0) const; 74 virtual SDHeader getSDHeader() const; 71 75 72 76 // get spectrum,mask and tsys for the given row, at the selected 73 // cursor 74 virtual std::vector<float> getSpectrum(Int whichRow) const;77 // cursor - all as stl vectors 78 virtual std::vector<float> getSpectrum(Int whichRow); 75 79 virtual std::vector<bool> getMask(Int whichRow) const; 80 76 81 virtual Float getTsys(Int whichRow) const; 82 // get all as aips++ Vectors 83 virtual void getSpectrum(Vector<Float>& spectrum, Int whichRow=0); 84 virtual void getMask(Vector<Bool>& mask,Int whichRow=0) const; 77 85 78 // get info f rocurrent row86 // get info for current row 79 87 virtual Double getTime(Int whichRow) const ; 80 88 virtual std::string getSourceName(Int whichRow) const; … … 95 103 virtual void summary() const; 96 104 97 // the (irrelevant) name98 std::string name() const;99 100 105 // write to disk as aips++ table 101 106 void makePersistent(const std::string& filename); … … 104 109 SDMemTable getScan(Int scanID); 105 110 106 const TableRecord& getHeader() const { ;}111 const TableRecord& getHeader() const {return table_.keywordSet();} 107 112 // get a handle to the "raw" aips++ table 108 113 const Table& table() { return table_; } … … 114 119 Int nChan() const; 115 120 121 // return the number of rows (integrations) in the table 122 Int nRows() const { return table_.nrow(); } 123 116 124 // return a row as a Masked array, internally converting uChar flags 117 125 // to bool mask … … 120 128 121 129 private: 122 // set up tab elstructure130 // set up table structure 123 131 void setup(); 124 132 // the current cursor into the array -
/trunk/src/SDMemTableWrapper.h
r20 r30 97 97 CountedPtr<SDMemTable> getCP() const {return table_;} 98 98 void summary() { table_->summary(); } 99 std::string name() { return table_->name(); }100 99 101 100 private: … … 125 124 SDMemTableWrapper multiply(const SDMemTableWrapper& in, 126 125 Float factor) { 127 return SDMemTableWrapper(SDMath::multiply(in.getCP(),factor)); 126 return SDMemTableWrapper(SDMath::multiply(in.getCP(),factor)); 128 127 } 128 /* 129 std::vector<float> baseline(const SDMemTableWrapper& in, const std::string& fitexpr) { 130 return SDMath::baseline(in.getCP(), fitexpr); 131 } 132 */ 129 133 }; 130 134 -
/trunk/src/SDReader.cc
r20 r30 77 77 return; 78 78 } 79 79 80 nBeam_ = beams.nelements(); 80 //cout << "Reading " + format + " format from " + inName << endl;81 //cout << "nChannels = " << nChan_ << ", " << "nPol = " << nPol_ << endl82 // << "nIF = " << nIF_ << endl83 // << "nBeams = " << nBeam_ << endl;84 85 81 // Get basic parameters. 86 82 header_ = SDHeader(); … … 89 85 header_.nbeam = nBeam_; 90 86 91 //cerr << " getting header ..." << endl;92 87 Int status = reader_->getHeader(header_.observer, header_.project, 93 88 header_.antennaname, header_.antennaposition, … … 135 130 Complex xCalFctr; 136 131 Vector<Complex> xPol; 137 mjd = 0;138 132 uInt n = seq.size(); 139 //cerr << header_.nif << ", " << header_.nbeam << endl; 133 140 134 uInt stepsize = header_.nif*header_.nbeam; 141 135 cerr << "SDReader stepsize = " << stepsize << endl; 142 uInt scanid = 0;143 String prevName = "_noname_";// temporary until scanid is present144 136 uInt seqi = 0; 145 137 //SDFrequencyTable sdft(); -
/trunk/src/python_SD.cc
r20 r30 27 27 //# AUSTRALIA 28 28 //# 29 //# $Id :29 //# $Id$ 30 30 //#--------------------------------------------------------------------------- 31 31 #include <string> … … 41 41 atnf_sd::python::python_SDMemTable(); 42 42 atnf_sd::python::python_SDReader(); 43 atnf_sd::python::python_SDWriter(); 43 44 atnf_sd::python::python_SDMath(); 44 45 -
/trunk/src/python_SD.h
r20 r30 27 27 //# AUSTRALIA 28 28 //# 29 //# $Id :29 //# $Id$ 30 30 //#--------------------------------------------------------------------------- 31 31 #ifndef _PYTHON_SD_H_ … … 37 37 void python_SDMemTable(); 38 38 void python_SDReader(); 39 void python_SDWriter(); 39 40 void python_SDMath(); 40 41 -
/trunk/src/python_SDMemTable.cc
r20 r30 46 46 .def( init < SDMemTableWrapper, int > () ) 47 47 .def("getscan", &SDMemTableWrapper::getScan) 48 .def("getspectrum", &SDMemTableWrapper::getSpectrum) 49 .def("getmask", &SDMemTableWrapper::getMask) 48 .def("getspectrum", &SDMemTableWrapper::getSpectrum, 49 (boost::python::arg("whichRow")=0) ) 50 .def("getmask", &SDMemTableWrapper::getMask, 51 (boost::python::arg("whichRow")=0) ) 50 52 .def("gettsys", &SDMemTableWrapper::getTsys) 51 53 .def("getsourcename", &SDMemTableWrapper::getSourceName) … … 66 68 .def("makepersistent", &SDMemTableWrapper::makePersistent) 67 69 .def("summary", &SDMemTableWrapper::summary) 68 .def("name", &SDMemTableWrapper::name)69 70 ; 70 71 };
Note:
See TracChangeset
for help on using the changeset viewer.