;+
; NAME: CHANTOEN
;
; PURPOSE: Channel to Energy conversion for EPAC EV-Matrix
;
; CATEGORY: Element Distr. & Energy calc.
;
; CALLING SEQUENCE: en=CHANTOEN(chan,xybit,hmodbit)
;
; INPUTS:  chan      y:0-255,x:0-511 EV channel
;                    or array of these numbers
;          xybit     0: Xaxis (B-Det) 1: Yaxis (A-Det)
;          hmodbit   0:IMOD 1:HMOD
;
; OUTPUTS: En        FLT or FLTARR respective energies (in MeV)
;
; RESTRICTIONS:
;
; PROCEDURE:
;       Factors from experiment description, p.4-26a
;       (recalibrated values, oct. 91)
;
; MODIFICATION HISTORY:
;       Written by:     Markus Fraenz,MPAE jan 94.
;       14/12/94  2.0 MeV offset for B in the upper half 
;                         generally desactivated MF
;       18/06/95  allows for dE > A2 threshold      MF,MKR
;-

FUNCTION CHANTOEN,chan,xybit,hmodbit
; channel-energy-conversion: E[MeV]=(channel+facB)/facA
;
      facA=[128.6,2.558,24.39,12.] ;  ADC1 : Erange0,Erange1,dEimod,dEhmod
      facB=[8.005,0.7673,7.317,7.] ;  ADC1 : Erange0,Erange1,dEimod,dEhmod
;
      IF xybit EQ 1 THEN en=(chan+1.0+facB(2+hmodbit))/facA(2+hmodbit) > 0.43 $
      ELSE BEGIN
       nel=n_elements(chan)
       IF nel EQ 1 THEN BEGIN
        IF chan LT 256 THEN $
         en=(chan+1.0+facB(0))/facA(0) $
        ELSE en=(chan-256+1+facB(1))/facA(1)  ;+2.0  ; with doubtfull 2.0 offset
                                  ; upper energy range ought to start at 0 again
       ENDIF ELSE BEGIN
        er0index=where(chan LT 256,er0count)
        er1index=where(chan GE 256,er1count)
        en=FLTARR(nel)
        IF er0count GT 0 THEN en(er0index)=(chan(er0index)+1.0+facB(0))/facA(0)
        IF er1count GT 0 THEN en(er1index)= $
         (chan(er1index)-256.0+1.0+facB(1))/facA(1);+2.0
       ENDELSE
      ENDELSE
return,en
end