dustem_make_polarization_sed_example.pro 4.28 KB
PRO dustem_make_polarization_sed_example,model=model,help=help

;+
; NAME:
;    dustem_make_polarization_sed_example
; PURPOSE:
;    This is an example of how to generate an SED using dustemwrap.
;    It is meant to be an example to follow when writing your own
;    programs using the dustem IDL/GDL wrapper.
; CATEGORY:
;    Dustem
; CALLING SEQUENCE:
;    dustem_make_polarization_sed_example[,model=][,/help]
; INPUTS:
;    None
; OPTIONAL INPUT PARAMETERS:
;    None
; OUTPUTS:
;    None
; OPTIONAL OUTPUT PARAMETERS:
;    None
; ACCEPTED KEY-WORDS:
;    model     = if set, name of the Dustem dust model to use (default='G17_MODELC')
;    help      = If set print this help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    None
; RESTRICTIONS:
;    The dustem idl wrapper must be installed
; PROCEDURE:
;    None
; EXAMPLES
;    dustem_fit_sed_polsed_readme
; MODIFICATION HISTORY:
;    Written by J.P. Bernard June 29th 2011
;    see evolution details on the dustem cvs maintained at CESR
;    Contact J.-Ph. Bernard (Jean-Philippe.Bernard@cesr.fr) in case of problems.
;-

IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_fit_sed_polsed_readme'
  goto,the_end
ENDIF

dustem_define_la_common

;=== initialise dustem
;dustem_init,mode='COMPIEGNE_ETAL2010',/pol

;use_mode='G17_MODELA'

use_mode='G17_MODELC'
dustem_init,mode=use_mode,kwords=['logn-chrg-spin','plaw-pol','plaw-pol'],/pol

!dustem_verbose=1
!dustem_show_plot=1
!dustem_nocatch=1

filters=['IRAS1','IRAS2','IRAS3','IRAS4','PACS3','SPIRE1','SPIRE2','SPIRE3','HFI2','HFI3','HFI4','HFI5','HFI6','LFI1','LFI2','LFI3']
Nfilt=n_elements(filters)
sed=dustem_initialize_sed(Nfilt)
sed.filter=filters
sed.wave=dustem_filter2wav(filters)
sed.instru=dustem_filter2instru(filters)

;INITIALIZING IQU and associated errors to avoid problems when checking SED in dustem_set_data.pro
sed[*].StokesI=1.
sed.StokesQ=sed.StokesI/100.
sed.StokesU=sed.StokesI/100.
sed.SigmaII=sed.StokesI/100.
sed.SigmaQQ=sed.StokesI/100.
sed.SigmaUU=sed.StokesI/100.
sed.SigmaIQ=sed.StokesI/100.
sed.SigmaIU=sed.StokesI/100.
sed.SigmaQU=sed.StokesI/100.

;INITIALIZING THE !dustem_data tags that will be internally used 
dustem_set_data,sed

help,!dustem_data

;=== Set which model parameters to use for the SED
pd = [ $
             '(*!dustem_params).G0', $      ;G0
             '(*!dustem_params).grains(0).mdust_o_mh',$  ;PAH0 mass fraction
             '(*!dustem_params).grains(1).mdust_o_mh',$  ;PAH0 mass fraction   
             '(*!dustem_params).grains(2).mdust_o_mh', $    ;PAH1 mass fraction
             'dustem_plugin_modify_dust_pol_1', $    ;This will set the polarization fraction
             'dustem_plugin_modify_dust_pol_2'  $     ;This will set the polarization angle
              ]                   
p_truth=[1.,7.8000E-04,7.8000E-04,7.8000E-04,1.,45.]

;pd = [ $
;             '(*!dustem_params).G0', $      ;G0
;             '(*!dustem_params).grains(0).mdust_o_mh',$  ;PAH0 mass fraction
;             '(*!dustem_params).grains(1).mdust_o_mh',$  ;PAH0 mass fraction   
;             '(*!dustem_params).grains(2).mdust_o_mh' $    ;PAH1 mass fraction
;             ]                   
;p_truth=[1.,7.8000E-04,7.8000E-04,7.8000E-04]

;iv=p_truth+[0.,8.e-4,8.e-4,8.e-4]      ;shifted from solution
iv=p_truth

Npar=n_elements(pd)  
ulimed=replicate(0,Npar)
llimed=replicate(1,Npar)
llims=replicate(0,Npar)

dustem_init_parinfo,pd,iv,up_limited=ulimed,lo_limited=llimed,up_limits=ulims,lo_limits=llims
dustem_init_plugins,pd

;Here fortran fails when pluggins are activated and/or type-keywods exist
dustem_Ised=dustem_compute_sed(p_truth,ssti)   ;sst is not set on purpose, for dustem_compute_sed to compute the sed using fortran code
toto=dustem_compute_stokes(p_truth,sstqu,dustem_Qsed,dustem_Used) ;this procedure also allows for the extraction of the spectra
;toto=dustem_compute_stokes(p_dim,st,dustem_qsed,dustem_used,Q_spec,U_spec,PSI_spec,dustem_psi_em,out_st=out_st,_extra=extra)

stop
toto=dustem_plugin_modify_dust_pol(ssti, key=key, val=val, scope=scope, paramtag=paramtag, help=help)

print,dustem_Qsed,dustem_Used
print,toto[*,1],toto[*,2]

sed.StokesI=dustem_Ised
sed.sigmaII=abs(sed.StokesI*0.000001)

sed.StokesQ=dustem_qsed
sed.sigmaQQ=abs(sed.StokesQ*0.000001)

sed.StokesU=dustem_used
sed.sigmaUU=abs(sed.StokesU*0.000001)

message,'Fake polarization SED has been set',/continue

stop

the_end:

END