def getParticleContrastFromMrc(mrcfile):
    apDisplay.printMsg("Particle contrast determination is experimental")
    if not os.path.isfile(mrcfile):
        apDisplay.printWarning(
            "Could not determine particle contrast, mrc file not found")
        return None
    rawimage = mrc.read(mrcfile)
    boxSize = min(rawimage.shape) - 1
    innerNoise = boxSize / 2 / 20  #one-twentieth the box radius
    particleRadius = boxSize / 2 / 3 + 1  #one-third the box radius
    outerLimit = boxSize / 2 * 0.9  # 90% of the box radius
    radialData, densityData = ctftools.rotationalAverage(rawimage, full=True)

    # find indices for radial values
    innerNoiseIndex = numpy.searchsorted(radialData, innerNoise)
    partRadIndex = numpy.searchsorted(radialData, particleRadius)
    outerLimitIndex = numpy.searchsorted(radialData, outerLimit)
    maxDiam = radialData[-1]

    innerVal = numpy.median(densityData[innerNoiseIndex:partRadIndex])
    outerVal = numpy.median(densityData[outerLimitIndex:])
    #print innerMean, outerMean, mrcfile

    if debug is True:
        print "%d:%d and %d:%d" % (innerNoiseIndex, partRadIndex,
                                   outerLimitIndex, densityData.shape[0])
        print "inner density %.1f <> outer density %.1f" % (innerVal, outerVal)
        from matplotlib import pyplot
        pyplot.plot(radialData, densityData, 'ko-')
        pyplot.xlabel('Pixel Radius')
        pyplot.ylabel('Density')
        xmin, xmax, ymin, ymax = pyplot.axis()
        pyplot.axhline(y=innerVal,
                       xmin=innerNoise / xmax,
                       xmax=particleRadius / xmax,
                       linewidth=2,
                       color="blue",
                       linestyle='-')
        #pyplot.axhline(y=innerVal, xmax=particleRadius, linewidth=2, color="cyan", linestyle='-')
        #print innerVal, radialData[1], particleRadius
        pyplot.axhline(y=outerVal,
                       xmin=outerLimit / xmax,
                       xmax=maxDiam / xmax,
                       linewidth=2,
                       color="orange",
                       linestyle='-')
        #pyplot.axhline(y=outerVal, xmax=maxDiam, linewidth=2, color="orange", linestyle='-')
        #print outerVal, outerLimit, maxDiam
        pyplot.grid(True)
        pyplot.show()

    if innerVal > outerVal:
        apDisplay.printMsg(
            "Contrast determined as WHITE particles on black background")
        return "whiteOnBlack"
    else:
        apDisplay.printMsg(
            "Contrast determined as BLACK particles on white background")
        print "BLACK on white", mrcfile
        return "blackOnWhite"
	def from2Dinto1D(self, fftarray):
		if self.params['astig'] is False and self.ellipseParams is None:
			### simple case: do a rotational average
			pixelrdata, PSDarray = ctftools.rotationalAverage(fftarray, self.params['ringwidth'], full=False)
			return self.removeBlackCenter(pixelrdata*self.freq, PSDarray)

		if self.ellipseParams is None:
			### hard case: find ellipse and do a elliptical average
			blurArray = copy.deepcopy(fftarray)
			for blurIter in range(2):
				### each time the image is blurred more
				blurArray = self.rotationBlur(blurArray, angle=1, numIter=3)
			self.findEllipseEdge(blurArray)
			if self.ellipseParams is None:
				apDisplay.printWarning("Failed to find ellipse, continuing with no astig")
				pixelrdata, PSDarray = ctftools.rotationalAverage(fftarray, self.params['ringwidth'], full=False)
				return self.removeBlackCenter(pixelrdata*self.freq, PSDarray)

		ellipratio = self.ellipseParams['a']/self.ellipseParams['b']
		ellipangle = math.degrees(self.ellipseParams['alpha'])
		pixelrdata, PSDarray = ctftools.ellipticalAverage(fftarray, ellipratio, ellipangle, 
			self.params['ringwidth'], full=False)
		return self.removeBlackCenter(pixelrdata*self.freq, PSDarray)
def getParticleContrastFromMrc(mrcfile):
	apDisplay.printMsg("Particle contrast determination is experimental")
	if not os.path.isfile(mrcfile):
		apDisplay.printWarning("Could not determine particle contrast, mrc file not found")
		return None
	rawimage = mrc.read(mrcfile)
	boxSize = min(rawimage.shape)-1
	innerNoise = boxSize/2/20 #one-twentieth the box radius
	particleRadius = boxSize/2/3 + 1 #one-third the box radius
	outerLimit = boxSize/2 * 0.9 # 90% of the box radius
	radialData, densityData = ctftools.rotationalAverage(rawimage, full=True)

	# find indices for radial values
	innerNoiseIndex = numpy.searchsorted(radialData, innerNoise)
	partRadIndex = numpy.searchsorted(radialData, particleRadius)
	outerLimitIndex = numpy.searchsorted(radialData, outerLimit)
	maxDiam = radialData[-1]
	
	innerVal = numpy.median(densityData[innerNoiseIndex:partRadIndex])
	outerVal = numpy.median(densityData[outerLimitIndex:])
	#print innerMean, outerMean, mrcfile

	if debug is True:
		print "%d:%d and %d:%d"%(innerNoiseIndex, partRadIndex, outerLimitIndex, densityData.shape[0])
		print "inner density %.1f <> outer density %.1f"%(innerVal, outerVal)
		from matplotlib import pyplot
		pyplot.plot(radialData, densityData, 'ko-')
		pyplot.xlabel('Pixel Radius')
		pyplot.ylabel('Density')
		xmin, xmax, ymin, ymax = pyplot.axis()
		pyplot.axhline(y=innerVal, xmin=innerNoise/xmax, xmax=particleRadius/xmax, linewidth=2, color="blue", linestyle='-')
		#pyplot.axhline(y=innerVal, xmax=particleRadius, linewidth=2, color="cyan", linestyle='-')
		#print innerVal, radialData[1], particleRadius
		pyplot.axhline(y=outerVal, xmin=outerLimit/xmax, xmax=maxDiam/xmax, linewidth=2, color="orange", linestyle='-')
		#pyplot.axhline(y=outerVal, xmax=maxDiam, linewidth=2, color="orange", linestyle='-')
		#print outerVal, outerLimit, maxDiam
		pyplot.grid(True)
		pyplot.show()
		
	if innerVal > outerVal:
		apDisplay.printMsg("Contrast determined as WHITE particles on black background")
		return "whiteOnBlack"
	else:
		apDisplay.printMsg("Contrast determined as BLACK particles on white background")
		print "BLACK on white", mrcfile	
		return "blackOnWhite"