[Difx-users] difx2fits_pcal_20200619.patch
Leonid Petrov
Leonid.Petrov at lpetrov.net
Sun Jun 21 23:17:52 EDT 2020
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;
More information about the Difx-users
mailing list