Ejemplo n.º 1
0
	splitE=np.exp(np.linspace(np.log(ERange[0]),np.log(ERange[1]),n+1))[1:-1]
	splitE[1]=splitE[0]**(1-s**2)*splitE[3]**(s**2)
	splitE[2]=splitE[0]**(1-s**0.5)*splitE[3]**(s**0.5)
	print(splitE)
	conds.append(Flat(ERange,splitE=splitE).getCond(det))
	print conds[-1]
pl.subplot(111, xscale="linear", yscale="log")
pl.plot(ss,conds)
'''

spectrum=(CMSNeutrons.ERange, CMSNeutrons.fluence)
#spectrum=((1e-11,1e0),lambda e:testSpectrum.fluence((1e-11,2e-1),1e-3,1.5,2,0.9,e))

errorEstimate=True
print splitE
model=Flat(ERange,splitE=splitE)

resp=det(*spectrum)

print('Expected detector responses:')
for i in range(len(resp[0])):
	print((['No sphere']+milanoReference.names)[i]+' & %.1f'%resp[0][i]+' \\\\')

if errorEstimate:
	guess=[]
	x=[]
	for i in range(50):
		r=(np.array(resp[0])+[np.random.normal()*ri for ri in resp[1]],resp[1])
		x.append(unfold.unfold(det, r, model))
	errors=np.std(x,axis=0)
	x=np.mean(x,axis=0)
Ejemplo n.º 2
0
import unfold
import detector
from spectrumModel import Flat, Linear
import testSpectrum
import CMSNeutrons
import numpy as np

#spectrum=(CMSNeutrons.ERange, CMSNeutrons.fluence)
spectrum=((1e-11,1e0),lambda e:testSpectrum.fluence((1e-11,2e-1),1e-3,1.5,0,0.9,e))

errorEstimate=False
det=detector.cr39
modelForGuess = Flat((1e-12,1e0),4)
model = Linear((1e-12,1e0),4)           #This is were the assumption on spectrum shape is made


resp=det(*spectrum)

print('Expected detector responses:')
for r in resp[0]:
	print(str(r))


if errorEstimate:
	guess=[]
	x=[]
	for i in range(7):
		r=(np.array(resp[0])+[np.random.normal()*ri for ri in resp[1]],resp[1])
		guess.append(unfold.unfold(det, r, modelForGuess))
		x.append(unfold.unfold(det, r, model, guess=np.array(guess[-1])))
Ejemplo n.º 3
0
print('\\hline')
for i in range(len(det.order)):
	print(str(det.order[i])+' & $%.3g'%(simResp[0][i]/1e5)+'\\pm%.3g\cdot 10^5$'%(simResp[0][i]*0.1/1e5)+' &$ %.3g'%(resp[0][i]/1e5)+'\\pm %.3g\cdot 10^5$'%(resp[1][i]/1e5)+' \\\\')
	
#########################################Do unfolding################################	
#number of parameters in model
n=4

#energy range for model
ERange=(5e-13,3e0)

#first linear model, used for guess to nonlinear
#modelForGuess = Flat(ERange,splitE=optimizeFlat.optimize(det,ERange,n)) #use this instead for pptimized base function shapes
#modelForGuess = Flat(ERange,n) 
#second non-linear model, set to Flat also to get faster results, (or comment everywhere)
model = Flat(ERange,n)

guess=[]
x=[]
simx=[]
for i in range(50):
    r=(np.array(resp[0])+[np.random.normal()*ri for ri in resp[1]],resp[1])
    #guess.append([max(0,p) for p in unfold.unfold(det, r, modelForGuess)])
    x.append(unfold.unfold(det, r, model))
    r=(np.array(simResp[0])+[np.random.normal()*ri for ri in simResp[1]],simResp[1])
    simx.append(unfold.unfold(det, r, model))
#guessErrors=np.std(guess,axis=0)
errors=np.std(x,axis=0)
simerrors=np.std(simx,axis=0)
#guess=np.mean(guess,axis=0)
x=np.mean(x,axis=0)