PRO dustem_set_plot_range ,test_m,test_x, _extra=_extra ,help=help

;+
; NAME:
;    dustem_set_plot_range
; PURPOSE:
;    Sets the X and Y plotting ranges for the different datasets in emission and extinction when in polarization mode and not (using the _extra structure).
; CATEGORY:
;    DustEMWrap
; CALLING SEQUENCE:
;    dustem_set_plot_range,test_m,test_x,_extra=_extra 
; INPUTS:
;    test_m : (Boolean) signaling emission mode
;    test_x : (Boolean) signaling extinction mode
; OPTIONAL INPUT PARAMETERS:
;    _extra structure containing the plotting keywords
; OUTPUTS:
;    NONE
; OPTIONAL OUTPUT PARAMETERS:
;    
; ACCEPTED KEY-WORDS:
;    help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    Changes the default plotting parameters in the !dustem_plot_range pointer.
;    The procedure only works with the presence of the _extra structure
; RESTRICTIONS:
;    The DustEM fortran code must be installed
;    The DustEMWrap IDL code must be installed
; PROCEDURES AND SUBROUTINES USED:
;
; EXAMPLES
;   dustem_set_plot_range ,test_m,test_x, _extra=_extra 
; MODIFICATION HISTORY:
;    Written by Ilyes Choubani
;    Evolution details on the DustEMWrap gitlab.
;-

IF keyword_set(help) THEN BEGIN
  doc_library,'dustemw_set_plot_range'
  goto,the_end
END

IF keyword_set(_extra) THEN BEGIN

	tgnms_extra = tag_names(_extra)

	; ;Now testing on what is in the _extra structure. 
	IF test_m and ~test_x  THEN BEGIN ;EMISSION ALONE 
	 
	    IF !run_pol THEN BEGIN ;SEVERAL DATA SETS: THE DASHBOARD
	        
	        ;Setting of tHE X-RANGE
	        ;taking into account as many entries as possible
	        tsxr = strmid(strupcase(tgnms_extra),0,2) EQ 'XR' or $
	        strupcase(tgnms_extra) EQ 'XRANGE' or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION')
	        
	        idxr = where(tsxr,ctestxr) 
	        
	        ;There is no error testing on X ranges because there is only one X range
	        
	        ;THIS WILL ONLY CONCERN THE Y RANGES
	        
	        tst = STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) NE 'SED' and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) NE '_EM' and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) NE 'RAC'
	        
	        idyr = where((strmid(strupcase(tgnms_extra),0,2) EQ 'YR'and tst) or $
	        strupcase(tgnms_extra) EQ 'YRANGE' or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and tst and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_M') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and tst and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) NE '_EMISSION'),ctestyr) ;(strsplit(tgnms_extra,'_')) NE [0],ctestyr)
	        
	        
	        if ctestyr ne 0 then message, 'You have provided one Y-range when multiple ones may be provided.', /continue
	        
	        idyr_polsed = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,5,/reverse_offset)) EQ 'POLSED',ctyr_polsed) 
	        
	        idyr_psi_em = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,5,/reverse_offset)) EQ 'PSI_EM',ctyr_psi_em) 
	       
	        idyr_used = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) EQ 'USED',ctyr_used) 
	        
	        idyr_sed = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,5,/reverse_offset)) NE 'POLSED' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) NE 'QSED' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) NE 'USED' and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) EQ 'SED',ctyr_sed)
	        
	        idyr_polfrac = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,5,/reverse_offset)) EQ 'OLFRAC',ctyr_polfrac) 
	       
	        idyr_qsed = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) EQ 'QSED',ctyr_qsed) 
	        
	        
	         ;SETTING THE TITLE
  	       
  	       idtit = where(strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' or $
  	       (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
  	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
  	       (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
  	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION') , ctestit)
  	       
  	      
	        
	        
	        ;FILLING UP X ranges (same xrange)
	        
	        IF ctestxr ne 0 THEN BEGIN
	        
	            FOR i=0L,(n_tags(!dustem_plot_range)-3)/2 DO BEGIN ; THIS IS EMISSION , extinction will have to from (n_tags(!dustem_plot_range)-2)/2+1 to (n_tags(!dustem_plot_range)-2)
	            
	                !dustem_plot_range.(i).xr=_extra.(idxr)
	             
	            ENDFOR
	                
	        
	        ENDIF ;else the default xr is kept
	    
	        ;FILLING UP Y RANGES
	        
	        
	        if ctyr_polsed ne 0 then !dustem_plot_range.(3).yr = _extra.(idyr_polsed)
	        
	        
	        if ctyr_psi_em ne 0 then !dustem_plot_range.(5).yr = _extra.(idyr_psi_em)
	     
	       
	        if ctyr_used ne 0 then !dustem_plot_range.(2).yr = _extra.(idyr_used)
	      
	        
	        if ctyr_sed ne 0 then !dustem_plot_range.(0).yr = _extra.(idyr_sed)
	     
	        
	        if ctyr_polfrac ne 0 then !dustem_plot_range.(4).yr = _extra.(idyr_polfrac)

	         
	        if ctyr_qsed ne 0 then !dustem_plot_range.(1).yr = _extra.(idyr_qsed)
	 
	        
	        if ctestit ne 0 then !dustem_plot_range.(12) = _extra.(idtit)
;            stop
 	       
	    ENDIF ELSE BEGIN ;ONE DATA SET : SED - - - - 
	        
	       tsxr = strmid(strupcase(tgnms_extra),0,2) EQ 'XR' or $
	       strupcase(tgnms_extra) EQ 'XRANGE' or $
	       (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	       STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	       (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	       STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION')
	      
	       idxr = where(tsxr,ctestxr) 
	       ;FILLING UP X ranges (same xrange)
	       
	       IF ctestxr ne 0 THEN !dustem_plot_range.(0).xr=_extra.(idxr)
	       
	       idyr = where(strmid(strupcase(tgnms_extra),0,2) EQ 'YR' or $
	       strupcase(tgnms_extra) EQ 'YRANGE' or $
	       (strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	       STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	       (strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	       STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION'),ctestyr) 
	       
	       ;Filling up the Y range 
	       if ctestyr ne 0 then !dustem_plot_range.(0).yr = _extra.(idyr)
       
	       ;SETTING THE TITLE
	       
	       idtit = where(strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' or $
	       (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	       (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION') , ctestit)
	       
	       if ctestit ne 0 then !dustem_plot_range.(12) = _extra.(idtit)
	        
	    ENDELSE 

   
	ENDIF


	IF test_x and ~test_m THEN BEGIN ;EXTINCTION ALONE
	    
	    
	    
	    IF !run_pol THEN BEGIN ;SEVERAL DATA SETS: THE DASHBOARD
	        
	        
	        ;Setting of tHE X-RANGE
	        ;taking into account as many entries as possible
	        tsxr = strmid(strupcase(tgnms_extra),0,2) EQ 'XR' or $
	        strupcase(tgnms_extra) EQ 'XRANGE' or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION')
	        
	        idxr = where(tsxr,ctestxr) 
	        
	        
	        tst = STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) NE 'EXT'
	        
	        idyr = where((strmid(strupcase(tgnms_extra),0,2) EQ 'YR'and tst) or $
	        strupcase(tgnms_extra) EQ 'YRANGE' or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and tst and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_X') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and tst and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) NE '_EXTINCTION'),ctestyr) ;
	        
	        
	        if ctestyr ne 0 then message, 'You have provided one Y-range when multiple Y-ranges may be provided.',/continue
	        
	        
	        idyr_polext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) EQ '_POLEXT',ctyr_polext) 
	        
	        idyr_psi_ext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) EQ 'PSI_EXT',ctyr_psi_ext) 
	       
	        idyr_uext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) EQ 'UEXT',ctyr_uext) 
	        
	        idyr_fpolext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) EQ 'FPLOEXT',ctyr_fpolext) 
	        
	        idyr_qext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) EQ 'QEXT',ctyr_qext) 
	        
	        testext = strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) EQ 'EXT' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) NE '_POLEXT' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) NE 'FPOLEXT' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) NE 'PSI_EXT' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) NE 'UEXT' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) NE 'QEXT'
	        
	        idyr_ext = where(testex,ctyr_ext)
	        
	        
	        ;SETTING THE TITLE
 	       
 	       idtit = where(strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' or $
 	       (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
 	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
 	       (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
 	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION') , ctestit)
 	       
 	        
	        ;FILLING UP Xranges (same xrange)
	        
	        IF ctestxr ne 0 THEN BEGIN
	        
	            FOR i=(n_tags(!dustem_plot_range)-2)/2+1,(n_tags(!dustem_plot_range)-2) DO BEGIN ; THIS IS EMISSION , extinction will have to from (n_tags(!dustem_plot_range)-2)/2+1 to (n_tags(!dustem_plot_range)-2)
	            
	                !dustem_plot_range.(i).xr=_extra.(idxr)
	            
	            ENDFOR
	                
	        
	        ENDIF ;else the default xr is kept
	    
	    
	        ;FILLING UP Y RANGES
	        
	        
	        if ctyr_polext ne 0 then !dustem_plot_range.(9).yr = _extra.(idyr_polext)
	
	        
	        if ctyr_psi_ext ne 0 then !dustem_plot_range.(11).yr = _extra.(idyr_psi_ext)

	       
	        if ctyr_uext ne 0 then !dustem_plot_range.(8).yr = _extra.(idyr_uext)

	        
	        if ctyr_ext ne 0 then !dustem_plot_range.(6).yr = _extra.(idyr_ext)

	        
	        if ctyr_fpolext ne 0 then !dustem_plot_range.(10).yr = _extra.(idyr_fpolext)

	         
	        if ctyr_qext ne 0 then !dustem_plot_range.(7).yr = _extra.(idyr_qext)
	
    	    
    	    if ctestit ne 0 then !dustem_plot_range.(13) = _extra.(idtit)
 	       
    	    
	    ENDIF ELSE BEGIN ;ONE DATA SET : EXT


	        tsxr = strmid(strupcase(tgnms_extra),0,2) EQ 'XR' or $
	        strupcase(tgnms_extra) EQ 'XRANGE' or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION')
	        
	        idxr = where(tsxr,ctestxr) 
	        
	        ;FILLING UP X ranges (same xrange)
	        
	        IF ctestxr ne 0 THEN !dustem_plot_range.(6).xr=_extra.(idxr)
	                    
	   
	        
	        ;NB: Counters in this loop and in the loop above do not necessarily serve the same function
	        idyr = where(strmid(strupcase(tgnms_extra),0,2) EQ 'YR' or $
	        strupcase(tgnms_extra) EQ 'YRANGE' or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION'),ctestyr) ;
	        
	        if ctestyr ne 0 then !dustem_plot_range.(6).yr = _extra.(idyr)
	          
	        ;SETTING THE TITLE
 	       
 	       idtit = where(strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' or $
 	       (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
 	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
 	       (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
 	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION') , ctestit)
     	   
     	   
     	   if ctestit ne 0 then !dustem_plot_range.(13) = _extra.(idtit)
 	         
	    
	    ENDELSE 

	ENDIF



	IF test_m and test_x THEN BEGIN ;EMISSION and EXTINCTION 
	    

	    IF !run_pol THEN BEGIN ;SEVERAL DATA SETS: THE SED DASHBOARD & EXT DASHBOARD 
	    
	    
	        tstxr = strupcase(tgnms_extra) EQ 'XRANGE' or $
	        strupcase(tgnms_extra) EQ 'XR' or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'XR' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_M') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'XR' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_X') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'XR' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) NE '_EMISSION') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'XR' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) NE '_EXTINCTION')
	        
	        idxr = where(tstxr,ctestxr) 
	        
	        if ctestxr ne 0 then message, 'You have provided one X-range when multiple ones may be needed',/continue
	        
	        t_m = (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION')
	        
	        indxr_m = where(t_m,ctestxr_m)
	        
	        
	        
	        t_x = (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION')
	        
	        
	        idxr_x = where(t_x,ctestxr_x)


	        ;SETTING Y RANGE
	            
	        tst = STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) NE 'SED' and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) NE '_EM' and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) NE 'RAC'and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) NE 'EXT'
	        
	        idyr = where((strmid(strupcase(tgnms_extra),0,2) EQ 'YR'and tst) or $
	        strupcase(tgnms_extra) EQ 'YR' or $
	        strupcase(tgnms_extra) EQ 'YRANGE' or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and tst and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_M') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and tst and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) NE '_EMISSION') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and tst and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_X') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and tst and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) NE '_EXTINCTION'),ctestyr) ;
	        
	        if ctestyr ne 0 then message, 'You have provided one Y-range when multiple ones are needed.',/continue
	         
	        ;EMISSION
	        idyr_polsed = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,5,/reverse_offset)) EQ 'POLSED',ctyr_polsed) 
	        
	        idyr_psi_em = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,5,/reverse_offset)) EQ 'PSI_EM',ctyr_psi_em) 
	       
	        idyr_used = where(strmid(strupcase(tgnms_extra),0,1) EQ 'YR' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) EQ 'USED',ctyr_used) 
	        
	        idyr_sed = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,5,/reverse_offset)) NE 'POLSED' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) NE 'QSED' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) NE 'USED' and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) EQ 'SED',ctyr_sed)
	        
	        idyr_polfrac = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,5,/reverse_offset)) EQ 'OLFRAC',ctyr_polfrac) 
	       
	        idyr_qsed = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) EQ 'QSED',ctyr_qsed) 
	        
	        ;EXTINCTION
	        idyr_polext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) EQ '_POLEXT',ctyr_polext) 
	        
	        idyr_psi_ext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) EQ 'PSI_EXT',ctyr_psi_ext) 
	       
	        idyr_uext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) EQ 'UEXT',ctyr_uext) 
	        
	        idyr_fpolext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) EQ 'FPLOEXT',ctyr_fpolext) 
	        
	        idyr_qext = where(strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) EQ 'QEXT',ctyr_qext) 
	        
	        testext = strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,2,/reverse_offset)) EQ 'EXT' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) NE '_POLEXT' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) NE 'FPOLEXT' and $
	        STRUPCASE(strmid(tgnms_extra,6,/reverse_offset)) NE 'PSI_EXT' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) NE 'UEXT' and $
	        STRUPCASE(strmid(tgnms_extra,3,/reverse_offset)) NE 'QEXT'
	        
	        idyr_ext = where(testex,ctyr_ext)
	        
	        testit = strupcase(tgnms_extra) EQ 'TIT' or $
	        strupcase(tgnms_extra) EQ 'TITLE' or $
	        (strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_M') or $
	        (strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) NE '_EMISSION') or $
	        (strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_X') or $
	        (strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) NE '_EXTINCTION')
	        
	        idtit = where(testit, ctit)
	        
	        if ctit ne 0 then message, 'You have provivded one title when two (emission + extinctino are needed).', /continue	        
	        
	        idtit_m = where((strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION'),ctit_m)
	        
	        
    	    idtit_x = where((strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
 	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
 	        (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
 	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION'),ctit_x)
 	        
 	        
	        ;FILLING UP X ranges (same xrange): EMISSION
	        
	        IF ctestxr_m ne 0 THEN BEGIN
	        
	            FOR i=0L,(n_tags(!dustem_plot_range)-2)/2 DO BEGIN ; THIS IS EMISSION , extinction will have to from (n_tags(!dustem_plot_range)-2)/2+1 to (n_tags(!dustem_plot_range)-2)
	            
	                !dustem_plot_range.(i).xr=_extra.(idxr_m)
	            
	            
	            ENDFOR
	                
	        
	        ENDIF ;else the default xr is kept
	        
	       
	        ;FILLING UP X ranges (same xrange) - EXTINCTION
	        
	        IF ctestxr_x ne 0 THEN BEGIN
	        
	            FOR i=(n_tags(!dustem_plot_range)-2)/2+1,(n_tags(!dustem_plot_range)-2) DO BEGIN ; THIS IS EMISSION , extinction will have to from (n_tags(!dustem_plot_range)-2)/2+1 to (n_tags(!dustem_plot_range)-2)
	            
	                !dustem_plot_range.(i).xr=_extra.(idxr_x)
	            
	            ENDFOR
	                
	        
	        ENDIF ;else the default xr is kept
	    
	    
	        ;FILLING UP Y RANGES - EMISSION
	        
	        
	        if ctyr_polsed ne 0 then !dustem_plot_range.(3).yr = _extra.(idyr_polsed)

	        
	        if ctyr_psi_em ne 0 then !dustem_plot_range.(5).yr = _extra.(idyr_psi_em)

	       
	        if ctyr_used ne 0 then !dustem_plot_range.(2).yr = _extra.(idyr_used)

	        
	        if ctyr_sed ne 0 then !dustem_plot_range.(0).yr = _extra.(idyr_sed)

	        
	        if ctyr_polfrac ne 0 then !dustem_plot_range.(4).yr = _extra.(idyr_polfrac)

	         
	        if ctyr_qsed ne 0 then !dustem_plot_range.(1).yr = _extra.(idyr_qsed)
    
	        ;FILLING UP Y RANGES - EXTINCTION
	        
	        
	        if ctyr_polext ne 0 then !dustem_plot_range.(9).yr = _extra.(idyr_polext)

	        
	        if ctyr_psi_ext ne 0 then !dustem_plot_range.(11).yr = _extra.(idyr_psi_ext)

	       
	        if ctyr_uext ne 0 then !dustem_plot_range.(8).yr = _extra.(idyr_uext)

	        
	        if ctyr_ext ne 0 then !dustem_plot_range.(6).yr = _extra.(idyr_ext)

	        
	        if ctyr_fpolext ne 0 then !dustem_plot_range.(10).yr = _extra.(idyr_fpolext)

	         
	        if ctyr_qext ne 0 then !dustem_plot_range.(7).yr = _extra.(idyr_qext)
	        
	        ;SETTING THE TITLE
	        
	         ;EXTINCTION
	         if ctit_x ne 0 then !dustem_plot_range.(13)=_extra.(idtit_x)  
     	        
 
    	    ;EMISSION
    	    if ctit_m ne 0 then !dustem_plot_range.(12)=_extra.(idtit_m)  
 	        
	        
	    ENDIF ELSE BEGIN ;TWO DATA SETS : EXT AND SED
	    
	        tstxr = strupcase(tgnms_extra) EQ 'XRANGE' or $
	        strupcase(tgnms_extra) EQ 'XR' or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'XR' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_M') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'XR' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_X') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'XR' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) NE '_EMISSION') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'XR' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) NE '_EXTINCTION')
	        
	        idxr = where(tstxr,ctestxr) 
	        
	        if ctestxr ne 0 then message, 'You have provided one X-range when multiple ones are needed',/continue
	        
	        t_m = (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION')
	        
	        indxr_m = where(t_m,ctestxr_m)
	        
	        
	        
	        t_x = (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'X' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION')
	        
	        
	        idxr_x = where(t_x,ctestxr_x)
	   
	        
	        idyr = where(strupcase(tgnms_extra) EQ 'YR' or $
	        strupcase(tgnms_extra) EQ 'YRANGE' or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_M') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) NE '_EMISSION') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_X') or $
	        (strmid(strupcase(tgnms_extra),0,2) EQ 'YR' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) NE '_EXTINCTION'),ctestyr) ;
	        
	        if ctestyr ne 0 then message, 'You have provided one Y-range when multiple ones are needed.',/continue
	         
	        
	       
	        t_m = (strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION')
	        
	        indyr_m = where(t_m,ctestxr_m)
	        
	        t_x = (strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'Y' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION')
	        
	        
	        idyr_x = where(t_x,ctestyr_x)
	       
	        
	        testit = strupcase(tgnms_extra) EQ 'TIT' or $
	        strupcase(tgnms_extra) EQ 'TITLE' or $
	        (strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_M') or $
	        (strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) NE '_EMISSION') or $
	        (strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) NE '_X') or $
	        (strmid(strupcase(tgnms_extra),0,3) EQ 'TIT' and $
	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) NE '_EXTINCTION')
	        
	        idtit = where(testit, ctit)
	        
	        if ctit ne 0 then message, 'You have provivded one title when two (emission + extinctino are needed).', /continue	        
	        
	        idtit_m = where((strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_M') or $
	        (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
	        STRUPCASE(strmid(tgnms_extra,8,/reverse_offset)) EQ '_EMISSION') ,ctit_m)
	        
	        
    	    idtit_x = where((strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
 	        STRUPCASE(strmid(tgnms_extra,1,/reverse_offset)) EQ '_X') or $
 	        (strmid(strupcase(tgnms_extra),0,1) EQ 'T' and $
 	        STRUPCASE(strmid(tgnms_extra,10,/reverse_offset)) EQ '_EXTINCTION'),ctit_x)
 	        
	        
	        
	        ;FILLING UP X ranges (same xrange): EMISSION
	        
	        IF ctestxr_m ne 0 THEN !dustem_plot_range.(0).xr=_extra.(idxr_m)
	           
	        
	        ;FILLING UP X ranges (same xrange) - EXTINCTION
	        
	        IF ctestxr_x ne 0 THEN  !dustem_plot_range.(6).xr=_extra.(idxr_x)
	        
	        ;FILLING UP X ranges (same xrange): EMISSION
	        
	        IF ctestyr_m ne 0 THEN !dustem_plot_range.(0).yr=_extra.(idyr_m)
	            
	       
	        ;FILLING UP X ranges (same xrange) - EXTINCTION
	        
	        IF ctestxr_x ne 0 THEN  !dustem_plot_range.(6).xr=_extra.(idxr_x)
	      
    	    
    	    ;SETTING THE TITLE
	        
	         ;EXTINCTION
	         if ctit_x ne 0 then !dustem_plot_range.(13)=_extra.(idtit_x)  
     	       
 	        
    	    ;EMISSION
    	    if ctit_m ne 0 then !dustem_plot_range.(12)=_extra.(idtit_m)  
   	        
  
	    
	    ENDELSE 

	                
ENDIF

ENDIF


the_end:


END