Home > antHealth > antPoint.m

antPoint

PURPOSE ^

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SYNOPSIS ^

function antHealth(date,output_dir)

DESCRIPTION ^

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

   function antHealth(date)

     function that will generate some daily plots for us. 

     call as: antHealth('DD-MON-YEAR','NAME_OF_OUTPUT_DIR');

   This function will be called automatically from the cronjob, so it is
   assumed that daily flag summaries will already exist.

   N.B. NAME_OF_OUTPUT_DIR should be relative to cbass_analysis, 
   so if you want to put in e.g. reduc/20111111_surveys specify
   'reduc/20111111_surveys' - these script will then make a directory called    
   'antenna_health' within that directory

   what it should do: 
     generate daily plots of az/el, rxtemp, coldload, conetemp, weather
     schedules observed (and times)
     sources observed (and frequency)
     generate daily plots of noise diode, tsys, and opacity
     generate plots of noise diode, tsys, opacity for all time listed. 
     daily flag summaries (% flagged)
     daily pointing checks
     generate the daily maps.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function antHealth(date,output_dir)
0002 
0003 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0004 %
0005 %   function antHealth(date)
0006 %
0007 %     function that will generate some daily plots for us.
0008 %
0009 %     call as: antHealth('DD-MON-YEAR','NAME_OF_OUTPUT_DIR');
0010 %
0011 %   This function will be called automatically from the cronjob, so it is
0012 %   assumed that daily flag summaries will already exist.
0013 %
0014 %   N.B. NAME_OF_OUTPUT_DIR should be relative to cbass_analysis,
0015 %   so if you want to put in e.g. reduc/20111111_surveys specify
0016 %   'reduc/20111111_surveys' - these script will then make a directory called
0017 %   'antenna_health' within that directory
0018 %
0019 %   what it should do:
0020 %     generate daily plots of az/el, rxtemp, coldload, conetemp, weather
0021 %     schedules observed (and times)
0022 %     sources observed (and frequency)
0023 %     generate daily plots of noise diode, tsys, and opacity
0024 %     generate plots of noise diode, tsys, opacity for all time listed.
0025 %     daily flag summaries (% flagged)
0026 %     daily pointing checks
0027 %     generate the daily maps.
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 %    'antenna0.tracker.source'};
0062 
0063 
0064 % ok. read in today's data.
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 %make files/directories.
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 % let's remove the 'receiver' field 'cause it'll mess up all the plotting
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 %%Calibrators Used %%
0096 %%%%%%%%%%%%%%%%%%%%%
0097   [dcal, dpt, dblank] = antCals(d);
0098 
0099 %%%%%%%%%%%%%%%%%%
0100 %%Radio Pointing%%
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   %  monthlyPlots()
0141 end
0142                      
0143 return;
0144 
0145 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0146 
0147 function sched = antSched(output_dir)
0148 
0149 
0150 % Here we want to have the function know which directory to look for the
0151 % data depending on the machine name.
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 % Here we want to have the function know which directory to look for the
0177 % data depending on the machine name.
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 %f2 is the cal source
0202 %f3 is also cal source
0203 %f4 is the blank sky data
0204 %f0+f7 are radio pointing scans
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 % first let's find the cal sources.
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 % samples that are too long will cause things to crash
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 % set return variables to empty
0242 dcal    = [];
0243 dpt     = [];
0244 dblank  = [];
0245 sources = [];
0246 
0247 % check if there are too many.  We only need about 10 radio pointing crosses
0248 % per day max.
0249 %if(length(startpt)>10)
0250 %  startpt(11:length(startpt)) = [];
0251 %  stoppt(11:length(stoppt)) = [];
0252 %end
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 % parse the sources
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 % next we save the values.
0328 if(~isempty(off.az))
0329   % form is:  [time, sourceName, sourceaz, sourceel, offaz, offel];
0330   for m=1:length(obs.name)
0331     srcNum(m) = sourceCorrespondance(obs.name(m));
0332   end
0333   
0334   % obs already has the offset on it.
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   % and now we save it for posterity
0340   %system('cvs update constants/pointing_crosses.txt');
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 % Check how our model is working
0355 % we only want to fit the collimation and flexure
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 % ok, next we calculate the differences
0432 delta.drainI = abs(bias.drainI.mean - drainCurr);
0433 delta.drainV = abs(bias.drainV.mean - drainVolt);
0434 delta.drainIBad = delta.drainI > 0.25;  % need to include whether hte RMS is good or bad
0435 delta.drainVBad = delta.drainV > 0.1;   % need to include whether hte RMS is good or bad
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 % common to all plots
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 % antenna display
0693 p.style='flag';
0694 p.featflag=0;
0695 p.swap = 0;
0696 
0697 
0698 
0699 switch type
0700   case 'noise'
0701     % load in the values
0702     [time, tnoise] = getNoiseTemps(d.array.frame.utc(1), ...
0703     last(d.array.frame.utc), 'constants/noise_diode_values.txt', 0);
0704 
0705     % initialize plot axis names
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     % load in the values
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     % values from the alpha database (requires the noise diode temperature)
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     % get data ready for plotting.
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     % read in, sort it.
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     % initialize plot axis names
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 %display('here1')
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 %display('here2')
0845 % this function should collate all our data and put it into a webpage
0846 
0847 
0848 fn = strcat(dir, '/', 'index.html');
0849 fid = fopen(fn, 'w');
0850 
0851 % header info
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 % schedules run
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 %display('here3')
0866 % astronomical calibrators
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     %display('here4')
0892 % Flagging report
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 % Bias report
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 % Radio Pointing
0915 %display('here5')
0916 %if (dpt=0)
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 %else
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 %        fprintf(fid, 'Source \t \t Az:  \t El: \t  off: \n');
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 %end
0957 %display('here6')
0958 % Antenna Hardware Plots!!
0959 %display('here7')
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 %display('here8')
1000 
1001 % System Plots!
1002 %display('here9')
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 %display('here10')
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 % first we read in the flag percentage based on "intent"
1093 [home,installeddir]=where_am_i();
1094 allFlag1 = load([home,'/',installeddir,'/constants/flag_intent.txt']);
1095 %  ---- FORMAT ----
1096 % starttime stoptime numscans inttime perflag source.time source.flag
1097 % elscan.time elscan.flag cal.time cal.scan, .... noiseevent.time
1098 % noiseevent.flag
1099 % --- ACTION ---
1100 % find the tracks that are contained in this date.
1101 f = find(allFlag1(:,1) > d.array.frame.utc(1) & allFlag1(:,1) < ...
1102     last(d.array.frame.utc) );
1103 intentFlag = allFlag1(f,:);
1104 
1105 % sort it so only the last value for each time is used.
1106 [aDateChron, sortOrder] = sort(intentFlag(:,1));
1107 reps       = find(diff(aDateChron)==0);
1108 intentFlag = intentFlag(sortOrder,:);
1109 intentFlag(reps,:) = []; % now intentFlags will have no repeats.
1110 
1111 % load in the features values.
1112 featureFields;
1113 
1114 % lastly, we combine the __ however many __ tracks there are.
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 % next we calculate how long each track is (in minutes)
1125 trackLength = (intentFlag(:,2) - intentFlag(:,1) )*24*60;
1126 totalDataLength = sum(trackLength);
1127 
1128 % let's regenerate a structure much like the one we want to write out our
1129 % flags.
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 % next, for the second part of it: flagging per step
1139 % FILE 2 FORMAT  -- flags per step
1140 % starttime stoptime numscans inttime perflag antennaflag userflag timeflag
1141 % deglitchflag .... rfactorflag totalflag
1142 allFlag1 = load([home,'/',installeddir,'/constants/flag_step.txt']);
1143 % --- ACTION ---
1144 % find the tracks that are contained in this date.
1145 f = find(allFlag1(:,1) > d.array.frame.utc(1) & allFlag1(:,1) < ...
1146     last(d.array.frame.utc) );
1147 stepFlag = allFlag1(f,:);
1148 
1149 % sort it so only the last value for each time is used.
1150 [aDateChron, sortOrder] = sort(stepFlag(:,1));
1151 reps       = find(diff(aDateChron)==0);
1152 stepFlag   = stepFlag(sortOrder,:);
1153 stepFlag(reps,:) = []; % now intentFlags will have no repeats.
1154 
1155 % only the steps themselves
1156 stepFlag(:,1:5) = [];
1157 % next the flag names
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 % next we want to print this out to a txt array, which we will subsequently
1173 % feed into the writer.
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     % don't do anything
1209   elseif(strmatch(names{m}, 'noise', 'exact'))
1210     % nothing
1211   elseif(strmatch(names{m}, 'gain', 'exact'))
1212     %nothing
1213   elseif(strmatch(names{m}, 'tau', 'exact'))
1214     % nothing
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;

Generated on Sun 14-Jun-2015 17:12:45 by m2html © 2005