;+ ;NAME: barrel_sp_fitgrid3.pro ;DESCRIPTION: BARREL low-level spectral folding routine, method 3 ; ( two file-based spectral shapes, single drm) ; ;REQUIRED INPUTS: ;subspec background subtracted count spectrum, cts/keV ;subspecerr its error bars ;modelspec1 first spectral component (at all energies) ;modelspec2 second spectral component ;drm response matrix for correct payload altitude and chosen PID ; of electrons ;phmean energy bin centers for the photons dimension ;phwidth energy bin widths for the photons dimension ;usebins which energy channels to use in minimizing chisquare ;startnorm1 Starting value of normalization of 1st component ;startnorm2 Starting value of normalization of 2nd component ;points Number of points on each side of starting values to test ;scaling Range around the starting values to test -- for example, ; points=2 and scaling=1.5 means that the values tested are ; x/1.5, x/1.25, x, x*1.25, x*1.5 ; ;OPTIONAL INPUTS: ;none ; ;OUTPUTS: ;bestnorm1 best-fit value of the first normalization ;bestnorm2 best-fit value of the second normalization ;bestnorm1n array location of bestnorm1 ;bestnorm2n array location of bestnorm2 ;modvals1 values of the fit function at the centers of the energy bins (first component) ;modvals2 values of the fit function at the centers of the energy bins (second component) ;chiarray array of chi-square values ;bestchi lowest chi-square value ;norm1array array of first normalization parameter values ;norm2array array of second normalization parameter values ; ;CALLS: None. ; ;STATUS: Passed early test on artificial data ; ;TO BE ADDED: N/A ; ;REVISION HISTORY: ;First version with release 2.3, 8/26/12 ; 11/12/13 insist on only one value of bestparn, etc. ; ;- pro barrel_sp_fitgrid3, subspec, subspecerr, modelspec1, modelspec2, drm, phmean, phwidth, usebins, startnorm1,$ startnorm2, points, scaling, bestnorm1, bestnorm2, bestnorm1n, bestnorm2n, modvals1, modvals2, $ chiarray, bestchi, norm1array, norm2array ;Set up the vectors of values for parameters and normalizations: pts = 2*points + 1 norm1vector = [findgen(pts)-points]*scaling[0]/points*startnorm1 + startnorm1 norm2vector = [findgen(pts)-points]*scaling[1]/points*startnorm2 + startnorm2 ;Set up the output arrays: norm1array = fltarr(pts,pts) norm2array = fltarr(pts,pts) chiarray = fltarr(pts,pts) ;Initialize best chi-square as something awful: bestchi = 1.d10 ;Loop away! for j = 0, pts-1 do begin ;over normalization 1 foldvals1 = reform( (norm1vector[j]*modelspec1*phwidth) # drm) for i = 0, pts-1 do begin ;over normalization 2 foldvals2 = reform( (norm2vector[i]*modelspec2*phwidth) # drm) ;Test different normalizations against the data: norm1array[j,i] = norm1vector[j] norm2array[j,i] = norm2vector[i] chiarray[j,i] = total ( ( (subspec[usebins] - (foldvals1[usebins]+foldvals2[usebins])) / subspecerr[usebins] )^2 ) endfor endfor ;Find the best fit and set output parameters: bestchi = min(chiarray) w = (where(chiarray EQ bestchi))[0] bestnorm1 = norm1array[w] bestnorm2 = norm2array[w] bestnorm1n = (where(norm1vector EQ bestnorm1))[0] - points bestnorm2n = (where(norm2vector EQ bestnorm2))[0] - points modvals1 = bestnorm1 * reform( (modelspec1*phwidth) # drm) modvals2 = bestnorm2 * reform( (modelspec2*phwidth) # drm) end