PRO dustem_activate_plugins,p_min,st=st,help=help ;+ ; NAME: ; dustem_activate_plugins ; ; PURPOSE: ; activates the plugins present in the parameter description vector (pd) and the fixed parameter description vector (fpd) ; ; CATEGORY: ; DustEMWrapp, Distributed, Mid-Level, Plugins ; ; CALLING SEQUENCE: ; dustem_activate_plugins,p_min[,st][,/help] ; ; INPUTS: ; p_min = (parameter values)/(initial parameter values) ; ; OPTIONAL INPUT PARAMETERS: ; ; OUTPUTS: ; None ; ; OPTIONAL OUTPUT PARAMETERS: ; st = Dustem output structure ; ; 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 ; dustem_activate_plugins, p_min ,st=st ; ; MODIFICATION HISTORY: ; Written by IC ; 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_activate_plugins' goto,the_end output=0. ENDIF p_dim = p_min * (*(*!dustem_fit).param_init_values) if isa((*!dustem_fit).fixed_param_descs) then begin ;THIS IS USED TO ACCOUNT FOR THE FREEZING OF PLUGIN PARAMETERS ;concatenating the parameter vectors param_descs = [(*(*!dustem_fit).param_descs),(*(*!dustem_fit).fixed_param_descs)] param_values = [p_dim,(*(*!dustem_fit).fixed_param_init_values)] param_values = param_values(sort(param_descs)) ;should we put it back to the way it was? param_descs = param_descs(sort(param_descs)) ;Taking care of the param_func vector dustem_set_func_ind, param_descs, param_values ; this sets (*(*!dustem_fit).param_func) param_func = (*(*!dustem_fit).param_func) dustem_set_func_ind, (*(*!dustem_fit).param_descs), p_dim ;setting the pointers back to their original valyes endif else begin param_descs = (*(*!dustem_fit).param_descs) param_values = p_dim param_func = (*(*!dustem_fit).param_func) endelse ;PART WHERE THE PLUGINS RUN ACCORDING TO THEIR SCOPES. ;normal (additive) plugins come first as they can be used by other plugins ;The ISRF plugin is next - we can always change its scope however we please to. DustEm runs here. This is with the /dustem_run keyword. ;The plugins that use the DustEM output come next - we can always change their 'common' scope ;IF /avoid is used the specified scopes are avoided. They're considered when /avoid is missing. ;using '**' so not to write the entire scope dustem_run_plugins, p_dim ,param_descs, param_values, param_func, ['*STELLAR*','*REPLACE*','*ISRF*'], avoid=1 ;=== The line below makes fawlty go Segmentation fault. st is undefined at that stage ;=== it would run fine if avoid was set to 1 ;IC: I think the segmentation fault comes from the fact that the user wants to use models that have the /pol keyword in the GRAIN.DAT file without being in polarization mode. dustem_run_plugins, p_dim ,param_descs, param_values, param_func, ['*STELLAR*','*ISRF*'] ,dustem_run=1,st=st ;dustem output is available at this step. ;added this small condition to ensure that dustem is run ;(if no ISRF plugin is used) ; if ~isa(st) then begin ; st=dustem_run(p_dim) ; !dustem_current=ptr_new(st) ; endif ;THE ABOVE CONDITION IS UNNECESSARY SINCE DUSTEM IS CALLED ABOVE WHETHER PLUGINS ARE RUN OR NOT. dustem_run_plugins, p_dim ,param_descs, param_values, param_func, ['*REPLACE*'] the_end: END