[Difx-users] difx2fits_pcal_20200619.patch

Jan Wagner jwagner105 at googlemail.com
Thu Jun 25 05:33:03 EDT 2020


Hi,

just to update difx-users list as well: Leonids phase cal fix for
difx2fits is in DiFX Trunk as revision 9564, with some additional
cleanup of old code.

The same data of experiment r1948 revealed another unrelated FITS
phase cal issue that is fixed in Trunk revision 9571; PC#1 tone
frequency order was jumbled and potentially some tones would be
missing or duplicated. The problem occurred with wideband VEX
recorded frequencies containing several Zoom bands (several FITS
IF), or with overlapped VEX frequencies and a Zoom band that could
have originated from several VEX frequencies.

regards,
Jan

Am 22.06.2020 um 05:17 schrieb Leonid Petrov via Difx-users:
> Dear collagues,
>   
>   Please find below a patch to difx2fits wrt trunk version of 
> 2020.06.12.
>
>   Difs2fits did not put phase-cal signal for NS station in IVS 
> experiment r1948. The experiment had 16 IFs: 10 at X band and 6
> at S-band. NS station recorded two datastreams: one for X-band
> and another for S-band. The first datastream had 16 IFs, the second
> ahd 8 IFs, but only low 10 IFs in the first datastream and 
> upper 6 IFs in the second datastream had data.
>
>   The full DiFX output for that experiment can be found in
> ftp://ftp.mpifr-bonn.mpg.de/outgoing/ykchoi/leonid/r1948_difxout.tgz
>
> Here is the exerpt from r1948_0001.difx/PCAL_58995_061200_NS
>
> NS 58995.7083381 0.0000095 4 16 32 8213 R  3.15575e-05  4.98256e-05 8214 R  9.30544e-05 -1.21763e-04 8215 R 
> NS 58995.7083381 0.0000095 5  8 32 2226 R -2.60000e-04 -1.42326e-04 2227 R -1.73795e-04 -2.58253e-04 2228 R 
>
> The old logic appended the record of the second datastream to the prior
> datastream. This did not work. The total number of extracted phase-cal tones
> was 31 and the output arrays were sized to 16*31=496, equal to the number
> of phase-cal tones found in the 1st datasteam, and as a result, the second 
> datastream was ignored.
>
>  I made a minor step: I forced the offset of the second datastreeam to be set 
> to zero if the total number of phase-calibration tones in the 1st 
> datastream is equal to total number of tones. I am confident that this fix will 
> not cause regressions, but I am less confident whether this is sufficient to cover
> other cases when phase cal is split between multiple datasets.
>
> Sincerely
> Leonid
> 2020.06.21_23:12:07
>
> =================================== Patch: =====================================
>
> --- applications/difx2fits/trunk/src/fitsPH.c~	2020-06-19 19:56:45.423005154 -0400
> +++ applications/difx2fits/trunk/src/fitsPH.c	2020-06-19 21:39:16.109417054 -0400
> @@ -981,6 +981,7 @@
>  	float pulseCalDeltaT[2][array_MAX_TONES];
>  	float stateCount[2][array_MAX_STATES*array_MAX_BANDS];
>  	float pulseCalRate[2][array_MAX_TONES];
> +	double pulseCalFrAcc[2][array_MAX_TONES];
>  	int configId = -1;
>  	int sourceId = -1;
>  	int scanId;
> @@ -1224,6 +1225,9 @@
>  
>  					exit(EXIT_FAILURE);
>  				}
> +                                if ( d > 0 && startTones[d] == nTone*nBand ){
> +				     startTones[d] = 0 ;
> +                                }
>  			}
>  
>  			if(nt > maxDifxTones)
> @@ -1251,6 +1255,7 @@
>  		{
>  			for(t = 0; t < array_MAX_TONES; ++t)
>  			{
> +				pulseCalFrAcc[k][t] = 0.0;
>  				pulseCalReAcc[k][t] = 0.0;
>  				pulseCalImAcc[k][t] = 0.0;
>  				pulseCalDeltaT[k][t] = 0.0;
> @@ -1667,7 +1672,7 @@
>  							{
>  								if(pulseCalReAcc[k][l] == 0.0 && pulseCalImAcc[k][l] == 0.0)
>  								{
> -									freqs[k][l] = nan.d;
> +									pulseCalFrAcc[k][l] = nan.d;
>  									pulseCalReAcc[k][l] = nan.f;
>  									pulseCalImAcc[k][l] = nan.f;
>  									pulseCalRate[k][l] = nan.f;
> @@ -1677,7 +1682,7 @@
>  							FITS_WRITE_ARRAY(stateCount[k], p_fitsbuf, 4*nBand);
>  							if(nTone > 0)
>  							{
> -								FITS_WRITE_ARRAY(freqs[k], p_fitsbuf, nTone*nBand);
> +								FITS_WRITE_ARRAY(pulseCalFrAcc[k], p_fitsbuf, nTone*nBand);
>  								FITS_WRITE_ARRAY(pulseCalReAcc[k], p_fitsbuf, nTone*nBand);
>  								FITS_WRITE_ARRAY(pulseCalImAcc[k], p_fitsbuf, nTone*nBand);
>  								FITS_WRITE_ARRAY(pulseCalRate[k], p_fitsbuf, nTone*nBand);
> @@ -1718,6 +1723,7 @@
>  					{
>  						for(t = 0; t < nTone*D->datastream[currentDsId].nRecFreq; ++t)
>  						{
> +						        if ( freqs[k][t] > 0.0 ) pulseCalFrAcc[k][t] = freqs[k][t];
>  							pulseCalReAcc[k][t+startTone] += pulseCalRe[k][t];
>  							pulseCalImAcc[k][t+startTone] += pulseCalIm[k][t];
>  							pulseCalDeltaT[k][t] += D->config[configId].tInt;
>
> _______________________________________________
> Difx-users mailing list
> Difx-users at listmgr.nrao.edu
> https://listmgr.nrao.edu/mailman/listinfo/difx-users




More information about the Difx-users mailing list