superAmps=superFilteredData[superPeakDict['peakIndices']] print "amplitudes extracted" #fig=plt.figure() #plt.plot(template) #plt.hist(amps,100,alpha=.7) #plt.hist(superAmps,100,alpha=.7) #plt.show() ##### Find expected energy resolution of different filters ##### if False: isPlot=False isVerbose=False #make fake data rawData, rawTime = mAD.makePoissonData(totalTime=2*131.072e-3,amplitudes='random',maxSignalToNoise=10,isVerbose=isVerbose) rawData*=2 #make template finalTemplate, time , noiseSpectrumDict, _ , _ = mT.makeTemplate(rawData,nSigmaTrig=4.,numOffsCorrIters=2,isVerbose=isVerbose,isPlot=isPlot) #fit to arbitrary pulse shape fittedTemplate, startFit, riseFit, fallFit = mT.makeFittedTemplate(finalTemplate,time,riseGuess=3.e-6,fallGuess=55.e-6) #make matched filter matchedFilter=mF.makeMatchedFilter(fittedTemplate, noiseSpectrumDict['noiseSpectrum'], nTaps=50, tempOffs=75) superMatchedFilter=mF.makeSuperMatchedFilter(fittedTemplate, noiseSpectrumDict['noiseSpectrum'], fallFit, nTaps=50, tempOffs=75) #make more fake data rawData, rawTime = mAD.makePoissonData(totalTime=2*131.072e-3, rate =1./5e-3, amplitudes='constant',maxSignalToNoise=10,isVerbose=isVerbose) #filter data data=mT.hpFilter(rawData) #convolve with filter filteredData=np.convolve(data,matchedFilter,mode='same')
#Turn plotting on or off isPlot=False isPlotRes=True isPlotPoisson=False isPlotFit=False #Starting template values sampleRate=1e6 nPointsBefore=100. riseTime=2e-6 fallTime=50e-6 tmax=nPointsBefore/sampleRate t0=tmax+riseTime*np.log(riseTime/(riseTime+fallTime)) #get fake poissonian distributed pulse data rawdata, rawtime = mAD.makePoissonData(totalTime=2*131.072e-3,isVerbose=True) if isPlotPoisson: fig1=plt.figure(0) plt.plot(rawtime,rawdata) plt.show() #calculate templates finalTemplate, time , _, templateList, _ = mT.makeTemplate(rawdata,nSigmaTrig=4.,numOffsCorrIters=2,isVerbose=True,isPlot=isPlot) roughTemplate = templateList[0] #make fitted template fittedTemplate, startFit, riseFit, fallFit = mT.makeFittedTemplate(finalTemplate,time,riseGuess=3.e-6,fallGuess=55.e-6) #calculate real template realTemplate = mAD.makePulse(time,t0,riseTime,fallTime)
#Turn plotting on or off isPlot=False isPlotRes=True isPlotPoisson=False isPlotFit=False #Starting template values sampleRate=1e6 nPointsBefore=100. riseTime=2e-6 fallTime=50e-6 tmax=nPointsBefore/sampleRate t0=tmax+riseTime*np.log(riseTime/(riseTime+fallTime)) #get fake poissonian distributed pulse data rawdata, rawtime = mAD.makePoissonData(totalTime=2*131.072e-3,isVerbose=True,maxSignalToNoise=2) if isPlotPoisson: fig1=plt.figure(0) plt.plot(rawtime,rawdata) plt.show() #calculate templates finalTemplate, time , _, templateList, _ = mT.makeTemplate(rawdata,nSigmaTrig=4.,numOffsCorrIters=2,isVerbose=True,isPlot=isPlot) roughTemplate = templateList[0] #make fitted template fittedTemplate, startFit, riseFit, fallFit = mT.makeFittedTemplate(finalTemplate,time,riseGuess=3.e-6,fallGuess=55.e-6) #calculate real template realTemplate = mAD.makePulse(time,t0,riseTime,fallTime)
for peak in peakIndices: firCoeffs += makeCausalWiener(template, rawdata[peak-nPointsBefore:peak+nPointsAfter], nTaps) firCoeffs /= len(peakIndices) return firCoeffs if __name__=='__main__': testMatched = False testWiener = True if testMatched: #test makeMatchedFilter template = np.zeros(800) template[100:800] = 10.*np.exp(-np.arange(0,700)/30.) data,time = mAD.makePoissonData(totalTime=1000.e-3, maxSignalToNoise=0.0) noiseCov = noise.covFromData(data-np.mean(data), 100)['covMatrix'] plt.show() if testWiener: templateData, time = mAD.makePoissonData(totalTime=10*131.072e-3) finalTemplate, time, _,_,_ = mkt.makeTemplate(templateData) filterData, time = mAD.makePoissonData(totalTime=10*131.072e-3,maxSignalToNoise=10) #new data set for Wiener filter raw pulses _,_,_,_,peakIndices = mkt.makeTemplate(filterData) wienerFilt = makeAvgCausalWiener(finalTemplate, filterData, peakIndices) plt.plot(wienerFilt) plt.plot(finalTemplate) #plt.plot(filterData[peakIndices[0]-100:peakIndices[0]+800]/5) plt.show()