def _insertAllSteps(self): self.inputStreaming = self.getInputMicrographs().isStreamOpen() if self.streamingBatchSize > 0 or self.inputStreaming: # If the input is in streaming, follow the base class policy # about inserting new steps and discovery new input/output self.createOutputStep = self._doNothing ProtParticlePickingAuto._insertAllSteps(self) else: # If not in streaming, then we will just insert a single step to # pick all micrographs at once since it is much faster self.micDict = {} self.micDict, _ = self._loadInputList() self._insertFunctionStep('convertInputStep', self.getInputMicrographs().strId(), self.getInputReferences().strId()) nameList = [mic.getMicName() for mic in self.getMicrographList()] self._insertFunctionStep('pickMicrographListStep', nameList, *self._getPickArgs()) self._insertFunctionStep('createOutputStep') # Disable streaming functions: self._insertFinalSteps = self._doNothing self._stepsCheck = self._doNothing
def _defineParams(self, form): ProtParticlePickingAuto._defineParams(self, form) form.addParam('diameter', params.IntParam, default=100, label='Diameter of particle in Å') form.addParam('invert', params.BooleanParam, default=False, label='Invert', help="Invert image before picking, DoG normally picks " "white particles.") form.addParam('threshold', params.FloatParam, default=0.5, label='Threshold', help="Threshold in standard deviations above the mean, " "e.g. --thresh=0.7") form.addParam( 'extraParams', params.StringParam, expertLevel=params.LEVEL_ADVANCED, label='Additional parameters', help='Additional parameters for dogpicker: \n ' '--num-slices=, --size-range=, --max-thresh=, --max-area=' '--max-peaks=')
def _insertAllSteps(self): self.inputStreaming = self.getInputMicrographs().isStreamOpen() if self.streamingBatchSize > 0 or self.inputStreaming: # If the input is in streaming, follow the base class policy # about inserting new steps and discovery new input/output ProtParticlePickingAuto._insertAllSteps(self) self.createOutputStep = self._doNothing else: # If not in streaming, then we will just insert a single step to # pick all micrographs at once since it is much faster self._insertInitialSteps() self._insertFunctionStep('_pickMicrographStep', self.getInputMicrographs(), *self._getPickArgs()) self._insertFunctionStep('createOutputStep') # Disable streaming functions: self._insertFinalSteps = self._doNothing self._stepsCheck = self._doNothing
def _defineParams(self, form): ProtParticlePickingAuto._defineParams(self, form) form.addParam('modelInitialization', params.EnumParam, choices=self.ADD_MODEL_TRAIN_TYPES, default=self.ADD_MODEL_PRETRAINED, label='Select model type', help='If you set to *%s*, a topaz model object, ' 'within this project, will be employed. If you set to *%s* a ' 'pretrained model from topaz software will be used' % tuple(self.ADD_MODEL_TRAIN_TYPES)) form.addParam('prevTopazModel', params.PointerParam, pointerClass='TopazModel', condition='modelInitialization== %s' % self.ADD_MODEL_PRETRAINED, allowsNull=True, label='Select topaz model', help='Select a topaz model to continue from.') form.addParam('generalModel', params.EnumParam, choices=self.GENERAL_MODELS, default=self.MODEL_RESNET16_U64, condition='modelInitialization== %s' % self.ADD_MODEL_GENERAL, label='Topaz general model', help='A topaz NN model pretrained and provided in topaz sofware.' '\nMight not be optimized for specific particles') form.addSection('Picking') form.addParam('radius', params.IntParam, default=8, label='Particle radius (px)', help='Pixel radius around particle centers to consider.') form.addParam('boxSize', params.IntParam, default=-1, expertLevel=cons.LEVEL_ADVANCED, label='Box size (px)', help='Box size in pixels. By default(-1): radius*2*scale') form.addParam('threshold', params.FloatParam, default=-6.0, label='Extraction threshold', help='log-likelihood score threshold at which to terminate region extraction. ' '\nValue -6 is p>=0.0025 (default: -6)' '\nHigher values will mean a more restrictive picking') form.addParallelSection(threads=1, mpi=1) self._definePreprocessParams(form) self._defineStreamingParams(form) form.getParam('streamingBatchSize').setDefault(32)
def _defineParams(self, form): ProtParticlePickingAuto._defineParams(self, form) form.addParam('ctfRelations', params.RelationParam, relationName=RELATION_CTF, attributeName='getInputMicrographs', label='CTF estimation', help='Choose some CTF estimation related to the ' 'input micrographs.') form.addParam('pickType', params.EnumParam, default=0, important=True, label='Picking algorithm', choices=['Ab-initio', 'Reference-based'], display=params.EnumParam.DISPLAY_HLIST) form.addParam('inputRefs', params.PointerParam, condition='pickType==1', important=True, pointerClass='SetOfClasses2D, SetOfAverages', label='Input references', help='Provide a set of 2D templates to use in ' 'the search.') form.addParam('maxradius', params.FloatParam, default=120.0, label='Max particle radius (A)', help='In Angstroms, the maximum radius of the ' 'particles to be found. This also determines ' 'the minimum distance between picks.') form.addParam('radius', params.FloatParam, default=80.0, label='Characteristic particle radius (A)', help='In Angstroms, the radius within which most ' 'of the density is enclosed. The template ' 'for picking is a soft-edge disc, where ' 'the edge is 5 pixels wide and this ' 'parameter defines the radius at which ' 'the cosine-edge template reaches 0.5.') form.addParam('threshold', params.FloatParam, default=6.0, label='Threshold peak height', help='Particle coordinates will be defined as ' 'the coordinates of any peak in the search ' 'function which exceeds this threshold. ' 'In numbers of standard deviations ' 'above expected noise variations in ' 'the scoring function. See Sigworth ' '(2004) for definition.') form.addParam('avoidHighVar', params.BooleanParam, default=False, label='Avoid high variance areas', help='Avoid areas with abnormally high local variance. ' 'This can be effective in avoiding edges ' 'of support films or contamination.') form.addParam('ptclWhite', params.BooleanParam, default=False, label='Particles are white on a dark background?') form.addSection(label='Expert options') form.addParam('highRes', params.FloatParam, default=30.0, label='Highest resolution used in picking (A)', help='The template and micrograph will be resampled ' '(by Fourier cropping) to a pixel size of half ' 'the resolution given here. Note that the ' 'information in the corners of the Fourier ' 'transforms (beyond the Nyquist frequency) ' 'remains intact, so that there is some small ' 'risk of bias beyond this resolution.') form.addParam('minDist', params.IntParam, default=0, label='Minimum distance from edges (px)', help='No particle shall be picked closer than ' 'this distance from the edges of the micrograph. ' 'In pixels.') form.addParam('useRadAvg', params.BooleanParam, default=True, condition='pickType==1', label='Use radial averages of templates', help='Say yes if the templates should be ' 'rotationally averaged') form.addParam('rotateRef', params.IntParam, default=0, condition='pickType==1 and not useRadAvg', label='Rotate each template this many times', help='If > 0, each template image will be ' 'rotated this number of times and the ' 'micrograph will be searched for the rotated ' 'template.') form.addParam('avoidLocMean', params.BooleanParam, default=True, label='Avoid areas with abnormal local mean', help='Avoid areas with abnormally low or high ' 'local mean. This can be effective to avoid ' 'picking from, e.g., contaminating ice crystals, ' 'support film.') form.addParam('bgBoxes', params.IntParam, default=30, label='Number of background boxes', help='Number of background areas to use in estimating ' 'the background spectrum. The larger the number ' 'of boxes, the more accurate the estimate should ' 'be, provided that none of the background boxes ' 'contain any particles to be picked.') form.addParam('bgAlgo', params.EnumParam, default=LOW_VARIANCE, choices=['Lowest variance', 'Variance near mode'], display=params.EnumParam.DISPLAY_COMBO, label='Algorithm to find background areas', help='Testing so far suggests that areas of lowest ' 'variance in experimental micrographs should be ' 'used to estimate the background spectrum. ' 'However, when using synthetic micrographs this ' 'can lead to bias in the spectrum estimation ' 'and the alternative (areas with local variances ' 'near the mean of the distribution of local ' 'variances) seems to perform better') self._defineStreamingParams(form) form.addParallelSection(threads=1, mpi=1)
def __init__(self, **kwargs): ProtParticlePickingAuto.__init__(self, **kwargs) self.stepsExecutionMode = STEPS_PARALLEL
def _defineParams(self, form): ProtParticlePickingAuto._defineParams(self, form) form.addParam('radius', params.IntParam, label='Radius of particle (px)') form.addParam('height', params.FloatParam, default=0.5, label="Min. height", help='The minimum height of the virus peak compared to ' 'the average peak.') form.addParam('squareWidth', params.FloatParam, default=1.5, label="Square width", help='Minimum distance between two viruses is:\n' '2 * SQUARE_WIDTH_PARAM * RADIUS.') form.addParam('ringWidth', params.FloatParam, default=1.2, label="Ring width", help='Width of the ring in ring filter is: \n' 'RING_WIDTH_PARAM * RADIUS - RADIUS.') form.addParam('dist', params.FloatParam, default=0.1, label="Distance", help='Distance which the peak can move in x or y ' 'direction during center refinement is: \n' 'DIST_PARAM * RADIUS.') form.addParam('reduction', params.IntParam, default=0, label="Reduction", help='REDUCTION_PARAM * REDUCTION_PARAM pixels are ' 'averaged before filtering. The value has to be ' 'integer. Special value 0 means that the program ' 'determines the parameter.') form.addParam('doRefine', params.BooleanParam, default=True, expertLevel=LEVEL_ADVANCED, label="Refine particle centers?", help='') form.addParam('doSectorTest', params.BooleanParam, default=True, expertLevel=LEVEL_ADVANCED, label="Perform sector test?", help='') form.addParam('doHeightTest', params.BooleanParam, default=True, expertLevel=LEVEL_ADVANCED, label="Perform height test?", help='') form.addParam('doDistanceTest', params.BooleanParam, default=True, expertLevel=LEVEL_ADVANCED, label="Perform peak pair distance test?", help='')
def _createSetOfCoordinates(self, micSet, suffix=''): """ Override this method to set the box size. """ coordSet = ProtParticlePickingAuto._createSetOfCoordinates( self, micSet, suffix=suffix) coordSet.setBoxSize(self.getBoxSize()) return coordSet
def _defineParams(self, form): ProtParticlePickingAuto._defineParams(self, form) form.addParam('inputModelFrom', params.EnumParam, default=INPUT_MODEL_GENERAL, choices=['general cryo (low-pass filtered)', 'general cryo (denoised)', 'other', 'general neg stain'], display=params.EnumParam.DISPLAY_COMBO, label='Picking model: ', help="You might use a general network model that consists " "of\n -cryo: real, simulated, particle free datasets on " "various grids with contamination\n -negative stain: trained with" "negative stain images\nand skip training " "completely,\nor,\nif you would like to " "improve the results you can use the model from a " "previous training step or an imported one.") form.addParam('inputModel', params.PointerParam, allowsNull=True, condition="inputModelFrom==%d" % INPUT_MODEL_OTHER, label="Input model", pointerClass='CryoloModel', help='Select an existing crYOLO trained model.') form.addParam('conservPickVar', params.FloatParam, default=0.3, label="Confidence threshold", help='If you want to pick less conservatively or more ' 'conservatively you might want to change the threshold ' 'from the default of 0.3 to a less conservative value ' 'like 0.2 or more conservative value like 0.4.') form.addParam('lowPassFilter', params.BooleanParam, default=False, label="Low-pass filter", help="CrYOLO works on original micrographs but the " "results will be probably improved by the application" " of a reasonable low-pass filter.") form.addParam('absCutOffFreq', params.FloatParam, default=0.1, condition='lowPassFilter', label="Absolute cut off frequency", help="Specifies the absolute cut-off frequency for the " "low-pass filter.") form.addParam('numCpus', params.IntParam, default=4, label="Number of CPUs", help="*Important!* This is different from number of threads " "above as threads are used for GPU parallelization. " "Provide here the number of CPU cores for each cryolo " "process.") form.addParam('input_size', params.IntParam, default=1024, expertLevel=cons.LEVEL_ADVANCED, label="Input size", help="This is the size to which the input is rescaled " "before passed through the network." "For example the default value would be 1024x1024.") form.addParam('boxSize', params.IntParam, default=0, label='Box Size (optional)', allowsPointers=True, help='Box size in pixels. It should be the size of ' 'the minimum particle enclosing square in pixel. ' 'If introduced value is zero, it is estimated.') form.addParam('max_box_per_image', params.IntParam, default=600, expertLevel=cons.LEVEL_ADVANCED, label="Maximum box per image", help="Maximum number of particles in the image. Only for " "the memory handling. Keep the default value of " "600 or 1000.") form.addHidden(params.USE_GPU, params.BooleanParam, default=True, expertLevel=params.LEVEL_ADVANCED, label="Use GPU (vs CPU)", help="Set to true if you want to use GPU implementation ") form.addHidden(params.GPU_LIST, params.StringParam, default='0', expertLevel=cons.LEVEL_ADVANCED, label="Choose GPU IDs", help="GPU may have several cores. Set it to zero" " if you do not know what we are talking about." " First core index is 0, second 1 and so on." " crYOLO can use multiple GPUs - in that case" " set to i.e. *0 1 2*.") form.addParallelSection(threads=1, mpi=1) self._defineStreamingParams(form) # Default batch size --> 16 form.getParam('streamingBatchSize').default = Integer(16)
def __init__(self, **args): ProtParticlePickingAuto.__init__(self, **args)
def _defineParams(self, form): ProtParticlePickingAuto._defineParams(self, form) form.addHidden(USE_GPU, BooleanParam, default=False, label="Use GPU?", help="Set to Yes if you want to run Neural Net " "boxer on GPU. Default is CPU.") form.addHidden(GPU_LIST, StringParam, default='0', label="Choose GPU ID", help="GPU may have several cores. Set it to zero" " if you do not know what we are talking about." " First core index is 0, second 1 and so on.\n" "Eman boxer can use only one GPU.") form.addParam('boxSize', IntParam, default=128, label='Box size (px)', help="Box size in pixels.") form.addParam('particleSize', IntParam, default=100, label='Particle size (px)', help="Longest axis of particle in pixels (diameter, " "not radius).") form.addParam('boxerMode', EnumParam, choices=['local search', 'by ref', 'neural net', 'gauss'], label="Autopicker mode:", default=AUTO_CONVNET, display=EnumParam.DISPLAY_COMBO, help="Choose autopicker mode:\n\n" " _local search_ - Reference based search by " "downsampling and 2-D alignment to references.\n" " _by ref_ - simple reference-based " "cross-correlation picker with exhaustive " "rotational search.\n" " _neural net_ - convolutional neural network " "boxer.\n" " _gauss_ - simple reference-free picker.") form.addParam('threshold', FloatParam, default='5.0', label='Threshold', condition='boxerMode!=%d' % AUTO_GAUSS) form.addParam('threshold2', FloatParam, default='-5.0', condition='boxerMode==%d' % AUTO_CONVNET, label='Threshold2') form.addParam('gaussLow', FloatParam, default=1., condition='boxerMode==%d' % AUTO_GAUSS, label='Threshold low') form.addParam('gaussHigh', FloatParam, default=2., condition='boxerMode==%d' % AUTO_GAUSS, label='Threshold high') form.addParam('gaussWidth', FloatParam, default=1., condition='boxerMode==%d' % AUTO_GAUSS, label='Gaussian width') form.addSection('References') form.addParam('boxerProt', PointerParam, pointerClass='EmanProtBoxing', condition='boxerMode==%d' % AUTO_CONVNET, label='Previous e2boxer protocol', help='Provide previously executed e2boxer protocol ' 'that has all 3 types of references and ' 'pre-trained neural network.') form.addParam('goodRefs', PointerParam, pointerClass='SetOfAverages', condition='boxerMode<%d' % AUTO_CONVNET, allowsNull=True, label="Good references", help="Good particle references.") form.addParallelSection(threads=1, mpi=0)
def getFiles(self): return (self.inputMicrographs.get().getFiles() | ProtParticlePickingAuto.getFiles(self))