Blame view

src/idl/dustem_init_parinfo.pro 2.08 KB
427f1205   Jean-Michel Glorian   version 4.2 merged
1
2
3
4
5
PRO dustem_init_parinfo,pd,iv, $
                        fixed=fixed,tied=tied, $
                        up_limited=up_limited,lo_limited=lo_limited,up_limits=up_limits,lo_limits=lo_limits, $
                        relstep=relstep,step=step

b5ccb706   Jean-Philippe Bernard   improved to fit p...
6
(*!dustem_fit).param_descs=ptr_new(pd)
452c334e   Ilyes Choubani   Implementation Of...
7

b5ccb706   Jean-Philippe Bernard   improved to fit p...
8
9
(*!dustem_fit).param_init_values=ptr_new(iv)
;stop
427f1205   Jean-Michel Glorian   version 4.2 merged
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
dustem_set_func_ind,pd,iv


one_parinfo={value:0.D0, fixed:0, limited:[0,0], limits:[0.D0,0], parname:'', relstep:0., step:0., mpside:0, tied:''}
Npar=n_elements(pd)
dustem_parinfo=replicate(one_parinfo,Npar)
FOR i=0L,Npar-1 DO BEGIN
;  dustem_parinfo[i].value=iv(i)/(*!init_value)(i)
  dustem_parinfo[i].value=iv(i)/(*(*!dustem_fit).param_init_values)(i)
  IF keyword_set(fixed) THEN dustem_parinfo[i].fixed=fixed[i]
  dustem_parinfo[i].limited[0]=0
  dustem_parinfo[i].limited[1]=0
  dustem_parinfo[i].limits[0]=0.
  dustem_parinfo[i].limits[1]=0.
  dustem_parinfo[i].parname=pd[i]
  IF keyword_set(relstep) THEN dustem_parinfo[i].relstep=relstep[i]
  IF keyword_set(step) THEN dustem_parinfo[i].step=step[i]
  dustem_parinfo[i].mpside=0
  IF keyword_set(tied) THEN dustem_parinfo[i].tied=tied[i]
ENDFOR

IF keyword_set(up_limited) THEN BEGIN
  ind=where(up_limited EQ 1,countup)
  IF countup EQ 0 THEN goto,suite1
  IF NOT keyword_set(up_limits) THEN BEGIN
607060e5   Ilyes Choubani   test version
35
    message,'up_limits must be set with up_limited'
427f1205   Jean-Michel Glorian   version 4.2 merged
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    stop
  ENDIF
  IF countup NE 0 THEN BEGIN
    FOR i=0L,countup-1 DO BEGIN
      dustem_parinfo[ind(i)].limited[1]=1
      dustem_parinfo[ind(i)].limits[1]=up_limits[ind(i)]/(*(*!dustem_fit).param_init_values)(ind(i))
    ENDFOR
  ENDIF
ENDIF
suite1:
IF keyword_set(lo_limited) THEN BEGIN
  ind=where(lo_limited EQ 1,countlo)
  IF countlo EQ 0 THEN goto,suite2
  IF NOT keyword_set(lo_limits) THEN BEGIN
607060e5   Ilyes Choubani   test version
50
    message,'lo_limits must be set with lo_limited', /continue
427f1205   Jean-Michel Glorian   version 4.2 merged
51
52
53
54
55
56
57
58
59
60
61
62
63
64
    stop
  ENDIF
  IF countlo NE 0 THEN BEGIN
    FOR i=0L,countlo-1 DO BEGIN
      dustem_parinfo[ind(i)].limited[0]=1
      dustem_parinfo[ind(i)].limits[0]=lo_limits[ind(i)]/(*(*!dustem_fit).param_init_values)(ind(i))
    ENDFOR
  ENDIF
ENDIF
suite2:

defsysv,'!dustem_parinfo',ptr_new(dustem_parinfo)

END