0001 function [d flags bitNum] = setNewFlag(d, flag, step)
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
0030
0031
0032
0033
0034 switch step
0035 case 'antenna'
0036 bitNum = 1;
0037
0038 case 'user'
0039 bitNum = 2;
0040
0041 case 'time'
0042 bitNum = 3;
0043
0044 case 'deglitch'
0045 bitNum = 4;
0046
0047 case 'rfi'
0048 bitNum = 5;
0049
0050 case 'horizon'
0051 bitNum = 6;
0052
0053 case 'satellite'
0054 bitNum = 7;
0055
0056 case 'sun'
0057 bitNum = 8;
0058
0059 case 'moon'
0060 bitNum = 9;
0061
0062 case 'pos_user'
0063 bitNum = 10;
0064
0065 case 'alpha'
0066 bitNum = 11;
0067
0068 case 'tsys'
0069 bitNum = 12;
0070
0071 case 'noise'
0072 bitNum = 13;
0073
0074 case 'gain'
0075 bitNum = 14;
0076
0077 case 'tau'
0078 bitNum = 15;
0079
0080 case 'astro'
0081 bitNum = 16;
0082
0083 case 'stokes'
0084 bitNum = 17;
0085
0086 otherwise
0087 error('Flag bit not recognized');
0088
0089 end
0090
0091 if(isempty(d))
0092 flags = [];
0093 return;
0094 end
0095
0096
0097
0098 if(isstruct(flag))
0099
0100 flags = setRightBit(flag, bitNum);
0101 elseif(isvector(flag))
0102
0103 flags = applyFlag(d, flag, bitNum);
0104 elseif(size(flag,2)==3)
0105
0106 flags = applyFlag2(d, flag, bitNum);
0107 end
0108
0109
0110 d = setFlagBits(d, flags);
0111
0112
0113 return;
0114
0115
0116
0117 function newFlag = setRightBit(flag,bitNum)
0118
0119 newFlag.bit.slow = zeros(size(flag.bit.slow), 'uint32');
0120 newFlag.bit.medium = zeros(size(flag.bit.medium), 'uint32');
0121 newFlag.bit.fast = zeros(size(flag.bit.fast), 'uint32');
0122
0123 f = find(flag.bit.slow);
0124 newFlag.bit.slow(f) = bitset(newFlag.bit.slow(f), bitNum);
0125 f = find(flag.bit.medium);
0126 newFlag.bit.medium(f) = bitset(newFlag.bit.medium(f), bitNum);
0127 f = find(flag.bit.fast);
0128 newFlag.bit.fast(f) = bitset(newFlag.bit.fast(f), bitNum);
0129
0130 return;
0131
0132
0133
0134 function d = setFlagBits(d, flags)
0135
0136
0137 d.flags.bit.slow = bitor(d.flags.bit.slow, flags.bit.slow);
0138 d.flags.bit.medium = bitor(d.flags.bit.medium, flags.bit.medium);
0139 d.flags.bit.fast = bitor(d.flags.bit.fast, flags.bit.fast);
0140
0141 d.flags.slow = d.flags.bit.slow > 0;
0142 d.flags.medium = d.flags.bit.medium > 0;
0143 d.flags.fast = d.flags.bit.fast > 0;
0144
0145 return;
0146
0147
0148
0149 function flags = applyFlag(d, flagVec, bitNum)
0150
0151 l = length(flagVec);
0152
0153 switch l
0154 case size(d.antenna0.receiver.data,1)
0155 flagRegTemp = [];
0156 flagServTemp = [];
0157 flagRxTemp = flagVec;
0158
0159 case length(d.array.frame.features)
0160 flagRegTemp = flagVec;
0161 flagServTemp = [];
0162 flagRxTemp =[];
0163
0164 case length(d.antenna0.thermal.ccTemperatureLoad)
0165 flagRegTemp = [];
0166 flagServTemp = flagVec;
0167 flagRxTemp = [];
0168 end
0169
0170 if(~isempty(flagRegTemp))
0171 flagServTemp = repmat(flagRegTemp, [1 5]);
0172 flagServTemp = flagServTemp';
0173 flagServTemp = flagServTemp(:);
0174
0175 flagRxTemp = repmat(flagRegTemp, [1 100]);
0176 flagRxTemp = flagRxTemp';
0177 flagRxTemp = flagRxTemp(:);
0178
0179 elseif(~isempty(flagServTemp))
0180 flagRegTemp = reshape(flagServTemp, [5, length(flagServTemp)/5]);
0181 flagRegTemp = mean(flagRegTemp) == 1;
0182 flagRegTemp = flagRegTemp';
0183
0184 flagRxTemp = repmat(flagServTemp, [1 20]);
0185 flagRxTemp = flagRxTemp';
0186 flagRxTemp = flagRxTemp(:);
0187 elseif(~isempty(flagRxTemp))
0188 flagRegTemp = reshape(flagRxTemp, [100, length(flagRxTemp)/100]);
0189 flagRegTemp = mean(flagRegTemp) == 1;
0190 flagRegTemp = flagRegTemp';
0191
0192 flagServTemp = reshape(flagRxTemp, [20, length(flagRxTemp)/20]);
0193 flagServTemp = mean(flagServTemp) == 1;
0194 flagServTemp = flagServTemp';
0195 else
0196 error('No flags passed');
0197 end
0198
0199 flagReg = uint32(flagRegTemp);
0200 flagServ = uint32(flagServTemp);
0201 flagRx = uint32(repmat(flagRxTemp, [1 3]));
0202
0203 flags.bit.slow = uint32(zeros(size(flagReg)));
0204 flags.bit.medium = uint32(zeros(size(flagServ)));
0205 flags.bit.fast = uint32(zeros(size(flagRx)));
0206
0207 f = find(flagReg);
0208 flags.bit.slow(f) = bitset(flags.bit.slow(f), bitNum);
0209 f = find(flagServ);
0210 flags.bit.medium(f) = bitset(flags.bit.medium(f), bitNum);
0211 f = find(flagRx);
0212 flags.bit.fast(f) = bitset(flags.bit.fast(f), bitNum);
0213
0214 return;
0215
0216
0217
0218
0219
0220 function flags = applyFlag2(d, flagArray, bitNum)
0221
0222
0223
0224 for m=1:size(flagArray,2)
0225
0226 flagRegTemp = [];
0227 flagServTemp = [];
0228 flagRxTemp = flagArray(:,m);
0229
0230 flagRegTemp = reshape(flagRxTemp, [100, length(flagRxTemp)/100]);
0231 flagRegTemp = mean(flagRegTemp) == 1;
0232 flagRegTemp = flagRegTemp';
0233
0234 flagServTemp = reshape(flagRxTemp, [20, length(flagRxTemp)/20]);
0235 flagServTemp = mean(flagServTemp) == 1;
0236 flagServTemp = flagServTemp';
0237
0238 flagReg(:,m) = flagRegTemp;
0239 flagServ(:,m) = flagServTemp;
0240 flagRx(:,m) = flagRxTemp;
0241 end
0242
0243
0244 flagReg = uint32(sum(flagReg,2) > 0);
0245 flagServ = uint32(sum(flagServ,2) > 0);
0246 flagRx = uint32(flagRx);
0247
0248 flags.bit.slow = uint32(zeros(size(flagReg)));
0249 flags.bit.medium = uint32(zeros(size(flagServ)));
0250 flags.bit.fast = uint32(zeros(size(flagRx)));
0251
0252 f = find(flagReg);
0253 flags.bit.slow(f) = bitset(flags.bit.slow(f), bitNum);
0254 f = find(flagServ);
0255 flags.bit.medium(f) = bitset(flags.bit.medium(f), bitNum);
0256 f = find(flagRx);
0257 flags.bit.fast(f) = bitset(flags.bit.fast(f), bitNum);
0258
0259 return;
0260
0261
0262
0263
0264