PRO plotbft,BSDNAM,channel=channel,PLOT_PAGE=plot_page, $
    landscape=landscape,p2nd=p2nd,psym=psym,charsize=charsize
; Plot BCS cnts, Te,Td,EM,velocity

;;;         String containing channels to be processed, 
;;;         '*' means all, or use a range '1-3', or explicitly 
;;;         '1,3,4', default is '*'


;   Extract the time and counts for the light curve:
;
;  modify to use set_utplot
;
;  first_time - internal - time of first spectrum in theory.
;  bsd_index(chan,0).time - internal - time of first spectrum in bsd file
;   bsd_index.time - internal- time of each spectrum in bsd file
;   data1(2,*) - time in minutes from first_time for each theory spectrum    
;
;   structure of data1 array:
;       0=SPC_NUM     1=CHAN        2=Relative time (min).
;       3=SDGI( sec )     4=DW (A/bin)      5=Max # iterations
;       6=# iterats.      7=# degree free.  8=Reduced chi-square
;       9=cnvrg flag      10=velocity flag  11=lithium flag
;       12=Te_6           13=Td_6(w)        14=Td_6(k or j)
;       15=Background     16=EM (1.e50)     17=EM2 (1.e50) - second comp
;       18=upflow velocit 19=N(Li)/N
;       20 to 27 are uncertainties of 12 to 19.
;
; do time axes
; which is first, first_time or bsd_index(chan,0).time
; then work out parameters for set_utplot
;

version = 'Plotbft Program  (idl2)  V3.1 18/05/94'
;
print,version

ind_Td = 13             ; Doppler temperature from line Ca w
                    ; and from Fe w as well - 26-May-86

;-- Set up Month string:

month = ['   ','Jan','Feb','Mar','Apr','May','Jun', $
               'Jul','Aug','Sep','Oct','Nov','Dec']

te_tit = ['  ','Fe XXVI  ','Fe XXV  ','Ca XIX  ','S XV  '] 


N_args = N_params(0)            ; Find out how many arguments

;   Default to all channels if sel_chan is not specified
;;kchan = 0
;;if (keyword_set(channel)) then begin
;;      range,channel,4,channels,ier,1
;;      if (ier ne 0) then begin
;;          print,'Error in channel selection'
;;          return
;;          endif
;;      chan = channels(0)
;;      kchan = n_elements(channels)-1
;;      endif else begin
;;      kchan = 3
;;      channels = [1,2,3,4]
;;      chan = 1
;;      endelse
kchan = 1
chans = [3]
if keyword_set(channel) then begin
   chans = [channel]
   kchan = n_elements(chans)
endif
 
;
;       Set up file names:
;
if  N_elements( bsdnam ) eq 0  then  ask='Y' else $
   if strpos(bsdnam,' ') eq 0  then  ask='Y' else ask = 'N'
if ask eq 'Y' then bcs_getfile,filename,defstr="bsd*.*" else filename=bsdnam 
if (filename eq '-1') then return

;       Pick off file id:
break_file,strlowcase(filename),dsk_log,dire,bsdnam,ext,filver
file_id = bsdnam
if strpos(bsdnam,'bsd') eq 0 then $
   file_id = strtrim(strmid(bsdnam,3,strlen(bsdnam)),2)

fitnam = dsk_log+dire+'bft' + file_id + ext     ;Create BFT file name
bsdnam = dsk_log+dire+'bsd' + file_id + ext     ;Create BSD file name


print, 'Opening files:  ',bsdnam
print, '         and    ',fitnam

;
;       Read the BSD file
rd_bsd_header,bsdnam,bsd_header
rd_bsd_rdmap,bsdnam,bsd_header,bsd_rdmap

chan_idx    = where(bsd_header.numchn gt 0) + 1     ;/* active channels */
chan_num    = n_elements(chan_idx)          ;/* number of active channels */

rd_bsd_data,bsdnam,indgen(max(bsd_header.numchn))+1,bsd_header,bsd_rdmap, $
 bsd_index,/nodata  


;;tdx         = intarr(7,3,bsd_header.totspc)
;;tdx(*,1,*)  = bsd_index.time
tdx = fix(bsd_index.time)

multi = 0
;
;
;
;-- Read the BFT file
readbft, fitnam, first_time, data1  ; Read the BFTxxxx.xxx files.
;
; convert first_time to external rep
;
   f_time = intarr(7)
   f_time(0) = first_time(0:2)
   f_time(3) = 0
   f_time(4) = first_time(3:5)
  first_time = f_time
;
;   only do ps_long if not landsacpe
if (!d.name eq 'PS') then begin
   if (keyword_set(landscape)) then device,/landscape  $
   else  ps_long            ; stretch the page
endif

;
; Set up plotting conventions
;
!noeras = 0             ; enable erasing of screen
set_xy
if (not keyword_set(psym)) then psym = 1 
!p.font = -1
chars = !p.charsize
if keyword_set(charsize) then !p.charsize = charsize else !p.charsize=1.2
;
;!x.style = (!x.style and 23)       ; draw a box around plot ???
;!y.style = (!y.style and 23)       ; draw a box around plot ???
;!p.psym = 0                ; Plot as connected line
;!p.font=0
;
;--     Begin the loop on channels
;
for j=0,kchan-1 do begin

  if keyword_set(plot_page) then begin
     multi = 3
     !p.multi = [0,1,3,0,0] ; three plots on page - this is fixed **
  endif else !p.multi = 0

;;  if j gt 0 then chan = j+1       ; next time through - next channel
  chan = chans(j)


;--     Plot the light curve:

  vv = where( bsd_index.chan eq chan )
  if (vv(0) eq -1 ) then begin
     print,'** No data for this channel **',chan
     avail = all_vals(bsd_index.chan) & avail = avail(where(avail gt 0))
     print,'** Data only available for',avail
     goto, nodata
  endif
   
  print,'$(3x,a,i4,a,i2,a)', 'There are',n_elements( vv ),' channel', $
            chan,' spectra'

  if (!d.name ne 'PS') and (!d.name ne 'SIXEL') then $
    print,'Next plot/page?: ',format='(a,$)'    ;message for pause

;
;   form the time for the banner
;       this needs fixing
;
  a1 = tdx(4,1,vv(0)) 
  a2 = tdx(5,1,vv(0))
  a3 = tdx(6,1,vv(0))
  a2 = month(a2)
  if a3 gt 1900 then a3 = a3-1900       ;get year in 91 format
  tdate = string(a1,a2,a3,format='(i2,1h-,a,1h-,i2)')
;
;  work out offset between bsd data set and fit data set, label for utplot
;
  ktmp = int2secarr([[bsd_index(vv(0)).time],[first_time]])
;;  print,ktmp
  t_offset = ktmp(1)
  if (t_offset ge 0) then first_ptime=bsd_index(vv(0)).time $
    else first_ptime=first_time
;
; create xarray for utplot
;
  xtime = int2secarr(bsd_index(vv).time(*))
;
; make a secarr for the fit parameters
; 
  fv = where( data1(1,*) eq chan )
  if (fv(0) eq -1) then begin
    !noeras=0
    nofit=1
  endif else nofit = 0

 if (nofit eq 0) then begin
  fitime = data1(2,fv) ; time in minutes
  nfitpar = n_elements(fitime)
  fxtime = lonarr(nfitpar) + fitime*60.0        ;+ t_offset 
  endif
;
; light curve
;
  kytitle = 'Counts per sec'
  kptitle = string('BCS Chan #',chan,te_tit(chan),tdate,file_id,$
    "(a,i1,2x,a,3x,a,2x,'(',a,')')")

  if multi ne 0 then begin
    kytitle = 'CNTS/SEC'
    !p.linestyle = 0
    endif

  cnts = bsd_index(vv).crate
 
  utplot,xtime,cnts,first_ptime,ytitle=kytitle,title=kptitle

  xtit = 'Start Time ('+fmt_tim(first_ptime)+')'

 if (multi eq 0) then begin
  ans = '' 
  if (!d.name ne 'PS') and (!d.name ne 'SIXEL') then ans=get_kbrd(1)    ; allow a pause
  endif 

if (nofit eq 0) then begin
 ;
 ;  Plot electron temperature:
 ;  
 Te_6 = data1( 12, * )
 Te_6 = Te_6( fv )          ; Electron temperature in M K
 d_Te = data1( 21, * )
 d_Te = d_Te( fv )          ; Uncertainties in electron temperature
 ;
 ;  Set up plot titles
 ;
 kytitle = 'Electron temperature!C(x10!E6!N K)'
 kptitle = string('BCS ',te_tit(chan),' electron temp ',tdate, $
    file_id,"(3a,3x,a,2x,'(',a,')')")
 
 if multi ne 0 then begin
    kptitle = ' '
    kytitle='Te (x10!E6!N K)'
 endif
 ;
 ; do plot
 ;
 set_utplot,xrange=xtime
 plot,fxtime,Te_6,title=kptitle,ytitle=kytitle,xtitle=xtit
 errplot,fxtime,Te_6-d_Te,Te_6+d_Te
 ;
 if multi eq 0 then begin
  ans = '' 
  if (!d.name ne 'PS') and (!d.name ne 'SIXEL') then ans=get_kbrd(1)    ; allow a pause
  endif 
 ;
 ; end electron temperature begin emission measure 
 ; Plot Emission (*1.e50) cm-3:
 ;
 EM_50 = data1( 16, * )     ; Emission meas. (* 1.e50 cm-3)
 EM_50 = EM_50( fv )
 d_EM  = data1( 25, * )
 d_EM  = d_EM( fv )         ; Uncertainties
 ;
 kytitle = 'Emission measure (x10!E50!N cm!E-3!N)'
 kptitle = string('BCS ',te_tit(chan),' EM * 1.e50 cm-3',tdate, $
    file_id,"(3a,3x,a,2x,'(',a,')')")

 if multi ne 0 then begin
  kptitle = ' '
  kytitle='EM (x10!E50!N cm!E-3!N)'
  endif
 ;
 ; do plot
 ;
 set_utplot,xrange=xtime
 plot,fxtime,EM_50,ytitle=kytitle,title=kptitle,xtitle=xtit
 errplot,fxtime,EM_50-d_EM,EM_50+d_EM
 ;
 if (multi eq 0 or multi eq 3) then begin
  ans = '' 
  if (!d.name ne 'PS') and (!d.name ne 'SIXEL') then ans=get_kbrd(1)    ; allow a pause
  endif 
 ;
 ; End emission measure begin turbulent velocity
 ; Plot Velocity (km s-1) from Te-Td
 ;
 ; get doppler temperatures
 ;
 Td_6 = data1( ind_Td, * )
 Td_6 = Td_6( fv )          ; Doppler temperature in M K
 d_Td = data1( ind_Td + 9, * )
 d_Td = d_Td( fv )          ; Uncertainties in doppler temperature
 ;
 ; work out turbulent velocities
 ;
 del_T = Td_6-Te_6
 ij = where( del_T lt 0. )
 if !err ne 0 then del_T(ij) = 0.   ; If Td-Te is negative, set to 0.
 ;
 velo = bcs_ionvel(del_T,strmid(te_tit(chan),0,2))  ; Calculate velocities
 d_te = d_te < 3e7
 d_td = d_td < 3e7
 d_vel = velo * 0.5 * (sqrt( double(d_Te)^2 + double(d_Td)^2 ) / (Td_6-Te_6))   ; uncertainties
 ;
 kytitle = 'Turbulent velocity km per sec'
 kptitle = string('BCS ',te_tit(chan),' velocity',tdate,    $
    file_id,"(3a,3x,a,2x,'(',a,')')")
 ;
 if multi ne 0 then begin
  ;the first plot on a new page:
  kptitle = string('BCS Chan #',chan,te_tit(chan),tdate,file_id,$
    "(a,i1,2x,a,3x,a,2x,'(',a,')')")
  kytitle='Turbulent velocity (km s!E-1!N)'
  endif
 ;
 ; do plot
 ; 
 set_utplot,xrange=xtime
 plot,fxtime,velo,ytitle=kytitle,title=kptitle,xtitle=xtit
 errplot,fxtime,velo-d_vel,velo+d_vel
 ;
 if multi eq 0 then begin
  ans = '' 
  if (!d.name ne 'PS') and (!d.name ne 'SIXEL') then ans=get_kbrd(1); allow a pause
  endif 
 ;
 ; end turbulent velocity 
 ; check second component:
 ;
 vel_flag = data1( 10,*)
 vel_flag = vel_flag( fv )      ; velocity flag for this channel
 vnz = where(vel_flag gt 0)
 if (vnz(0) eq -1) then novel = 1 else novel = 0
 ;
 if (novel eq 0) then begin
  ;
  ; plot second component emission measure
  ;
  EM2_50 = data1(17,*)
  EM2_50 = EM2_50( fv )     ; second component emission measure
  d_em2 = data1( 26 , * )
  d_em2 = d_em2( fv )       ; uncertainty of second comp EM
  ;
  kytitle = 'Upflow emission measure (x10!E50!N cm!E-3!N)'
  kptitle = string('BCS ',te_tit(chan),' EM2 * 1.e50 cm-3',tdate,   $
    file_id,"(3a,3x,a,2x,'(',a,')')")
  ;
  if multi ne 0 then begin
     kptitle = ' '
     kytitle='EM2 (x10!E50!N cm!E-3!N)'
     if keyword_set(p2nd) then !y.title='EM2/EM1'
     endif
  ;
  ;
  set_utplot,xrange=xtime
  if not keyword_set(p2nd) then begin
   plot,fxtime,EM2_50,ytitle=kytitle,title=kptitle,xtitle=xtit
   errplot,fxtime,EM2_50-d_EM2,EM2_50+d_EM2
  endif else begin
   plot,fxtime,em2_50/em_50,psym=psym,xtitle=xtit
   errplot,fxtime,(em2_50-d_em2)/em_50,(em2_50+d_em2)/em_50
  endelse

  ;
  if multi eq 0 then begin
   ans = '' 
   if (!d.name ne 'PS') and (!d.name ne 'SIXEL') then ans=get_kbrd(1)   ; allow a pause
   endif 
  ;
  ; end upflow emission measure
  ; plot upflow velocity
  ;
  vup = data1( 18, * )
  vup = - vup( fv )     ; upflow velocity ( > 0. )
  d_vup = data1( 27, *)
  d_vup = d_vup( fv )       ; uncertainty of upflow velocity

  kytitle = 'Upflow velocity km per sec'
  kptitle = string('BCS ',te_tit(chan),' upflow velocity',tdate,    $
         file_id,"(3a,3x,a,2x,'(',a,')')")

   if multi ne 0 then begin
     kptitle = ' '
     kytitle='Upflow velocity (km s!E-1!N)'
     endif
  ;
  set_utplot,xrange=xtime
  plot,fxtime,vup,ytitle=kytitle,title=kptitle,xtitle=xtit
  errplot,fxtime,vup-d_vup,vup+d_vup
  ;
  ; end vel plot
  ; end
  ;
  endif ;/* no vel */
 endif ;/* no fit */
ans = '' 
if (!d.name ne 'PS') and (!d.name ne 'SIXEL') then ans=get_kbrd(1)  ; allow a pause
;
nodata:
;
endfor  
;
!x.range = 0 

ps_reset   ; reset the page to the default length
!p.charsize = chars
clearplot
clear_utplot

return
end