function getpoadef,varname,force=force,verbose=verbose,_extra=e ;+ ;function getpoadef ; returns the default value for a common PINTofALE variable ; usually for filenames, which are often dependent on where ; the files are installed. ; ; The way this works is, if a system variable is already set, ; the default is taken from that. If not, after figuring out ; what the default is (usually by checking where this program ; is located), the appropriate system variable is set to it. ; ;syntax ; default=getpoadef(varname,/force,verbose=verbose) ; ;parameters ; var [INPUT] name of variable as a character string ; * may be an array of strings ; * special variable names are the only ones recognized ; * if 'help' or '?', lists all the variables for which ; defaults can be set ; * in some cases default might be a number, but if the ; input is an array, then the output will always be a ; string array ; ;keywords ; force [INPUT] if set, ignores whether any default (except TOPDIR) ; has already been set and resets it anyway ; * to reset TOPDIR, just do it on the command line, as ; !TOPDIR='/path/to/PINTofALE' ; verbose [INPUT] controls chatter ; _extra [JUNK] here only to prevent crashing the program ; ;history ; Vinay Kashyap (2015aug) ; now if input is scalar, returns scalar (VK; 2015sep) ;- ; usage ok='ok' & np=n_params() & defsysv,'!TOPDIR',exists=iPoA & nv=n_elements(varname) & szv=size(varname,/type) if np ne 0 then begin if nv eq 0 then ok='VARNAME is not defined' else $ if szv ne 7 then ok='VARNAME must be char string scalar or vector' endif if ok ne 'ok' then begin print,'Usage: default=getpoadef(varname,/force,verbose=verbose)' print,' returns default values for common PINTofALE variables' if np ne 0 then message,ok,/informational return,-1L endif if np eq 0 and iPoA ne 0 then return,!TOPDIR ; keywords vv=0L & if keyword_set(verbose) then vv=long(verbose[0])>1L ; define output def=strarr(nv>1) ; basic default if iPoA eq 1 then topdir=!TOPDIR else begin ;(iPoA=0 ;figure out where this program is and thence where TOPDIR should be ; NOTE: this does not work in GDL, so that part is hardcoded, sorry defsysv,'!GDL',exists=ivar if ivar eq 0 then begin help,/source,output=srcpaths ok=where(strpos(srcpaths,'getpoadef.pro') gt 0,mok) if mok gt 0 then begin cc=strsplit(srcpaths[ok[0]],' ',/extract) ccc=cc[1] & itree=strpos(ccc,'/pro/getpoadef.pro') topdir=filepath('',root_dir=strmid(ccc,0,itree)) endif else begin message,'something went wrong' endelse endif else begin print,'GDL does not support the output keyword to HELP.' print,'We will define the !TOPDIR variable here, just' print,'reset it to whatever you want and rerun this function. print,'Or set it in your GDL_STARTUP.' topdir='/fubar/SCAR' endelse defsysv,'!TOPDIR',topdir if vv gt 0 then message,'setting !TOPDIR='+!TOPDIR,/informational if nv eq 0 then def=topdir endelse ;iPoA=0) ; step through each VARNAME and figure out the default for i=0L,nv-1L do begin ;{I=0,NV-1 cc=strtrim(strupcase(varname[i]),2) case cc of ;{variable name 'HELP': begin print,'variable names can be:' print,'version topdir ldbdir cdbdir ardb ceroot chidir ionqef atomdb abref caldb' end 'TOPDIR': def[i]=getpoadef() ;no need to do anything, this is basic default, see above 'VERSION': begin ;(version defsysv,'!PoA',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!PoA else begin def[i]='2.9611 (2015sep19)' defsysv,'!PoA',def[i] if vv gt 0 then message,'PINTofALE version '+def[i],/informational endelse ;VERSION) end 'LDBDIR': begin ;(!TOPDIR/emissivity/chianti defsysv,'!LDBDIR',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!LDBDIR else begin def[i]=filepath('chianti',root_dir=!TOPDIR,subdir='emissivity') defsysv,'!LDBDIR',def[i] if vv gt 0 then message,'setting !LDBDIR='+!LDBDIR,/informational endelse end ;LDBDIR) 'CDBDIR': begin ;(!TOPDIR/emissivity/cont defsysv,'!CDBDIR',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!CDBDIR else begin def[i]=filepath('cont',root_dir=!TOPDIR,subdir='emissivity') defsysv,'!CDBDIR',def[i] if vv gt 0 then message,'setting !CDBDIR='+!CDBDIR,/informational endelse end ;CDBDIR) 'ARDB': begin ;(!TOPDIR/ardb defsysv,'!ARDB',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!ARDB else begin def[i]=filepath('ardb',root_dir=!TOPDIR) defsysv,'!ARDB',def[i] if vv gt 0 then message,'setting !ARDB='+!ARDB,/informational endelse end ;ARDB) 'CEROOT': begin ;(cie defsysv,'!CEROOT',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!CEROOT else begin def[i]='cie' defsysv,'!CEROOT',def[i] if vv gt 0 then message,'setting !CEROOT='+!CEROOT,/informational endelse end ;CEROOT) 'CHIDIR': begin ;(!TOPDIR/../CHIANTI/dbase defsysv,'!CHIDIR',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!CHIDIR else begin ccc=!TOPDIR & cccl=strmid(ccc,strlen(ccc)-1,1) while cccl eq '/' do begin & ccc=strmid(ccc,0,strlen(ccc)-1) & cccl=strmid(ccc,strlen(ccc)-1,1) & endwhile ;strip trailing "/"s itree=strpos(ccc,'/',/reverse_search) def[i]=filepath('dbase',root_dir=strmid(ccc,0,itree),subdir='CHIANTI') defsysv,'!CHIDIR',def[i] if vv gt 0 then message,'setting !CHIDIR='+!CHIDIR,/informational endelse end ;CHIDIR) 'IONEQF': begin ;(ioneq/chianti.ioneq defsysv,'!IONEQF',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!IONEQF else begin def[i]=filepath('chianti.ioneq',root_dir='ioneq') defsysv,'!IONEQF',def[i] if vv gt 0 then message,'setting !IONEQF='+!IONEQF,/informational endelse end ;IONEQF) 'ATOMDB': begin ;(!TOPDIR/../atomdb defsysv,'!ATOMDB',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!ATOMDB else begin ccc=!TOPDIR & cccl=strmid(ccc,strlen(ccc)-1,1) while cccl eq '/' do begin & ccc=strmid(ccc,0,strlen(ccc)-1) & cccl=strmid(ccc,strlen(ccc)-1,1) & endwhile ;strip trailing "/"s itree=strpos(ccc,'/',/reverse_search) def[i]=filepath('',root_dir=strmid(ccc,0,itree),subdir='atomdb') defsysv,'!ATOMDB',def[i] if vv gt 0 then message,'setting !ATOMDB='+!ATOMDB,/informational endelse end ;ATOMDB) 'ABREF': begin ;(grevesse et al. defsysv,'!ABREF',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!ABREF else begin def[i]='Grevesse et al.' defsysv,'!ABREF',def[i] if vv gt 0 then message,'setting !ABREF='+!ABREF,/informational endelse end ;ABREF) 'CALDB': begin ;(!TOPDIR/caldb defsysv,'!CALDB',exists=ivar if keyword_set(force) then ivar=0 ;force override if ivar eq 1 then def[i]=!CALDB else begin def[i]=filepath('',root_dir=!TOPDIR,subdir='caldb') defsysv,'!CALDB',def[i] if vv gt 0 then message,'setting !CALDB='+!CALDB,/informational endelse end ;CALDB) else: begin ;( if vv gt 0 then message,cc+': variable name not understood',/informational end ;else) endcase ;case CC} endfor ;I=0,NV-1} if nv eq 1 then def=def[0] return,def end