def findPeaks(data,qData,initialGuess,numberOfChi,stddev,verbose=1): if numberOfChi <=1: raise Exception("This program must look for at least 2 chi slices.") chiUpper = 360.0 chiLower = 0.11 # the -1 allows for us to include chiLower & chiUpper in our count chiStep = (chiUpper-chiLower)*1.0/(numberOfChi-1) peakList = [] if verbose: print ' - %d total Q values. Calculating peaks for Q =' % (len(qData.getAllQPairs())), for Q,dQ in qData.getAllQPairs(): if verbose: print ' %f' % Q, for chi in frange(chiLower,chiUpper,chiStep): try: x,y,qFit,width=FitWrap.getPeak(data,stddev,initialGuess.getCenterX()['val'], initialGuess.getCenterY()['val'],initialGuess.getDistance()['val'], initialGuess.getEnergy()['val'],initialGuess.getAlpha()['val'], initialGuess.getBeta()['val'],initialGuess.getRotation()['val'],Q-dQ,Q+dQ,chi, initialGuess.getPixelLength()['val'],initialGuess.getPixelHeight()['val']) peakList.append([x,y,Q,qFit,chi,width]) except ValueError: # this means no peak found pass print return peakList
def getPeakList(data, qData, initialGuess, numberOfChi, stddev, verbose=1): if numberOfChi <= 1: raise Exception("This program must look for at least 2 chi slices.") chiUpper = 360.0 chiLower = 0.11 # the -1 allows for us to include chiLower & chiUpper in our count chiStep = (chiUpper - chiLower) * 1.0 / (numberOfChi - 1) peakList = PeakList.PeakList() for Q, dQ in qData.getAllQPairs(): for chi in frange(chiLower, chiUpper, chiStep): try: x, y, qFit, width = FitWrap.getPeak( data, stddev, initialGuess.getCenterX()['val'], initialGuess.getCenterY()['val'], initialGuess.getDistance()['val'], initialGuess.getEnergy()['val'], initialGuess.getAlpha()['val'], initialGuess.getBeta()['val'], initialGuess.getRotation()['val'], Q - dQ, Q + dQ, chi, initialGuess.getPixelLength()['val'], initialGuess.getPixelHeight()['val']) peakList.addPeak(x, y, Q, qFit, chi, width) except ValueError: # this means no peak found pass return peakList
def fit(data,initialGuess,peakList,maskedPixelInfo,verbose=1): # create nice Numeric data structures to store all of # the peak stuff in. This lets us read our data easily # once we get into C xValues,yValues,qReal,chi,width,intensity = peakList.getMaskedPeakArrays(maskedPixelInfo,data) # make C do the hard work :) centerX,centerY,distance,energy,alpha,beta,rotation, \ covariance,initialResidual,finalResidual, \ reasonForQuitting = FitWrap.fitCalibrationParameters( xValues,yValues,qReal,intensity, initialGuess.getCenterX()['val'], initialGuess.getCenterX()['fixed'], initialGuess.getCenterY()['val'], initialGuess.getCenterY()['fixed'], initialGuess.getDistance()['val'], initialGuess.getDistance()['fixed'], initialGuess.getEnergy()['val'], initialGuess.getEnergy()['fixed'], initialGuess.getAlpha()['val'], initialGuess.getAlpha()['fixed'], initialGuess.getBeta()['val'], initialGuess.getBeta()['fixed'], initialGuess.getRotation()['val'], initialGuess.getRotation()['fixed'], initialGuess.getPixelLength()['val'], initialGuess.getPixelHeight()['val']) # add the fit data to a new calibration file bestGuess = CalibrationData.CalibrationData() bestGuess.setCenterX(centerX, fixed = initialGuess.getCenterX()['fixed'] ) bestGuess.setCenterY(centerY, fixed = initialGuess.getCenterY()['fixed'] ) bestGuess.setDistance(distance, fixed = initialGuess.getDistance()['fixed'] ) bestGuess.setEnergy(energy, fixed = initialGuess.getEnergy()['fixed'] ) bestGuess.setAlpha(alpha, fixed = initialGuess.getAlpha()['fixed'] ) bestGuess.setBeta(beta, fixed = initialGuess.getBeta()['fixed'] ) bestGuess.setRotation(rotation, fixed = initialGuess.getRotation()['fixed'] ) # pixel length & height don't change bestGuess.setPixelLength(initialGuess.getPixelLength()['val']) bestGuess.setPixelHeight(initialGuess.getPixelHeight()['val']) return bestGuess,peakList,covariance,initialResidual,finalResidual,reasonForQuitting
def fit(data, initialGuess, peakList, maskedPixelInfo, verbose=1): # create nice Numeric data structures to store all of # the peak stuff in. This lets us read our data easily # once we get into C xValues, yValues, qReal, chi, width, intensity = peakList.getMaskedPeakArrays( maskedPixelInfo, data) # make C do the hard work :) centerX,centerY,distance,energy,alpha,beta,rotation, \ covariance,initialResidual,finalResidual, \ reasonForQuitting = FitWrap.fitCalibrationParameters( xValues,yValues,qReal,intensity, initialGuess.getCenterX()['val'], initialGuess.getCenterX()['fixed'], initialGuess.getCenterY()['val'], initialGuess.getCenterY()['fixed'], initialGuess.getDistance()['val'], initialGuess.getDistance()['fixed'], initialGuess.getEnergy()['val'], initialGuess.getEnergy()['fixed'], initialGuess.getAlpha()['val'], initialGuess.getAlpha()['fixed'], initialGuess.getBeta()['val'], initialGuess.getBeta()['fixed'], initialGuess.getRotation()['val'], initialGuess.getRotation()['fixed'], initialGuess.getPixelLength()['val'], initialGuess.getPixelHeight()['val']) # add the fit data to a new calibration file bestGuess = CalibrationData.CalibrationData() bestGuess.setCenterX(centerX, fixed=initialGuess.getCenterX()['fixed']) bestGuess.setCenterY(centerY, fixed=initialGuess.getCenterY()['fixed']) bestGuess.setDistance(distance, fixed=initialGuess.getDistance()['fixed']) bestGuess.setEnergy(energy, fixed=initialGuess.getEnergy()['fixed']) bestGuess.setAlpha(alpha, fixed=initialGuess.getAlpha()['fixed']) bestGuess.setBeta(beta, fixed=initialGuess.getBeta()['fixed']) bestGuess.setRotation(rotation, fixed=initialGuess.getRotation()['fixed']) # pixel length & height don't change bestGuess.setPixelLength(initialGuess.getPixelLength()['val']) bestGuess.setPixelHeight(initialGuess.getPixelHeight()['val']) return bestGuess, peakList, covariance, initialResidual, finalResidual, reasonForQuitting
def fit(data, initialGuess, peakList, verbose=1): print print 'Performing the image calibration' # create a nice Numeric data strucure to store all of the peak stuff in. # This lets us read our data easily once we get into C length = len(peakList) xValues = Numeric.zeros((length), Numeric.Float64) yValues = Numeric.zeros((length), Numeric.Float64) qReal = Numeric.zeros((length), Numeric.Float64) intensity = Numeric.zeros((length), Numeric.Float64) for peakIndex in range(len(peakList)): xPeak, yPeak, Qreal, Qfit, chi, width = peakList[peakIndex] xValues[peakIndex] = xPeak yValues[peakIndex] = yPeak qReal[peakIndex] = Qreal intensity[peakIndex] = data[int(xPeak)][int(yPeak)] # make C do the hard work :) centerX, centerY, distance, energy, alpha, beta, rotation, covariance = FitWrap.fitCalibrationParameters( xValues, yValues, qReal, intensity, initialGuess.getCenterX()['val'], initialGuess.getCenterX()['fixed'], initialGuess.getCenterY()['val'], initialGuess.getCenterY()['fixed'], initialGuess.getDistance()['val'], initialGuess.getDistance()['fixed'], initialGuess.getEnergy()['val'], initialGuess.getEnergy()['fixed'], initialGuess.getAlpha()['val'], initialGuess.getAlpha()['fixed'], initialGuess.getBeta()['val'], initialGuess.getBeta()['fixed'], initialGuess.getRotation()['val'], initialGuess.getRotation()['fixed'], initialGuess.getPixelLength()['val'], initialGuess.getPixelHeight()['val']) print 'Covariance Matrix' print Numeric.array2string(covariance, precision=2) print 'Root of the diagonal of the covariance matrix (I think these are uncertanties)' print 'xc: ', sqrt(covariance[0][0]) print 'yc: ', sqrt(covariance[1][1]) print 'd: ', sqrt(covariance[2][2]) print 'E: ', sqrt(covariance[3][3]) print 'alpha: ', sqrt(covariance[4][4]) print 'beta: ', sqrt(covariance[5][5]) print 'rotation: ', sqrt(covariance[6][6]) # add the fit data to a new calibration file ret = CalibrationData.CalibrationData() ret.setCenterX(centerX, fixed=initialGuess.getCenterX()['fixed']) ret.setCenterY(centerY, fixed=initialGuess.getCenterY()['fixed']) ret.setDistance(distance, fixed=initialGuess.getDistance()['fixed']) ret.setEnergy(energy, fixed=initialGuess.getEnergy()['fixed']) ret.setAlpha(alpha, fixed=initialGuess.getAlpha()['fixed']) ret.setBeta(beta, fixed=initialGuess.getBeta()['fixed']) ret.setRotation(rotation, fixed=initialGuess.getRotation()['fixed']) # pixel length & height don't change ret.setPixelLength(initialGuess.getPixelLength()['val']) ret.setPixelHeight(initialGuess.getPixelHeight()['val']) return ret, peakList
def fit(data,initialGuess,peakList,verbose=1): print print 'Performing the image calibration' # create a nice Numeric data strucure to store all of the peak stuff in. # This lets us read our data easily once we get into C length = len(peakList) xValues = Numeric.zeros( (length), Numeric.Float64 ) yValues = Numeric.zeros( (length), Numeric.Float64 ) qReal = Numeric.zeros( (length), Numeric.Float64 ) intensity = Numeric.zeros( (length), Numeric.Float64 ) for peakIndex in range(len(peakList)): xPeak,yPeak,Qreal,Qfit,chi,width = peakList[peakIndex] xValues[peakIndex] = xPeak yValues[peakIndex] = yPeak qReal[peakIndex] = Qreal intensity[peakIndex] = data[int(xPeak)][int(yPeak)] # make C do the hard work :) centerX,centerY,distance,energy,alpha,beta,rotation,covariance = FitWrap.fitCalibrationParameters( xValues,yValues,qReal,intensity, initialGuess.getCenterX()['val'], initialGuess.getCenterX()['fixed'], initialGuess.getCenterY()['val'], initialGuess.getCenterY()['fixed'], initialGuess.getDistance()['val'], initialGuess.getDistance()['fixed'], initialGuess.getEnergy()['val'], initialGuess.getEnergy()['fixed'], initialGuess.getAlpha()['val'], initialGuess.getAlpha()['fixed'], initialGuess.getBeta()['val'], initialGuess.getBeta()['fixed'], initialGuess.getRotation()['val'], initialGuess.getRotation()['fixed'], initialGuess.getPixelLength()['val'], initialGuess.getPixelHeight()['val']) print 'Covariance Matrix' print Numeric.array2string(covariance,precision=2) print 'Root of the diagonal of the covariance matrix (I think these are uncertanties)' print 'xc: ',sqrt(covariance[0][0]) print 'yc: ',sqrt(covariance[1][1]) print 'd: ',sqrt(covariance[2][2]) print 'E: ',sqrt(covariance[3][3]) print 'alpha: ',sqrt(covariance[4][4]) print 'beta: ',sqrt(covariance[5][5]) print 'rotation: ',sqrt(covariance[6][6]) # add the fit data to a new calibration file ret = CalibrationData.CalibrationData() ret.setCenterX(centerX, fixed = initialGuess.getCenterX()['fixed'] ) ret.setCenterY(centerY, fixed = initialGuess.getCenterY()['fixed'] ) ret.setDistance(distance, fixed = initialGuess.getDistance()['fixed'] ) ret.setEnergy(energy, fixed = initialGuess.getEnergy()['fixed'] ) ret.setAlpha(alpha, fixed = initialGuess.getAlpha()['fixed'] ) ret.setBeta(beta, fixed = initialGuess.getBeta()['fixed'] ) ret.setRotation(rotation, fixed = initialGuess.getRotation()['fixed'] ) # pixel length & height don't change ret.setPixelLength(initialGuess.getPixelLength()['val']) ret.setPixelHeight(initialGuess.getPixelHeight()['val']) return ret,peakList