00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 import os
00012 import sys
00013 import shutil
00014 import string
00015 import numpy
00016 from __main__ import default
00017 from tasks import *
00018 from taskinit import *
00019 import unittest
00020
00021
00022 myasdm_dataset_name = 'uid___X5f_X18951_X1'
00023
00024
00025 asapname = myasdm_dataset_name + '.asap'
00026
00027 class asdmsd_import( unittest.TestCase ):
00028 def setUp( self ):
00029 self.res = None
00030 self.subtables = [ 'FIT',
00031 'FOCUS',
00032 'FREQUENCIES',
00033 'HISTORY',
00034 'MOLECULES',
00035 'TCAL',
00036 'WEATHER' ]
00037 self.nrows = { 'MAIN': 3576,
00038 'FIT': 0,
00039 'FOCUS': 1,
00040 'FREQUENCIES': 2,
00041 'HISTORY': 0,
00042 'MOLECULES': 1,
00043 'TCAL': 1,
00044 'WEATHER': 1 }
00045 if(os.path.exists(myasdm_dataset_name)):
00046 shutil.rmtree(myasdm_dataset_name)
00047
00048 datapath=os.environ.get('CASAPATH').split()[0]+'/data/regression/asdm-import/input/'
00049 shutil.copytree(datapath + myasdm_dataset_name, myasdm_dataset_name)
00050 default(importasdm)
00051
00052 def tearDown(self):
00053 shutil.rmtree(myasdm_dataset_name)
00054 shutil.rmtree(asapname,ignore_errors=True)
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 def test1( self ):
00068 """asdmsd_import_v3: Test direct import to single-dish format (asdm2ASAP)"""
00069
00070 self.doImport( version='v3' )
00071
00072
00073 self.tableExistenceCheck()
00074
00075
00076 self.tableContentsCheck()
00077
00078 def doImport( self, version ):
00079 self.res = importasdm(asdm=myasdm_dataset_name,
00080 vis=asapname,
00081 singledish=True,
00082 antenna=0,
00083 useversion=version)
00084 self.assertEqual( self.res, None )
00085
00086
00087 def tableExistenceCheck( self ):
00088 result={}
00089 item = { 'success': True, 'message':'' }
00090 msgTemplate = string.Template( '%s/$table does not exist.'%(asapname) )
00091
00092
00093 result['MAIN'] = item
00094 if not os.path.exists( asapname ):
00095 result['MAIN']['success'] = False
00096 result['MAIN']['message'] = msgTemplate.safe_substitute( table='MAIN' )
00097
00098
00099 for t in self.subtables:
00100 result[t] = item
00101 pathToSubtable = asapname + '/' + t
00102 if not os.path.exists( pathToSubtable ):
00103 result[t]['success'] = False
00104 result[t]['message'] = msgTemplate.safe_substitute( table = t )
00105
00106 self.__checkResult( result )
00107
00108 def tableContentsCheck( self ):
00109 result={}
00110 item = { 'success': True, 'message':'' }
00111 msgTemplate = string.Template( '%s/$table: nrow must be $valid (was $thevalue)' )
00112
00113
00114 result['MAIN'] = item
00115 tb.open( asapname )
00116 nrow = tb.nrows()
00117 tb.close()
00118 if nrow != self.nrows['MAIN']:
00119 result['MAIN']['success'] = False
00120 result['MAIN']['message'] = msgTemplate.safe_substitute( table='MAIN', valid=self.nrows['MAIN'], thevalue=nrow )
00121
00122
00123 for t in self.subtables:
00124 result[t] = item
00125 pathToSubtable = asapname + '/' + t
00126 tb.open( pathToSubtable )
00127 nrow = tb.nrows()
00128 tb.close()
00129 if nrow != self.nrows[t]:
00130 result[t]['success'] = False
00131 result[t]['message'] = msgTemplate.safe_substitute( table=t, valid=self.nrows[t], thevalue=nrow )
00132
00133 self.__checkResult( result )
00134
00135
00136 items = { 'nIF': 2,
00137 'nPol': 1,
00138 'nBeam': 1,
00139 'nChan': 256,
00140 'AntennaName': 'OSF//DV01@TF1' }
00141 self.__checkHeader( items )
00142
00143
00144 items = { 0: 0.50806641578674316,
00145 1788: 10.553685188293457 }
00146 self.__checkColumn( 'SPECTRA', items )
00147
00148
00149 items = { 0: 8.6276162900858246e10,
00150 1: 8.6287882216325546e10 }
00151 self.__checkColumn( 'REFVAL', items, 'FREQUENCIES' )
00152
00153 def __checkResult( self, result ):
00154 for key in result.keys():
00155 r = result[key]
00156 self.assertTrue( r['success'], msg=r['message'] )
00157
00158 def __checkHeader( self, items ):
00159 msgTemplate = string.Template( 'HEADER: $key must be $valid (was &value).' )
00160 vals = {}
00161 tb.open( asapname )
00162 for key in items.keys():
00163 vals[key] = tb.getkeyword( key )
00164 tb.close()
00165
00166 for key in items.keys():
00167
00168 self.assertEqual( vals[key], items[key],
00169 msg=msgTemplate.safe_substitute(key=key,valid=items[key],value=vals[key]) )
00170
00171 def __checkColumn( self, column, items, table='MAIN' ):
00172 msgTemplate = string.Template( '$table/$column: row $row differ (difference is $diff)' )
00173 vals = {}
00174 if table is 'MAIN':
00175 tb.open( asapname )
00176 else:
00177 tb.open( asapname + '/' + table )
00178 for key in items.keys():
00179 v = tb.getcell( column, key )
00180 if isinstance( v, numpy.ndarray ):
00181 vals[key] = v[0]
00182 else:
00183 vals[key] = v
00184 tb.close()
00185
00186 for key in items.keys():
00187
00188 diff = (vals[key] - items[key]) / vals[key]
00189
00190 self.assertTrue( diff < 1.0e-8,
00191 msg=msgTemplate.safe_substitute(table=table,column=column,row=key,diff=diff) )
00192
00193
00194 def suite():
00195 return [asdmsd_import]