function lidar_plot_narsto(fname)

% Language:  MatLab 6.5 (version 13) and 5.3 (version 12)
%            This code has been tested on PCs running Windows XP, Windows NT, and Windows 2000.

% Point of Contact:  If there are questions about using the JHU_LIDAR_MATLab_plot.m program, please contact: 
                     
%		     Mariana Adam 
%                    The Johns Hopkins University 
%                    Department of Geography and Environmental Engineering 
%                    Baltimore, MD 21218 
%                    U.S.A

%                    phone: 410-516-4483 
%                    email:  mariana@jhu.edu
 
% Important Data Quality Note:
% Due to an error in the LIDAR systems telemetry data acquisition software (discovered later on) the range values as 
% written in the TDA files (line 13) are wrong. 
% After corrections to the software and calculations, we found out that in order to get the right range we need a
% correction factor (linear multiplication). This correction factor is 1.25. So, in order to properly use the TDA data (to 
% make profile color plots or other computations desired by the user), the actual range is multiplied with the factor 
% of 1.25. For example, instead of 0, 3, 6, 9 ...4490.89 m we have actually 0, 3.75, 7.5, 11.25 ...5613.6 m. 
% This correction is supplied in this Matlab script. See below.
% We mention that that correction was done in the case of the Mixing Height data file 
% (NARSTO_EPA_SS_BALTIMORE_LIDAR_MIX_HGT_20010522_20020814_V1.csv). We specify that all the existing plots have the wrong range 
% (vertical axis). When looking at the plots remember to multiply the vertical axis by a factor of 1.25. To use the right 
% Mixing Height plots, please use the data file supplied for the Mixing Height (which has correction applied already) and 
% do the plots again. In order to use the right profile color plots of the aerosol backscatter, please run the Matlab 
% script supplied to plot them again. We apologize for inconvenience, but it was not our fault. The lidar was delivered 
% with the software when we bought it. Unfortunately it contained this error which effected the telemetry.

% e.g. fname: write in Command Window:   fname='c:\lidar\LIDARPON020704018.TDA'
% then write:   lidar_plot_narsto(fname)

% 'lidar_plot_narsto' lidar plotting routine
%
%   'lidar_plot_narsto(fname)' reads input file designated by fname and plots data om appropriate axis
%
%      'fname' is a file name string.  This file comes directly from the lidar computer and had not been transformed 
%      in any way
%  
%      'lidar_plot_narsto' does the following
%         -read data from file designated by 'fname'
%         -subtract the backgroung radiation
%         -perform range correction
%         -perform some data smoothing with a binning level
%         -plots the data
%         -creates a .jpg image from the plot
%
%      no output arguments are defined

% read the data
fid = fopen(fname,'r');                 % open the file specified by fname
                             
scantype=fgets(fid);                    % read the comment line for the type of scan (Ist line)
z=length(scantype);
ftype=scantype(3:z);                    % take off the * in the line header
crap = fgets(fid);                      % blind read (IInd line)
crap = fgets(fid);                      % blind read (IIIrd line)
datetime=fgets(fid) ;                   % read line containing the date and time (IVth line)
z=length(datetime);
ftime=datetime(z-9:z-2);                % get the time string hh:mm:ss
fdate=datetime(z-20:z-16);              % get the date string mm/dd
fdate=[fdate '/2002'];                  % get the date string in mm/dd/yyyy

site=fgets(fid);                        % reads Vth line
fsite = site(19:length(site));          % get the experiment site string
for i=6:13
    crap=fgets(fid);                    % reads lines 6-13
end

range=str2num(crap(11:length(crap)));   % delete the place holder (-9999.99) at the beg. of 13th line 

% APPLY CORRECTION: MULTIPLY WITH CORRECTION FACTOR 1.25
range=range*1.25;

nsteps = length(range);                 % find the # of range increments (in vertical)
all=fscanf(fid, '%f');                  % read the rest of the data file
fclose(fid);                            % close the input file

ntimes = length(all)/(nsteps+1);        % find the # of time increments

hold = reshape(all,nsteps+1,ntimes);    % rewrite the lidar file in a matrix form
times = hold(1,:);                      % pull out the time-step info
lidardat = hold(2:nsteps+1,1:ntimes);   % pull out the back scatter info
clear hold all crap;                    % clear memory of large unused variables
fprintf('   file read \n');

% % PLOT ROW SIGNAL P
% figure
% plot(range,lidardat)
 
denoise=1
% note: in order to get better results, we have changed the initial
% de-noising procedure, replacing sym8 level 1 with db10 level 3
if denoise == 1
    [thr,sorh,keepapp] = ddencmp('den','wv',lidardat); % de-noise all LOS at once with db10 at level 3 (see Wavelets)
    xd = wdencmp('gbl',lidardat,'db10',3,thr,sorh,keepapp);
    lidardat=xd;
end

% determine the index of incomplete overlap
overlap = 300;                          % for now hard set it at 450m
[c,place] = min(abs(range-overlap));
fprintf('   incomplete overlap determined \n');

% perform the background subtraction
%   this background subtraction portion calculates the mean of the last 50 data points
%   in each line of sight, then finds mean and standard deviation of this quantity.
%   Lines of sight that have a mean 1.5*stddev away from the grand mean have the grand mean 
%   subtracted.  Otherwise, the line of sight has it's own background radiation subtracted. 

% note: for better results, we replaced the initial background range
% (nsteps-50:nsteps) with (nsteps-60:nsteps-10) to avoid the last bins
% which sometimes show large values
backrad = mean(lidardat(nsteps-60:nsteps-10,:));% the background rad for each line of sight

% backrad=mean(lidardat(1499-50:1499,:));   % this is used when another background substraction is specified
                                            % other then the last 50 steps (eg when we have clouds across the last 50 steps)
back = ones(nsteps,ntimes)*spdiags(backrad',0,ntimes,ntimes); %matrix of bacgrounnd 
                                        % radiation that will be subtracted from each point
lidardat = lidardat-back;               % subtract the background radiation
clear back backrad test mu              % clear unused variables
fprintf('   background subtracted \n');

% Perform the range correction
lidardat = ((lidardat')*spdiags(range.^2',0,nsteps,nsteps))'; % range correction
fprintf('   range correction complete \n');

hour=str2num(ftime(1:2));
minute=str2num(ftime(4:5));
second=str2num(ftime(7:8));
hrs_mins_secs=hour*60*60+minute*60+second;

% writting the x axis corresponding to the time
for i=1:length(times)
    ax_t(i)=datenum(0,0,0,0,0,hrs_mins_secs+times(i));
end
ax_t;
length(ax_t);
length(times);

% plot the results
fprintf('   starting to plot this might take a couple of minutes \n');

figure
pcolor(ax_t,range,lidardat);             % make the pcolor plot
datetick('x',15)%,'keepticks','keeplimits') 
shading interp;                          % attractive shading
axis([ax_t(1) ax_t(end) 375 range(end)])     % initial was 400 instead of 375
ylabel('z [m]');                         % plot annotation
xlabel('time (EST)');
caxis([1E7 3E8]);                        % change the color scale when necesary 
colorbar
z=length(fname);
title_str = strcat(fname(z-20:z-4),' - starttime:',ftime); 
title(title_str);

webname=[fname(1:z-21) fname(z-20:z-4)];

print(gco, '-djpeg85', '-r75', webname);
% saveas(gcf,webname,'fig')              % this is for saving as .fig file (matlab plot)

fprintf('   web image created \n');