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

Last change on this file since 2284 was 2273, checked in by Takeshi Nakazato, 13 years ago

New Development: No

JIRA Issue: Yes CAS-1913

Ready for Test: Yes

Interface Changes: 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...

Support latest ASDM definition in asdm2ASAP.
Now asdm2ASAP is linked to libalma_v3.so to be able to read latest ASDM.

The importasdm task invokes asdm2ASAP when singledish is True.

Older version of asdm2ASAP is renamec as oldasdm2ASAP.
The oldasdm2ASAP and related classes are built by linking to libalma.so.
It is installed but not used by any tasks.


File size: 22.4 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<casa::Double> antpos = table_->getHeader().antennaposition ;
77
78 //STHeader hdr = table_->getHeader() ;
79
80 // data selection
81 reader_->select() ;
82
83 // pick up valid configDescriptionId
84 Vector<uInt> configDescIdList = reader_->getConfigDescriptionIdList() ;
85 uInt numConfigDescId = configDescIdList.size() ;
86
87 //logsink_->postLocally( LogMessage("configDescIdList = "+String::toString(configDescIdList),LogOrigin(className_,funcName,WHERE)) ) ;
88
89 // get field list
90 Vector<uInt> fieldIdList = reader_->getFieldIdList() ;
91 uInt numFieldId = fieldIdList.size() ;
92
93 //logsink_->postLocally( LogMessage("fieldIdList = "+String::toString(fieldIdList),LogOrigin(className_,funcName,WHERE)) ) ;
94
95 // BEAMNO is always 0 since ALMA antenna is single beam
96 uInt beamno = 0 ;
97
98 // REFBEAMNO is -1
99 setReferenceBeam() ;
100
101 // fill FOCUS_ID and add FOCUS row if necessary
102 setFocus() ;
103
104 // CYCLENO
105 unsigned int cycleno = 0 ;
106
107 for ( unsigned int ifield = 0 ; ifield < numFieldId ; ifield++ ) {
108 for ( uInt icon = 0 ; icon < numConfigDescId ; icon++ ) {
109 //logsink_->postLocally( LogMessage("start configDescId "+String::toString(configDescIdList[icon])+" fieldId "+String::toString(fieldIdList[ifield]),LogOrigin(className_,funcName,WHERE)) ) ;
110
111 //Bool status = reader_->setMainRow( configDescIdList[icon], fieldIdList[ifield] ) ;
112 if ( !(reader_->setMainRow( configDescIdList[icon], fieldIdList[ifield] )) ) {
113 //logsink_->postLocally( LogMessage("skip configDescId "+String::toString(configDescIdList[icon])+" fieldId "+String::toString(fieldIdList[ifield]),LogOrigin(className_,funcName,WHERE)) ) ;
114 continue ;
115 }
116
117 // number of rows
118 uInt nrow = reader_->getNumMainRow() ;
119
120 //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)) ) ;
121
122 for ( uInt irow = 0 ; irow < nrow ; irow++ ) {
123
124 // set main row
125 if ( !(reader_->setMainRow( irow )) ) {
126 // skip row since the row doesn't have valid configDescId
127 //logsink_->postLocally( LogMessage("skip "+String::toString(irow),LogOrigin(className_,funcName,WHERE)) ) ;
128 continue ;
129 }
130
131 // scan and subscan
132 unsigned int scanno = reader_->getScanNo() ;
133 //uInt subscanno = reader_->getSubscanNo() ;
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),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
150 // subscan number
151 unsigned int subscanno = reader_->getSubscanNo( idata ) ;
152
153 // IFNO
154 uInt ifno = reader_->getIFNo( idata ) ;
155
156 // rest frequency
157 vector<double> rf = reader_->getRestFrequency( idata ) ;
158
159 // fill MOLECULE_ID and add MOLECULES row if necessary
160 Vector<casa::Double> restFreqs( rf.size() ) ;
161 for ( uInt i = 0 ; i < rf.size() ; i++ )
162 restFreqs[i] = (casa::Double)(rf[i]) ;
163 setMolecule( restFreqs ) ;
164
165 // time and interval
166 casa::Double mjd = (casa::Double)(reader_->getTime( idata )) ;
167 casa::Double interval = (casa::Double)(reader_->getInterval( idata )) ;
168
169 // fill TIME and INTERVAL
170 setTime( mjd, interval ) ;
171
172
173 // source spec
174 string srcname = reader_->getSourceName( idata ) ;
175 string fieldname = reader_->getFieldName( idata ) ;
176 int srctype = reader_->getSrcType( scanno, subscanno ) ;
177 vector<double> srcDirection = reader_->getSourceDirection( idata ) ;
178 //vector<double> srcDirection ;
179 //string srcDirRef ;
180 //reader_->getSourceDirection( idata, srcDirection, srcDirRef ) ;
181 vector<double> srcProperMotion = reader_->getSourceProperMotion( idata ) ;
182 double sysVel = reader_->getSysVel( idata ) ;
183
184 // fill SRCNAME, SRCTYPE, FIELDNAME, SRCDIRECTION, SRCPROPERMOTION, and SRCVELOCITY
185 Vector<casa::Double> srcDir( 2 ) ;
186 srcDir[0] = (casa::Double)(srcDirection[0]) ;
187 srcDir[1] = (casa::Double)(srcDirection[1]) ;
188 Vector<casa::Double> srcPM( 2 ) ;
189 srcPM[0] = (casa::Double)(srcProperMotion[0]) ;
190 srcPM[1] = (casa::Double)(srcProperMotion[1]) ;
191 setSource( srcname, srctype, fieldname, srcDir, srcPM, (casa::Double)sysVel ) ;
192
193 // fill FLAGROW
194 unsigned int flagrow = reader_->getFlagRow( idata ) ;
195 setFlagrow( (uInt)flagrow ) ;
196
197 // fill WEATHER_ID and add WEATHER row if necessary
198 float temperature ;
199 float pressure ;
200 float humidity ;
201 float windspeed ;
202 float windaz ;
203 reader_->getWeatherInfo( idata,
204 temperature,
205 pressure,
206 humidity,
207 windspeed,
208 windaz ) ;
209 setWeather2( (casa::Float)temperature,
210 (casa::Float)pressure,
211 (casa::Float)humidity,
212 (casa::Float)windspeed,
213 (casa::Float)windaz ) ;
214
215 // fill AZIMUTH, ELEVATION, DIRECTION and SCANRATE
216 vector<double> dir ;
217 double az ;
218 double el ;
219 vector<double> srate ;
220 reader_->getPointingInfo( idata,
221 dir,
222 az,
223 el,
224 srate ) ;
225 Vector<casa::Double> scanRate( 2, 0.0 ) ;
226 Vector<casa::Double> direction( 2, 0.0 ) ;
227 if ( srate.size() > 0 ) {
228 scanRate[0] = (casa::Double)(srate[0]) ;
229 scanRate[1] = (casa::Double)(srate[1]) ;
230 }
231 setScanRate( scanRate ) ;
232 if ( dir.size() > 0 ) {
233 direction[0] = (casa::Double)(dir[0]) ;
234 direction[1] = (casa::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, (casa::Float)az, (casa::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( idata, refpix, refval, incr, freqref ) ;
249 refval = (double)toLSRK( casa::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( (casa::Double)refpix, (casa::Double)refval, (casa::Double)incr ) ;
261
262 // loop on polarization
263 vector<unsigned int> dataShape = reader_->getDataShape( idata ) ;
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 //int numPol = reader_->getNumPol( idata ) ;
276 unsigned int numPol = dataShape[0] ;
277 unsigned int numChan = dataShape[1] ;
278
279 //logsink_->postLocally( LogMessage("numPol = "+String::toString(numPol),LogOrigin(className_,funcName,WHERE)) ) ;
280
281 // OPACITY
282 vector<float> tau = reader_->getOpacity( idata ) ;
283 Vector<casa::Float> opacity = toVector( tau, numPol ) ;
284
285 // SPECTRA, FLAGTRA, TSYS, TCAL
286 float *sp = reader_->getSpectrum( idata ) ;
287 //vector< vector<float> > ts = reader_->getTsys( idata ) ;
288 //vector< vector<float> > tc = reader_->getTcal( idata ) ;
289 vector< vector<float> > ts ;
290 vector< vector<float> > tc ;
291 reader_->getTcalAndTsys( idata, tc, ts ) ;
292 Matrix<casa::Float> spectra = toMatrix( sp, numPol, numChan ) ;
293 Vector<uChar> flagtra( numChan, 0 ) ;
294 Matrix<casa::Float> tsys = toMatrix( ts, numPol, numChan ) ;
295 Matrix<casa::Float> tcal = toMatrix( tc, numPol, numChan ) ;
296// String caltime = "" ;
297// if ( anyNE( tcal, (casa::Float)1.0 ) )
298// caltime = toTcalTime( mjd ) ;
299 String caltime = toTcalTime( mjd ) ;
300
301 for ( unsigned int ipol = 0 ; ipol < numPol ; ipol++ ) {
302
303 // fill SCANNO, CYCLENO, IFNO, POLNO, and BEAMNO
304 setIndex( (uInt)scanno-1, (uInt)cycleno, ifno, ipol, beamno ) ;
305
306 // fill SPECTRA, FLAGTRA, TSYS
307 setSpectrum( spectra.row(ipol), flagtra, tsys.row(ipol) ) ;
308
309 // fill TCAL_ID and add TCAL row if necessary
310 setTcal2( caltime, tcal.row(ipol) ) ;
311
312 // fill OPACITY
313 setOpacity( opacity[ipol] ) ;
314
315 // commit row
316 commitRow() ;
317 }
318
319 // increment CYCLENO
320 cycleno++ ;
321 }
322 }
323 }
324 }
325
326 return ;
327}
328
329void OldASDMFiller::close()
330{
331 reader_->close() ;
332 reader_ = 0 ;
333
334 return ;
335}
336
337void OldASDMFiller::fillHeader()
338{
339 STHeader hdr ;
340
341 reader_->fillHeader( hdr.nchan,
342 hdr.npol,
343 hdr.nif,
344 hdr.nbeam,
345 hdr.observer,
346 hdr.project,
347 hdr.obstype,
348 hdr.antennaname,
349 hdr.antennaposition,
350 hdr.equinox,
351 hdr.freqref,
352 hdr.reffreq,
353 hdr.bandwidth,
354 hdr.utc,
355 hdr.fluxunit,
356 hdr.epoch,
357 hdr.poltype ) ;
358
359 if ( hdr.freqref != "LSRK" ) {
360// String freqref ;
361// if (hdr.freqref == "TOPOCENT") {
362// freqref = "TOPO";
363// } else if (hdr.freqref == "GEOCENTR") {
364// freqref = "GEO";
365// } else if (hdr.freqref == "BARYCENT") {
366// freqref = "BARY";
367// } else if (hdr.freqref == "GALACTOC") {
368// freqref = "GALACTO";
369// } else if (hdr.freqref == "LOCALGRP") {
370// freqref = "LGROUP";
371// } else if (hdr.freqref == "CMBDIPOL") {
372// freqref = "CMB";
373// } else if (hdr.freqref == "SOURCE") {
374// freqref = "REST";
375// }
376 vector<double> sdir ;
377 string ref ;
378 reader_->getSourceDirection( sdir, ref ) ;
379 Vector<casa::Double> sourceDir( sdir ) ;
380 hdr.reffreq = toLSRK( hdr.reffreq, hdr.freqref, hdr.utc, hdr.antennaposition, sdir, String(ref) ) ;
381 hdr.freqref = "LSRK" ;
382 }
383
384 setHeader( hdr ) ;
385}
386
387String OldASDMFiller::getIFKey( uInt ifno )
388{
389 return "IFNO"+String::toString( ifno ) ;
390}
391
392void OldASDMFiller::getFrequencyRec( String key,
393 double &refpix,
394 double &refval,
395 double &incr )
396{
397 Record frec = ifrec_.asRecord( key ) ;
398 refpix = frec.asdouble( "REFPIX" ) ;
399 refval = frec.asdouble( "REFVAL" ) ;
400 incr = frec.asdouble( "INCREMENT" ) ;
401}
402
403void OldASDMFiller::setFrequencyRec( String key,
404 double refpix,
405 double refval,
406 double incr )
407{
408 Record frec ;
409 frec.define( "REFPIX", refpix ) ;
410 frec.define( "REFVAL", refval ) ;
411 frec.define( "INCREMENT", incr ) ;
412 ifrec_.defineRecord( key, frec ) ;
413}
414
415Matrix<casa::Float> OldASDMFiller::toMatrix( float *sp,
416 unsigned int npol,
417 unsigned int nchan )
418{
419 Matrix<casa::Float> mSp( npol, nchan ) ;
420 if ( npol <= 2 ) {
421 // 1 or 2 polarization case
422 for ( unsigned int ich = 0 ; ich < nchan ; ich++ ) {
423 for ( unsigned int ipol = 0 ; ipol < npol ; ipol++ ) {
424 mSp(ipol,ich) = (casa::Float)(sp[npol*ich+ipol]) ;
425 }
426 }
427 }
428 else {
429 // 4 polarization case
430 for ( unsigned int ich = 0 ; ich < nchan ; ich++ ) {
431 mSp(0,ich) = (casa::Float)(sp[4*ich]) ; // Re(XX)
432 mSp(1,ich) = (casa::Float)(sp[4*ich+4]) ; // Re(YY)
433 mSp(2,ich) = (casa::Float)(sp[4*ich+2]) ; // Re(XY)
434 mSp(3,ich) = (casa::Float)(sp[4*ich+3]) ; // Im(XY)
435 }
436 }
437 return mSp ;
438}
439
440Matrix<casa::Float> OldASDMFiller::toMatrix( vector< vector<float> > &tsys,
441 unsigned int npol,
442 unsigned int nchan )
443{
444 unsigned int numRec = tsys.size() ;
445 unsigned int numChan = tsys[0].size() ;
446 Matrix<casa::Float> ret ;
447 if ( npol == numRec && nchan == numChan ) {
448 ret.resize( npol, nchan ) ;
449 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
450 for ( unsigned int ic = 0 ; ic < nchan ; ic++ )
451 ret( ip, ic ) = (casa::Float)(tsys[ip][ic]) ;
452 }
453 else if ( npol == numRec && numChan == 1 ) {
454 ret.resize( npol, 1 ) ;
455 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
456 ret( ip, 0 ) = (casa::Float)(tsys[0][0]) ;
457 }
458 else if ( numRec == 1 && nchan == numChan ) {
459 ret.resize( npol, nchan ) ;
460 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
461 for ( unsigned int ic = 0 ; ic < nchan ; ic++ )
462 ret( ip, ic ) = (casa::Float)(tsys[0][ic]) ;
463 }
464 else if ( numRec == 1 && numChan == 1 ) {
465 ret.resize( npol, 1 ) ;
466 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
467 ret( ip, 0 ) = (casa::Float)(tsys[0][0]) ;
468 }
469 else if ( numRec == 2 && npol == 4 && numChan == nchan ) {
470 // TODO: How to determine Tsys for XY?
471 // at the moment Tsys[XY] = 0.5*(Tsys[X]+Tsys[Y])
472 ret.resize( npol, nchan ) ;
473 for ( unsigned int ic = 0 ; ic < nchan ; ic++ ) {
474 casa::Float tsysxy = (casa::Float)(0.5*(tsys[0][ic]+tsys[1][ic])) ;
475 ret( 0, ic ) = (casa::Float)(tsys[0][ic]) ;
476 ret( 1, ic ) = (casa::Float)(tsys[1][ic]) ;
477 ret( 2, ic ) = tsysxy ;
478 ret( 3, ic ) = tsysxy ;
479 }
480 }
481 else if ( numRec == 2 && npol == 4 && numChan == 1 ) {
482 // TODO: How to determine Tsys for XY?
483 // at the moment Tsys[XY] = 0.5*(Tsys[X]+Tsys[Y])
484 ret.resize( npol, 1 ) ;
485 casa::Float tsysxy = (casa::Float)(0.5*(tsys[0][0]+tsys[1][0])) ;
486 ret( 0, 0 ) = (casa::Float)(tsys[0][0]) ;
487 ret( 1, 0 ) = (casa::Float)(tsys[1][0]) ;
488 ret( 2, 0 ) = tsysxy ;
489 ret( 3, 0 ) = tsysxy ;
490 }
491 else {
492 // I don't know how to handle ...
493 for ( unsigned int ip = 0 ; ip < npol ; ip++ )
494 for ( unsigned int ic = 0 ; ic < nchan ; ic++ )
495 ret( ip, ic ) = (casa::Float)(tsys[0][ic]) ;
496 }
497 return ret ;
498}
499
500Vector<casa::Float> OldASDMFiller::toVector( vector<float> &tau,
501 unsigned int npol )
502{
503 String funcName = "toVector" ;
504
505 Vector<casa::Float> ret( npol ) ;
506 //logsink_->postLocally( LogMessage("tau0="+String::toString(tau[0]),LogOrigin(className_,funcName,WHERE)) ) ;
507 if ( npol == 4 ) {
508 ret[0] = (casa::Float)tau[0] ;
509 ret[1] = (casa::Float)tau[1] ;
510 ret[2] = 0.5 * ( ret[0] + ret[1] ) ;
511 ret[3] = ret[2] ;
512 }
513 else if ( npol == tau.size() ) {
514 for ( unsigned int ipol = 0 ; ipol < npol ; ipol++ )
515 ret[ipol] = (casa::Float)tau[ipol] ;
516 }
517 else {
518 // I don't know how to handle...
519 for ( unsigned int ipol = 0 ; ipol < npol ; ipol++ )
520 ret[ipol] = (casa::Float)tau[0] ;
521 }
522 //logsink_->postLocally( LogMessage("tau="+String::toString(ret),LogOrigin(className_,funcName,WHERE)) ) ;
523 return ret ;
524}
525
526String OldASDMFiller::toTcalTime( casa::Double mjd )
527{
528 return MVTime( mjd ).string( MVTime::YMD ) ;
529}
530
531void OldASDMFiller::toJ2000( Vector<casa::Double> &dir,
532 double az,
533 double el,
534 casa::Double mjd,
535 Vector<casa::Double> antpos )
536{
537 String funcName = "toJ2000" ;
538
539 Vector<casa::Double> azel( 2 ) ;
540 azel[0] = az ;
541 azel[1] = el ;
542// MEpoch me( Quantity( mjd, "d" ), MEpoch::UTC ) ;
543// Vector<Quantity> qantpos( 3 ) ;
544// qantpos[0] = Quantity( antpos[0], "m" ) ;
545// qantpos[1] = Quantity( antpos[1], "m" ) ;
546// qantpos[2] = Quantity( antpos[2], "m" ) ;
547// MPosition mp( MVPosition( qantpos ),
548// MPosition::ITRF ) ;
549// // mp.print( os_.output() ) ;
550// MeasFrame mf( me, mp ) ;
551// MDirection::Convert toj2000( MDirection::AZELGEO,
552// MDirection::Ref( MDirection::J2000, mf ) ) ;
553// dir = toj2000( azel ).getAngle( "rad" ).getValue() ;
554 dir = toJ2000( azel, "AZELGEO", mjd, antpos ) ;
555 //logsink_->postLocally( LogMessage("dir = "+String::toString(dir),LogOrigin(className_,funcName,WHERE)) ) ;
556}
557
558Vector<casa::Double> OldASDMFiller::toJ2000( Vector<casa::Double> dir,
559 String dirref,
560 casa::Double mjd,
561 Vector<casa::Double> antpos )
562{
563 Vector<casa::Double> newd( dir ) ;
564 if ( dirref != "J2000" ) {
565 MEpoch me( Quantity( mjd, "d" ), MEpoch::UTC ) ;
566 Vector<Quantity> qantpos( 3 ) ;
567 qantpos[0] = Quantity( antpos[0], "m" ) ;
568 qantpos[1] = Quantity( antpos[1], "m" ) ;
569 qantpos[2] = Quantity( antpos[2], "m" ) ;
570 MPosition mp( MVPosition( qantpos ),
571 MPosition::ITRF ) ;
572 // mp.print( os_.output() ) ;
573 MeasFrame mf( me, mp ) ;
574 MDirection::Types dirtype ;
575 Bool b = MDirection::getType( dirtype, dirref ) ;
576 if ( b ) {
577 MDirection::Convert toj2000( dirtype,
578 MDirection::Ref( MDirection::J2000, mf ) ) ;
579 newd = toj2000( dir ).getAngle( "rad" ).getValue() ;
580 }
581 }
582 return newd ;
583}
584
585MFrequency::Types OldASDMFiller::toFrameType( string &s )
586{
587 MFrequency::Types ftype = MFrequency::DEFAULT ;
588 if ( s == "LABREST" )
589 ftype = MFrequency::REST ;
590 else {
591 Bool b = MFrequency::getType( ftype, String(s) ) ;
592 if (!b)
593 ftype = MFrequency::DEFAULT ;
594 }
595 return ftype ;
596}
597
598casa::Double OldASDMFiller::toLSRK( casa::Double freq,
599 String freqref,
600 casa::Double utc,
601 Vector<casa::Double> antpos,
602 Vector<casa::Double> dir,
603 String dirref )
604{
605 String funcName = "toLSRK" ;
606
607 //logsink_->postLocally( LogMessage("freqref = "+freqref,LogOrigin(className_,funcName,WHERE)) ) ;
608 casa::Double newf = freq ;
609 if ( freqref != "LSRK" ) {
610 MEpoch me( Quantum<casa::Double>( utc, Unit("d") ), MEpoch::UTC ) ;
611 Vector< Quantum<casa::Double> > antposQ( 3 ) ;
612 for ( int i = 0 ; i < 3 ; i++ )
613 antposQ[i] = Quantum<casa::Double>( antpos[i], Unit("m") ) ;
614 MPosition mp( antposQ, MPosition::ITRF ) ;
615 MDirection::Types dirtype ;
616 Bool b = MDirection::getType( dirtype, dirref ) ;
617 if ( !b )
618 dirtype = MDirection::J2000 ;
619 MDirection md( Quantum<casa::Double>( dir[0], Unit("rad") ),
620 Quantum<casa::Double>( dir[1], Unit("rad") ),
621 dirtype ) ;
622 MeasFrame mf( me, mp, md ) ;
623 MFrequency::Types freqtype ;
624 b = MFrequency::getType( freqtype, freqref ) ;
625 if ( !b )
626 freqtype = MFrequency::TOPO ;
627 MFrequency::Convert tolsr( freqtype,
628 MFrequency::Ref( MFrequency::LSRK, mf ) ) ;
629 newf = tolsr( Quantum<casa::Double>( freq, Unit("Hz") ) ).get( "Hz" ).getValue() ;
630 //logsink_->postLocally( LogMessage("freq = "+String::toString(freq)+", newf = "+String::toString(newf),LogOrigin(className_,funcName,WHERE)) ) ;
631 }
632 return newf ;
633}
Note: See TracBrowser for help on using the repository browser.