Commits

split test_preaveraging_rflag_residual, re CAS-11397
No tags

gcwrap/python/scripts/tests/test_flagdata.py

Modified
109 109 os.system('cp -RH '+datapath + self.vis +' '+ self.vis)
110 110
111 111 os.system('rm -rf ' + self.vis + '.flagversions')
112 112 # self.unflag_ms()
113 113 flagdata(vis=self.vis, mode='unflag', flagbackup=False)
114 114 default(flagdata)
115 115
116 116 def setUp_data4tfcrop(self):
117 117 '''EVLA MS, 4 ants, scan=30,31 spw=0~15, 64 chans, RR,RL,LR,LL'''
118 118 self.vis = "Four_ants_3C286.ms"
119 -
120 119 if os.path.exists(self.vis):
121 120 print "The MS is already around, just unflag"
122 121 else:
123 122 print "Moving data..."
124 123 os.system('cp -RH '+datapath + self.vis +' '+ self.vis)
125 124
126 125 os.system('rm -rf ' + self.vis + '.flagversions')
126 +
127 127 self.unflag_ms()
128 128 default(flagdata)
129 129
130 130 def setUp_shadowdata1(self):
131 131 '''ALMA ACA observation with one field in APP ref frame'''
132 132 self.vis = "shadowAPP.ms"
133 133
134 134 if os.path.exists(self.vis):
135 135 print "The MS is already around, just unflag"
136 136 else:
315 315
316 316 # Extract only the type 'summary' reports
317 317 nreps = report_list.keys()
318 318 for rep in range(len(nreps)):
319 319 repname = 'report'+str(rep);
320 320 if(report_list[repname]['type']=='summary'):
321 321 summary_list.append(report_list[repname]);
322 322
323 323 return summary_list
324 324
325 +
325 326 class test_tfcrop(test_base):
326 327 """flagdata:: Test of mode = 'tfcrop'"""
327 328
328 329 def setUp(self):
329 330 self.setUp_data4tfcrop()
330 331
331 332 def test_tfcrop1(self):
332 333 '''flagdata:: Test1 of mode = tfcrop'''
333 334 flagdata(vis=self.vis, mode='tfcrop', correlation='ABS_RR',ntime=51.0,spw='9',
334 335 savepars=False, extendflags=False)
3360 3361
3361 3362 def test_runTest(self):
3362 3363 '''flagdata: Cleanup'''
3363 3364 pass
3364 3365
3365 3366
3366 3367 class test_preaveraging(test_base):
3367 3368 """Test channel/time pre-averaging for visibility-based flagging"""
3368 3369
3369 3370 def setUp(self):
3370 - self.setUp_data4tfcrop()
3371 - mstransform(vis=self.vis,outputvis='test_preaveraging.ms',datacolumn='data',spw='9',scan='30',
3372 - antenna='1&2',timerange='2010/10/16/14:45:08.50~2010/10/16/14:45:11.50')
3373 - self.vis = 'test_preaveraging.ms'
3371 + self.setUp_data4preaveraging()
3374 3372
3375 3373 def tearDown(self):
3376 3374 os.system('rm -rf test_preaveraging.ms')
3377 3375 os.system('rm -rf test_clip_timeavg*')
3378 3376 os.system('rm -rf test_clip_chanavg*')
3379 3377 os.system('rm -rf test_clip_time_chanavg*')
3380 3378 os.system('rm -rf test_rflag_timeavg*')
3381 3379 os.system('rm -rf test_rflag_chanavg*')
3382 3380 os.system('rm -rf test_rflag_time_chanavg*')
3383 3381 os.system('rm -rf test_tfcrop_timeavg*')
3477 3475 # STEP 2: Flagging with rflag using time average, then time average with mstransform
3478 3476 flagdata(vis=self.vis, flagbackup=False, mode='rflag', datacolumn='DATA',
3479 3477 timeavg=True, timebin='2s', extendflags=False)
3480 3478 mstransform(vis=self.vis,outputvis='test_rflag_timeavg_step2.ms',datacolumn='data',
3481 3479 timeaverage=True,timebin='2s')
3482 3480 res2 = flagdata(vis='test_rflag_timeavg_step2.ms', mode='summary', spwchan=True)
3483 3481
3484 3482 # Compare results
3485 3483 self.assertEqual(res2['flagged'], 20)
3486 3484
3487 - def test_rflag_timeavg_on_residual(self):
3488 - '''flagdata: rflag with timeavg on residual (corrected - model), and compare
3489 - vs mstransform + rflag without timeavg'''
3490 -
3491 - # One that has corrected
3492 - vis = "Four_ants_3C286.ms"
3493 - # Initial integration time is 1s
3494 - timebin = '8s'
3495 -
3496 - # Unflag the original input data
3497 - flagdata(vis, flagbackup=False, mode='unflag')
3498 -
3499 - # using action calculate, which is faster (reduced I/O) and enough to test thresholds
3500 - # using only these spws for speed
3501 - spws = '0,1,2'
3502 -
3503 - # STEP 1: rflag-calculate with original time
3504 - res1 = flagdata(vis=vis, spw=spws, action='calculate', mode='rflag',
3505 - datacolumn='residual', extendflags=False)
3506 -
3507 - # STEP 2: timeavg with mstransform, then rflag-calculate on residual
3508 - flagged1 = 'test_rflag_timeavg_residual_step2.ms'
3509 - mstransform(vis=vis, spw=spws, outputvis=flagged1,
3510 - datacolumn='data', timeaverage=True, timebin=timebin)
3511 - res2 = flagdata(vis=vis, spw=spws, action='calculate', mode='rflag',
3512 - datacolumn='residual', extendflags=False)
3513 -
3514 - # STEP 3: rflag-calculate with timeavg on residual
3515 - res3 = flagdata(vis=vis, spw=spws, action='calculate', mode='rflag',
3516 - datacolumn='residual', timeavg=True, timebin=timebin,
3517 - extendflags=False)
3518 -
3519 - def check_reports_timeavg(report1, report2, report3):
3520 - import numpy as np
3521 - report1 = res1['report0']
3522 - report2 = res2['report0']
3523 - report3 = res3['report0']
3524 - self.assertEqual(report2['type'], 'rflag')
3525 - self.assertEqual(report3['type'], report2['type'])
3526 - freq_tol = 1e-1
3527 - self.assertTrue(np.allclose(report1['freqdev'], report2['freqdev'],
3528 - rtol=freq_tol))
3529 - self.assertTrue(np.allclose(report2['freqdev'], report3['freqdev'],
3530 - rtol=freq_tol))
3531 - time_tol = 1e-1
3532 - self.assertTrue(np.allclose(report1['timedev'], report2['timedev'],
3533 - rtol=time_tol))
3534 - # divide 3rd column (thresholds). Matrices have rows like: field, spw, threshold.
3535 - time_div_tol = 2.5e-1
3536 - report1['timedev'][:,2] = report1['timedev'][:,2] / np.sqrt(8)
3537 - self.assertTrue(np.allclose(report1['timedev'],
3538 - report3['timedev'], rtol=time_div_tol))
3539 -
3540 - self.assertEqual(res1['type'], 'list')
3541 - self.assertEqual(res1['type'], res2['type'])
3542 - self.assertEqual(res1['type'], res3['type'])
3543 - check_reports_timeavg(res1['report0'], res2['report0'], res3['report0'])
3544 -
3545 3485 def test_rflag_chanavg(self):
3546 3486 '''flagdata: rflag with chan average and compare vs mstransform'''
3547 3487
3548 3488 # Unflag the original input data
3549 3489 flagdata(self.vis, flagbackup=False, mode='unflag')
3550 3490
3551 3491 # STEP 1: Chan average with mstransform, then flagging with normal rflag
3552 3492 mstransform(vis=self.vis,outputvis='test_rflag_chanavg_step1.ms',datacolumn='data',
3553 3493 chanaverage=True,chanbin=2)
3554 3494 flagdata(vis='test_rflag_chanavg_step1.ms',flagbackup=False, mode='rflag',extendflags=False)
3560 3500 # STEP 2: Flagging with rflag using time average, then time average with mstransform
3561 3501 flagdata(vis=self.vis, flagbackup=False, mode='rflag', datacolumn='DATA',
3562 3502 channelavg=True, chanbin=2,extendflags=False)
3563 3503 mstransform(vis=self.vis, outputvis='test_rflag_chanavg_step2.ms',datacolumn='data',
3564 3504 chanaverage=True,chanbin=2)
3565 3505 res2 = flagdata(vis='test_rflag_chanavg_step2.ms', mode='summary', spwchan=True)
3566 3506
3567 3507 # Compare results
3568 3508 self.assertEqual(res1['flagged'], res2['flagged'])
3569 3509
3570 - def test_rflag_chanavg_on_residual(self):
3571 - '''flagdata: rflag with chanavg on residual (corrected - model), and compare
3572 - vs mstransform + rflag without average'''
3573 -
3574 - # One that has corrected
3575 - vis = "Four_ants_3C286.ms"
3576 - # Initial integration time is 1s
3577 - timebin = '8s'
3578 -
3579 - # Unflag the original input data
3580 - flagdata(vis, flagbackup=False, mode='unflag')
3581 -
3582 - # using action calculate, which is faster (reduced I/O) and enough to test thresholds
3583 - # using only these spws for speed
3584 - spws = '0,1,2'
3585 -
3586 - # STEP 1: rflag-calculate with original MS
3587 - res1 = flagdata(vis=vis, spw=spws, action='calculate', mode='rflag',
3588 - datacolumn='residual', extendflags=False)
3589 -
3590 - # STEP 2: chanavg with mstransform, then rflag-calculate on residual
3591 - flagged1 = 'test_rflag_timeavg_residual_step2.ms'
3592 - mstransform(vis=vis, spw=spws, outputvis=flagged1,
3593 - datacolumn='data', chanaverage=True, chanbin=32)
3594 - res2 = flagdata(vis=vis, spw=spws, action='calculate', mode='rflag',
3595 - datacolumn='residual', extendflags=False)
3596 -
3597 - # STEP 3: rflag-calculate with chanavg on residual
3598 - res3 = flagdata(vis=vis, spw=spws, action='calculate', mode='rflag',
3599 - datacolumn='residual', channelavg=True, chanbin=32,
3600 - extendflags=False)
3601 -
3602 - def check_reports_chanavg(report1, report2, report3):
3603 - import numpy as np
3604 - self.assertEqual(report2['type'], 'rflag')
3605 - self.assertEqual(report3['type'], report2['type'])
3606 - freq_tol = 1e-1
3607 - self.assertTrue(np.allclose(report1['freqdev'], report2['freqdev'],
3608 - rtol=freq_tol))
3609 - # divide 3rd column (thresholds). Matrices have rows like: field, spw, threshold.
3610 - freq_div_tol = 2.5e-1
3611 - report2['freqdev'][:,2] = report2['freqdev'][:,2] / 2
3612 - self.assertTrue(np.allclose(report2['freqdev'], report3['freqdev'],
3613 - rtol=freq_div_tol))
3614 - time_tol = 1e-1
3615 - self.assertTrue(np.allclose(report1['timedev'], report2['timedev'],
3616 - rtol=time_tol))
3617 - time_div_tol = 6e-1
3618 - report1['timedev'][:,2] = report1['timedev'][:,2] / 4
3619 - self.assertTrue(np.allclose(report1['timedev'],
3620 - report3['timedev'], rtol=time_div_tol))
3621 -
3622 - self.assertEqual(res1['type'], 'list')
3623 - self.assertEqual(res1['type'], res2['type'])
3624 - self.assertEqual(res1['type'], res3['type'])
3625 - check_reports_chanavg(res1['report0'], res2['report0'], res3['report0'])
3626 -
3627 3510 def test_rflag_time_chanavg(self):
3628 3511 '''flagdata: rflag with time/chan average and compare vs mstransform'''
3629 3512
3630 3513 # Unflag the original input data
3631 3514 flagdata(self.vis, flagbackup=False, mode='unflag')
3632 3515
3633 3516 # STEP 1: Chan average with mstransform, then flagging with normal rflag
3634 3517 mstransform(vis=self.vis,outputvis='test_rflag_time_chanavg_step1.ms',datacolumn='data',
3635 3518 timeaverage=True,timebin='2s',chanaverage=True,chanbin=2)
3636 3519 flagdata(vis='test_rflag_time_chanavg_step1.ms',flagbackup=False, mode='rflag',
3722 3605 # STEP 2: Flagging with tfcrop using time average, then time average with mstransform
3723 3606 flagdata(vis=self.vis, flagbackup=False, mode='tfcrop', datacolumn='DATA',
3724 3607 timeavg=True, timebin='2s', channelavg=True, chanbin=2, extendflags=False)
3725 3608 mstransform(vis=self.vis, outputvis='test_tfcrop_time_chanavg_step2.ms',datacolumn='data',
3726 3609 timeaverage=True,timebin='2s',chanaverage=True,chanbin=2)
3727 3610 res2 = flagdata(vis='test_tfcrop_time_chanavg_step2.ms', mode='summary', spwchan=True)
3728 3611
3729 3612 # Compare results
3730 3613 self.assertEqual(res2['flagged'], res2['flagged'])
3731 3614
3615 +
3616 +# Motivated by CAS-11397. test_preaveraging is about datacolumn='data', and checks what
3617 +# flags are written to the output
3618 +# test_preaveraging_rflag_residual is about datacolumn='residual' and doesn't write flags. It
3619 +# checks the threshold calculations from RFlag
3620 +class test_preaveraging_rflag_residual(test_base):
3621 + """Test pre-averaging (channel / time) with RFlag and datacolumn='residual'"""
3622 +
3623 + def setUp(self):
3624 + self.setUp_data4tfcrop()
3625 +
3626 + def tearDown(self):
3627 + os.system('rm -rf test_rflag_timeavg_residual*step2*ms')
3628 + os.system('rm -rf test_rflag_channelavg_residual*step2*ms')
3629 +
3630 + def test_rflag_timeavg_on_residual(self):
3631 + '''flagdata: rflag with timeavg on residual (corrected - model), and compare
3632 + vs mstransform + rflag without timeavg'''
3633 +
3634 + # Initial integration time of 'Four_ants_3C286.ms' is 1s
3635 + timebin = '8s'
3636 +
3637 + # using action calculate, which is faster (reduced I/O) and enough to test thresholds
3638 + # using only these spws for speed
3639 + spws = '0,1,2'
3640 +
3641 + # STEP 1: rflag-calculate with original time
3642 + res1 = flagdata(vis=self.vis, spw=spws, action='calculate', mode='rflag',
3643 + datacolumn='residual', extendflags=False)
3644 +
3645 + # STEP 2: timeavg with mstransform, then rflag-calculate on residual
3646 + flagged2 = 'test_rflag_timeavg_residual_step2.ms'
3647 + mstransform(vis=self.vis, spw=spws, outputvis=flagged2,
3648 + datacolumn='data,model,corrected', timeaverage=True, timebin=timebin)
3649 + res2 = flagdata(vis=flagged2, spw=spws, action='calculate', mode='rflag',
3650 + datacolumn='residual', extendflags=False)
3651 +
3652 + # STEP 3: rflag-calculate with timeavg on residual
3653 + res3 = flagdata(vis=self.vis, spw=spws, action='calculate', mode='rflag',
3654 + datacolumn='residual', timeavg=True, timebin=timebin,
3655 + extendflags=False)
3656 +
3657 + def check_reports_timeavg(report1, report2, report3):
3658 + import numpy as np
3659 + print "report 1", report1
3660 + print "report 2", report2
3661 + print "report 3", report3
3662 + self.assertEqual(report2['type'], 'rflag')
3663 + self.assertEqual(report3['type'], report2['type'])
3664 + freq_tol = 1e-1
3665 + self.assertTrue(np.allclose(report1['freqdev'], report3['freqdev'],
3666 + rtol=freq_tol))
3667 + self.assertTrue(np.allclose(report2['freqdev'], report3['freqdev'],
3668 + rtol=freq_tol))
3669 + # divide 3rd column (thresholds). Matrices have rows like: field, spw, threshold.
3670 + report1['timedev'][:,2] = report1['timedev'][:,2] / np.sqrt(8)
3671 + time_div_tol = 3.3e-1
3672 + self.assertTrue(np.allclose(report1['timedev'], report3['timedev'],
3673 + rtol=time_div_tol))
3674 + time_tol = 1.5e-1
3675 + self.assertTrue(np.allclose(report2['timedev'],
3676 + report3['timedev'], rtol=time_tol))
3677 +
3678 + self.assertEqual(res1['type'], 'list')
3679 + self.assertEqual(res1['type'], res2['type'])
3680 + self.assertEqual(res1['type'], res3['type'])
3681 + check_reports_timeavg(res1['report0'], res2['report0'], res3['report0'])
3682 +
3683 + def test_rflag_channelavg_on_residual(self):
3684 + '''flagdata: rflag with channelavg on residual (corrected - model), and compare
3685 + vs mstransform + rflag without average'''
3686 +
3687 + # Initial integration time of 'Four_ants_3C286.ms' is 1s
3688 + timebin = '8s'
3689 +
3690 + # using action calculate, which is faster (reduced I/O) and enough to test thresholds
3691 + # using only these spws for speed
3692 + spws = '0,1,2'
3693 +
3694 + # STEP 1: rflag-calculate with original MS
3695 + res1 = flagdata(vis=self.vis, spw=spws, action='calculate', mode='rflag',
3696 + datacolumn='residual', extendflags=False)
3697 +
3698 + # STEP 2: chanavg with mstransform, then rflag-calculate on residual
3699 + flagged2 = 'test_rflag_channelavg_residual_step2.ms'
3700 + mstransform(vis=self.vis, spw=spws, outputvis=flagged2,
3701 + datacolumn='data,model,corrected', chanaverage=True, chanbin=32)
3702 + res2 = flagdata(vis=flagged2, spw=spws, action='calculate', mode='rflag',
3703 + datacolumn='residual', extendflags=False)
3704 +
3705 + # STEP 3: rflag-calculate with channelavg on residual
3706 + res3 = flagdata(vis=self.vis, spw=spws, action='calculate', mode='rflag',
3707 + datacolumn='residual', channelavg=True, chanbin=32,
3708 + extendflags=False)
3709 +
3710 + def check_reports_channelavg(report1, report2, report3):
3711 + import numpy as np
3712 + self.assertEqual(report2['type'], 'rflag')
3713 + self.assertEqual(report3['type'], report2['type'])
3714 + # divide 3rd column (thresholds). Matrices have rows like: field, spw, threshold.
3715 + report1['freqdev'][:,2] = report1['freqdev'][:,2] / 2
3716 + freq_div_tol = 1e-1
3717 + self.assertTrue(np.allclose(report1['freqdev'], report3['freqdev'],
3718 + rtol=freq_div_tol))
3719 + freq_tol = 5e-2
3720 + self.assertTrue(np.allclose(report2['freqdev'], report3['freqdev'],
3721 + rtol=freq_tol))
3722 +
3723 + report1['timedev'][:,2] = report1['timedev'][:,2] / 4
3724 + time_div_tol = 6.6e-1
3725 + self.assertTrue(np.allclose(report1['timedev'], report3['timedev'],
3726 + rtol=time_div_tol))
3727 + time_tol = 5e-2
3728 + self.assertTrue(np.allclose(report2['timedev'],
3729 + report3['timedev'], rtol=time_tol))
3730 +
3731 + self.assertEqual(res1['type'], 'list')
3732 + self.assertEqual(res1['type'], res2['type'])
3733 + self.assertEqual(res1['type'], res3['type'])
3734 + check_reports_channelavg(res1['report0'], res2['report0'], res3['report0'])
3735 +
3736 +
3732 3737 class test_virtual_col(test_base):
3733 3738 def setUp(self):
3734 3739 self.setUp_ngc5921(force=True)
3735 3740
3736 3741 def tearDown(self):
3737 3742 os.system('rm -rf ngc5921*')
3738 3743
3739 3744 @unittest.skip('Skip until CAS-10383 is fixed')
3740 3745 def test_no_model_col(self):
3741 3746 '''flagdata: catch failure when MODEL or virtual MODEL do not exist'''
3804 3809 test_CASA_4_0_bug_fix,
3805 3810 test_correlations,
3806 3811 test_tsys,
3807 3812 test_bandpass,
3808 3813 test_newcal,
3809 3814 test_weight_spectrum,
3810 3815 test_float_column,
3811 3816 test_tbuff,
3812 3817 TestMergeManualTimerange,
3813 3818 test_preaveraging,
3819 + test_preaveraging_rflag_residual,
3814 3820 test_virtual_col,
3815 3821 cleanup]

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut