dustem_show_file_dependencies.pro 5.09 KB
PRO dustem_show_file_dependencies,help=help,outfile=outfile,compfile=compfile

;+
; NAME:
;    dustem_show_file_dependencies
;
; PURPOSE:
;    Generate a list of routines used during a DustEMWrap run
;
; CATEGORY:
;    DustEMWrap, Distributed, Low-Level, Development
;
; CALLING SEQUENCE:
;    dustem_show_file_dependencies[,help=help][,outfile=]
;
; INPUTS:
;    None
;
; OPTIONAL INPUT PARAMETERS:
;    outfile = string, .xcat file (and path) with list of compiled routines and
;            functions. Default is './DustEMWrap_dependencies.xcat'
;    compfile = string, .xcat file (and path) with list of unused
;    routines in !dustem_wrap_soft_dir/src/idl/. Default is './DustEMWrap_unused_routines.xcat'
;
; OUTPUTS:
;
; OPTIONAL OUTPUT PARAMETERS:
;
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
;
; COMMON BLOCKS:
;    None
;
; SIDE EFFECTS:
;    None
;
; RESTRICTIONS:
;    The DustEM fortran code must be installed
;    The DustEMWrap IDL code must be installed
;
; PROCEDURES AND SUBROUTINES USED:
;    
; EXAMPLES
 ; 
; MODIFICATION HISTORY:
;    Written by JPB Apr-2011
;    Evolution details on the DustEMWrap gitlab.
;    See http://dustemwrap.irap.omp.eu/ for FAQ and help.  

if keyword_set(help) then begin 
  doc_library,'dustem_show_file_dependencies'
  goto,the_end
END

use_outfile='./DustEMWrap_dependencies.xcat'
use_compfile='./DustEMWrap_unused_routines.xcat'
if keyword_set(outfile) then use_outfile=outfile
if keyword_set(compfile) then use_compfile=compfile

; HERE IS WHERE YOU PUT THE TOP-LEVEL ROUTINES TO RUN 
;===== The following is the list of non regression tests performed under idl and fawlty
dustem_init,/wrap,/plot
dustem_run_example,'MC10',show="all"
dustem_make_polarization_sed_example,model='G17_MODELD',outfile='./pol_sed_G17D.xcat'
dustem_fit_intensity_example,Nitermax=5,fits_save_and_restore='/tmp/mysavefile1.fits'
dustem_fit_spectro_example,Nitermax=1
dustem_fit_intensity_example,Nitermax=1,/noobj
dustem_fit_intensity_mbb_example,Nitermax=1,postscript='/tmp/dustemwrap_postcript_example.ps'
dustem_fit_polarization_example,Nitermax=1,fits_save_and_restore='/tmp/mysavefile2.fits'
dustem_make_polarization_ext_example,model='G17_MODELD',outfile='./pol_ext_G17D.xcat'
dustem_make_polarization_ext_example,model='G17_MODELA',outfile='./pol_ext_G17A.xcat'
dustem_fit_ext_example,Nitermax=1,fits_save_and_restore='/tmp/mysavefile3.fits'
dustem_fit_ext_pol_example,Nitermax=3,fits_save_and_restore='/tmp/mysavefile4.fits'
;following fails in the write_fits_table
dustem_fit_ext_pol_example,Nitermax=3,ext_file='./pol_ext_G17D.xcat';,fits_save_and_restore='/tmp/mysavefile5.fits'
dustem_fit_sed_ext_pol_example,Nitermax=2,fits_save_and_restore='/tmp/mysavefile6.fits'
;following fails in the write_fits_table
;dustem_fit_sed_ext_pol_example,Nitermax=5,fits_save_and_restore='/tmp/mysavefile7.fits',ext_file='./pol_ext_G17D.xcat',sed_file='./pol_sed_G17D.xcat'
dustem_fit_sed_ext_pol_example,Nitermax=5,ext_file='./pol_ext_G17D.xcat',sed_file='./pol_sed_G17D.xcat'

;=== for some reason plot goes red here under fawlty
;=== and fails when run with only the minimal dustemwrap installed (stellar . txt file is missing)
dustem_myisrf_example,Nitermax=1
;=== fails when run with only the minimal dustemwrap installed (stellar . txt file is missing)
;dustem_stellarpopisrf_example,Nitermax=1,fits_save_and_restore='/tmp/mysavefile6.fits'

; END LIST OF TOP-LEVEL ROUTINES

; CONSTRUCT A STRUCTURE WITH ROUTINES THAT WERE COMPILED DURING ABOVE RUNS
help,/function,output=ff
help,/pro,output=pp
   
ff=ff[1:*]
pp=pp[2:*]

nff=n_elements(ff)
npp=n_elements(pp)

one_func={name:'',path:'',args:ptr_new()}
one_pro={name:'',path:'',args:ptr_new()}

func_list=replicate(one_func,nff)
pro_list=replicate(one_pro,npp)

message,'Found '+string(nff)+' functions',/info

FOR i=0L,nff-1 DO BEGIN
  str=strcompress(ff(i))
  vv=str_sep(str,' ')
  func_list(i).name=vv(0)
  func_list(i).args=ptr_new(vv(1:*))
  wh=which_pro(strlowcase(func_list(i).name))
  func_list(i).path=wh(0)
ENDFOR

message,'Found '+string(npp)+' routines',/info
FOR i=0L,npp-1 DO BEGIN
  str=strcompress(pp(i))
  vv=str_sep(str,' ')
  pro_list(i).name=vv(0)
  pro_list(i).args=ptr_new(vv(1:*))
  wh=which_pro(strlowcase(pro_list(i).name))
  pro_list(i).path=wh(0)
ENDFOR

one_st={name:'',path:''}
st=replicate(one_st,nff+npp)
st.name=[func_list.name,pro_list.name]
st.path=[func_list.path,pro_list.path]

;=== remove empty names
ind=where(st.name NE '')
st=st(ind)
;=== remove empty path (are entries without .pro)
ind=where(st.path NE '')
st=st(ind)

;=== order by path
order=sort(st.path)
st=st(order)

write_xcat,st,use_outfile,/wiki
write_xcat,st,use_outfile
message,'Wrote '+use_outfile,/info


; CONSTRUCT A STRUCTURE WITH ROUTINES IN SRC/IDL THAT WERE NOT
; COMPILED DURING THE EXAMPLES
allpro=file_search(!dustem_wrap_soft_dir+'src/idl/*pro',count=nall)
match2,st.path,allpro,a,b
idx=where(b eq -1, ct)
if ct ne 0 then begin
   ust=replicate(one_st,ct)
   ust.path=allpro[idx]
   ust.name=strupcase(file_basename(allpro[idx],'.pro'))
   write_xcat,ust,use_compfile
   message,'Wrote '+use_compfile,/info
end else begin
   message,'No unused DustEMWrap routines',/info
end


stop
the_end:
END