function generic_phase,ssa,cva_deck,sza,params,type=type,get_type=get_type types=["Mie","T-Matrix","HG","MHG","Mie with geometry factor"] if keyword_set(get_type) then begin return,types end if size(type,/type) eq size('abc',/type) then begin ;It's a string, use it directly typei=type end else begin ;Look up the index in the types array typei=types[type] end case typei of "Rayleigh": return,rayleigh_phase(ssa) ;No extra params. Rayleigh is not on the list, ;so you have to specifically ask for it by name. ;You should just call rayleigh_phase directly in ;most cases. types[0]: return,mie_phase(ssa,params) ;params is a scalar particle radius types[1]: message,"T-Matrix not yet implemented" types[2]: return,hg_phase(ssa,params) ;params is scalar chi parameter types[3]: return,mhg_phase(ssa,params) ;params is scalar chi parameter types[4]: return,mie_phase(ssa,params)*geometry_factor(ssa,cva_deck,sza) ;Same params as Mie end end