The following is based on HP code, but there is some guesswork here as I don't really know just how SYPARM will work, what calls to it are like, or what commands can be sent to STEER and what data can be obtained from STEER.
// standard calibration routine for absolute total power mode: // usually just two polarizations, but // note that with a polarimeter there could be four counters to read inputs: counter_to_read[Ncounters] noise diode to fire local oscillator for receiver ND_in_Kelvins_for_this_output[Ncounters] Nsamples outputs: Tsys[Ncounters] Tsys_err[Ncounters] CperK[Ncounters] CperK_err[Ncounters] NDerror[Ncounters] LOerror[Ncounters] output[Ncounters][Nsets]Nsamples] // three sets samples are taken Nsets = 3 // initialise the outputs for (ic = 0 ; ic < Ncounters ; ic++ ) do { COerror[ic] = 0 /* counter problem */ NDerror[ic] = 0 /* noise diode problem */ LOerror[ic] = 0 /* local oscillator problem */ CperK[ic] = 0 /* counts per Kelvin per counter */ CperK_err[ic] = 0 /* uncertainty in CperK per counter */ Tsys[ic] = 0 /* System temperature per counter */ Tsys_err[ic] = 0 /* uncertainty in Tsys per counter */ for ( is = 0 ; is < Nsets ; is++ ) do { for ( i = 0 ; i < Nsamples ; i++ ) do { output[ic][is][i] = 0 } } } // obtain three sets of data for ( is = 0 ; is < Nsets ; is++ ) do { if ( is = 0 ) then { turn off local oscillator, turn off noise diode } if ( is = 1 ) then { turn on local oscillator, turn on noise diode } if ( is = 2 ) then { turn off noise diode } pause to let output settle ask all counters in use for Nsamples of output check for errors reading counters // get mean and rms for all good counters (ic) and each sample (i) for ( ic = 0 ; ic <= Ncounters ; ic++ ) do { sum[ic] = 0 sum_sqd[ic] = 0 for ( i = 0 ; i <= Nsamples ; i++ ) do { sum[ic] = sum[ic] + output[ic][is][i] sum_sqd[ic] = sum_sqd[ic] + output[ic][is][i]**2 } mean[ic][i] = sum[ic] / Nsamples rms[ic][i] = sqrt ((sum_sqd[ic] - sum[ic]**2/Nsamples) / (Nsamples - 1) } } // now we have all the data, lets see what we can calculate from it // for each good counter: for ( ic = 0 ; ic <= Ncounters ; ic++ ) do { // check that the noise diode fired (ND > 6 x RMS noise): if ((mean[ic][2] - mean[ic][3]) < 3*(rms[ic][2]+rms[ic][3])) then { NDerror[ic] = 1 } // check that the local oscillator switched off: if ((mean[ic][3] - mean[ic][1] < 3*(rms[ic][3]+rms[ic][1])) then { LOerror[ic] = 1 } // calculate the counts per Kelvin and error: if ( NDerror[ic] = 0 ) then { CperK[ic] = (mean[ic][3] - mean[ic][2]) / ND_in_Kelvins[ic] CperK_err[ic] = sqrt (rms[ic][3]**2 + rms[ic][2]**2) / ND_in_Kelvins[ic] } // calculate the system temperature and error: if ( NDerror[ic] = 0 && LOerror[ic] = 0) then { Tsys[ic] = (mean[ic][3] - mean[ic][1]) / (mean[ic][2] - mean[ic][3]) * ND_in_Kelvins[ic] Tsys_err[ic] = Tsys[ic] * sqrt (( (rms[ic][3]**2 + rms[ic][1]**2) / (mean[ic][3] - mean[ic][1])**2) + ((rms[ic][2]**2 + rms[ic][3]**2) / (mean[ic][2] - mean[ic][3]**2)) } }