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