User Tools

Site Tools


parseltongue:process_phase_reference_data

function: process_phase_reference_data

################################################################################
# Process Phase Referencing Data
def process_phase_reference_data(aips_uvdata, PhaseReferencingInfoDict):
    """Runs through the list of phase referencing observations to make images
    """
    # make sure the argument is a list
    if(type(PhaseReferencingInfoDict) != type([0])):
        PhaseReferencingInfoDict = [PhaseReferencingInfoDict]
    # declare some local variables in case they need to be cleaned up in a
    # try block
    junk = AIPSImage('JUNKJUNKJUNKJUNK', 'JUNKCL', 1,1)
    split_uvdata = [junk]
    image_noself = junk
    imgdata = junk
    cal_data = junk
    del junk
    # Ok, what are the numbers of the gain tables which are important
    CL_base = Gainuse_Before_Fring
    CL_first_fring = aips_uvdata.table_highver('AIPS CL') +1
    CL_second_fring = CL_first_fring +1
    # remove any old CL tables if there was a problem
    if(check_table_version_valid(aips_uvdata, 'AIPS CL', CL_first_fring)):
        aips_uvdata.zap_table('AIPS CL', CL_first_fring)
    if(check_table_version_valid(aips_uvdata, 'AIPS CL', CL_second_fring)):
        aips_uvdata.zap_table('AIPS CL', CL_second_fring)
    # Clear any old SN tables
    if(aips_uvdata.table_highver('AIPS SN') > 0):
        aips_uvdata.zap_table('AIPS SN', -1)
    # Set up some FRING information
    fring_snver = 1
    fring_aparm = [None, 0,0,0,0,0,0,0,0,0]
    fring_dparm = [None, 0,0,0,0,0,0,0,0,0]
    fring_aparm[1] = 3  # need at least 3 antennas for a solution
    fring_aparm[6] = 0  # turn most printing off
    fring_aparm[7] = 0  # default SNR level
    fring_aparm[9] = 1  # use search_list
    fring_dparm[1] = 2  # use small number as we only have a point-source model
    fring_dparm[4] = t_int
    fring_dparm[8] = 0  # do not zero rates or delays
    # define the split class
    splitclass = 'SPLIT'
    # Now loop over all pairings.
    for prid in PhaseReferencingInfoDict:
        # now, for each calibrator-target pair, run through and make
        # the sequence of images and statistical data
        try:
            ####################################################################
            # Step 1:  Run Fring on the calibrator in point-source mode
            search_list = range(0,len(prid['Calibrator_Search_List']))
            for antenna in xrange(len(search_list)):
                search_list[antenna] = \
                    antenna_dict[prid['Calibrator_Search_List'][antenna]]
            this_refant = search_list[0]
            search_list[0] = None
            run_fring(aips_uvdata,
                      this_refant,
                      search_list,
                      prid['Calibrator_Solint_Fring'],
                      0,   # solsub
                      prid['Calibrator_Name'],
                      CL_base,
                      prid['Calibrator_Timerange'],
                      final_flagver,
                      Bandpass_Global,
                      None,      # image
                      None,      # ncomp
                      None,      # flux
                      None,      # smodel
                      fring_aparm,
                      fring_dparm,
                      fring_snver)
            print 'fring done'
            run_clcal(aips_uvdata,
                      CL_base,
                      CL_first_fring,
                      this_refant,
                      [prid['Calibrator_Name'],prid['Target_Name']],
                      prid['Calibrator_Name'],
                      None,   # do all timerange for these objects
                      'CALI',
                      'AMBG',
                      snver_first=fring_snver,
                      snver_last = fring_snver)
            # show the phases
            if(pause_after_plots):
                snplot('CL',CL_first_fring,'PHAS',opcode='ALSI',
                       snuvdata=aips_uvdata,sources_use=[prid['Calibrator_Name'],
                                                         prid['Target_Name']],
                       nplots=len(aips_uvdata.antennas))
                possm_2([prid['Calibrator_Name'],prid['Target_Name']], 'LL',
                        CL_first_fring, -1, this_refant, final_flagver,
                        bpver=Bandpass_Global)
            ####################################################################
            # Step 2: process target source to make images
            # split this sucker out
            split_uvdata = \
                split_data(aips_uvdata, splitclass, 1, prid['Target_Name'],
                           CL_first_fring, Bandpass_Global, final_flagver)
            # Run with robust = 8 for natural weighting
            robust = 8
            # Now process the data to make an image and self-cal and make an
            # image.  I need a string to uniquely describe the process
            result_name = prid['Target_Name'] + '.' + prid['Calibrator_Name'] + \
                          '.' + processing_option.__str__() + ".%.0f"%robust
            (statistics_noself, statistics, image_noself, imgdata, cal_data) = \
                                process_single_source_file_to_images(
                split_uvdata[0],
                prid['Target_Name'],
                result_name,
                robust,
                prid['Target_Timerange'],
                this_refant,
                prid['Target_Solint'],       # seconds
                prid['Target_Solint_Amp'],   # seconds
                imsize,       # pixels
                cellsize,     # arcsec
                prid['Target_Source_Size'],
                1,            # starting sequence number
                prid['Target_SelfCal_Iterations'],
                use_initial_point_source_calibration=1,
                save_image_plots=1,
                save_output_data=0
                )
            prid['Target_Statistics_PNSCR8'] = statistics_noself
            prid['Target_Statistics_PWSCR8'] = statistics
            # Run with robust = 0 for smaller beam size
            robust = 0
            # Now process the data to make an image and self-cal and make an
            # image.  I need a string to uniquely describe the process
            result_name = prid['Target_Name'] + '.' + prid['Calibrator_Name'] + \
                          '.' + processing_option.__str__() + ".%.0f"%robust
            (statistics_noself, statistics, image_noself, imgdata, cal_data) = \
                                process_single_source_file_to_images(
                split_uvdata[0],
                prid['Target_Name'],
                result_name,
                robust,
                prid['Target_Timerange'],
                this_refant,
                prid['Target_Solint'],       # seconds
                prid['Target_Solint_Amp'],   # seconds
                imsize,       # pixels
                cellsize,     # arcsec
                prid['Target_Source_Size'],
                3,            # starting sequence number
                prid['Target_SelfCal_Iterations'],
                use_initial_point_source_calibration=1,
                save_image_plots=1,
                save_output_data=0
                )
            prid['Target_Statistics_PNSCR0'] = statistics_noself
            prid['Target_Statistics_PWSCR0'] = statistics
            # Now zap the split data
            split_uvdata[0].zap()
            ####################################################################
            # Step 3: split out the calibrator to make an image to FRING with.
            #         Then reFRING
            split_uvdata = \
                split_data(aips_uvdata, splitclass, 1, prid['Calibrator_Name'],
                           CL_first_fring, Bandpass_Global, final_flagver)
            # Run with robust = 8 for natural weighting
            robust = 8
            # Now process the data to make an image and self-cal and make an
            # image.  I need a string to uniquely describe the process
            result_name = 'tmp'
            (statistics_noself, statistics, image_noself, imgdata, cal_data) = \
                                process_single_source_file_to_images(
                split_uvdata[0],
                prid['Calibrator_Name'],
                result_name,
                robust,
                prid['Calibrator_Timerange'],
                this_refant,
                prid['Calibrator_Calib_Solint'],       # seconds
                prid['Calibrator_Calib_Solint_Amp'],   # seconds
                imsize,       # pixels
                cellsize,     # arcsec
                prid['Calibrator_Source_Size'],
                1,            # starting sequence number
                prid['Calibrator_SelfCal_Iterations'],
                use_initial_point_source_calibration=1,
                save_image_plots=0,
                save_output_data=1  # save just the self-caled image
                )
            # zap the split data before I forget
            split_uvdata[0].zap()
            # Now fring using the new image
            aips_uvdata.zap_table('AIPS SN', -1)
            run_fring(aips_uvdata,
                      this_refant,
                      search_list,
                      prid['Calibrator_Solint_Fring'],
                      0,   # solsub
                      prid['Calibrator_Name'],
                      CL_base,
                      prid['Calibrator_Timerange'],
                      final_flagver,
                      Bandpass_Global,
                      imgdata,      # image
                      prid['Calibrator_Ncomp'],
                      prid['Calibrator_Flux_Fraction']*statistics['Pixel_Max'],
                      None,      # smodel
                      fring_aparm,
                      fring_dparm,
                      fring_snver)
            run_clcal(aips_uvdata,
                      CL_base,
                      CL_second_fring,
                      this_refant,
                      [prid['Calibrator_Name'],prid['Target_Name']],
                      prid['Calibrator_Name'],
                      None,   # do all timerange for these objects
                      'CALI',
                      'AMBG',
                      snver_first=fring_snver,
                      snver_last = fring_snver)
 
            ####################################################################
            # Step 4: process target source to make images
            # split this sucker out
            split_uvdata = \
                split_data(aips_uvdata, splitclass, 1, prid['Target_Name'],
                           CL_second_fring, Bandpass_Global, final_flagver)
            # Run with robust = 8 for natural weighting
            robust = 8
            # Now process the data to make an image and self-cal and make an
            # image.  I need a string to uniquely describe the process
            result_name = prid['Target_Name'] + '.' + prid['Calibrator_Name'] + \
                          '.' + processing_option.__str__() + ".%.0f"%robust
            (statistics_noself, statistics, image_noself, imgdata, cal_data) = \
                                process_single_source_file_to_images(
                split_uvdata[0],
                prid['Target_Name'],
                result_name,
                robust,
                prid['Target_Timerange'],
                this_refant,
                prid['Target_Solint'],       # seconds
                prid['Target_Solint_Amp'],   # seconds
                imsize,       # pixels
                cellsize,     # arcsec
                prid['Target_Source_Size'],
                5,            # starting sequence number
                prid['Target_SelfCal_Iterations'],
                use_initial_point_source_calibration=1,
                save_image_plots=1,
                save_output_data=0
                )
            prid['Target_Statistics_INSCR8'] = statistics_noself
            prid['Target_Statistics_IWSCR8'] = statistics
            # Run with robust = 0 for smaller beam size
            robust = 0
            # Now process the data to make an image and self-cal and make an
            # image.  I need a string to uniquely describe the process
            result_name = prid['Target_Name'] + '.' + prid['Calibrator_Name'] + \
                          '.' + processing_option.__str__() + ".%.0f"%robust
            (statistics_noself, statistics, image_noself, imgdata, cal_data) = \
                                process_single_source_file_to_images(
                split_uvdata[0],
                prid['Target_Name'],
                result_name,
                robust,
                prid['Target_Timerange'],
                this_refant,
                prid['Target_Solint'],       # seconds
                prid['Target_Solint_Amp'],   # seconds
                imsize,       # pixels
                cellsize,     # arcsec
                prid['Target_Source_Size'],
                7,            # starting sequence number
                prid['Target_SelfCal_Iterations'],
                use_initial_point_source_calibration=1,
                save_image_plots=1,
                save_output_data=0
                )
            prid['Target_Statistics_INSCR0'] = statistics_noself
            prid['Target_Statistics_IWSCR0'] = statistics
            # Now zap the split data
            split_uvdata[0].zap()
            # Remove the new CL tables
            aips_uvdata.zap_table('AIPS CL', CL_first_fring)
            aips_uvdata.zap_table('AIPS CL', CL_second_fring)
        finally:
            if(split_uvdata[0].exists()): split_uvdata[0].zap()
            if(image_noself.exists()): image_noself.zap()
            if(imgdata.exists()): imgdata.zap()
            if(cal_data.exists()): cal_data.zap()
parseltongue/process_phase_reference_data.txt · Last modified: 2007/07/09 15:16 by 127.0.0.1