0001 function d = massageData(d)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 if(~isfield(d, 'array'))
0030 return;
0031 end
0032
0033
0034
0035 if(~isfield(d.array, 'frame'))
0036 return;
0037 end
0038
0039
0040
0041
0042 if(d.array.frame.utc(1)<55230)
0043 if(isfield(d, 'antenna0'));
0044 if(isfield(d.antenna0, 'receiver'))
0045 d.antenna0.receiver.utc = ...
0046 d.antenna0.receiver.utc-0.3/24/60/60;
0047 end
0048 if(isfield(d.antenna0, 'servo'))
0049 d.antenna0.servo.utc = ...
0050 d.antenna0.servo.utc+0.5/24/60/60;
0051 end
0052 end
0053 elseif(d.array.frame.utc(1)>55230 & d.array.frame.utc(1)<55244)
0054 if(isfield(d, 'antenna0'));
0055 if(isfield(d.antenna0, 'servo'))
0056 d.antenna0.servo.utc = d.antenna0.servo.utc+0.5/24/60/60;
0057 end
0058 end
0059 end
0060
0061
0062
0063 if(d.array.frame.utc(1)>55218 & d.array.frame.utc(1)<55223)
0064 if(isfield(d, 'antenna0'))
0065 if(isfield(d.antenna0, 'servo'))
0066 if(isfield(d.antenna0.servo, 'fast_az_pos'))
0067 d.antenna0.servo.fast_az_pos = ...
0068 d.antenna0.servo.fast_az_pos-22.42;
0069 d.antenna0.servo.slow_az_pos = ...
0070 d.antenna0.servo.slow_az_pos-22.42;
0071 end
0072 end
0073 end
0074 end
0075
0076
0077
0078 if(isfield(d, 'antenna0'))
0079 if(isfield(d.antenna0, 'servo') && isfield(d.antenna0, 'receiver') && ...
0080 isfield(d.antenna0, 'thermal'))
0081 d = fixTimingOrder(d);
0082 end
0083 end
0084
0085
0086
0087
0088
0089
0090
0091
0092 if(isfield(d, 'antenna0'))
0093 if(isfield(d.antenna0, 'tracker'))
0094 dt = deriv(d.antenna0.tracker.utc)*24*60*60;
0095 ind = dt>1.1 | dt<0.9;
0096 if(~isempty(find(ind)))
0097 l = length(find(ind));
0098 display('Tracker Thread Timing Issue');
0099 display(sprintf('Issue affected %d out of %d data samples', l, length(ind)));
0100 display('Fixing data for postprocessing');
0101 d.antenna0.tracker.utc(ind) = d.array.frame.utc(ind) + 1/24/60/60;
0102 display('Fixed data for postprocessing');
0103
0104
0105
0106
0107 end
0108 end
0109 end
0110
0111 if(d.array.frame.utc > date2mjd(2012, 12, 06) & d.array.frame.utc < ...
0112 date2mjd(2013, 01, 22))
0113
0114 speed = abs(deriv(d.antenna0.servo.slow_az_pos));
0115 ind = speed > 3.75 & speed < 4.25;
0116 if(~isempty(ind))
0117
0118
0119 [si ei] = findStartStop(~ind);
0120 aa = find(ei - si < 10);
0121 for m=1:length(aa)
0122 ind(si(aa(m)):ei(aa(m))) = 1;
0123 end
0124 d.array.frame.features(ind) = d.array.frame.features(ind) + 2^0;
0125 end
0126 end
0127
0128
0129 return;
0130
0131
0132 function dfinal = fixTimingOrder(d)
0133
0134
0135
0136 if(isfield(d, 'antenna0'))
0137 if(~isfield(d.antenna0, 'servo') | ~isfield(d.antenna0, 'receiver') | ...
0138 ~isfield(d.antenna0, 'thermal'))
0139 dfinal = d;
0140 return;
0141 end
0142 end
0143
0144 if(~isfield(d.antenna0.receiver, 'data'))
0145 dfinal = d;
0146 return;
0147 end
0148
0149
0150 dservo = d.antenna0.servo;
0151 dreceiver = d.antenna0.receiver;
0152 dthermal = d.antenna0.thermal;
0153 lengthOrig = size(d.array.frame.utc);
0154
0155
0156
0157 indFinal = ones(lengthOrig);
0158 indFinal(length(indFinal)-1:length(indFinal)) = 0;
0159
0160 indFinal = ones(lengthOrig);
0161 indFinal(1:2) = 0;
0162 dservo = framecutSub(dservo, logical(indFinal));
0163 dreceiver = framecutSub(dreceiver, logical(indFinal));
0164
0165 indFinal = ones(lengthOrig);
0166 indFinal([1 length(indFinal)]) = 0;
0167 dthermal = framecutSub(dthermal, logical(indFinal));
0168
0169 dfinal = framecutSub(d, logical(indFinal));
0170 clear d;
0171 dfinal.antenna0.receiver = dreceiver;
0172 dfinal.antenna0.servo.utc = dservo.utc;
0173 dfinal.antenna0.servo.fast_az_pos = dservo.fast_az_pos;
0174 dfinal.antenna0.servo.fast_el_pos = dservo.fast_el_pos;
0175 dfinal.antenna0.servo.fast_az_err = dservo.fast_az_err;
0176 dfinal.antenna0.servo.fast_el_err = dservo.fast_el_err;
0177 dfinal.antenna0.thermal.utc = dthermal.utc;
0178 dfinal.antenna0.thermal.ccTemperatureLoad = dthermal.ccTemperatureLoad;
0179
0180
0181
0182
0183 return;
0184
0185
0186
0187 function d = framecutSub(d, ind)
0188
0189 names=fieldnames(d);
0190 for i=1:length(names)
0191 if(eval(sprintf('isstruct(d.%s)',names{i})))
0192 eval(sprintf('d.%s=framecutSub(d.%s,ind);',names{i},names{i}));
0193 else
0194 eval(sprintf('d.%s=regcut(d.%s,ind);',names{i},names{i}));
0195 end
0196 end
0197
0198 return
0199
0200
0201 function r=regcut(r,ind)
0202
0203 switch(ndims(r))
0204 case 1
0205 r=r(ind);
0206 case 2
0207 r=r(ind,:);
0208 case 3
0209 r=r(ind,:,:);
0210 case 4
0211 r=r(ind,:,:,:);
0212 end
0213
0214 return