0001 function antHealth(date,output_dir)
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 warning off
0032
0033 I_filename = [date,'-daily_map_T.png'];
0034 Q_filename = [date,'-daily_map_Q.png'];
0035 U_filename = [date,'-daily_map_U.png'];
0036 hits_filename = [date,'-daily_map_hits.png'];
0037
0038 start = sprintf('''%s:00:00:00''',date);
0039 stop = sprintf('''%s:23:59:59''',date);
0040
0041 regs = {'array.frame.received'...
0042 'array.frame.utc double',...
0043 'array.frame.features',...
0044 'array.weather.utc double',...
0045 'array.weather.pressure double',...
0046 'array.weather.airTemperature double',...
0047 'array.weather.windSpeed[0] double',...
0048 'array.weather.windDirection[0] double',...
0049 'array.weather.status double',...
0050 'array.weather.relativeHumidity double',...
0051 'antenna0.receiver.gateVoltage[0-3][0-2] double',...
0052 'antenna0.receiver.drainVoltage[0-3][0-2] double',...
0053 'antenna0.receiver.drainCurrent[0-3][0-2] double',...
0054 'antenna0.thermal.lsTemperatureSensors double',...
0055 'antenna0.thermal.ccTemperatureLoad double',...
0056 'antenna0.thermal.utc double',...
0057 'antenna0.thermal.dlpTemperatureSensors double',...
0058 'antenna0.servo.utc double',...
0059 'antenna0.servo.slow_az_pos double',...
0060 'antenna0.servo.slow_el_pos double'};
0061
0062
0063
0064
0065 eval(sprintf('d = read_arc(%s, %s, regs);', start, stop))
0066 d.antenna0.servo.az = d.antenna0.servo.slow_az_pos;
0067 d.antenna0.servo.el = d.antenna0.servo.slow_el_pos;
0068 [d.year, d.month, d.day, hours, minutes, seconds] = ...
0069 mjd2date(d.array.frame.utc);
0070 d.time = hours + minutes/60 + seconds/3600;
0071
0072
0073
0074 if(nargin==1)
0075 dir = sprintf('%4d%02d%02d',d.year(1),d.month(1),d.day(1));
0076 else
0077 dir = [output_dir,'/antenna_health'];
0078 end
0079 disp(['antPoint:: Will output to ',dir]);
0080 eval(sprintf('system(''rm -fr %s'');',dir));
0081 eval(sprintf('system(''mkdir -p %s'');',dir));
0082 eval(sprintf('system(''mkdir -p %s/intro'');',dir));
0083 eval(sprintf('system(''mkdir -p %s/pointing'');',dir));
0084 eval(sprintf('system(''mkdir -p %s/daily'');',dir));
0085
0086
0087 d.antenna0.bias = d.antenna0.receiver;
0088 d.antenna0 = rmfield(d.antenna0, 'receiver');
0089
0090 plotparams.interactive = 0;
0091 plotparams.plot = 1;
0092 plotparams.save = 0;
0093
0094
0095
0096
0097 [dcal, dpt, dblank] = antCals(d);
0098
0099
0100
0101
0102 dpt = checkRadPt(dpt, plotparams, dir);
0103
0104
0105 return;
0106
0107
0108 function checkNewMonth(data)
0109
0110 [day rest] = strtok(date, '-');
0111 day = str2num(day);
0112 if(day==1)
0113 display('antPoint::checkNewMonth:: HAPPY NEW MONTH!!!');
0114 display(['antPoint::checkNewMonth:: You have been unlucky enough to be the observer at the' ...
0115 ' end of a month.']);
0116 display(['antPoint::checkNewMonth:: As such, you will also update the monthly plots']);
0117 display('antPoint::checkNewMonth:: We will now read a full month''s worth of data.');
0118 display('antPoint::checkNewMonth:: I hope you have a book with you...or go get some tea.');
0119 display('antPoint::checkNewMonth:: .....this will take a while....');
0120 mon = rest(2:4);
0121 year = str2num(rest(6:9));
0122 [MONTH month Month] = getmonth;
0123 if(isempty(strmatch(mon, MONTH)))
0124 m = strmatch(mon, month);
0125 if(isempty(m))
0126 m = strmatch(mon, Month);
0127 if(isempty(m))
0128 error(['antPoint::checkNewMonth:: could not recognize the month, either capitalize it all,' ...
0129 ' or use all lower case']);
0130 end
0131 end
0132 else
0133 m = strmatch(mon, MONTH);
0134 end
0135 newM= m-1;
0136 if(newM == 0)
0137 newM=12;
0138 year = year-1;
0139 end
0140
0141 end
0142
0143 return;
0144
0145
0146
0147 function sched = antSched(output_dir)
0148
0149
0150
0151
0152 [defaultDataDir defaultCalFile defaultReaderPath defaultLogDir] = whichHost();
0153
0154 base_dir = regexp(output_dir,'_','split');
0155 base_dir2 = regexp(base_dir{1},'/','split');
0156
0157 logFiles = sprintf('%s/%s*', defaultLogDir, base_dir2{2});
0158
0159 command = sprintf('./log/logSearch ''%s''', logFiles);
0160
0161
0162 [stat, result] = system(command);
0163
0164 if(stat==1)
0165 sched = result;
0166 else
0167 sched = 'COULD NOT DETERMINE WHICH SCHEDULES WERE RUN';
0168 end
0169
0170 return;
0171
0172
0173 function sched = antSchedOrig(dir)
0174
0175
0176
0177
0178 [defaultDataDir defaultCalFile defaultReaderPath defaultLogDir] = ...
0179 whichHost();
0180
0181 logFiles = sprintf('%s/%s*', defaultLogDir, dir);
0182
0183 command = sprintf('./log/logSearch ''%s''', logFiles);
0184
0185
0186 [stat, result] = system(command);
0187
0188 if(stat==1)
0189 sched = result;
0190 else
0191 sched = 'COULD NOT DETERMINE WHICH SCHEDULES WERE RUN';
0192 end
0193
0194 return;
0195
0196
0197
0198
0199 function [dcal dpt dblank] = antCals(d, dir)
0200
0201
0202
0203
0204
0205
0206 indrapt = bitsearch(d.array.frame.features, 7, 'any');
0207 indcal = bitsearch(d.array.frame.features, 2, 'any') | ...
0208 bitsearch(d.array.frame.features, 3, 'any');
0209 indblank = bitsearch(d.array.frame.features, 4, 'only');
0210
0211
0212 if(~isempty(find(indcal)))
0213 [startcal stopcal] = findStartStop(indcal);
0214 goodEvents = (stopcal - startcal)>120;
0215 else
0216 dcal = [];
0217 dpt = [];
0218 dblank = [];
0219 return;
0220 end
0221
0222 if(~isempty(find(indrapt)))
0223 [startpt stoppt] = findStartStop(indrapt);
0224 noPoint = 0;
0225 else
0226 startpt = [];
0227 stoppt = [];
0228 noPoint = 1;
0229 end
0230 [startcal stopcal] = findStartStop(indcal);
0231 [startblank stopblank] = findStartStop(indblank);
0232
0233
0234 f = find( (stoppt - startpt)>10*60);
0235 startpt(f) = []; stoppt(f) = [];
0236 f = find( (stopcal - startcal)>10*60);
0237 startcal(f) = []; stopcal(f) = [];
0238 f = find( (stopblank - startblank)>10*60);
0239 startblank(f) = []; stopblank(f) = [];
0240
0241
0242 dcal = [];
0243 dpt = [];
0244 dblank = [];
0245 sources = [];
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256 for m=1:length(startpt)
0257 if(m==1)
0258 dpt = read_arc(mjd2string(d.array.frame.utc(startpt(m))), ...
0259 mjd2string(d.array.frame.utc(stoppt(m))));
0260 dpt = determineIndices(dpt);
0261 dpt.index.radio_point_scan.slow(length(dpt.index.radio_point_scan.slow)) = 0;
0262 dpt.array.frame.features(length(dpt.array.frame.features))=0;
0263 else
0264 thisd = read_arc(mjd2string(d.array.frame.utc(startpt(m))), mjd2string(d.array.frame.utc(stoppt(m))));
0265 thisd = determineIndices(thisd);
0266 dpt = catstruct(1, [dpt thisd]);
0267 dpt.index.radio_point_scan.slow(length(dpt.index.radio_point_scan.slow)) = 0;
0268 dpt.array.frame.features(length(dpt.array.frame.features))=0;
0269 end
0270 end
0271
0272 sources = [];
0273 for m=1:length(startcal)
0274 if(m==1)
0275 dcal = read_arc(mjd2string(d.array.frame.utc(startcal(m))), ...
0276 mjd2string(d.array.frame.utc(stopcal(m))));
0277 aa = unique(dcal.antenna0.tracker.source);
0278 sources{m} = aa{1};
0279 else
0280 thisd = read_arc(mjd2string(d.array.frame.utc(startcal(m))), mjd2string(d.array.frame.utc(stopcal(m))));
0281 aa = unique(thisd.antenna0.tracker.source);
0282 sources{m} = aa{1};
0283 dcal = catstruct(1, [dcal thisd]);
0284 end
0285 end
0286
0287 for m=1:length(startblank)
0288 if(m==1)
0289 dblank = read_arc(mjd2string(d.array.frame.utc(startblank(m))), ...
0290 mjd2string(d.array.frame.utc(stopblank(m))));
0291 else
0292 thisd = read_arc(mjd2string(d.array.frame.utc(startblank(m))), mjd2string(d.array.frame.utc(stopblank(m))));
0293 dblank = catstruct(1, [dblank thisd]);
0294 end
0295 end
0296
0297
0298 uniqueSource = unique(sources);
0299 for m=1:length(uniqueSource)
0300 numMatch = strmatch(uniqueSource{m}, sources, 'exact');
0301 uniqueObs(m) = length(numMatch);
0302 end
0303
0304 dcal.uniqueSources = uniqueSource;
0305 dcal.uniqueObs = uniqueObs;
0306
0307 return;
0308
0309
0310
0311 function dpt = checkRadPt(dpt, plotparams, maindir)
0312
0313 if(isempty(dpt))
0314 dpt.off = [];
0315 dpt.obs = [];
0316 return;
0317 end
0318
0319 dpt = apparentAzEl(dpt);
0320 dpt = flagMask(dpt);
0321 dpt = flagData(dpt, [0 1 5 6 7 8 10 12], []);
0322
0323 dpt.antenna0.receiver.data(:,[1 6]) = dpt.antenna0.receiver.data(:,[1 6]) +200;
0324
0325 [obs off ide] = radPointPlots(dpt, plotparams, 'scan', 'daily', maindir);
0326
0327
0328 if(~isempty(off.az))
0329
0330 for m=1:length(obs.name)
0331 srcNum(m) = sourceCorrespondance(obs.name(m));
0332 end
0333
0334
0335 thisCross = [obs.timeVal' srcNum' ide.az' ide.el' obs.az' obs.el' off.az off.el];
0336
0337 [home,installeddir]=where_am_i();
0338
0339
0340
0341 allCross = load([home,'/',installeddir,'/constants/pointing_crosses_all.txt']);
0342 allCross = [allCross; thisCross];
0343 save([home,'/',installeddir,'/constants/pointing_crosses_all.txt'], 'allCross', '-ascii', '-single')
0344
0345 else
0346 display('antPoint::checkRadPt:: NO GOOD CROSSES IN YOUR DATA SET');
0347 d.correction.pointing = [];
0348 end
0349
0350
0351
0352 display(sprintf('antPoint::checkRadPt:: Only kept %d good points', length(obs.az)));
0353
0354
0355
0356 om(:,1)=dpt.antenna0.tracker.flexure(:,1);
0357 om(:,2)=dpt.antenna0.tracker.flexure(:,2);
0358 om(:,3)=dpt.antenna0.tracker.tilts(:,1);
0359 om(:,4)=dpt.antenna0.tracker.tilts(:,2);
0360 om(:,5)=dpt.antenna0.tracker.tilts(:,3);
0361 om(:,6)=dpt.antenna0.tracker.fixedCollimation(:,1);
0362 om(:,7)=dpt.antenna0.tracker.fixedCollimation(:,2);
0363 om(:,8)=dpt.antenna0.tracker.encoder_off(:,1);
0364 om(:,9)=dpt.antenna0.tracker.encoder_off(:,2);
0365 om = mean(om);
0366
0367 off.azErr(isnan(off.azErr)) = max(off.azErr);
0368 off.elErr(isnan(off.elErr)) = max(off.elErr);
0369
0370 om = om(1,:);
0371
0372
0373 setPlotDisplay(plotparams.plot);
0374 [rmssao ind sa0] = plot_res(om, ide, obs, 'No Fit', 0);
0375 sa0 = mean(sa0);
0376
0377 if(plotparams.save)
0378 dbclear if error
0379 set(gcf,'paperposition',[0 0 6.0 9.0])
0380 filename = sprintf('%s/pointing/fit_resisual.png', maindir);
0381 eval(sprintf('print -dpng -r70 %s', filename));
0382 dbstop if error
0383 end
0384
0385
0386 dpt.obs = obs;
0387 dpt.off = off;
0388 dpt.ide = ide;
0389 dpt.sa0 = sa0;
0390
0391
0392
0393
0394 return;
0395
0396
0397
0398
0399 function makeBiasTable(d, fid)
0400
0401 gateV = d.antenna0.bias.gateVoltage;
0402 drainV = d.antenna0.bias.drainVoltage;
0403 drainI = d.antenna0.bias.drainCurrent;
0404 badVals = gateV == 0 | drainV == 0 | drainI == 0;
0405 gaveV(badVals) = nan;
0406 drainV(badVals) = nan;
0407 drainI(badVals) = nan;
0408 bias.gateV.mean = squeeze(nanmean(gateV));
0409 bias.gateV.rms = sqrt(squeeze(nanvar(gateV)));
0410 bias.drainV.mean = squeeze(nanmean(drainV));
0411 bias.drainV.rms = sqrt(squeeze(nanvar(drainV)));
0412 bias.drainI.mean = squeeze(nanmean(drainI));
0413 bias.drainI.rms = sqrt(squeeze(nanvar(drainI)));
0414 bias.utc = d.array.frame.utc(1);
0415
0416
0417 if(bias.utc < date2mjd(2011, 06, 01))
0418 drainVolt = [ 1.97 4.05 3.95; 1.9 4.01 3.96; 2.01 3.78 4.11; 1.99 4.52 ...
0419 4.03];
0420 drainCurr = [8.47 16.08 16.28; 7.89 15.0 14.96; 8.52 14.42 15.89; 8.52 ...
0421 14.91 14.96];
0422 elseif( bias.utc >= date2mjd(2011, 06, 01) & bias.utc < date2mjd(2011, 10, 01))
0423 drainVolt = [2 4 4; 1.9 4 4 ; 2 4 4 ; 2 4 4];
0424 drainCurr = [8.5 15 15; 7.8 15.0 15.5; 8.5 12 12; 8.5 15 15];
0425 elseif( bias.utc >= date2mjd(2011, 10,01))
0426 drainVolt = [2 4 4; 2 4 4 ; 2 4 4 ; 2 4 4];
0427 drainCurr = [8 16 16; 8 16 16; 8 16 16; 8 16 16.1];
0428 end
0429
0430
0431
0432 delta.drainI = abs(bias.drainI.mean - drainCurr);
0433 delta.drainV = abs(bias.drainV.mean - drainVolt);
0434 delta.drainIBad = delta.drainI > 0.25;
0435 delta.drainVBad = delta.drainV > 0.1;
0436 delta.gateVBad = bias.gateV.mean < -0.2;
0437
0438
0439 fprintf(fid, '<table width="75%%" border="1"> \n');
0440 fprintf(fid, ' <tr> <td> </td> <th> Stage 1 </th> <th> Stage 2 </th> <th> Stage 3 </th> </tr>\n');
0441 fprintf(fid, ' <tr> <th> AMP 1 </th>\n');
0442 fprintf(fid, ' <td>\n');
0443 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0444 if(delta.drainIBad(1,1))
0445 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(1,1), bias.drainI.mean(1,1), bias.drainI.rms(1,1), delta.drainI(1,1), delta.drainIBad(1,1));
0446 else
0447 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(1,1), bias.drainI.mean(1,1), bias.drainI.rms(1,1), delta.drainI(1,1), delta.drainIBad(1,1));
0448 end
0449 if(delta.drainVBad(1,1))
0450 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(1,1), bias.drainV.mean(1,1), bias.drainV.rms(1,1), delta.drainV(1,1), delta.drainVBad(1,1));
0451 else
0452 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(1,1), bias.drainV.mean(1,1), bias.drainV.rms(1,1), delta.drainV(1,1), delta.drainVBad(1,1));
0453 end
0454 if(delta.gateVBad(1,1))
0455 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(1,1), bias.gateV.rms(1,1), delta.gateVBad(1,1));
0456 else
0457 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(1,1), bias.gateV.rms(1,1), delta.gateVBad(1,1));
0458 end
0459 fprintf(fid, ' </table>\n');
0460 fprintf(fid, ' </td>\n');
0461 fprintf(fid, ' <td>\n');
0462 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0463 if(delta.drainIBad(1,2))
0464 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(1,2), bias.drainI.mean(1,2), bias.drainI.rms(1,2), delta.drainI(1,2), delta.drainIBad(1,2));
0465 else
0466 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(1,2), bias.drainI.mean(1,2), bias.drainI.rms(1,2), delta.drainI(1,2), delta.drainIBad(1,2));
0467 end
0468 if(delta.drainVBad(1,2))
0469 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(1,2), bias.drainV.mean(1,2), bias.drainV.rms(1,2), delta.drainV(1,2), delta.drainVBad(1,2));
0470 else
0471 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(1,2), bias.drainV.mean(1,2), bias.drainV.rms(1,2), delta.drainV(1,2), delta.drainVBad(1,2));
0472 end
0473 if(delta.gateVBad(1,2))
0474 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(1,2), bias.gateV.rms(1,2), delta.gateVBad(1,2));
0475 else
0476 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(1,2), bias.gateV.rms(1,2), delta.gateVBad(1,2));
0477 end
0478 fprintf(fid, ' </table>\n');
0479 fprintf(fid, ' </td>\n');
0480 fprintf(fid, ' <td>\n');
0481 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0482 if(delta.drainIBad(1,3))
0483 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(1,3), bias.drainI.mean(1,3), bias.drainI.rms(1,3), delta.drainI(1,3), delta.drainIBad(1,3));
0484 else
0485 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(1,3), bias.drainI.mean(1,3), bias.drainI.rms(1,3), delta.drainI(1,3), delta.drainIBad(1,3));
0486 end
0487 if(delta.drainVBad(1,3))
0488 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(1,3), bias.drainV.mean(1,3), bias.drainV.rms(1,3), delta.drainV(1,3), delta.drainVBad(1,3));
0489 else
0490 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(1,3), bias.drainV.mean(1,3), bias.drainV.rms(1,3), delta.drainV(1,3), delta.drainVBad(1,3));
0491 end
0492 if(delta.gateVBad(1,3))
0493 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(1,3), bias.gateV.rms(1,3), delta.gateVBad(1,3));
0494 else
0495 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(1,3), bias.gateV.rms(1,3), delta.gateVBad(1,3));
0496 end
0497 fprintf(fid, ' </table>\n');
0498 fprintf(fid, ' </td>\n');
0499
0500 fprintf(fid, ' <tr> <th> AMP 2 </th>\n');
0501 fprintf(fid, ' <td>\n');
0502 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0503 if(delta.drainIBad(2,1))
0504 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(2,1), bias.drainI.mean(2,1), bias.drainI.rms(2,1), delta.drainI(2,1), delta.drainIBad(2,1));
0505 else
0506 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(2,1), bias.drainI.mean(2,1), bias.drainI.rms(2,1), delta.drainI(2,1), delta.drainIBad(2,1));
0507 end
0508 if(delta.drainVBad(2,1))
0509 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(2,1), bias.drainV.mean(2,1), bias.drainV.rms(2,1), delta.drainV(2,1), delta.drainVBad(2,1));
0510 else
0511 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(2,1), bias.drainV.mean(2,1), bias.drainV.rms(2,1), delta.drainV(2,1), delta.drainVBad(2,1));
0512 end
0513 if(delta.gateVBad(2,1))
0514 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(2,1), bias.gateV.rms(2,1), delta.gateVBad(2,1));
0515 else
0516 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(2,1), bias.gateV.rms(2,1), delta.gateVBad(2,1));
0517 end
0518 fprintf(fid, ' </table>\n');
0519 fprintf(fid, ' </td>\n');
0520 fprintf(fid, ' <td>\n');
0521 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0522 if(delta.drainIBad(2,2))
0523 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(2,2), bias.drainI.mean(2,2), bias.drainI.rms(2,2), delta.drainI(2,2), delta.drainIBad(2,2));
0524 else
0525 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(2,2), bias.drainI.mean(2,2), bias.drainI.rms(2,2), delta.drainI(2,2), delta.drainIBad(2,2));
0526 end
0527 if(delta.drainVBad(2,2))
0528 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(2,2), bias.drainV.mean(2,2), bias.drainV.rms(2,2), delta.drainV(2,2), delta.drainVBad(2,2));
0529 else
0530 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(2,2), bias.drainV.mean(2,2), bias.drainV.rms(2,2), delta.drainV(2,2), delta.drainVBad(2,2));
0531 end
0532 if(delta.gateVBad(2,2))
0533 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(2,2), bias.gateV.rms(2,2), delta.gateVBad(2,2));
0534 else
0535 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(2,2), bias.gateV.rms(2,2), delta.gateVBad(2,2));
0536 end
0537 fprintf(fid, ' </table>\n');
0538 fprintf(fid, ' </td>\n');
0539 fprintf(fid, ' <td>\n');
0540 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0541 if(delta.drainIBad(2,3))
0542 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(2,3), bias.drainI.mean(2,3), bias.drainI.rms(2,3), delta.drainI(2,3), delta.drainIBad(2,3));
0543 else
0544 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(2,3), bias.drainI.mean(2,3), bias.drainI.rms(2,3), delta.drainI(2,3), delta.drainIBad(2,3));
0545 end
0546 if(delta.drainVBad(2,3))
0547 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(2,3), bias.drainV.mean(2,3), bias.drainV.rms(2,3), delta.drainV(2,3), delta.drainVBad(2,3));
0548 else
0549 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(2,3), bias.drainV.mean(2,3), bias.drainV.rms(2,3), delta.drainV(2,3), delta.drainVBad(2,3));
0550 end
0551 if(delta.gateVBad(2,3))
0552 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(2,3), bias.gateV.rms(2,3), delta.gateVBad(2,3));
0553 else
0554 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(2,3), bias.gateV.rms(2,3), delta.gateVBad(2,3));
0555 end
0556 fprintf(fid, ' </table>\n');
0557 fprintf(fid, ' </td>\n');
0558
0559
0560 fprintf(fid, ' <tr> <th> AMP 3 </th>\n');
0561 fprintf(fid, ' <td>\n');
0562 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0563 if(delta.drainIBad(3,1))
0564 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(3,1), bias.drainI.mean(3,1), bias.drainI.rms(3,1), delta.drainI(3,1), delta.drainIBad(3,1));
0565 else
0566 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(3,1), bias.drainI.mean(3,1), bias.drainI.rms(3,1), delta.drainI(3,1), delta.drainIBad(3,1));
0567 end
0568 if(delta.drainVBad(3,1))
0569 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(3,1), bias.drainV.mean(3,1), bias.drainV.rms(3,1), delta.drainV(3,1), delta.drainVBad(3,1));
0570 else
0571 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(3,1), bias.drainV.mean(3,1), bias.drainV.rms(3,1), delta.drainV(3,1), delta.drainVBad(3,1));
0572 end
0573 if(delta.gateVBad(3,1))
0574 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(3,1), bias.gateV.rms(3,1), delta.gateVBad(3,1));
0575 else
0576 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(3,1), bias.gateV.rms(3,1), delta.gateVBad(3,1));
0577 end
0578 fprintf(fid, ' </table>\n');
0579 fprintf(fid, ' </td>\n');
0580 fprintf(fid, ' <td>\n');
0581 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0582 if(delta.drainIBad(3,2))
0583 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(3,2), bias.drainI.mean(3,2), bias.drainI.rms(3,2), delta.drainI(3,2), delta.drainIBad(3,2));
0584 else
0585 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(3,2), bias.drainI.mean(3,2), bias.drainI.rms(3,2), delta.drainI(3,2), delta.drainIBad(3,2));
0586 end
0587 if(delta.drainVBad(3,2))
0588 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(3,2), bias.drainV.mean(3,2), bias.drainV.rms(3,2), delta.drainV(3,2), delta.drainVBad(3,2));
0589 else
0590 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(3,2), bias.drainV.mean(3,2), bias.drainV.rms(3,2), delta.drainV(3,2), delta.drainVBad(3,2));
0591 end
0592 if(delta.gateVBad(3,2))
0593 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(3,2), bias.gateV.rms(3,2), delta.gateVBad(3,2));
0594 else
0595 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(3,2), bias.gateV.rms(3,2), delta.gateVBad(3,2));
0596 end
0597 fprintf(fid, ' </table>\n');
0598 fprintf(fid, ' </td>\n');
0599 fprintf(fid, ' <td>\n');
0600 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0601 if(delta.drainIBad(3,3))
0602 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(3,3), bias.drainI.mean(3,3), bias.drainI.rms(3,3), delta.drainI(3,3), delta.drainIBad(3,3));
0603 else
0604 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(3,3), bias.drainI.mean(3,3), bias.drainI.rms(3,3), delta.drainI(3,3), delta.drainIBad(3,3));
0605 end
0606 if(delta.drainVBad(3,3))
0607 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(3,3), bias.drainV.mean(3,3), bias.drainV.rms(3,3), delta.drainV(3,3), delta.drainVBad(3,3));
0608 else
0609 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(3,3), bias.drainV.mean(3,3), bias.drainV.rms(3,3), delta.drainV(3,3), delta.drainVBad(3,3));
0610 end
0611 if(delta.gateVBad(3,3))
0612 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(3,3), bias.gateV.rms(3,3), delta.gateVBad(3,3));
0613 else
0614 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(3,3), bias.gateV.rms(3,3), delta.gateVBad(3,3));
0615 end
0616 fprintf(fid, ' </table>\n');
0617 fprintf(fid, ' </td>\n');
0618
0619 fprintf(fid, ' <tr> <th> AMP 4 </th>\n');
0620 fprintf(fid, ' <td>\n');
0621 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0622 if(delta.drainIBad(4,1))
0623 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(4,1), bias.drainI.mean(4,1), bias.drainI.rms(4,1), delta.drainI(4,1), delta.drainIBad(4,1));
0624 else
0625 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(4,1), bias.drainI.mean(4,1), bias.drainI.rms(4,1), delta.drainI(4,1), delta.drainIBad(4,1));
0626 end
0627 if(delta.drainVBad(4,1))
0628 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(4,1), bias.drainV.mean(4,1), bias.drainV.rms(4,1), delta.drainV(4,1), delta.drainVBad(4,1));
0629 else
0630 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(4,1), bias.drainV.mean(4,1), bias.drainV.rms(4,1), delta.drainV(4,1), delta.drainVBad(4,1));
0631 end
0632 if(delta.gateVBad(4,1))
0633 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(4,1), bias.gateV.rms(4,1), delta.gateVBad(4,1));
0634 else
0635 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(4,1), bias.gateV.rms(4,1), delta.gateVBad(4,1));
0636 end
0637 fprintf(fid, ' </table>\n');
0638 fprintf(fid, ' </td>\n');
0639 fprintf(fid, ' <td>\n');
0640 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0641 if(delta.drainIBad(4,2))
0642 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(4,2), bias.drainI.mean(4,2), bias.drainI.rms(4,2), delta.drainI(4,2), delta.drainIBad(4,2));
0643 else
0644 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(4,2), bias.drainI.mean(4,2), bias.drainI.rms(4,2), delta.drainI(4,2), delta.drainIBad(4,2));
0645 end
0646 if(delta.drainVBad(4,2))
0647 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(4,2), bias.drainV.mean(4,2), bias.drainV.rms(4,2), delta.drainV(4,2), delta.drainVBad(4,2));
0648 else
0649 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(4,2), bias.drainV.mean(4,2), bias.drainV.rms(4,2), delta.drainV(4,2), delta.drainVBad(4,2));
0650 end
0651 if(delta.gateVBad(4,2))
0652 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(4,2), bias.gateV.rms(4,2), delta.gateVBad(4,2));
0653 else
0654 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(4,2), bias.gateV.rms(4,2), delta.gateVBad(4,2));
0655 end
0656 fprintf(fid, ' </table>\n');
0657 fprintf(fid, ' </td>\n');
0658 fprintf(fid, ' <td>\n');
0659 fprintf(fid, ' <table width="75%%" border="1"> <tr> <td> </td> <td> Expected </td> <td> Mean </td> <td> RMS </td> <td> Delta </td> <td> BAD </td> </tr>\n');
0660 if(delta.drainIBad(4,3))
0661 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainCurr(4,3), bias.drainI.mean(4,3), bias.drainI.rms(4,3), delta.drainI(4,3), delta.drainIBad(4,3));
0662 else
0663 fprintf(fid, ' <tr> <td> Id </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainCurr(4,3), bias.drainI.mean(4,3), bias.drainI.rms(4,3), delta.drainI(4,3), delta.drainIBad(4,3));
0664 end
0665 if(delta.drainVBad(4,3))
0666 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', drainVolt(4,3), bias.drainV.mean(4,3), bias.drainV.rms(4,3), delta.drainV(4,3), delta.drainVBad(4,3));
0667 else
0668 fprintf(fid, ' <tr> <td> Vd </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %3.2f </td> <td> %i </td> </tr>\n', drainVolt(4,3), bias.drainV.mean(4,3), bias.drainV.rms(4,3), delta.drainV(4,3), delta.drainVBad(4,3));
0669 end
0670 if(delta.gateVBad(4,3))
0671 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td bgcolor="#ff0000"> %i </td> </tr>\n', bias.gateV.mean(4,3), bias.gateV.rms(4,3), delta.gateVBad(4,3));
0672 else
0673 fprintf(fid, ' <tr> <td> Vg </td> <td> <0 </td> <td> %3.2f </td> <td> %3.2f </td> <td> NA </td> <td> %i </td> </tr>\n', bias.gateV.mean(4,3), bias.gateV.rms(4,3), delta.gateVBad(4,3));
0674 end
0675 fprintf(fid, ' </table>\n');
0676 fprintf(fid, ' </td>\n');
0677 fprintf(fid, ' </tr>\n');
0678 fprintf(fid, '</table>\n');
0679
0680 return;
0681
0682
0683
0684 function plotday(d, type, plotparams, maindir)
0685
0686
0687 mon = getmonth;
0688 start = mjd2date_v2(d.array.frame.utc(1));
0689 start.month = mon{start.month};
0690 txt{1}={'Intensity Channel'};
0691 txt{2}={'time [hr]'};
0692
0693 p.style='flag';
0694 p.featflag=0;
0695 p.swap = 0;
0696
0697
0698
0699 switch type
0700 case 'noise'
0701
0702 [time, tnoise] = getNoiseTemps(d.array.frame.utc(1), ...
0703 last(d.array.frame.utc), 'constants/noise_diode_values.txt', 0);
0704
0705
0706 txt{3}={'Noise Diode Temperature '};
0707 str = 'Noise Diode Temperature Plots';
0708 str=sprintf('%s\n%02u-%s-%u:%02u:%02u:%4.2f', str, ...
0709 start.day, start.month, start.year, start.hour, ...
0710 start.minute, start.second);
0711 txt{4}={str};
0712
0713 time1 = (time - d.array.frame.utc(1))*24;
0714 x{1,1} = time1;
0715 x{2,1} = tnoise;
0716 fflag{1,1} = isnan(tnoise);
0717 fflag{2,1} = zeros(size(tnoise));
0718
0719 if(~isempty(tnoise))
0720 if(plotparams.save)
0721 genfig(d, fflag, x, txt, [], 'daily', p, 'daily',1, maindir);
0722 eval(sprintf('system(''mv %s/daily/fig1.png %s/daily/noise_diode.png'');', maindir, maindir));
0723 else
0724 genfig(d, fflag, x, txt, [], 'daily', p, 'daily',0, maindir);
0725 end
0726 end
0727
0728
0729
0730 case 'tsys'
0731
0732 tsysVals = getTsys(d.array.frame.utc(1), ...
0733 last(d.array.frame.utc), 'constants/tsys_values.txt', 0);
0734 calVals = getCalTemps(d.array.frame.utc(1), ...
0735 last(d.array.frame.utc), 'constants/calibration_values.txt', 0);
0736
0737 [times,alpha,gain,r,TsysTND,temps,horz,equa] = readAlphaDatabase_DD();
0738 thisInd = times>d.array.frame.utc(1) & times<d.array.frame.utc(end);
0739 tnoise = nanmean(calVals.tnoise);
0740 tsysVals.val2 = TsysTND(thisInd,:);
0741 tsysVals.time2 = times(thisInd);
0742 tsysVals.tnoise = repmat(tnoise, [length(tsysVals.time2) 1]);
0743 tsysVals.val2 = tsysVals.val2.*tsysVals.tnoise;
0744
0745
0746 str = 'System Temperature Plots';
0747 txt{3}={'System Temperature '};
0748 str=sprintf('%s\n%02u-%s-%u:%02u:%02u:%4.2f', str, start.day, ...
0749 start.month, start.year, start.hour, start.minute, ...
0750 start.second);
0751 txt{4}={str};
0752 thisTxt = sprintf('From Alpha, ND: %3.2f, %3.2f K', tnoise(1), ...
0753 tnoise(2));
0754 txt{5}= {thisTxt, 'From Observations'};
0755
0756 time1 = (tsysVals.time - d.array.frame.utc(1))*24;
0757 if(isempty(time1))
0758 time1 = tsysVals.time2(1);
0759 tsysVals.val = [nan nan];
0760 end
0761
0762 x{1,1} = time1;
0763 x{2,1} = tsysVals.val;
0764 fflag{1,1} = tsysVals.flag;
0765 fflag{2,1} = zeros(size(tsysVals.flag));
0766 time2 = (tsysVals.time2 - d.array.frame.utc(1))*24;
0767 x{3,1} = time2;
0768 x{4,1} = tsysVals.val2;
0769
0770
0771
0772 if(plotparams.save)
0773 genfig(d, fflag, x, txt, [], 'daily', p, 'daily',1, maindir);
0774 eval(sprintf('system(''mv %s/daily/fig1.png %s/daily/system_temperature.png'');', maindir, maindir));
0775 else
0776 genfig(d, fflag, x, txt, [], 'daily', p, 'daily',0, maindir);
0777 end
0778
0779 case 'gain'
0780
0781 gainVals = load('constants/gain_values.txt');
0782 aDate = gainVals(:,1);
0783 [aDateChron, sortOrder] = sort(aDate);
0784 aChron = gainVals(sortOrder,:);
0785 reps = find(diff(aDateChron)==0);
0786 aDateChron(reps,:) = [];
0787 aChron(reps,:) = [];
0788 ind = aChron(:,1) >= d.array.frame.utc(1) & aChron(:,1) <= ...
0789 last(d.array.frame.utc);
0790 time1 = (aChron(ind,1) - d.array.frame.utc(1))*24;
0791 gainDb = aChron(ind,2:3);
0792
0793
0794 str = 'Gain Plots';
0795 txt{3}={'System Gain [dB]'};
0796 str=sprintf('%s\n%02u-%s-%u:%02u:%02u:%4.2f', str, ...
0797 start.day, start.month, start.year, start.hour, ...
0798 start.minute, start.second);
0799 txt{4}={str};
0800
0801 x{1,1} = time1;
0802 x{2,1} = gainDb;
0803 fflag{1,1} = isnan(gainDb);
0804 fflag{2,1} = zeros(size(gainDb));
0805
0806 if(plotparams.save)
0807 genfig(d, fflag, x, txt, [], 'daily', p, 'daily',1, maindir);
0808 eval(sprintf('system(''mv %s/daily/fig1.png %s/daily/receiver_gain.png'');', maindir, maindir));
0809 else
0810 genfig(d, fflag, x, txt, [], 'daily', p, 'daily',0, maindir);
0811 end
0812
0813 case 'flag'
0814 display('antPoint::plotday:: Flag percentage not done yet');
0815
0816
0817 end
0818
0819 return;
0820
0821
0822
0823
0824 function write2web(date, sched, dir, dcal, dpt, flag, d)
0825
0826 I_filename = [date,'-daily_map_T.png'];
0827 Q_filename = [date,'-daily_map_Q.png'];
0828 U_filename = [date,'-daily_map_U.png'];
0829 hits_filename = [date,'-daily_map_hits.png'];
0830
0831
0832
0833 months = {'January', 'February', 'March', 'April', 'May', 'June', 'July', ...
0834 'August', 'September', 'October', 'November', 'December'};
0835
0836 redDate = mjd2date_v2(dcal.array.frame.utc(1));
0837 redDateString = sprintf('%s %02d, %04d', months{redDate.month}, ...
0838 redDate.day, redDate.year);
0839
0840 nowDate = clock;
0841 nowDateString = sprintf('%s %02d, %04d at %02d:%02d', months{nowDate(2)}, ...
0842 nowDate(3), nowDate(1), nowDate(4), nowDate(5));
0843
0844
0845
0846
0847
0848 fn = strcat(dir, '/', 'index.html');
0849 fid = fopen(fn, 'w');
0850
0851
0852 header(fid);
0853 fprintf(fid, '<a name=top>\n');
0854 fprintf(fid, '<h2> CBASS Daily Antenna Health Page for %s UTC </h2> \n\n', redDateString);
0855 fprintf(fid, '<h4> Generated on at %s </h4>\n\n', nowDateString);
0856
0857
0858 fprintf(fid, '<a name=sched>\n');
0859 fprintf(fid,' <h3> Schedules Run </h3>\n');
0860 printMenu(fid);
0861 fprintf(fid, '<pre>');
0862 fprintf(fid, sched);
0863 fprintf(fid, '</pre>');
0864 fprintf(fid, '\n <hr> \n \n');
0865
0866
0867
0868 fprintf(fid, '<a name=astrocal>');
0869 fprintf(fid, '<h3> Astronomical Calibrators Observed </h3>');
0870 printMenu(fid);
0871 fprintf(fid, '<pre>');
0872 if(isempty(dcal.uniqueObs))
0873 fprintf(fid, ' No Calibrator sources were observed on this day');
0874 else
0875 fprintf(fid, 'Source \t \t \t Number of times\n');
0876 fprintf(fid, '-------------------------------------------\n');
0877 for m=1:length(dcal.uniqueObs)
0878 if(length(dcal.uniqueSources{m}) < 5)
0879 fprintf(fid, '%s \t \t \t \t %d\n', dcal.uniqueSources{m}, ...
0880 dcal.uniqueObs(m));
0881 else
0882 fprintf(fid, '%s \t \t \t %d\n', dcal.uniqueSources{m}, ...
0883 dcal.uniqueObs(m));
0884 end
0885 end
0886 end
0887 fprintf(fid, '</pre>');
0888 fprintf(fid, '\n <hr> \n \n');
0889
0890
0891
0892
0893 fprintf(fid, '<a name=dataflags>');
0894 fprintf(fid, '<h3> Flagging Report </h3> \n');
0895 printMenu(fid);
0896 if(isempty(flag.info))
0897 fprintf(fid, 'No Flagging data to report');
0898 else
0899 printFlagSum(flag.info, flag.fieldNames, fid);
0900 fprintf(fid, '\n <hr> \n \n');
0901 end
0902
0903
0904 fprintf(fid, '<a name=rxbias>');
0905 fprintf(fid, '<h3> Receiver Bias </h3> \n');
0906 printMenu(fid);
0907 if(~isfield(d.antenna0, 'bias'));
0908 fprintf(fid, 'No Receiver Bias Data');
0909 else
0910 makeBiasTable(d, fid);
0911 fprintf(fid, '\n <hr> \n \n');
0912 end
0913
0914
0915
0916
0917 fprintf(fid, '<a name=pointing>');
0918 fprintf(fid, '<h3> Pointing Report </h3> \n');
0919 printMenu(fid);
0920 fprintf(fid, '<pre>');
0921 fprintf(fid, 'There was a problem calculating the pointing');
0922
0923
0924 if(isempty(dpt.off))
0925 fprintf(fid, 'No Good Pointing crosses taken today');
0926 else
0927 fprintf(fid, 'Measured pointing crosses on %d sources\n', length(dpt.off));
0928 fprintf(fid, 'Offsets in Arcminutes\n');
0929
0930
0931 fprintf(fid, 'Source \t \t Az: \t El: \t Azoff: \t Eloff: \t Off: \n');
0932 for m=1:length(dpt.off.az)
0933 thisOff = pyth(dpt.off.az(m), dpt.off.el(m))*60;
0934 if(length(dpt.obs.name{m}) < 7)
0935 fprintf(fid, '%s \t \t %3.1f \t %3.1f \t %+03.2f \t \t %03.2f \t \t %03.2f \n', ...
0936 dpt.obs.name{m}, dpt.obs.az(m), dpt.obs.el(m), ...
0937 dpt.off.az(m)*60, dpt.off.el(m)*60, thisOff);
0938 else
0939 fprintf(fid, '%s \t %3.1f \t %3.1f \t %+03.2f \t %+03.2f \t %03.2f \n', ...
0940 dpt.obs.name{m}, dpt.obs.az(m), dpt.obs.el(m), ...
0941 dpt.off.az(m)*60, dpt.off.el(m)*60, thisOff);
0942 end
0943 end
0944 fprintf(fid, '\n');
0945 fprintf(fid, 'Pointing model residuals on these sources is %3.2f arcmin\n', ...
0946 dpt.sa0);
0947
0948 if(dpt.sa0 < 8)
0949 fprintf(fid, 'Pointing model residuals low: model still good');
0950 else
0951 fprintf(fid, 'Pointing model residuals high: <strong> Suggest doing a pointing model run </strong>');
0952 end
0953 end
0954 fprintf(fid, '</pre>');
0955 fprintf(fid, '\n <hr> \n \n');
0956
0957
0958
0959
0960 fprintf(fid, '<a name=antplots>');
0961 fprintf(fid, '<h3> Antenna Hardware Plots </h3> \n');
0962 printMenu(fid);
0963 fprintf(fid, '\n\n');
0964
0965 fprintf(fid, '<table><tr>\n');
0966 fprintf(fid, '<td align=top>\n');
0967 fprintf(fid, '<h4> Telescope Slewing </h4>\n\n');
0968 fprintf(fid, '<a href="intro/fig1.png"><img height=500 width=500 src="intro/fig1.png"></a><br><br>\n');
0969 fprintf(fid, '</td>');
0970
0971 fprintf(fid, '<td align=top>\n');
0972 fprintf(fid, '<h4> Weather Data </h4>\n\n');
0973 fprintf(fid, '<a href="intro/fig1.png"><img height=500 width=500 src="intro/fig5.png"></a><br><br>\n');
0974 fprintf(fid, '</td>\n');
0975 fprintf(fid, '</tr>\n');
0976
0977 fprintf(fid, '<tr>\n');
0978 fprintf(fid, '<td align=top>\n');
0979 fprintf(fid, '<h4> Receiver Temperature </h4>\n\n');
0980 fprintf(fid, '<a href="intro/fig3.png"><img height=500 width=500 src="intro/fig3.png"></a><br><br>\n');
0981 fprintf(fid, '</td>\n');
0982
0983 fprintf(fid, '<td align=top>\n');
0984 fprintf(fid, '<h4> Cone/Electronics Box Temperature </h4>\n\n');
0985 fprintf(fid, '<a href="intro/fig4.png"><img height=500 width=500 src="intro/fig4.png"></a><br><br>\n');
0986 fprintf(fid, '</td>\n');
0987 fprintf(fid, '</tr>\n');
0988
0989 fprintf(fid, '<tr>\n');
0990 fprintf(fid, '<td align=top>\n');
0991 fprintf(fid, '<h4> Cold Load Temperature </h4>\n\n');
0992 fprintf(fid, '<a href="intro/fig2.png"><img height=500 width=500 src="intro/fig2.png"></a><br><br>\n');
0993 fprintf(fid, '</td>\n');
0994
0995 fprintf(fid, '</tr></table>\n');
0996
0997 fprintf(fid, '\n <hr> \n \n');
0998
0999
1000
1001
1002
1003 fprintf(fid, '<a name=sysplots>');
1004 fprintf(fid, '<h3> Antenna System Plots </h3> \n');
1005 printMenu(fid);
1006 fprintf(fid, '\n\n');
1007
1008 fprintf(fid, '<table><tr>\n');
1009 fprintf(fid, '<td align=top>\n');
1010 fprintf(fid, '<h4> Noise Diode Temperature </h4>\n\n');
1011 fprintf(fid, '<a href="daily/noise_diode.png"><img height=500 width=500 src="daily/noise_diode.png"></a><br><br>\n');
1012 fprintf(fid, '</td>');
1013
1014 fprintf(fid, '<td align=top>\n');
1015 fprintf(fid, '<h4> System Temperature </h4>\n\n');
1016 fprintf(fid, '<a href="daily/system_temperature.png"><img height=500 width=500 src="daily/system_temperature.png"></a><br><br>\n');
1017 fprintf(fid, '</td>\n');
1018 fprintf(fid, '</tr>\n');
1019
1020 fprintf(fid, '<tr>\n');
1021 fprintf(fid, '<td align=top>\n');
1022 fprintf(fid, '<h4> Receiver Gain [dB] </h4>\n\n');
1023 fprintf(fid, '<a href="daily/receiver_gain.png"><img height=500 width=500 src="daily/receiver_gain.png"></a><br><br>\n');
1024 fprintf(fid, '</td>\n');
1025
1026 fprintf(fid, '</tr></table>\n');
1027
1028 fprintf(fid, '\n <hr> \n \n');
1029
1030
1031 fprintf(fid, '<a name=maps>');
1032 fprintf(fid, '<h3> Daily Maps</h3> \n');
1033 printMenu(fid);
1034 fprintf(fid, '\n\n');
1035 fprintf(fid, '<h4> HITS, I,Q and U </h4>\n\n');
1036
1037 fprintf(fid, '<table><tr>\n');
1038 fprintf(fid, '<td align=top>\n');
1039 fprintf(fid, '<h4> Coverage </h4>\n\n');
1040 fprintf(fid, '<a href="../%s"><img height=500 width=500 src="../%s"></a><br><br>\n',hits_filename,hits_filename);
1041 fprintf(fid, '</td>');
1042
1043 fprintf(fid, '<td align=top>\n');
1044 fprintf(fid, '<h4> I </h4>\n\n');
1045 fprintf(fid, '<a href="../%s"><img height=500 width=500 src="../%s"></a><br><br>\n',I_filename,I_filename);
1046 fprintf(fid, '</td>\n');
1047 fprintf(fid, '</tr>\n');
1048
1049 fprintf(fid, '<tr>\n');
1050 fprintf(fid, '<td align=top>\n');
1051 fprintf(fid, '<h4> Q </h4>\n\n');
1052 fprintf(fid, '<a href="../%s"><img height=500 width=500 src="../%s"></a><br><br>\n',Q_filename,Q_filename);
1053 fprintf(fid, '</td>\n');
1054
1055 fprintf(fid, '<td align=top>\n');
1056 fprintf(fid, '<h4> U </h4>\n\n');
1057 fprintf(fid, '<a href="../%s"><img height=500 width=500 src="../%s"></a><br><br>\n',U_filename,U_filename);
1058 fprintf(fid, '</td>\n');
1059 fprintf(fid, '</tr>\n');
1060
1061 fprintf(fid, '</tr></table>\n');
1062
1063 fprintf(fid, '\n <hr> \n \n');
1064
1065
1066
1067 fclose(fid);
1068
1069 return;
1070
1071
1072
1073
1074 function header(fid)
1075
1076 fprintf(fid,'<html><body>\n\n');
1077 fprintf(fid,'<p>\n\n');
1078
1079 return;
1080
1081
1082
1083 function printMenu(fid)
1084
1085 fprintf(fid, '<p> [<a href=#top>Top</a>] [<a href=#sched>Schedules</a>] [<a href=#astrocal>Calibrators</a>][<a href=#dataflags>Flagging</a>] [<a href=#rxbias>Receiver Bias</a>][<a href=#pointing>Pointing</a>] [<a href=#antplots>Hardware Plots</a>][<a href=#sysplots>System Plots</a>][<a href=#maps>Daily Maps</a>]');
1086
1087 return;
1088
1089
1090 function flag = dailyFlag(d, dir)
1091
1092
1093 [home,installeddir]=where_am_i();
1094 allFlag1 = load([home,'/',installeddir,'/constants/flag_intent.txt']);
1095
1096
1097
1098
1099
1100
1101 f = find(allFlag1(:,1) > d.array.frame.utc(1) & allFlag1(:,1) < ...
1102 last(d.array.frame.utc) );
1103 intentFlag = allFlag1(f,:);
1104
1105
1106 [aDateChron, sortOrder] = sort(intentFlag(:,1));
1107 reps = find(diff(aDateChron)==0);
1108 intentFlag = intentFlag(sortOrder,:);
1109 intentFlag(reps,:) = [];
1110
1111
1112 featureFields;
1113
1114
1115 flags = intentFlag(:,4:size(intentFlag,2));
1116 timeIndices = 1:2:size(flags,2);
1117 perIndex = 2:2:size(flags,2);
1118
1119 timeOnIntent = sum(flags(:,timeIndices));
1120 timeFlagged = sum(flags(:,timeIndices).*flags(:,perIndex)/100);
1121 perFlagged = timeFlagged./timeOnIntent*100;
1122 perFlagged(isnan(perFlagged)) = 0;
1123
1124
1125 trackLength = (intentFlag(:,2) - intentFlag(:,1) )*24*60;
1126 totalDataLength = sum(trackLength);
1127
1128
1129
1130 info.track.number = size(intentFlag,1);
1131 info.track.intTime = totalDataLength;
1132 info.track.perFlag = sum(timeFlagged)./sum(timeOnIntent)*100;
1133 for m=1:length(fieldNames)
1134 eval(sprintf('info.%s.intTime = timeOnIntent(m);', fieldNames{m}));
1135 eval(sprintf('info.%s.perFlag = perFlagged(m);', fieldNames{m}));
1136 end
1137
1138
1139
1140
1141
1142 allFlag1 = load([home,'/',installeddir,'/constants/flag_step.txt']);
1143
1144
1145 f = find(allFlag1(:,1) > d.array.frame.utc(1) & allFlag1(:,1) < ...
1146 last(d.array.frame.utc) );
1147 stepFlag = allFlag1(f,:);
1148
1149
1150 [aDateChron, sortOrder] = sort(stepFlag(:,1));
1151 reps = find(diff(aDateChron)==0);
1152 stepFlag = stepFlag(sortOrder,:);
1153 stepFlag(reps,:) = [];
1154
1155
1156 stepFlag(:,1:5) = [];
1157
1158 fa = getFlagNames();
1159 for m=1:length(fa)
1160 eval(sprintf('info.flag.%s = mean(stepFlag(:,m));', fa{m}));
1161 end
1162 info.flag.total = mean(stepFlag(:,m+1));
1163
1164 flag.info = info;
1165 flag.fieldNames = fieldNames;
1166
1167 return;
1168
1169
1170
1171 function printFlagSum(info, fieldNames, fid);
1172
1173
1174 fprintf(fid,'<pre>\n');
1175 fprintf(fid,' Flag Summary\n');
1176 fprintf(fid,'================================================================\n');
1177 fprintf(fid,' Number of Tracks: %d\n', info.track.number);
1178 fprintf(fid,' Total time of Data Analyzed [min]: %2.2f\n', info.track.intTime);
1179 fprintf(fid,' Percent of total Data Flagged: %2.2f\n', info.track.perFlag);
1180 fprintf(fid,'</pre>');
1181 fprintf(fid,'<table border="1">');
1182 fprintf(fid,'<tr>');
1183 fprintf(fid,'<td> <b> Routine </b> </td> <td> <b> Integration [min] </b> </td> <td> <b> Percent Flagged </b> </td>');
1184 fprintf(fid,'</tr>');
1185 names = fieldnames(info);
1186 for m=2:length(names)-1
1187 thisName = names{m};
1188 eval(sprintf('thisData = info.%s;', thisName));
1189
1190 fprintf(fid,'<tr>');
1191
1192 fprintf(fid,'<td> %s </td>',thisName);
1193 fprintf(fid,'<td> %8.2f </td>',thisData.intTime);
1194 fprintf(fid,'<td> %8.2f </td>',thisData.perFlag);
1195 fprintf(fid,'</tr>');
1196 end
1197 fprintf(fid,'</table>');
1198
1199 fprintf(fid, '\n');
1200 fprintf(fid, '\n');
1201 fprintf(fid,'<table border="1">');
1202 fprintf(fid,'<tr>');
1203 fprintf(fid,'<td> <b> Routine </b> </td> <td> <b> Average Flag %% </b> </td>');
1204 fprintf(fid,'</tr>');
1205 names = fieldnames(info.flag);
1206 for m=1:length(names)
1207 if(strmatch(names{m}, 'tsys', 'exact'))
1208
1209 elseif(strmatch(names{m}, 'noise', 'exact'))
1210
1211 elseif(strmatch(names{m}, 'gain', 'exact'))
1212
1213 elseif(strmatch(names{m}, 'tau', 'exact'))
1214
1215 else
1216 eval(sprintf('thisData = info.flag.%s; ', names{m}));
1217
1218
1219 if(m==1 | m==4 | m==6 | m==7 | m==10 | m==17)
1220
1221 txt = sprintf('<tr> <td> %s </td> <td> %4.2f </td> </tr>', names{m}, thisData(1));
1222 else
1223 txt = sprintf('<tr> <td> %s </td> <td> %4.2f </td> </tr>', names{m}, thisData(1));
1224 end
1225 fprintf(fid,txt);
1226 end
1227 end
1228 fprintf(fid,'</table>');
1229
1230 return;