pro convert_ph_units, data, units, deadtime = deadt,scale=scale ;+ ;NAME: convert_ph_units ;PURPOSE: ; Converts the units of the data array of ph data structures. ;CALLING SEQUENCE: convert_ph_units,data,units ;INPUTS: data: a ph data structure returned by "get_ph1.pro" or "get_ph2.pro" ; data.data is rescaled in the requested units, and ; data.units is set to the name of the new units ; units: a string. One of: 'COUNTS','RATE','EFLUX','FLUX','DF' ; ;KEYWORD PARAMETERS: ; DEADTIME: (double) specifies a deadtime: the interval during which ; a channel plate detector is turned off to record an event. ; data.deadtime defaults to 1e-6 ; (and has precedence over deadtime) ;COMMON BLOCKS: get_ph_com: contains one element: deadtime ; ;LAST MODIFICATION: @(#)convert_ph_units.pro 1.1 97/04/21 ;CREATED BY: Frank Marcoline. Patterened after other convert_*_units.pro procedures. ;- common get_ph1_com, deadtime if strupcase(units) eq strupcase(data.units_name) then return energy = data.energy ;in eV float(ne,nbins) n_e = data.nenergy ;number of energies float nbins = data.nbins ;number of bins float dt = data.dt ;integration time double(ne,nbins) gf = data.gf * data.geomfactor ;geometric factor float(ne,nbins) mass = data.mass ;proton mass double if strupcase(data.units_name) ne 'COUNTS' then message , 'bad units' if n_elements(deadtime) eq 0 then deadtime = 0d if n_elements(deadt) ne 0 then deadtime = double(deadt) str_element,data,'deadtime',value=deadtime rate = data.data/dt dt = dt * (1.-rate*deadtime) ;effective integration time double(ne,nbins) if not keyword_set(scale) then scale = 1 case strupcase(units) of 'COUNTS' : scale = 1. 'RATE' : scale = 1. / dt 'EFLUX' : scale = 1. / (dt * gf) 'FLUX' : scale = 1. / (dt * gf * energy) 'DF' : scale = 1. / (dt * gf * energy^2 * (2./mass/mass*1e5) ) else: begin dprint, 'Undefined units: ',units return end endcase case strupcase(data.units_name) of 'COUNTS' : scale = scale * 1. 'RATE' : scale = scale * dt 'EFLUX' : scale = scale * (dt * gf) 'FLUX' : scale = scale * (dt * gf * energy) 'DF' : scale = scale * (dt * gf * energy^2 * 2./mass/mass*1e5) else: begin dprint, 'Unknown starting units: ',data.units_name return end endcase data.units_name = units if find_str_element(data,'ddata') ge 0 then data.ddata = data.ddata*scale data.data = data.data * scale return end