416 lines
11 KiB
Plaintext
416 lines
11 KiB
Plaintext
if [1].EQ.'?' .OR. [1].EQ.' ' then
|
|
mess '==============================================================================='
|
|
mess 'FIT_PREC IDLeft B fromFit toFit t0'
|
|
mess
|
|
mess 'Kumac to fit the GEANT simulated decay spectra of L,T,R,B.'
|
|
mess 'If IDleft is given, then it is assumed that'
|
|
mess ' IDtop = IDleft+2,'
|
|
mess ' IDright = IDleft+3,'
|
|
mess ' IDbottom = IDleft+4.'
|
|
mess
|
|
mess 'B : magnetic field in gauss'
|
|
mess 'fromFit : lower boundary for fit'
|
|
mess 'toFit : upper boundary for fit'
|
|
mess 't0 : time zero'
|
|
mess
|
|
mess '==============================================================================='
|
|
exitm
|
|
endif
|
|
*
|
|
*===========================================================================
|
|
current = $hcdir()
|
|
|
|
fitopt = 'bl0' | fit option b=parameters with boundaries
|
|
| l=log likelihood fit (Poisson stat.)
|
|
| 0=do not plot fit result
|
|
|
|
* define Histo ID's
|
|
|
|
idl = [1]
|
|
idt = [idl]+2
|
|
idr = [idl]+3
|
|
idb = [idl]+4
|
|
*
|
|
* check if histograms exist in PAW memory
|
|
*
|
|
cd //pawc
|
|
|
|
if ( $hexist([idl]) .eq. 0 ) then
|
|
mess
|
|
mess Did not found Left histogram ID [idl]
|
|
mess
|
|
exitm
|
|
endif
|
|
if ( $hexist([idt]) .eq. 0 ) then
|
|
mess
|
|
mess Did not found Top histogram ID [idt]
|
|
mess
|
|
exitm
|
|
endif
|
|
if ( $hexist([idr]) .eq. 0 ) then
|
|
mess
|
|
mess Did not found Right histogram ID [idr]
|
|
mess
|
|
exitm
|
|
endif
|
|
if ( $hexist([idb]) .eq. 0 ) then
|
|
mess
|
|
mess Did not found Bottom histogram ID [idb]
|
|
mess
|
|
exitm
|
|
endif
|
|
|
|
shift
|
|
|
|
* transfer magnetic field strength:
|
|
|
|
B = [1]
|
|
|
|
* get region of histo to be used for fit:
|
|
|
|
if ($index([2],'.').NE.0) then
|
|
von = $rsigma([2])
|
|
else
|
|
von = [2]
|
|
endif
|
|
if ($index([3],'.').NE.0) then
|
|
bis = $rsigma([3])
|
|
else
|
|
bis = [3]
|
|
endif
|
|
|
|
* get rebinning factor and fit options:
|
|
|
|
t0 = [4]
|
|
|
|
if ( [t0] .eq. ' ' .or. [t0] .eq. '!' ) then
|
|
mess
|
|
mess Missing time zero !
|
|
mess
|
|
exitm
|
|
endif
|
|
if ( $vexist(tzero) ) then
|
|
v/de tzero
|
|
endif
|
|
v/cre tzero(1)
|
|
v/inp tzero(1) [t0]
|
|
|
|
* check if added histos are to be used and read in histos:
|
|
|
|
* do the fits:
|
|
|
|
freq = [B] * 0.013554 | precession frequency in MHz
|
|
freqmin = 0.8*[freq]
|
|
freqmax = 1.2*[freq]
|
|
freqstep = 0.005*[freq]
|
|
*
|
|
if ( $vexist(par) ) then
|
|
v/de par
|
|
endif
|
|
if ( $vexist(pmin) ) then
|
|
v/de pmin
|
|
endif
|
|
if ( $vexist(pmax) ) then
|
|
v/de pmax
|
|
endif
|
|
if ( $vexist(step) ) then
|
|
v/de step
|
|
endif
|
|
if ( $vexist(errpar) ) then
|
|
v/de errpar
|
|
endif
|
|
*
|
|
*
|
|
*
|
|
* BKG N0 Asym mu+ freq. Phase tau_mu lambda
|
|
* =======================================================
|
|
*
|
|
* v/cre par(7) r 0. 500. 0.25 0. 0. 2.19703 0.
|
|
* v/cre pmin(7) r -10. 0. 0. 0. -400. 0. 0.
|
|
* v/cre pmax(7) r 100. 10000. 0.60 0. +400. 3. 100.
|
|
* v/cre step(7) r 0. 10. 0.01 0. 5. 0. 0.
|
|
* v/cre errpar(7) r 1. 1. 1. 1. 1. 1. 1.
|
|
v/cre par(6) r 0. 500. 0.25 [freq] 90. 2.19703
|
|
v/cre pmin(6) r -10. 0. 0. [freqmin] -400. 0.
|
|
v/cre pmax(6) r 100. 10000. 0.40 [freqmax] +400. 3.
|
|
v/cre step(6) r 0. 10. 0.01 [freqstep] 5. 0.
|
|
v/cre errpar(6) r 0. 1. 1. 1. 1. 0.
|
|
|
|
*
|
|
tdec0 = tzero(1) | vector tzero filled in FIT_PREC.KUMAC
|
|
ttt = Fit from [von] to [bis], t0 = [tdec0]
|
|
* title [ttt]
|
|
*
|
|
*
|
|
hi/fit [idl]([von]:[bis]) fit_prec.for [fitopt] 6 par step pmin pmax errpar
|
|
*
|
|
* store fit result and error for A_Left, frequency and relaxation rate
|
|
*
|
|
a_l = par(3)
|
|
a_lerr = errpar(3)
|
|
a_l_weight = [a_l]/([a_lerr]*[a_lerr])
|
|
inv_a_lerr = 1./([a_lerr]*[a_lerr])
|
|
f_l = par(4)
|
|
f_lerr = errpar(4)
|
|
f_l_weight = [f_l]/([f_lerr]*[f_lerr])
|
|
inv_f_lerr = 1./([f_lerr]*[f_lerr])
|
|
* r_l = par(7)
|
|
* r_lerr = errpar(7)
|
|
* r_l_weight = [r_l]/([r_lerr]*[r_lerr])
|
|
* inv_r_lerr = 1./([r_lerr]*[r_lerr])
|
|
*
|
|
* if ( [opt] .eq. 'strexp' ) then
|
|
* beta_l = par(8)
|
|
* beta_lerr = errpar(8)
|
|
* beta_l_weight = [beta_l]/([beta_lerr]*[beta_lerr])
|
|
* inv_beta_lerr = 1./([beta_lerr]*[beta_lerr])
|
|
* endif
|
|
*
|
|
*
|
|
* initialize the phase for the top detector
|
|
*
|
|
phase = par(5)
|
|
phase = [phase]+90.
|
|
v/inp par(5) [phase]
|
|
hi/fit [idt]([von]:[bis]) fit_prec.for [fitopt] 6 par step pmin pmax errpar
|
|
*
|
|
* store fit result and error for A_top
|
|
*
|
|
a_t = par(3)
|
|
a_terr = errpar(3)
|
|
a_t_weight = [a_t]/([a_terr]*[a_terr])
|
|
inv_a_terr = 1./([a_terr]*[a_terr])
|
|
f_t = par(4)
|
|
f_terr = errpar(4)
|
|
f_t_weight = [f_t]/([f_terr]*[f_terr])
|
|
inv_f_terr = 1./([f_terr]*[f_terr])
|
|
* r_t = par(7)
|
|
* r_terr = errpar(7)
|
|
* r_t_weight = [r_t]/([r_terr]*[r_terr])
|
|
* inv_r_terr = 1./([r_terr]*[r_terr])
|
|
*
|
|
* if ( [opt] .eq. 'strexp' ) then
|
|
* beta_t = par(8)
|
|
* beta_terr = errpar(8)
|
|
* beta_t_weight = [beta_t]/([beta_terr]*[beta_terr])
|
|
* inv_beta_terr = 1./([beta_terr]*[beta_terr])
|
|
* endif
|
|
*
|
|
*
|
|
*
|
|
* initialize the phase for the right detector
|
|
*
|
|
phase = par(5)
|
|
phase = [phase]+90.
|
|
v/inp par(5) [phase]
|
|
hi/fit [idr]([von]:[bis]) fit_prec.for [fitopt] 6 par step pmin pmax errpar
|
|
|
|
* store fit result and error for A_right
|
|
*
|
|
a_r = par(3)
|
|
a_rerr = errpar(3)
|
|
a_r_weight = [a_r]/([a_rerr]*[a_rerr])
|
|
inv_a_rerr = 1./([a_rerr]*[a_rerr])
|
|
f_r = par(4)
|
|
f_rerr = errpar(4)
|
|
f_r_weight = [f_r]/([f_rerr]*[f_rerr])
|
|
inv_f_rerr = 1./([f_rerr]*[f_rerr])
|
|
* r_r = par(7)
|
|
* r_rerr = errpar(7)
|
|
* r_r_weight = [r_r]/([r_rerr]*[r_rerr])
|
|
* inv_r_rerr = 1./([r_rerr]*[r_rerr])
|
|
*
|
|
* if ( [opt] .eq. 'strexp' ) then
|
|
* beta_r = par(8)
|
|
* beta_rerr = errpar(8)
|
|
* beta_r_weight = [beta_r]/([beta_rerr]*[beta_rerr])
|
|
* inv_beta_rerr = 1./([beta_rerr]*[beta_rerr])
|
|
* endif
|
|
*
|
|
*
|
|
*
|
|
* initialize the phase for the bottom detector
|
|
*
|
|
phase = par(5)
|
|
phase = [phase]+90.
|
|
v/inp par(5) [phase]
|
|
hi/fit [idb]([von]:[bis]) fit_prec.for [fitopt] 6 par step pmin pmax errpar
|
|
*
|
|
* store fit result and error for A_bottom
|
|
*
|
|
a_b = par(3)
|
|
a_berr = errpar(3)
|
|
a_b_weight = [a_b]/([a_berr]*[a_berr])
|
|
inv_a_berr = 1./([a_berr]*[a_berr])
|
|
f_b = par(4)
|
|
f_berr = errpar(4)
|
|
f_b_weight = [f_b]/([f_berr]*[f_berr])
|
|
inv_f_berr = 1./([f_berr]*[f_berr])
|
|
* r_b = par(7)
|
|
* r_berr = errpar(7)
|
|
* r_b_weight = [r_b]/([r_berr]*[r_berr])
|
|
* inv_r_berr = 1./([r_berr]*[r_berr])
|
|
*
|
|
* if ( [opt] .eq. 'strexp' ) then
|
|
* beta_b = par(8)
|
|
* beta_berr = errpar(8)
|
|
* beta_b_weight = [beta_b]/([beta_berr]*[beta_berr])
|
|
* inv_beta_berr = 1./([beta_berr]*[beta_berr])
|
|
* endif
|
|
*
|
|
*
|
|
* plot result:
|
|
|
|
pics kum
|
|
set ysiz 25
|
|
zone 2 3
|
|
|
|
hi/pl [idl] e
|
|
hi/pl [idt] e
|
|
hi/pl [idr] e
|
|
hi/pl [idb] e
|
|
*
|
|
*--------------------------------
|
|
*
|
|
* calculate the weighted mean and the "inner" and "outer" standard deviation
|
|
* fo asymmetry
|
|
*
|
|
sum1 = [a_l_weight] + [a_t_weight] + [a_r_weight] + [a_b_weight]
|
|
sum2 = [inv_a_lerr] + [inv_a_terr] + [inv_a_rerr] + [inv_a_berr]
|
|
a_mean = [sum1]/[sum2]
|
|
in_a_mean = $sigma(sqrt(1./[sum2])) | inner standard deviation
|
|
*
|
|
* now calculate the outer standard deviation
|
|
*
|
|
dev_l = ([a_mean]-[a_l])*([a_mean]-[a_l])*[inv_a_lerr]
|
|
dev_t = ([a_mean]-[a_t])*([a_mean]-[a_t])*[inv_a_terr]
|
|
dev_r = ([a_mean]-[a_r])*([a_mean]-[a_r])*[inv_a_rerr]
|
|
dev_b = ([a_mean]-[a_b])*([a_mean]-[a_b])*[inv_a_berr]
|
|
sum3 = [dev_l] + [dev_t] + [dev_r] + [dev_b]
|
|
out_a_mean = $sigma(sqrt(1./3.*[sum3]/[sum2]))
|
|
*
|
|
*----------------------------------
|
|
*
|
|
* mean of frequency
|
|
*
|
|
sum1 = [f_l_weight] + [f_t_weight] + [f_r_weight] + [f_b_weight]
|
|
sum2 = [inv_f_lerr] + [inv_f_terr] + [inv_f_rerr] + [inv_f_berr]
|
|
f_mean = [sum1]/[sum2]
|
|
in_f_mean = $sigma(sqrt(1./[sum2])) | inner standard deviation
|
|
*
|
|
* no calculate the outer standard deviation
|
|
*
|
|
dev_l = ([f_mean]-[f_l])*([f_mean]-[f_l])*[inv_f_lerr]
|
|
dev_t = ([f_mean]-[f_t])*([f_mean]-[f_t])*[inv_f_terr]
|
|
dev_r = ([f_mean]-[f_r])*([f_mean]-[f_r])*[inv_f_rerr]
|
|
dev_b = ([f_mean]-[f_b])*([f_mean]-[f_b])*[inv_f_berr]
|
|
sum3 = [dev_l] + [dev_t] + [dev_r] + [dev_b]
|
|
out_f_mean = $sigma(sqrt(1./3.*[sum3]/[sum2]))
|
|
*
|
|
*--------------------------------------
|
|
*
|
|
* mean of relaxation
|
|
*
|
|
* sum1 = [r_l_weight] + [r_t_weight] + [r_r_weight] + [r_b_weight]
|
|
* sum2 = [inv_r_lerr] + [inv_r_terr] + [inv_r_rerr] + [inv_r_berr]
|
|
* r_mean = [sum1]/[sum2]
|
|
* in_r_mean = $sigma(sqrt(1./[sum2])) | inner standard deviation
|
|
*
|
|
* no calculate the outer standard deviation
|
|
*
|
|
* dev_l = ([r_mean]-[r_l])*([r_mean]-[r_l])*[inv_r_lerr]
|
|
* dev_t = ([r_mean]-[r_t])*([r_mean]-[r_t])*[inv_r_terr]
|
|
* dev_r = ([r_mean]-[r_r])*([r_mean]-[r_r])*[inv_r_rerr]
|
|
* dev_b = ([r_mean]-[r_b])*([r_mean]-[r_b])*[inv_r_berr]
|
|
* sum3 = [dev_l] + [dev_t] + [dev_r] + [dev_b]
|
|
* out_r_mean = $sigma(sqrt(1./3.*[sum3]/[sum2]))
|
|
*
|
|
* mean of stretched exponent
|
|
*
|
|
*
|
|
* if ( [opt] .eq. 'strexp' ) then
|
|
* sum1 = [beta_l_weight] + [beta_t_weight] + [beta_r_weight] + [beta_b_weight]
|
|
* sum2 = [inv_beta_lerr] + [inv_beta_terr] + [inv_beta_rerr] + [inv_beta_berr]
|
|
* beta_mean = [sum1]/[sum2]
|
|
* in_beta_mean = $sigma(sqrt(1./[sum2])) | inner standard deviation
|
|
*
|
|
* no calculate the outer standard deviation
|
|
*
|
|
* dev_l = ([beta_mean]-[beta_l])*([beta_mean]-[beta_l])*[inv_beta_lerr]
|
|
* dev_t = ([beta_mean]-[beta_t])*([beta_mean]-[beta_t])*[inv_beta_terr]
|
|
* dev_r = ([beta_mean]-[beta_r])*([beta_mean]-[beta_r])*[inv_beta_rerr]
|
|
* dev_b = ([beta_mean]-[beta_b])*([beta_mean]-[beta_b])*[inv_beta_berr]
|
|
* sum3 = [dev_l] + [dev_t] + [dev_r] + [dev_b]
|
|
* out_beta_mean = $sigma(sqrt(1./3.*[sum3]/[sum2]))
|
|
*
|
|
* endif
|
|
*
|
|
*----------------------------------------
|
|
*
|
|
* output fit parameter definitions to text window:
|
|
|
|
mess
|
|
mess 'par(1): Background [1]'
|
|
mess 'par(2): normalization [1]'
|
|
mess 'par(3): asymmetry [1]'
|
|
mess 'par(4): frequency [MHz]'
|
|
mess 'par(5): phase [degree]'
|
|
mess 'par(6): muon lifetime [microSec]'
|
|
mess 'par(7): relaxation [1/microSec]'
|
|
mess
|
|
mess
|
|
mess A = [a_mean]
|
|
mess A_err_in = [in_a_mean]
|
|
mess A_err_out = [out_a_mean]
|
|
mess
|
|
mess Freq. = [f_mean]
|
|
mess F_err_in = [in_f_mean]
|
|
mess F_err_out = [out_f_mean]
|
|
mess
|
|
* mess Relax. = [r_mean]
|
|
* mess r_err_in = [in_r_mean]
|
|
* mess r_err_out = [out_r_mean]
|
|
* mess
|
|
* if ( [opt] .eq. 'strexp' ) then
|
|
* mess
|
|
* mess Beta = [beta_mean]
|
|
* mess Beta_err_in = [in_beta_mean]
|
|
* mess Beta_err_out = [out_beta_mean]
|
|
* mess
|
|
* endif
|
|
|
|
* output to graphics window (quick and dirty)
|
|
v/cre x(2) r 0 10
|
|
v/cre y(2) r 0 10
|
|
set xtic 0.0001
|
|
set ytic 0.0001
|
|
set vsiz 0.0001
|
|
zone 1 3 3 s
|
|
graph 2 x y w
|
|
*
|
|
asym = $format([a_mean],F8.4)
|
|
in_err = $format([in_a_mean],F7.4)
|
|
out_err = $format([out_a_mean],F7.4)
|
|
*
|
|
text 1 8 'A = '//[asym]//'+-'//[in_err]//'+-'//[out_err] 0.4
|
|
*
|
|
freq = $format([f_mean],F8.5)
|
|
in_err = $format([in_f_mean],F7.5)
|
|
out_err = $format([out_f_mean],F7.5)
|
|
*
|
|
app = ' MHz'
|
|
text 1 5 '[n] = '//[freq]//'+-'//[in_err]//'+-'//[out_err]//[app] 0.4
|
|
|
|
|
|
* restore previous settings:
|
|
|
|
cd [current]
|
|
zone
|
|
* title ' '
|
|
set xtic
|
|
set ytic
|
|
set vsiz
|
|
set ysiz
|
|
set xsiz
|
|
|