EIT Software Listings

 

anal
obsolete
response
util

 

Previous Routine
Next Routine

 

Listing of $SSW/soho/eit/idl/anal/eit_flux.pro

 


function eit_flux,wav_band,te,filter=filter,dn=dn,inspec=inspec,$
    edensity=edensity,pressure=pressure,wavestep=wavestep,inwave=inwave,$
    expotime=expotime,dem_name=dem_name,$
    wmin=wmin,wmax=wmax, instr=instr, volume=volume
;+
; NAME:
;  eit_flux
; PURPOSE:
;  Specify Te + filter + DEM ==> compute DN 
;  Specify Te + filter + DN ==> compute DEM
;
; CALLING SEQUENCE:
;      dn_s = eit_flux(171,1.e6,filter='CLEAR',edensity=1e9)
;  or
;      dem  = eit_flux(195,1.5e6,filter='AL+1',edensity=1.5e9,dn=1000,
;               expotime=5)
;
; INPUTS:
;    wav_band: EIT bandpass, one of 171,195,284,304
;    te:   Temperature, may be a vector
;
; OUTPUTS:
;   This function returns DN/s/pixel.
;   If DN keyword is set, will return Column Emission Measure cm^-5
;              this value represents an isothermal emission measure
;              approximation. We include a factor 0f 0.7 to account
;              for the Potasch approximation that lines really form
;              over +/- 0.15 dex. If one wanted to compare this to a
;              differential emission measure (DEM) then you should 
;              multiply this by 1./0.3
;
; OPTIONAL INPUT KEYWORDS:
;    DN: if set returns Emission Measure, if vector should correspond
;        to elements of temperature
;    filter:  default is CLEAR position can also specify AL+1 or AL+2
;    wavestep: wavelength bin for spectrum calculation, default=0.2Ang   
;    Specify one of below:
;          Edensity: electron density in emitting region (cm^-3)
;          Pressure: electron pressure (cm^-3 K)
;          Note- these can be single valued or arrays corresponding to 
;             the specified temperatures
;          these are used in the population calculations 
;    Can specify both of below:
;        inspec: an input spectrum, useful if have spectra already calculated
;         waves: wavelengths corresponding to inspec
;    dem_name = differential emission measure file - temp vs dem, can
;        also be a float value=alog10(dem) which correspond to temps.
;        set to "unit" if just need unit emission measure - UNIT=1e26
;    wmin = minimum wavelength of interest (default = 165A)
;    wmax = maximum wavelength of interest (default = 350A)
;    expotime = exposure time if data set not normalized
;
; OPTIONAL OUTPUT KEYWORDS:
;
; RESTRICTIONS:
; ****  This routine requires the CHIANTI package. Please run the
;       following command before using this routine:
;            ssw_packages,/chianti,/prepend
;
;   Presently this reads the Instrument Data from the EIT Sensitivity
;   files on the SSW as provided by J. Newmark. This section is
;   modularized so as to facilitate updates or even new instruments.
;
;   This program runs fairly slow since it is calculating the spectrum
;   from 165-350 A. A better way to run this is to calculate the spectrum
;   using ISOTHERMAL once for the density and temps (or pressure) you wish 
;   and pass it into this program.
;
; MODIFICATION HISTORY:
;   1996 Oct 30, J.S. Newmark, Written.
;   1998 Jan 26  J.S. Newmark, V. 2.0 delete wavestep in
;                     calculation - should not be included, auto add chianti
;                     to path
;   1999 May 11  J.S. Newmark, V 3.0 New calibration
;   1999 Jun 08  J.S. Newmark, Clarify return value of Emission measure 
;   1999 Nov 17  J.S. Newmark, V 3.1 New Calibration
;   2000 Sep 26  J.S. Newmark, change chianti_spec -> isothermal,/cont
;-

; check inputs, convert if necessary
ntemps = n_elements(te)
CASE 1 OF
  keyword_set(edensity): begin
        if n_elements(edensity) ne 1 and n_elements(edensity) ne ntemps then $
          begin
          message,/info,'The dimensions of DENSITY must be 1 or equal to TEMPERATURE'
          return,0
        endif
        edens_arr = fltarr(ntemps)+edensity
      end
  keyword_set(pressure): begin
        if n_elements(pressure) ne 1 and n_elements(pressure) ne ntemps then $
          begin
          message,/info,'The dimensions of PRESSURE must be 1 or equal to TEMPERATURE'
          return,0
        endif
        edens_arr = pressure / te
      end
  else: begin
       message,/info,'You must specify either the Electron Density (EDENSITY) or'+$
         ' the Pressure (PRESSURE = cm^-3 K)'
       return,0
      end
ENDCASE

if not keyword_set(instr) then instr = 'eit' else instr = strlowcase(instr)
defsysv,'!xuvtop',exist=yes_chianti
if not yes_chianti then ssw_packages,/chianti    

if not keyword_set(wmin) then wmin = 165 
if not keyword_set(wmax) then wmax = 350

; calculate spectrum for given temperature
IF n_elements(wavestep) EQ 0 THEN wavestep = 1.0

IF n_elements(inspec) EQ 0 THEN BEGIN
   call_procedure,'isothermal',wmin,wmax,wavestep,te,waves,spectrum,$
                   edensity=edens_arr,/noverbose,/cont
ENDIF ELSE BEGIN
    IF n_elements(inwave) EQ 0 THEN BEGIN
       message,/info,'If specifying input spectrum must also specify waves'
       return,0
    ENDIF
    wrange = where(inwave ge wmin and inwave le wmax)
    waves = inwave(wrange)
    spectrum = inspec(wrange,*)
ENDELSE

; Read in instrument specific calibrations
case 1 of
  instr eq 'eit': instr_par = eit_parms(waves,wav_band,filter)
;  instr eq 'calroc': instr_par = calroc_parms(waves,wav_band)
;  instr eq 'lasco': instr_par = lasco_parms()
;  instr eq 'sem': instr_par = sem_parms(waves,wav_band)
  else: instr_par = 1
endcase
;

; Calculations of DN/S/pixel or Column Emission Measure
;
;   computation of electrons/pixel/sec - based upon note of Ken Dere
;   - "Spectral Response of the EIT"
;
IF n_elements(expotime) EQ 0 THEN expotime = 1.

; Read in Differential Emisssion Measure:
IF n_elements(dn) EQ 0 THEN BEGIN
  IF n_elements(dem_name) EQ 0 THEN begin
    stat = execute('path = expand_path(!xuvtop) + "/dem"')
    dem_name = pickfile(path=path,filter='*.dem',title='Select DEM File')
  ENDIF
  IF datatype(dem_name) EQ 'STR' THEN BEGIN
     if dem_name eq 'unit' then dem_int = fltarr(n_elements(te))+26. $
       else begin
          read_dem,dem_name,dem_t,dem,dem_ref 
          dem_int = spline(dem_t,dem,alog10(te)) + alog10(te)
       endelse
  ENDIF ELSE dem_int = dem_name

  dem_int = 10^dem_int

  sz = size(dem_int)
  if sz(0) eq 2 then begin
        eps = fltarr(sz(1),sz(2),n_elements(te)) 
        for i = 0, n_elements(te) - 1 do $
              eps(0,0,i) = total(instr_par * spectrum(*,i) ) * dem_int(*,*,i)
  endif else begin
        eps = fltarr(n_elements(te))
        for i = 0, n_elements(te) - 1 do $
                eps(i) = total(instr_par * spectrum(*,i) ) * dem_int(i)
  endelse
  flux = eps * expotime

ENDIF ELSE BEGIN

  eps  = dn / expotime
  flux = fltarr(n_elements(te))
  for i = 0,n_elements(te)-1 do begin
    flux(i) = eps(i) / total(instr_par * spectrum(*,i) )
  endfor
  flux = 0.7*flux
  if keyword_set(volume) then begin
       AU = 1.496e13  ;cm
       pix_arc=eit_pixsize()*3.1416/(60.0*60.0*180.0) 
       pix_len=pix_arc*au 
       flux = temporary(flux)/(pix_len*pix_len)
  endif

ENDELSE

if n_elements(flux) eq 1 then flux = flux(0)
RETURN,flux
END




Web curator: Frédéric Auchère
Responsible NASA official: Joseph B. Gurman, Facility Scientist, Solar Data Analysis Center
joseph.b.gurman@gsfc.nasa.gov
+1 301 286-4767
NASA Goddard Space Flight Center
Solar Physics Branch / Code 682

Last revised: - Wed May 9 21:45:01 2007- F. Auchère