Ejemplo n.º 1
0
    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)
Ejemplo n.º 3
0
 #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)
Ejemplo n.º 4
0
    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()