def selfcalSource( ) : sourceName = SAC.queryString("Control.Subarray1.Source") try : for n in range (1,33) : if ( sourceName == SAC.queryString("Control.SpectralLineCorrelator.Obsblock.ObsObject"+str(n)+".name") ) : return SAC.queryBool("Control.SpectralLineCorrelator.Obsblock.ObsObject"+str(n)+".selfCalibratable") return False except : return False
def waitForNewData( ) : elapsed = 0. # wait until we are integrating on a valid selfcal source (not Noise, not Pointing) while not ( selfcalSource( ) and SAC.queryBool("SlPipeline.IntegratorStageContainer.IntegratorStage.integrating") ) : if (elapsed > 20. ) : print ".. waiting for integration to begin on a valid selfcal source" elapsed = 0. # so message is refreshed every 20 sec SAC.sleep(1.) elapsed = elapsed + 1. print " .. waiting for integration to complete" elapsed = 0. # fresh selfcal data should be available when the integration number changes LastIntNumber = SAC.queryInt("SlPipeline.IntegratorStageContainer.IntegratorStage.IntegrationNumber") IntNumber = LastIntNumber while (IntNumber == LastIntNumber) : if (elapsed > 20. ) : print " .. waiting for integration to complete" elapsed = 0. # so message is refreshed every 20 sec SAC.sleep(0.5) elapsed = elapsed + 0.5 IntNumber = SAC.queryInt("SlPipeline.IntegratorStageContainer.IntegratorStage.IntegrationNumber") SAC.sleep(0.1) # to be safe, allow extra 0.1 sec to make sure selfcal results are updated print " .. fresh selfcal data available"