source: trunk/external-alma/oldasdm2ASAP/OldASDMFiller.cc@ 3116

Last change on this file since 3116 was 3106, checked in by Takeshi Nakazato, 8 years ago

New Development: No

JIRA Issue: No

Ready for Test: Yes/No

Interface Changes: Yes/No

What Interface Changed: Please list interface changes

Test Programs: List test programs

Put in Release Notes: Yes/No

Module(s): Module Names change impacts.

Description: Describe your changes here...


Check-in asap modifications from Jim regarding casacore namespace conversion.

File size: 22.5 KB
Line 
1#include<iostream>
2
3#include <STHeader.h>
4
5#include <measures/Measures/MEpoch.h>
6#include <measures/Measures/MPosition.h>
7#include <measures/Measures/MDirection.h>
8#include <measures/Measures/MCDirection.h>
9#include <measures/Measures/MFrequency.h>
10#include <measures/Measures/MCFrequency.h>
11#include <measures/Measures/MeasFrame.h>
12#include <measures/Measures/MeasConvert.h>
13#include <casa/Arrays/Vector.h>
14#include <casa/Arrays/Matrix.h>
15#include <casa/Quanta/MVTime.h>
16#include <casa/Logging/LogMessage.h>
17
18#include "OldASDMFiller.h"
19
20using namespace std ;
21using namespace casa ;
22using namespace asap ;
23
24OldASDMFiller::OldASDMFiller( CountedPtr<Scantable> stable )
25 : FillerBase( stable ),
26 antennaId_( -1 ),
27 antennaName_( "" ),
28 className_("OldASDMFiller")
29{
30 reader_ = new OldASDMReader() ;
31}
32
33OldASDMFiller::~OldASDMFiller()
34{
35 // nothing to do?
36 logsink_ = 0 ;
37}
38
39void OldASDMFiller::setLogger( CountedPtr<LogSinkInterface> &logsink )
40{
41 logsink_ = logsink ;
42 if ( !(reader_.null()) ) {
43 reader_->setLogger( logsink ) ;
44 }
45}
46
47bool OldASDMFiller::open( const string &filename, const Record &rec )
48{
49 String funcName = "open" ;
50 bool status = reader_->open( filename, rec ) ;
51
52 antennaId_ = reader_->getAntennaId() ;
53 antennaName_ = reader_->getAntennaName() ;
54
55 //logsink_->postLocally( LogMessage("antennaId_ = "+String::toString(antennaId_),LogOrigin(className_,funcName,WHERE)) ) ;
56 //logsink_->postLocally( LogMessage("antennaName_ = "+antennaName_,LogOrigin(className_,funcName,WHERE)) ) ;
57
58 return status ;
59}
60
61void OldASDMFiller::fill()
62{
63 String funcName = "fill" ;
64
65 // header
66 fillHeader() ;
67
68 // set Frame for FREQUENCIES table
69 string sFreqFrame = reader_->getFrame() ;
70 //MFrequency::Types freqFrame = toFrameType( sFreqFrame ) ;
71 MFrequency::Types freqFrame = MFrequency::LSRK ;
72 table_->frequencies().setFrame( freqFrame, false ) ;
73 table_->frequencies().setFrame( freqFrame, true ) ;
74 //logsink_->postLocally( LogMessage("sFreqFrame = "+sFreqFrame,LogOrigin(className_,funcName,WHERE)) ) ;
75
76 Vector<casacore::Double> antpos = table_->getHeader().antennaposition ;
77
78 // data selection
79 reader_->select() ;
80
81 // pick up valid configDescriptionId
82 Vector<uInt> configDescIdList = reader_->getConfigDescriptionIdList() ;
83 uInt numConfigDescId = configDescIdList.size() ;
84
85 //logsink_->postLocally( LogMessage("configDescIdList = "+String::toString(configDescIdList),LogOrigin(className_,funcName,WHERE)) ) ;
86
87 // get field list
88 Vector<uInt> fieldIdList = reader_->getFieldIdList() ;
89 uInt numFieldId = fieldIdList.size() ;
90
91 //logsink_->postLocally( LogMessage("fieldIdList = "+String::toString(fieldIdList),LogOrigin(className_,funcName,WHERE)) ) ;
92
93 // BEAMNO is always 0 since ALMA antenna is single beam
94 uInt beamno = 0 ;
95
96 // REFBEAMNO is -1
97 setReferenceBeam() ;
98
99 // fill FOCUS_ID and add FOCUS row if necessary
100 setFocus() ;
101
102 // CYCLENO
103 map< unsigned int, unsigned int > cycleno ;
104 map< unsigned int, unsigned int >::iterator citer ;
105
106 for ( unsigned int ifield = 0 ; ifield < numFieldId ; ifield++ ) {
107 for ( uInt icon = 0 ; icon < numConfigDescId ; icon++ ) {
108 //logsink_->postLocally( LogMessage("start configDescId "+String::toString(configDescIdList[icon])+" fieldId "+String::toString(fieldIdList[ifield]),LogOrigin(className_,funcName,WHERE)) ) ;
109
110 if ( !(reader_->setMainRow( configDescIdList[icon], fieldIdList[ifield] )) ) {
111 //logsink_->postLocally( LogMessage("skip configDescId "+String::toString(configDescIdList[icon])+" fieldId "+String::toString(fieldIdList[ifield]),LogOrigin(className_,funcName,WHERE)) ) ;
112 continue ;
113 }
114
115 // number of rows
116 uInt nrow = reader_->getNumMainRow() ;
117
118 //logsink_->postLocally( LogMessage("There are "+String::toString(nrow)+" rows in Main table corresponding to configDescId "+String::toString(configDescIdList[icon])+" fieldId "+String::toString(fieldIdList[ifield]),LogOrigin(className_,funcName,WHERE)) ) ;
119
120 for ( uInt irow = 0 ; irow < nrow ; irow++ ) {
121
122 // set main row
123 if ( !(reader_->setMainRow( irow )) ) {
124 // skip row since the row doesn't have valid configDescId
125 //logsink_->postLocally( LogMessage("skip "+String::toString(irow)+" since OldASDMReader::setMainrow() returns False",LogOrigin(className_,funcName,WHERE)) ) ;
126 continue ;
127 }
128
129 // scan and subscan
130 unsigned int scanno = reader_->getScanNoOfCurrentRow() ;
131 citer = cycleno.find( scanno ) ;
132 if ( citer == cycleno.end() )
133 cycleno[scanno] = 0 ;
134
135 // set data
136 if ( !(reader_->setData()) ) {
137 // skip row since reader failed to retrieve data
138 //logsink_->postLocally( LogMessage("skip "+String::toString(irow)+" since OldASDMReader::setData() returns False",LogOrigin(className_,funcName,WHERE)) ) ;
139 continue ;
140 }
141
142 unsigned int numData = reader_->getNumData() ;
143 double refpix = 0.0 ;
144 double refval = 0.0 ;
145 double incr = 0.0 ;
146 string freqref = "" ;
147
148 for ( unsigned int idata = 0 ; idata < numData ; idata++ ) {
149 // prepare to extract binary data
150 reader_->prepareData( idata ) ;
151
152 // subscan number
153 unsigned int subscanno = reader_->getSubscanNo() ;
154
155 // IFNO
156 uInt ifno = reader_->getIFNo() ;
157
158 // source spec
159 int srctype = reader_->getSrcType( scanno, subscanno ) ;
160 string srcname ;
161 string fieldname ;
162 vector<double> srcDirection ;
163 vector<double> srcProperMotion ;
164 double sysVel ;
165 vector<double> rf ;
166 reader_->getSourceProperty( srcname,
167 fieldname,
168 srcDirection,
169 srcProperMotion,
170 sysVel,
171 rf ) ;
172
173 // fill MOLECULE_ID and add MOLECULES row if necessary
174 Vector<casacore::Double> restFreqs( rf.size() ) ;
175 for ( uInt i = 0 ; i < rf.size() ; i++ )
176 restFreqs[i] = (casacore::Double)(rf[i]) ;
177 setMolecule( restFreqs ) ;
178
179 // time and interval
180 casacore::Double mjd = (casacore::Double)(reader_->getTime()) ;
181 casacore::Double interval = (casacore::Double)(reader_->getInterval()) ;
182
183 // fill TIME and INTERVAL
184 setTime( mjd, interval ) ;
185
186 // fill SRCNAME, SRCTYPE, FIELDNAME, SRCDIRECTION, SRCPROPERMOTION, and SRCVELOCITY
187 Vector<casacore::Double> srcDir( 2 ) ;
188 srcDir[0] = (casacore::Double)(srcDirection[0]) ;
189 srcDir[1] = (casacore::Double)(srcDirection[1]) ;
190 Vector<casacore::Double> srcPM( 2 ) ;
191 srcPM[0] = (casacore::Double)(srcProperMotion[0]) ;
192 srcPM[1] = (casacore::Double)(srcProperMotion[1]) ;
193 setSource( srcname, srctype, fieldname, srcDir, srcPM, (casacore::Double)sysVel ) ;
194
195 // fill FLAGROW
196 unsigned int flagrow = reader_->getFlagRow() ;
197 setFlagrow( (uInt)flagrow ) ;
198
199 // fill WEATHER_ID and add WEATHER row if necessary
200 float temperature ;
201 float pressure ;
202 float humidity ;
203 float windspeed ;
204 float windaz ;
205 reader_->getWeatherInfo( temperature,
206 pressure,
207 humidity,
208 windspeed,
209 windaz ) ;
210 setWeather2( (casacore::Float)temperature,
211 (casacore::Float)pressure,
212 (casacore::Float)humidity,
213 (casacore::Float)windspeed,
214 (casacore::Float)windaz ) ;
215
216 // fill AZIMUTH, ELEVATION, DIRECTION and SCANRATE
217 vector<double> dir ;
218 double az ;
219 double el ;
220 vector<double> srate ;
221 reader_->getPointingInfo( dir,
222 az,
223 el,
224 srate ) ;
225 Vector<casacore::Double> scanRate( 2, 0.0 ) ;
226 Vector<casacore::Double> direction( 2, 0.0 ) ;
227 if ( srate.size() > 0 ) {
228 scanRate[0] = (casacore::Double)(srate[0]) ;
229 scanRate[1] = (casacore::Double)(srate[1]) ;
230 }
231 setScanRate( scanRate ) ;
232 if ( dir.size() > 0 ) {
233 direction[0] = (casacore::Double)(dir[0]) ;
234 direction[1] = (casacore::Double)(dir[1]) ;
235 }
236 else {
237 toJ2000( direction, az, el, mjd, antpos ) ;
238 }
239 //logsink_->postLocally( LogMessage("direction = "+String::toString(direction),LogOrigin(className_,funcName,WHERE)) ) ;
240 setDirection( direction, (casacore::Float)az, (casacore::Float)el ) ;
241
242 // REFPIX, REFVAL, INCREMENT
243 String ifkey = getIFKey( ifno ) ;
244 if ( ifrec_.isDefined( ifkey ) ) {
245 getFrequencyRec( ifkey, refpix, refval, incr ) ;
246 }
247 else {
248 reader_->getFrequency( refpix, refval, incr, freqref ) ;
249 refval = (double)toLSRK( casacore::Double(refval),
250 String(freqref),
251 mjd,
252 antpos,
253 //direction,
254 srcDir,
255 "J2000" ) ;
256 setFrequencyRec( ifkey, refpix, refval, incr ) ;
257 }
258
259 // fill FREQ_ID and add FREQUENCIES row if necessary
260 setFrequency( (casacore::Double)refpix, (casacore::Double)refval, (casacore::Double)incr ) ;
261
262 // loop on polarization
263 vector<unsigned int> dataShape = reader_->getDataShape() ;
264// ostringstream oss ;
265// for ( unsigned int i = 0 ; i < dataShape.size() ; i++ ) {
266// if ( i == 0 )
267// oss << "dataShape=[" << dataShape[i] << ", " ;
268// else if ( i == dataShape.size()-1 )
269// oss << dataShape[i] << "]" ;
270// else
271// oss << dataShape[i] << ", " ;
272// }
273 //logsink_->postLocally( LogMessage(oss.str(),LogOrigin(className_,funcName,WHERE)) ) ;
274
275 unsigned int numPol = dataShape[0] ;
276 unsigned int numChan = dataShape[1] ;
277
278 //logsink_->postLocally( LogMessage("numPol = "+String::toString(numPol),LogOrigin(className_,funcName,WHERE)) ) ;
279
280 // OPACITY
281 vector<float> tau = reader_->getOpacity() ;
282 Vector<casacore::Float> opacity = toVector( tau, numPol ) ;
283
284 // SPECTRA, FLAGTRA, TSYS, TCAL
285 float *sp = reader_->getSpectrum() ;
286 vector< vector<float> > ts ;
287 vector< vector<float> > tc ;
288 reader_->getTcalAndTsys( tc, ts ) ;
289 Matrix<casacore::Float> spectra = toMatrix( sp, numPol, numChan ) ;
290 Vector<uChar> flagtra( numChan, 0 ) ;
291 Matrix<casacore::Float> tsys = toMatrix( ts, numPol, numChan ) ;
292 Matrix<casacore::Float> tcal = toMatrix( tc, numPol, numChan ) ;
293// String caltime = "" ;
294// if ( anyNE( tcal, (casacore::Float)1.0 ) )
295// caltime = toTcalTime( mjd ) ;
296 String caltime = toTcalTime( mjd ) ;
297
298 for ( unsigned int ipol = 0 ; ipol < numPol ; ipol++ ) {
299
300 // fill SCANNO, CYCLENO, IFNO, POLNO, and BEAMNO
301 setIndex( (uInt)scanno-1, (uInt)cycleno[scanno], ifno, ipol, beamno ) ;
302
303 // fill SPECTRA, FLAGTRA, TSYS
304 setSpectrum( spectra.row(ipol), flagtra, tsys.row(ipol) ) ;
305
306 // fill TCAL_ID and add TCAL row if necessary
307 setTcal2( caltime, tcal.row(ipol) ) ;
308
309 // fill OPACITY
310 setOpacity( opacity[ipol] ) ;
311
312 // commit row
313 commitRow() ;
314 }
315
316 // increment CYCLENO
317 cycleno[scanno]++ ;
318 }
319 }
320 }
321 }
322
323 return ;
324}
325
326void OldASDMFiller::close()
327{
328 reader_->close() ;
329 reader_ = 0 ;
330
331 return ;
332}
333
334void OldASDMFiller::fillHeader()
335{
336 STHeader hdr ;
337
338 reader_->fillHeader( hdr.nchan,
339 hdr.npol,
340 hdr.nif,
341 hdr.nbeam,
342 hdr.observer,
343 hdr.project,
344 hdr.obstype,
345 hdr.antennaname,
346 hdr.antennaposition,
347 hdr.equinox,
348 hdr.freqref,
349 hdr.reffreq,
350 hdr.bandwidth,
351 hdr.utc,
352 hdr.fluxunit,
353 hdr.epoch,
354 hdr.poltype ) ;
355
356 if ( hdr.freqref != "LSRK" ) {
357// String freqref ;
358// if (hdr.freqref == "TOPOCENT") {
359// freqref = "TOPO";
360// } else if (hdr.freqref == "GEOCENTR") {
361// freqref = "GEO";
362// } else if (hdr.freqref == "BARYCENT") {
363// freqref = "BARY";
364// } else if (hdr.freqref == "GALACTOC") {
365// freqref = "GALACTO";
366// } else if (hdr.freqref == "LOCALGRP") {
367// freqref = "LGROUP";
368// } else if (hdr.freqref == "CMBDIPOL") {
369// freqref = "CMB";
370// } else if (hdr.freqref == "SOURCE") {
371// freqref = "REST";
372// }
373 vector<double> sdir ;
374 string ref ;
375 reader_->getSourceDirection( sdir, ref ) ;
376 Vector<casacore::Double> sourceDir( sdir ) ;
377 hdr.reffreq = toLSRK( hdr.reffreq, hdr.freqref, hdr.utc, hdr.antennaposition, sdir, String(ref) ) ;
378 hdr.freqref = "LSRK" ;
379 }
380
381 setHeader( hdr ) ;
382}
383
384String OldASDMFiller::getIFKey( uInt ifno )
385{
386 return "IFNO"+String::toString( ifno ) ;
387}
388
389void OldASDMFiller::getFrequencyRec( String key,
390 double &refpix,
391 double &refval,
392 double &incr )
393{
394 Record frec = ifrec_.asRecord( key ) ;
395 refpix = frec.asdouble( "REFPIX" ) ;
396 refval = frec.asdouble( "REFVAL" ) ;
397 incr = frec.asdouble( "INCREMENT" ) ;
398}
399
400void OldASDMFiller::setFrequencyRec( String key,
401 double refpix,
402 double refval,
403 double incr )
404{
405 Record frec ;
406 frec.define( "REFPIX", refpix ) ;
407 frec.define( "REFVAL", refval ) ;
408 frec.define( "INCREMENT", incr ) ;
409 ifrec_.defineRecord( key, frec ) ;
410}
411
412Matrix<casacore::Float> OldASDMFiller::toMatrix( float *sp,
413 unsigned int npol,
414 unsigned int nchan )
415{
416 Matrix<casacore::Float> mSp( npol, nchan ) ;
417 if ( npol <= 2 ) {
418 // 1 or 2 polarization case
419 for ( unsigned int ich = 0 ; ich < nchan ; ich++ ) {
420 for ( unsigned int ipol = 0 ; ipol < npol ; ipol++ ) {
421 mSp(ipol,ich) = (casacore::Float)(sp[npol*ich+ipol]) ;
422 }
423 }
424 }
425 else {
426 // 4 polarization case
427 for ( unsigned int ich = 0 ; ich < nchan ; ich++ ) {
428 mSp(0,ich) = (casacore::Float)(sp[4*ich]) ; // Re(XX)
429 mSp(1,ich) = (casacore::Float)(sp[4*ich+4]) ; // Re(YY)
430 mSp(2,ich) = (casacore::Float)(sp[4*ich+2]) ; // Re(XY)
431 mSp(3,ich) = (casacore::Float)(sp[4*ich+3]) ; // Im(XY)
432 }
433 }
434 return mSp ;
435}
436
437Matrix<casacore::Float> OldASDMFiller::toMatrix( vector< vector<float> > &tsys,
438 unsigned int npol,
439 unsigned int nchan )
440{
441 unsigned int numRec = tsys.size() ;
442 unsigned int numChan = tsys[0].size() ;
443 Matrix<casacore::Float> ret ;
444 if ( npol == numRec && nchan == numChan ) {
445 ret.resize( npol, nchan ) ;
446 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
447 for ( unsigned int ic = 0 ; ic < nchan ; ic++ )
448 ret( ip, ic ) = (casacore::Float)(tsys[ip][ic]) ;
449 }
450 else if ( npol == numRec && numChan == 1 ) {
451 ret.resize( npol, 1 ) ;
452 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
453 ret( ip, 0 ) = (casacore::Float)(tsys[0][0]) ;
454 }
455 else if ( numRec == 1 && nchan == numChan ) {
456 ret.resize( npol, nchan ) ;
457 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
458 for ( unsigned int ic = 0 ; ic < nchan ; ic++ )
459 ret( ip, ic ) = (casacore::Float)(tsys[0][ic]) ;
460 }
461 else if ( numRec == 1 && numChan == 1 ) {
462 ret.resize( npol, 1 ) ;
463 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
464 ret( ip, 0 ) = (casacore::Float)(tsys[0][0]) ;
465 }
466 else if ( numRec == 2 && npol == 4 && numChan == nchan ) {
467 // TODO: How to determine Tsys for XY?
468 // at the moment Tsys[XY] = 0.5*(Tsys[X]+Tsys[Y])
469 ret.resize( npol, nchan ) ;
470 for ( unsigned int ic = 0 ; ic < nchan ; ic++ ) {
471 casacore::Float tsysxy = (casacore::Float)(0.5*(tsys[0][ic]+tsys[1][ic])) ;
472 ret( 0, ic ) = (casacore::Float)(tsys[0][ic]) ;
473 ret( 1, ic ) = (casacore::Float)(tsys[1][ic]) ;
474 ret( 2, ic ) = tsysxy ;
475 ret( 3, ic ) = tsysxy ;
476 }
477 }
478 else if ( numRec == 2 && npol == 4 && numChan == 1 ) {
479 // TODO: How to determine Tsys for XY?
480 // at the moment Tsys[XY] = 0.5*(Tsys[X]+Tsys[Y])
481 ret.resize( npol, 1 ) ;
482 casacore::Float tsysxy = (casacore::Float)(0.5*(tsys[0][0]+tsys[1][0])) ;
483 ret( 0, 0 ) = (casacore::Float)(tsys[0][0]) ;
484 ret( 1, 0 ) = (casacore::Float)(tsys[1][0]) ;
485 ret( 2, 0 ) = tsysxy ;
486 ret( 3, 0 ) = tsysxy ;
487 }
488 else {
489 // I don't know how to handle ...
490 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
491 for ( unsigned int ic = 0 ; ic < nchan ; ic++ )
492 ret( ip, ic ) = (casacore::Float)(tsys[0][ic]) ;
493 }
494 return ret ;
495}
496
497Vector<casacore::Float> OldASDMFiller::toVector( vector<float> &tau,
498 unsigned int npol )
499{
500 String funcName = "toVector" ;
501
502 Vector<casacore::Float> ret( npol ) ;
503 //logsink_->postLocally( LogMessage("tau0="+String::toString(tau[0]),LogOrigin(className_,funcName,WHERE)) ) ;
504 if ( npol == 4 ) {
505 ret[0] = (casacore::Float)tau[0] ;
506 ret[1] = (casacore::Float)tau[1] ;
507 ret[2] = 0.5 * ( ret[0] + ret[1] ) ;
508 ret[3] = ret[2] ;
509 }
510 else if ( npol == tau.size() ) {
511 for ( unsigned int ipol = 0 ; ipol < npol ; ipol++ )
512 ret[ipol] = (casacore::Float)tau[ipol] ;
513 }
514 else {
515 // I don't know how to handle...
516 for ( unsigned int ipol = 0 ; ipol < npol ; ipol++ )
517 ret[ipol] = (casacore::Float)tau[0] ;
518 }
519 //logsink_->postLocally( LogMessage("tau="+String::toString(ret),LogOrigin(className_,funcName,WHERE)) ) ;
520 return ret ;
521}
522
523String OldASDMFiller::toTcalTime( casacore::Double mjd )
524{
525 return MVTime( mjd ).string( MVTime::YMD ) ;
526}
527
528void OldASDMFiller::toJ2000( Vector<casacore::Double> &dir,
529 double az,
530 double el,
531 casacore::Double mjd,
532 Vector<casacore::Double> antpos )
533{
534 String funcName = "toJ2000" ;
535
536 Vector<casacore::Double> azel( 2 ) ;
537 azel[0] = az ;
538 azel[1] = el ;
539// MEpoch me( Quantity( mjd, "d" ), MEpoch::UTC ) ;
540// Vector<Quantity> qantpos( 3 ) ;
541// qantpos[0] = Quantity( antpos[0], "m" ) ;
542// qantpos[1] = Quantity( antpos[1], "m" ) ;
543// qantpos[2] = Quantity( antpos[2], "m" ) ;
544// MPosition mp( MVPosition( qantpos ),
545// MPosition::ITRF ) ;
546// // mp.print( os_.output() ) ;
547// MeasFrame mf( me, mp ) ;
548// MDirection::Convert toj2000( MDirection::AZELGEO,
549// MDirection::Ref( MDirection::J2000, mf ) ) ;
550// dir = toj2000( azel ).getAngle( "rad" ).getValue() ;
551 dir = toJ2000( azel, "AZELGEO", mjd, antpos ) ;
552 //logsink_->postLocally( LogMessage("dir = "+String::toString(dir),LogOrigin(className_,funcName,WHERE)) ) ;
553}
554
555Vector<casacore::Double> OldASDMFiller::toJ2000( Vector<casacore::Double> dir,
556 String dirref,
557 casacore::Double mjd,
558 Vector<casacore::Double> antpos )
559{
560 Vector<casacore::Double> newd( dir ) ;
561 if ( dirref != "J2000" ) {
562 MEpoch me( Quantity( mjd, "d" ), MEpoch::UTC ) ;
563 Vector<Quantity> qantpos( 3 ) ;
564 qantpos[0] = Quantity( antpos[0], "m" ) ;
565 qantpos[1] = Quantity( antpos[1], "m" ) ;
566 qantpos[2] = Quantity( antpos[2], "m" ) ;
567 MPosition mp( MVPosition( qantpos ),
568 MPosition::ITRF ) ;
569 // mp.print( os_.output() ) ;
570 MeasFrame mf( me, mp ) ;
571 MDirection::Types dirtype ;
572 Bool b = MDirection::getType( dirtype, dirref ) ;
573 if ( b ) {
574 MDirection::Convert toj2000( dirtype,
575 MDirection::Ref( MDirection::J2000, mf ) ) ;
576 newd = toj2000( dir ).getAngle( "rad" ).getValue() ;
577 }
578 }
579 return newd ;
580}
581
582MFrequency::Types OldASDMFiller::toFrameType( string &s )
583{
584 MFrequency::Types ftype = MFrequency::DEFAULT ;
585 if ( s == "LABREST" )
586 ftype = MFrequency::REST ;
587 else {
588 Bool b = MFrequency::getType( ftype, String(s) ) ;
589 if (!b)
590 ftype = MFrequency::DEFAULT ;
591 }
592 return ftype ;
593}
594
595casacore::Double OldASDMFiller::toLSRK( casacore::Double freq,
596 String freqref,
597 casacore::Double utc,
598 Vector<casacore::Double> antpos,
599 Vector<casacore::Double> dir,
600 String dirref )
601{
602 String funcName = "toLSRK" ;
603
604 //logsink_->postLocally( LogMessage("freqref = "+freqref,LogOrigin(className_,funcName,WHERE)) ) ;
605 casacore::Double newf = freq ;
606 if ( freqref != "LSRK" ) {
607 MEpoch me( Quantum<casacore::Double>( utc, Unit("d") ), MEpoch::UTC ) ;
608 Vector< Quantum<casacore::Double> > antposQ( 3 ) ;
609 for ( int i = 0 ; i < 3 ; i++ )
610 antposQ[i] = Quantum<casacore::Double>( antpos[i], Unit("m") ) ;
611 MPosition mp( antposQ, MPosition::ITRF ) ;
612 MDirection::Types dirtype ;
613 Bool b = MDirection::getType( dirtype, dirref ) ;
614 if ( !b )
615 dirtype = MDirection::J2000 ;
616 MDirection md( Quantum<casacore::Double>( dir[0], Unit("rad") ),
617 Quantum<casacore::Double>( dir[1], Unit("rad") ),
618 dirtype ) ;
619 MeasFrame mf( me, mp, md ) ;
620 MFrequency::Types freqtype ;
621 b = MFrequency::getType( freqtype, freqref ) ;
622 if ( !b )
623 freqtype = MFrequency::TOPO ;
624 MFrequency::Convert tolsr( freqtype,
625 MFrequency::Ref( MFrequency::LSRK, mf ) ) ;
626 newf = tolsr( Quantum<casacore::Double>( freq, Unit("Hz") ) ).get( "Hz" ).getValue() ;
627 //logsink_->postLocally( LogMessage("freq = "+String::toString(freq)+", newf = "+String::toString(newf),LogOrigin(className_,funcName,WHERE)) ) ;
628 }
629 return newf ;
630}
Note: See TracBrowser for help on using the repository browser.