def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        form.addParam('alignFrameRange', IntParam,
                      default=-1,
                      label='Number frames per movie ',
                      help='How many frames per monie. -1 -> all frames ')
        form.addParam('doApplyDoseFilter', BooleanParam, default=True,
                      label='Apply Dose filter',
                      help='Apply a dose-dependent filter to frames '
                           'before summing them')
        form.addParam('exposurePerFrame', FloatParam,
                      label='Exposure per frame (e/A^2)',
                      help='Exposure per frame, in electrons per square '
                           'Angstrom')

        #group = form.addGroup('Expert Options')
        form.addParam('Bfactor', FloatParam,
                      default=1500.,
                      label='B-factor (A^2)',
                      help='B-factor to apply to images (A^2)',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('doRestoreNoisePower', BooleanParam,
                      default=True,
                      label='Restore Noise Power? ',
                      help='Restore Noise Power? ',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('doVerboseOutput', BooleanParam,
                      default=False,
                      label='Verbose Output?',
                      help='Verbose Output?',
                      expertLevel=LEVEL_ADVANCED)
        form.addParallelSection(threads=1, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        form.addParam('alignFrameRange', IntParam,
                      default=-1,
                      label='Number frames per movie ',
                      help='How many frames per monie. -1 -> all frames ')
        form.addParam('doApplyDoseFilter', BooleanParam, default=True,
                      label='Apply Dose filter',
                      help='Apply a dose-dependent filter to frames before summing them')
        form.addParam('exposurePerFrame', FloatParam,
                      label='Exposure per frame (e/A^2)',
                      help='Exposure per frame, in electrons per square Angstrom')

        #group = form.addGroup('Expert Options')
        form.addParam('minShiftInitSearch', FloatParam,
                      default=2.,
                      label='Min. Shift Initial search (A)',
                      help='Initial search will be limited to between the inner and outer radii',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('OutRadShiftLimit', FloatParam,
                      default=200.,
                      label='Outer radius shift limit (A)',
                      help='The maximum shift of each alignment step will be limited to this value',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('Bfactor', FloatParam,
                      default=1500.,
                      label='B-factor (A^2)',
                      help='B-factor to apply to images (A^2)',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('HWVertFourMask', IntParam,
                      default=1,
                      label='Half-width vertical Fourier mask',
                      help='The vertical line mask will be twice this size. The central cross mask helps reduce problems by line artefacts from the detector',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('HWHoriFourMask', IntParam,
                      default=1,
                      label='Half-width horizontal Fourier mask',
                      help='The horizontal line mask will be twice this size. The central cross mask helps reduce problems by line artefacts from the detector',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('terminationShiftThreshold', FloatParam,
                      default=0.1,
                      label='Termination shift threshold',
                      help='Alignment will stop at this number, even if the threshold shift is not reached',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('maximumNumberIterations', IntParam,
                      default=10,
                      label='Maximum number of iterations',
                      help='Maximum number of iterations',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('doRestoreNoisePower', BooleanParam,
                      default=True,
                      label='Restore Noise Power? ',
                      help='Restore Noise Power? ',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('doVerboseOutput', BooleanParam,
                      default=False,
                      label='Verbose Output?',
                      help='Verbose Output?',
                      expertLevel=LEVEL_ADVANCED)
        form.addParallelSection(threads=1, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        
        group = form.addGroup('Frame range')
        line1 = group.addLine('Used in alignment',
                             help='First and last frames used in alignment.\n'
                                  'The first frame in the stack is *0*.' )
        line1.addParam('alignFrame0', IntParam, default=0, label='First')
        line1.addParam('alignFrameN', IntParam, default=0, label='Last',
                      help='If *0*, use maximum value')
        
        line2 = group.addLine('Used in final sum',
                             help='First and last frames used in alignment.\n'
                                  'The first frame in the stack is *0*.' )
        line2.addParam('sumFrame0', IntParam, default=0, label='First')
        line2.addParam('sumFrameN', IntParam, default=0, label='Last',
                      help='If *0*, use maximum value')        
        
        form.addParam('gpuId', StringParam, default='0',
                      expertLevel=LEVEL_ADVANCED,
                      label='GPU id',
                      help='GPU device ID')
        
        form.addParam('extraParams', StringParam, default='',
                      expertLevel=LEVEL_ADVANCED,
                      label='Additional parameters',
                      help="""
-bft       150               BFactor in pix^2.
-pbx       96                Box dimension for searching CC peak.
-fod       2                 Number of frame offset for frame comparison.
-nps       0                 Radius of noise peak.
-sub       0                 1: Save as sub-area corrected sum. 0: Not. 
-srs       0                 1: Save uncorrected sum. 0: Not.
-ssc       0                 1: Save aligned stack. 0: Not.
-scc       0                 1: Save CC Map. 0: Not.
-slg       1                 1: Save Log. 0: Not.
-atm       1                 1: Align to middle frame. 0: Not.
-dsp       1                 1: Save quick results. 0: Not.
-fsc       0                 1: Calculate and log FSC. 0: Not.
                      """)
        
        group2 = form.addGroup('Crop and binning')

        line = group2.addLine('Crop offsets (px)')
        line.addParam('cropOffsetX', IntParam, default=0, label='X')
        line.addParam('cropOffsetY', IntParam, default=0, label='Y')
    
        line = group2.addLine('Crop dimensions (px)',
                      help='How many pixels to crop from offset\n'
                           'If equal to 0, use maximum size.')
        line.addParam('cropDimX', IntParam, default=0, label='X')
        line.addParam('cropDimY', IntParam, default=0, label='Y')


        group2.addParam('binFactor', IntParam, default=1, 
                      label='Binning factor',
                      help='1x or 2x. Bin stack before processing.')
              
        form.addParallelSection(threads=1, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)

        form.addParam('useEst', params.BooleanParam, default=False,
                      label='Use previous estimation?',
                      help='Use previously calculated parameters of '
                           'magnification anisotropy.')
        form.addParam('inputEst', params.PointerParam,
                      pointerClass='ProtMagDistEst', condition='useEst',
                      label='Input protocol',
                      help='Select previously executed estimation protocol.')
        form.addParam('scaleMaj', params.FloatParam, default=1.0,
                      condition='not useEst',
                      label='Major scale factor',
                      help='Major scale factor.')
        form.addParam('scaleMin', params.FloatParam, default=1.0,
                      condition='not useEst',
                      label='Minor scale factor',
                      help='Minor scale factor.')
        form.addParam('angDist', params.FloatParam, default=0.0,
                      condition='not useEst',
                      label='Distortion angle (deg)',
                      help='Distortion angle, in degrees.')
        form.addParam('newPix', params.FloatParam,
                      condition='not useEst',
                      label='New pixel size (A)',
                      help='Assign a new corrected pixel size, in Angstrom.')
        form.addParam('doGain', params.BooleanParam, default=False,
                      expertLevel=params.LEVEL_ADVANCED,
                      label='Do gain correction before undistorting?',
                      help='If Yes, gain reference that you provided during '
                           'movies import will be chosen.')
        form.addParam('doResample', params.BooleanParam, default=False,
                      expertLevel=params.LEVEL_ADVANCED,
                      label='Resample images?',
                      help='Resample images after distortion correction and gain'
                           ' correction, by cropping their Fourier transforms')
        line = form.addLine('New dimensions (px)',
                            expertLevel=params.LEVEL_ADVANCED,
                            condition='doResample')
        line.addParam('newX', params.IntParam, default=2048,
                      label='X',
                      expertLevel=params.LEVEL_ADVANCED,
                      condition='doResample')
        line.addParam('newY', params.IntParam, default=2048,
                      label='Y',
                      expertLevel=params.LEVEL_ADVANCED,
                      condition='doResample')

        form.addParallelSection(threads=2, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        form.addParam(
            "alignFrameRange",
            IntParam,
            default=-1,
            label="Number frames per movie ",
            help="How many frames per monie. -1 -> all frames ",
        )
        form.addParam(
            "doApplyDoseFilter",
            BooleanParam,
            default=True,
            label="Apply Dose filter",
            help="Apply a dose-dependent filter to frames before summing them",
        )
        form.addParam(
            "exposurePerFrame",
            FloatParam,
            label="Exposure per frame (e/A^2)",
            help="Exposure per frame, in electrons per square Angstrom",
        )

        # group = form.addGroup('Expert Options')
        form.addParam(
            "Bfactor",
            FloatParam,
            default=1500.0,
            label="B-factor (A^2)",
            help="B-factor to apply to images (A^2)",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "doRestoreNoisePower",
            BooleanParam,
            default=True,
            label="Restore Noise Power? ",
            help="Restore Noise Power? ",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "doVerboseOutput",
            BooleanParam,
            default=False,
            label="Verbose Output?",
            help="Verbose Output?",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParallelSection(threads=1, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        form.addParam('alignFrameRange',
                      IntParam,
                      default=-1,
                      label='Number frames per movie ',
                      help='How many frames per monie. -1 -> all frames ')
        form.addParam('doApplyDoseFilter',
                      BooleanParam,
                      default=True,
                      label='Apply Dose filter',
                      help='Apply a dose-dependent filter to frames '
                      'before summing them')
        form.addParam('exposurePerFrame',
                      FloatParam,
                      label='Exposure per frame (e/A^2)',
                      help='Exposure per frame, in electrons per square '
                      'Angstrom')

        #group = form.addGroup('Expert Options')
        form.addParam('Bfactor',
                      FloatParam,
                      default=1500.,
                      label='B-factor (A^2)',
                      help='B-factor to apply to images (A^2)',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('doRestoreNoisePower',
                      BooleanParam,
                      default=True,
                      label='Restore Noise Power? ',
                      help='Restore Noise Power? ',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('doVerboseOutput',
                      BooleanParam,
                      default=False,
                      label='Verbose Output?',
                      help='Verbose Output?',
                      expertLevel=LEVEL_ADVANCED)
        form.addParallelSection(threads=1, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)

        form.addParam(
            "alignMethod",
            EnumParam,
            choices=[
                "optical flow",
                "dosefgpu",
                "dosefgpu + optical flow",
                "average",
                "croscorrelation",
                "croscorrelation + optical flow",
            ],
            label="Alignment method",
            default=AL_OPTICAL,
            display=EnumParam.DISPLAY_COMBO,
            help="Method to use for movie alignment. "
            "dosefgpu requires a GPU. Croscorrelation "
            "and dosefgpu with default parameters are equivalent. "
            "Croscorrelation is a CPU implementation of dosefgpu  "
            "with limited functionality (only aligns whole frames)",
        )

        # GROUP COMMON PARAMETERS
        group = form.addGroup("Common parameters")

        line = group.addLine(
            "Used in alignment",
            help="First and last frames used in alignment.\n" "The first frame in the stack is *0*.",
        )
        line.addParam("alignFrame0", IntParam, default=0, label="First")
        line.addParam("alignFrameN", IntParam, default=0, label="Last", help="If *0*, use maximum value")

        # GROUP GPU PARAMETERS
        group = form.addGroup(
            "GPU",
            condition="alignMethod==%d or (alignMethod==%d and expertLevel==%d)"
            " or (alignMethod==%d and expertLevel==%d)"
            % (AL_OPTICAL, AL_DOSEFGPUOPTICAL, LEVEL_ADVANCED, AL_DOSEFGPU, LEVEL_ADVANCED),
        )
        group.addParam(
            "doGPU",
            BooleanParam,
            default=False,
            label="Use GPU (vs CPU)",
            condition="alignMethod==%d or alignMethod==%d" % (AL_OPTICAL, AL_DOSEFGPUOPTICAL),
            help="Set to true if you want the GPU implementation of Optical Flow",
        )
        group.addParam(
            "GPUCore",
            IntParam,
            default=0,
            expertLevel=LEVEL_ADVANCED,
            label="Choose GPU core",
            condition="doGPU  or alignMethod==%d or alignMethod==%d  " % (AL_DOSEFGPU, AL_DOSEFGPUOPTICAL),
            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.",
        )

        # GROUP OPTICAL FLOW PARAMETERS
        group = form.addGroup(
            "Optical Flow parameters",
            expertLevel=LEVEL_ADVANCED,
            condition="alignMethod==%d or alignMethod==%d " % (AL_OPTICAL, AL_DOSEFGPUOPTICAL),
        )

        group.addParam(
            "winSize",
            IntParam,
            default=150,
            label="Window size",
            expertLevel=LEVEL_ADVANCED,
            help="Window size (shifts are assumed to be constant within this window).",
        )

        # ---------------------------------- DosefGPU Params--------------------------------
        # GROUP DOSEFGPU PARAMETERS
        group = form.addGroup(
            "DosefGPU/Croscorrelation parameters",
            condition="alignMethod==%d "
            "or alignMethod==%d"
            "or alignMethod==%d"
            "or alignMethod==%d" % (AL_DOSEFGPU, AL_DOSEFGPUOPTICAL, AL_CROSSCORRELATION, AL_CROSSCORRELATIONOPTICAL),
        )

        line = group.addLine(
            "Used in final sum",
            help="First and last frames used in alignment.\n" "The first frame in the stack is *0*.",
        )
        line.addParam("sumFrame0", IntParam, default=0, label="First")
        line.addParam("sumFrameN", IntParam, default=0, label="Last", help="If *0*, use maximum value")

        line = group.addLine("Crop offsets (px)")
        line.addParam("cropOffsetX", IntParam, default=0, label="X")
        line.addParam("cropOffsetY", IntParam, default=0, label="Y")

        line = group.addLine(
            "Crop dimensions (px)", help="How many pixels to crop from offset\n" "If equal to 0, use maximum size."
        )
        line.addParam("cropDimX", IntParam, default=0, label="X")
        line.addParam("cropDimY", IntParam, default=0, label="Y")

        group.addParam(
            "binFactor",
            IntParam,
            default=1,
            condition="alignMethod==%d " "or alignMethod==%d" % (AL_DOSEFGPU, AL_DOSEFGPUOPTICAL),
            label="Binning factor",
            help="1x or 2x. Bin stack before processing.",
        )

        group.addParam(
            "filterFactor",
            FloatParam,
            default=4,
            condition="alignMethod==%d " "or alignMethod==%d" % (AL_CROSSCORRELATION, AL_CROSSCORRELATIONOPTICAL),
            label="Filter at (A)",
            help="1x or 2x. Bin stack before processing.",
        )

        group.addParam(
            "extraParams",
            StringParam,
            default="",
            expertLevel=LEVEL_ADVANCED,
            label="Additional parameters",
            help="""
-bft       150               BFactor in pix^2.
-pbx       96                Box dimension for searching CC peak.
-fod       2                 Number of frame offset for frame comparision.
-nps       0                 Radius of noise peak.
-sub       0                 1: Save as sub-area corrected sum. 0: Not.
-srs       0                 1: Save uncorrected sum. 0: Not.
-ssc       0                 1: Save aligned stack. 0: Not.
-scc       0                 1: Save CC Map. 0: Not.
-slg       1                 1: Save Log. 0: Not.
-atm       1                 1: Align to middle frame. 0: Not.
-dsp       1                 1: Save quick results. 0: Not.
-fsc       0                 1: Calculate and log FSC. 0: Not.
                      """,
        )
        form.addParallelSection(threads=1, mpi=1)
 def _defineParams(self, form):
     ProtProcessMovies._defineParams(self, form)
     self._defineAlignmentParams(form)
Exemple #9
0
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        form.addParam('inputCoordinates',
                      PointerParam,
                      pointerClass='SetOfCoordinates',
                      important=True,
                      label='Input coordinates')
        form.addParam('boxSize',
                      IntParam,
                      default=0,
                      label='Particle box size (px)',
                      validators=[Positive],
                      help='In pixels. The box size is the size of the boxed '
                      'particles, actual particles may be smaller than '
                      'this.')
        form.addParam('applyAlignment',
                      BooleanParam,
                      default=False,
                      label='Apply movie alignments to extract?',
                      help='If the input movies contains frames alignment, '
                      'you decide whether to use that information '
                      'for extracting the particles taking into account '
                      'the shifts between frames.')
        line = form.addLine(
            'Frames range',
            help='Specify the frames range to extract particles. '
            'The first frame is 1. If you set 0 in the '
            'last frame, it means that you will use until the '
            'last frame of the movie. If you apply the '
            'previous alignment of the movies, you only can use '
            'a frame range equal or less as used to alignment.')
        line.addParam('frame0', IntParam, label='First')
        line.addParam('frameN', IntParam, label='Last')
        # TODO: implement this and extraction from movies, not frames
        #form.addParam('avgFrames', IntParam, default=1,
        #              label='Average every so many frames', validators=[Positive],
        #              help='Average over this number of individual movie frames. '
        #                   'For Relion movie refinement it is recommended to '
        #                   'adjust this value to have a dose of at least '
        #                   'approximately 1 e/A^2 in the averaged frames, '
        #                   'so use a value higher than 1 if you have a '
        #                   'dose of less than 0.5-1 e/A^2 in each '
        #                   'individual movie frame.')
        form.addParam(
            'doBorders',
            BooleanParam,
            default=True,
            label='Fill pixels outside borders',
            help='Xmipp by default create blank particles whose boxes fall '
            'outside of the micrograph borders. Set this '
            'option to True if you want those pixels outside '
            'the borders to be filled with the closest pixel '
            'value available')

        form.addSection(label='Preprocess')
        form.addParam('doRemoveDust',
                      BooleanParam,
                      default=True,
                      important=True,
                      label='Dust removal (Recommended)',
                      help='Sets pixels with unusually large values to random '
                      'values from a Gaussian with zero-mean and '
                      'unity-standard deviation.')
        form.addParam('thresholdDust',
                      FloatParam,
                      default=3.5,
                      condition='doRemoveDust',
                      expertLevel=LEVEL_ADVANCED,
                      label='Threshold for dust removal',
                      help='Pixels with a signal higher or lower than this '
                      'value times the standard deviation of the image '
                      'will be affected. For cryo, 3.5 is a good value. '
                      'For high-contrast negative stain, the signal '
                      'itself may be affected so that a higher value may '
                      'be preferable.')
        form.addParam('doInvert',
                      BooleanParam,
                      default=None,
                      label='Invert contrast',
                      help='Invert the contrast if your particles are black '
                      'over a white background.')
        form.addParam('doNormalize',
                      BooleanParam,
                      default=True,
                      label='Normalize (Recommended)',
                      help='It subtract a ramp in the gray values and '
                      'normalizes so that in the  background there is 0 '
                      'mean and standard deviation 1.')
        form.addParam('normType',
                      EnumParam,
                      choices=['OldXmipp', 'NewXmipp', 'Ramp'],
                      default=2,
                      condition='doNormalize',
                      expertLevel=LEVEL_ADVANCED,
                      display=EnumParam.DISPLAY_COMBO,
                      label='Normalization type',
                      help='OldXmipp (mean(Image)=0, stddev(Image)=1). \n'
                      'NewXmipp (mean(background)=0, '
                      'stddev(background)=1)\n'
                      'Ramp (subtract background+NewXmipp).')
        form.addParam('backRadius',
                      IntParam,
                      default=-1,
                      condition='doNormalize',
                      label='Background radius (px)',
                      help='Pixels outside this circle are assumed to be '
                      'noise and their stddev is set to 1. Radius for '
                      'background circle definition (in pix.). If this '
                      'value is 0, then half the box size is used.',
                      expertLevel=LEVEL_ADVANCED)

        form.addParallelSection(threads=3, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)

        form.addParam('alignMethod', EnumParam, choices=['optical flow'
                                                       , 'dosefgpu'
                                                       , 'dosefgpu + optical flow'
                                                       , 'average'
                                                       , 'croscorrelation'
                                                       , 'croscorrelation + optical flow'
                                                        ],
                      label="Alignment method", default=AL_OPTICAL,
                      display=EnumParam.DISPLAY_COMBO,
                      help='Method to use for movie alignment. '
                           'dosefgpu requires a GPU. Croscorrelation '
                           'and dosefgpu with default parameters are equivalent. '
                           'Croscorrelation is a CPU implementation of dosefgpu  '
                           'with limited functionality (only aligns whole frames)'
                      )

        # GROUP COMMON PARAMETERS
        group = form.addGroup('Common parameters')
        
        line = group.addLine('Used in alignment',
                            help='First and last frames used in alignment.\n'
                                  'The first frame in the stack is *0*.' )
        line.addParam('alignFrame0', IntParam, default=0, label='First')
        line.addParam('alignFrameN', IntParam, default=0, label='Last',
                      help='If *0*, use maximum value')
        
        # GROUP GPU PARAMETERS
        group = form.addGroup('GPU',condition="alignMethod==%d or (alignMethod==%d and expertLevel==%d)"
                                                         " or (alignMethod==%d and expertLevel==%d)"
                                                         % (AL_OPTICAL, AL_DOSEFGPUOPTICAL, LEVEL_ADVANCED, AL_DOSEFGPU, LEVEL_ADVANCED))
        group.addParam('doGPU', BooleanParam, default=False,
                      label="Use GPU (vs CPU)",
                      condition="alignMethod==%d or alignMethod==%d" % (AL_OPTICAL, AL_DOSEFGPUOPTICAL),
                      help="Set to true if you want the GPU implementation of Optical Flow")
        group.addParam('GPUCore', IntParam, default=0, expertLevel=LEVEL_ADVANCED,
                      label="Choose GPU core",
                      condition="doGPU  or alignMethod==%d or alignMethod==%d  " % (AL_DOSEFGPU, AL_DOSEFGPUOPTICAL),
                      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.")
        
        # GROUP OPTICAL FLOW PARAMETERS
        group = form.addGroup('Optical Flow parameters', expertLevel=LEVEL_ADVANCED, condition="alignMethod==%d or alignMethod==%d or alignMethod==%d " % (AL_OPTICAL, AL_DOSEFGPUOPTICAL, AL_CROSSCORRELATIONOPTICAL))
        
        group.addParam('winSize', IntParam, default=150,
                      label="Window size", expertLevel=LEVEL_ADVANCED,
                      help="Window size (shifts are assumed to be constant within this window).")

        group.addParam('groupSize', IntParam, default=1,
                      label="Group Size", expertLevel=LEVEL_ADVANCED,
                      help="In cases with low SNR, the average of a number of frames can be used in alignment")

        group.addParam('doSaveMovie', BooleanParam, default=False,
                      label="Save movie", expertLevel=LEVEL_ADVANCED,
                      help="Save Aligned movie")

        #---------------------------------- DosefGPU Params--------------------------------
        # GROUP DOSEFGPU PARAMETERS
        group = form.addGroup('DosefGPU/Croscorrelation parameters',condition="alignMethod==%d "
                                                              "or alignMethod==%d"
                                                              "or alignMethod==%d"
                                                              "or alignMethod==%d" %
                                                              (AL_DOSEFGPU,\
                                                               AL_DOSEFGPUOPTICAL,\
                                                               AL_CROSSCORRELATION,\
                                                               AL_CROSSCORRELATIONOPTICAL)
                              )
        
        line = group.addLine('Used in final sum',
                             help='First and last frames used in alignment.\n'
                                  'The first frame in the stack is *0*.' )
        line.addParam('sumFrame0', IntParam, default=0, label='First')
        line.addParam('sumFrameN', IntParam, default=0, label='Last',
                      help='If *0*, use maximum value')
        
        line = group.addLine('Crop offsets (px)')
        line.addParam('cropOffsetX', IntParam, default=0, label='X')
        line.addParam('cropOffsetY', IntParam, default=0, label='Y')
        
        line = group.addLine('Crop dimensions (px)',
                      help='How many pixels to crop from offset\n'
                           'If equal to 0, use maximum size.')
        line.addParam('cropDimX', IntParam, default=0, label='X')
        line.addParam('cropDimY', IntParam, default=0, label='Y')

        group.addParam('binFactor', IntParam, default=1,condition="alignMethod==%d "
                                                              "or alignMethod==%d" %
                                                                  (AL_DOSEFGPU,\
                                                                   AL_DOSEFGPUOPTICAL\
                       ),
                       label='Binning factor',
                       help='1x or 2x. Bin stack before processing.')

        group.addParam('filterFactor', FloatParam, default=4,condition="alignMethod==%d "
                                                              "or alignMethod==%d" %
                                                                  (AL_CROSSCORRELATION,\
                                                                   AL_CROSSCORRELATIONOPTICAL\
                       ),
                       label='Filter at (A)',
                       help='Maximum frequency for a low pass filter')


        group.addParam('extraParams', StringParam, default='',
                      expertLevel=LEVEL_ADVANCED,
                      label='Additional parameters',
                      help="""
-bft       150               BFactor in pix^2.
-pbx       96                Box dimension for searching CC peak.
-fod       2                 Number of frame offset for frame comparison.
-nps       0                 Radius of noise peak.
-sub       0                 1: Save as sub-area corrected sum. 0: Not.
-srs       0                 1: Save uncorrected sum. 0: Not.
-ssc       0                 1: Save aligned stack. 0: Not.
-scc       0                 1: Save CC Map. 0: Not.
-slg       1                 1: Save Log. 0: Not.
-atm       1                 1: Align to middle frame. 0: Not.
-dsp       1                 1: Save quick results. 0: Not.
-fsc       0                 1: Calculate and log FSC. 0: Not.
                      """)
        form.addParallelSection(threads=1, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        form.addParam('inputCoordinates', PointerParam,
                      pointerClass='SetOfCoordinates',
                      important=True,
                      label='Input coordinates')
        form.addParam('boxSize', IntParam, default=0,
                      label='Particle box size (px)', validators=[Positive],
                      help='In pixels. The box size is the size of the boxed '
                           'particles, actual particles may be smaller than '
                           'this.')
        form.addParam('applyAlignment', BooleanParam, default=False,
                      label='Apply movie alignments to extract?',
                      help='If the input movies contains frames alignment, '
                           'you decide whether to use that information '
                           'for extracting the particles taking into account '
                           'the shifts between frames.')
        line = form.addLine('Frames range',
                            help='Specify the frames range to extract particles. '
                                 'The first frame is 1. If you set 0 in the '
                                 'last frame, it means that you will use until the '
                                 'last frame of the movie. If you apply the '
                                 'previous alignment of the movies, you only can use '
                                 'a frame range equal or less as used to alignment.')
        line.addParam('frame0', IntParam, label='First')
        line.addParam('frameN',  IntParam, label='Last')
        # TODO: implement this and extraction from movies, not frames
        #form.addParam('avgFrames', IntParam, default=1,
        #              label='Average every so many frames', validators=[Positive],
        #              help='Average over this number of individual movie frames. '
        #                   'For Relion movie refinement it is recommended to '
        #                   'adjust this value to have a dose of at least '
        #                   'approximately 1 e/A^2 in the averaged frames, '
        #                   'so use a value higher than 1 if you have a '
        #                   'dose of less than 0.5-1 e/A^2 in each '
        #                   'individual movie frame.')
        form.addParam('doBorders', BooleanParam, default=True,
                      label='Fill pixels outside borders',
                      help='Xmipp by default create blank particles whose boxes fall '
                           'outside of the micrograph borders. Set this '
                           'option to True if you want those pixels outside '
                           'the borders to be filled with the closest pixel '
                           'value available')

        form.addSection(label='Preprocess')
        form.addParam('doRemoveDust', BooleanParam, default=True,
                      important=True,
                      label='Dust removal (Recommended)', 
                      help='Sets pixels with unusually large values to random '
                           'values from a Gaussian with zero-mean and '
                           'unity-standard deviation.')
        form.addParam('thresholdDust', FloatParam, default=3.5,
                      condition='doRemoveDust', expertLevel=LEVEL_ADVANCED,
                      label='Threshold for dust removal',
                      help='Pixels with a signal higher or lower than this '
                           'value times the standard deviation of the image '
                           'will be affected. For cryo, 3.5 is a good value. '
                           'For high-contrast negative stain, the signal '
                           'itself may be affected so that a higher value may '
                           'be preferable.')
        form.addParam('doInvert', BooleanParam, default=None,
                      label='Invert contrast', 
                      help='Invert the contrast if your particles are black '
                           'over a white background.')
        form.addParam('doNormalize', BooleanParam, default=True,
                      label='Normalize (Recommended)', 
                      help='It subtract a ramp in the gray values and '
                           'normalizes so that in the  background there is 0 '
                           'mean and standard deviation 1.')
        form.addParam('normType', EnumParam,
                      choices=['OldXmipp', 'NewXmipp', 'Ramp'], default=2,
                      condition='doNormalize', expertLevel=LEVEL_ADVANCED,
                      display=EnumParam.DISPLAY_COMBO,
                      label='Normalization type', 
                      help='OldXmipp (mean(Image)=0, stddev(Image)=1). \n'
                           'NewXmipp (mean(background)=0, '
                           'stddev(background)=1)\n'
                           'Ramp (subtract background+NewXmipp).')
        form.addParam('backRadius', IntParam, default=-1,
                      condition='doNormalize',
                      label='Background radius (px)',
                      help='Pixels outside this circle are assumed to be '
                           'noise and their stddev is set to 1. Radius for '
                           'background circle definition (in pix.). If this '
                           'value is 0, then half the box size is used.',
                      expertLevel=LEVEL_ADVANCED)

        form.addParallelSection(threads=3, mpi=1)
Exemple #12
0
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)

        group = form.addGroup('Frame range')
        line1 = group.addLine('Used in alignment',
                              help='First and last frames used in alignment.\n'
                              'The first frame in the stack is *0*.')
        line1.addParam('alignFrame0', IntParam, default=0, label='First')
        line1.addParam('alignFrameN',
                       IntParam,
                       default=0,
                       label='Last',
                       help='If *0*, use maximum value')

        line2 = group.addLine('Used in final sum',
                              help='First and last frames used in alignment.\n'
                              'The first frame in the stack is *0*.')
        line2.addParam('sumFrame0', IntParam, default=0, label='First')
        line2.addParam('sumFrameN',
                       IntParam,
                       default=0,
                       label='Last',
                       help='If *0*, use maximum value')

        form.addParam('gpuId',
                      StringParam,
                      default='0',
                      expertLevel=LEVEL_ADVANCED,
                      label='GPU id',
                      help='GPU device ID')

        form.addParam('extraParams',
                      StringParam,
                      default='',
                      expertLevel=LEVEL_ADVANCED,
                      label='Additional parameters',
                      help="""
-bft       150               BFactor in pix^2.
-pbx       96                Box dimension for searching CC peak.
-fod       2                 Number of frame offset for frame comparison.
-nps       0                 Radius of noise peak.
-sub       0                 1: Save as sub-area corrected sum. 0: Not. 
-srs       0                 1: Save uncorrected sum. 0: Not.
-ssc       0                 1: Save aligned stack. 0: Not.
-scc       0                 1: Save CC Map. 0: Not.
-slg       1                 1: Save Log. 0: Not.
-atm       1                 1: Align to middle frame. 0: Not.
-dsp       1                 1: Save quick results. 0: Not.
-fsc       0                 1: Calculate and log FSC. 0: Not.
                      """)

        group2 = form.addGroup('Crop and binning')

        line = group2.addLine('Crop offsets (px)')
        line.addParam('cropOffsetX', IntParam, default=0, label='X')
        line.addParam('cropOffsetY', IntParam, default=0, label='Y')

        line = group2.addLine('Crop dimensions (px)',
                              help='How many pixels to crop from offset\n'
                              'If equal to 0, use maximum size.')
        line.addParam('cropDimX', IntParam, default=0, label='X')
        line.addParam('cropDimY', IntParam, default=0, label='Y')

        group2.addParam('binFactor',
                        IntParam,
                        default=1,
                        label='Binning factor',
                        help='1x or 2x. Bin stack before processing.')

        form.addParallelSection(threads=1, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)

        form.addParam(
            'alignMethod',
            EnumParam,
            choices=[
                'optical flow', 'dosefgpu', 'dosefgpu + optical flow',
                'average', 'croscorrelation', 'croscorrelation + optical flow'
            ],
            label="Alignment method",
            default=AL_OPTICAL,
            display=EnumParam.DISPLAY_COMBO,
            help='Method to use for movie alignment:\n'
            '1. dosefgpu performs in-plane drift correction and requires a GPU.\n'
            '2. Croscorrelation is a CPU implementation of dosefgpu '
            'with limited functionality (only aligns whole frames). With default parameters '
            'it is equivalent to dosefgpu.\n'
            '3. Optical flow works best for correction of local beam-induced motion.\n'
            '4. Average will simply sum the frames together.')

        # GROUP COMMON PARAMETERS
        group = form.addGroup('Common parameters')

        line = group.addLine('Used in alignment',
                             help='First and last frames used in alignment.\n'
                             'The first frame in the stack is *0* '
                             'If the last frame is *0*, use maximum value')
        line.addParam('alignFrame0', IntParam, default=0, label='First')
        line.addParam('alignFrameN', IntParam, default=0, label='Last')

        # GROUP GPU PARAMETERS
        group = form.addGroup(
            'GPU',
            condition="alignMethod==%d or (alignMethod==%d and expertLevel==%d)"
            " or (alignMethod==%d and expertLevel==%d)" %
            (AL_OPTICAL, AL_DOSEFGPUOPTICAL, LEVEL_ADVANCED, AL_DOSEFGPU,
             LEVEL_ADVANCED))
        group.addParam(
            'doGPU',
            BooleanParam,
            default=False,
            label="Use GPU (vs CPU)",
            condition="alignMethod==%d or alignMethod==%d" %
            (AL_OPTICAL, AL_DOSEFGPUOPTICAL),
            help=
            "Set to true if you want the GPU implementation of Optical Flow")
        group.addParam(
            'GPUCore',
            IntParam,
            default=0,
            expertLevel=LEVEL_ADVANCED,
            label="Choose GPU core",
            condition="doGPU  or alignMethod==%d or alignMethod==%d  " %
            (AL_DOSEFGPU, AL_DOSEFGPUOPTICAL),
            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."
        )

        # GROUP OPTICAL FLOW PARAMETERS
        group = form.addGroup(
            'Optical Flow parameters',
            expertLevel=LEVEL_ADVANCED,
            condition="alignMethod==%d or alignMethod==%d or alignMethod==%d "
            % (AL_OPTICAL, AL_DOSEFGPUOPTICAL, AL_CROSSCORRELATIONOPTICAL))

        group.addParam(
            'winSize',
            IntParam,
            default=150,
            label="Window size",
            expertLevel=LEVEL_ADVANCED,
            help=
            "Window size (shifts are assumed to be constant within this window)."
        )

        group.addParam(
            'groupSize',
            IntParam,
            default=1,
            label="Group Size",
            expertLevel=LEVEL_ADVANCED,
            help=
            "In cases with low SNR, the average of a number of frames can be used in alignment"
        )

        group.addParam('doSaveMovie',
                       BooleanParam,
                       default=False,
                       label="Save movie",
                       expertLevel=LEVEL_ADVANCED,
                       help="Save Aligned movie")

        #---------------------------------- DosefGPU Params--------------------------------
        # GROUP DOSEFGPU PARAMETERS
        group = form.addGroup('DosefGPU/Croscorrelation parameters',condition="alignMethod==%d "
                                                              "or alignMethod==%d"
                                                              "or alignMethod==%d"
                                                              "or alignMethod==%d" %
                                                              (AL_DOSEFGPU,\
                                                               AL_DOSEFGPUOPTICAL,\
                                                               AL_CROSSCORRELATION,\
                                                               AL_CROSSCORRELATIONOPTICAL)
                              )

        line = group.addLine('Used in final sum',
                             help='First and last frames used in alignment.\n'
                             'The first frame in the stack is *0*.')
        line.addParam('sumFrame0', IntParam, default=0, label='First')
        line.addParam('sumFrameN',
                      IntParam,
                      default=0,
                      label='Last',
                      help='If *0*, use maximum value')

        line = group.addLine('Crop offsets (px)')
        line.addParam('cropOffsetX', IntParam, default=0, label='X')
        line.addParam('cropOffsetY', IntParam, default=0, label='Y')

        line = group.addLine('Crop dimensions (px)',
                             help='How many pixels to crop from offset\n'
                             'If equal to 0, use maximum size.')
        line.addParam('cropDimX', IntParam, default=0, label='X')
        line.addParam('cropDimY', IntParam, default=0, label='Y')

        group.addParam('binFactor', IntParam, default=1,condition="alignMethod==%d "
                                                              "or alignMethod==%d" %
                                                                  (AL_DOSEFGPU,\
                                                                   AL_DOSEFGPUOPTICAL\
                       ),
                       label='Binning factor',
                       help='1x or 2x. Bin stack before processing.')

        group.addParam('filterFactor', FloatParam, default=4,condition="alignMethod==%d "
                                                              "or alignMethod==%d" %
                                                                  (AL_CROSSCORRELATION,\
                                                                   AL_CROSSCORRELATIONOPTICAL\
                       ),
                       label='Filter at (A)',
                       help='Maximum frequency for a low pass filter')

        group.addParam('extraParams',
                       StringParam,
                       default='',
                       expertLevel=LEVEL_ADVANCED,
                       label='Additional parameters',
                       help="""
-bft       150               BFactor in pix^2.
-pbx       96                Box dimension for searching CC peak.
-fod       2                 Number of frame offset for frame comparison.
-nps       0                 Radius of noise peak.
-sub       0                 1: Save as sub-area corrected sum. 0: Not.
-srs       0                 1: Save uncorrected sum. 0: Not.
-ssc       0                 1: Save aligned stack. 0: Not.
-scc       0                 1: Save CC Map. 0: Not.
-slg       1                 1: Save Log. 0: Not.
-atm       1                 1: Align to middle frame. 0: Not.
-dsp       1                 1: Save quick results. 0: Not.
-fsc       0                 1: Calculate and log FSC. 0: Not.
                      """)
        form.addParallelSection(threads=1, mpi=1)
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        form.addParam(
            "alignFrameRange",
            IntParam,
            default=-1,
            label="Number frames per movie ",
            help="How many frames per monie. -1 -> all frames ",
        )
        form.addParam(
            "doApplyDoseFilter",
            BooleanParam,
            default=True,
            label="Apply Dose filter",
            help="Apply a dose-dependent filter to frames before summing them",
        )
        form.addParam(
            "exposurePerFrame",
            FloatParam,
            label="Exposure per frame (e/A^2)",
            help="Exposure per frame, in electrons per square Angstrom",
        )

        # group = form.addGroup('Expert Options')
        form.addParam(
            "minShiftInitSearch",
            FloatParam,
            default=2.0,
            label="Min. Shift Initial search (A)",
            help="Initial search will be limited to between the inner and outer radii",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "OutRadShiftLimit",
            FloatParam,
            default=200.0,
            label="Outer radius shift limit (A)",
            help="The maximum shift of each alignment step will be limited to this value",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "Bfactor",
            FloatParam,
            default=1500.0,
            label="B-factor (A^2)",
            help="B-factor to apply to images (A^2)",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "HWVertFourMask",
            IntParam,
            default=1,
            label="Half-width vertical Fourier mask",
            help="The vertical line mask will be twice this size. The central cross mask helps reduce problems by line artefacts from the detector",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "HWHoriFourMask",
            IntParam,
            default=1,
            label="Half-width horizontal Fourier mask",
            help="The horizontal line mask will be twice this size. The central cross mask helps reduce problems by line artefacts from the detector",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "terminationShiftThreshold",
            FloatParam,
            default=0.1,
            label="Termination shift threshold",
            help="Alignment will stop at this number, even if the threshold shift is not reached",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "maximumNumberIterations",
            IntParam,
            default=10,
            label="Maximum number of iterations",
            help="Maximum number of iterations",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "doRestoreNoisePower",
            BooleanParam,
            default=True,
            label="Restore Noise Power? ",
            help="Restore Noise Power? ",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParam(
            "doVerboseOutput",
            BooleanParam,
            default=False,
            label="Verbose Output?",
            help="Verbose Output?",
            expertLevel=LEVEL_ADVANCED,
        )
        form.addParallelSection(threads=1, mpi=1)
Exemple #15
0
    def _defineParams(self, form):
        ProtProcessMovies._defineParams(self, form)
        form.addParam('alignFrameRange',
                      IntParam,
                      default=-1,
                      label='Number frames per movie ',
                      help='How many frames per monie. -1 -> all frames ')
        form.addParam('doApplyDoseFilter',
                      BooleanParam,
                      default=True,
                      label='Apply Dose filter',
                      help='Apply a dose-dependent filter to frames before '
                      'summing them')
        form.addParam('exposurePerFrame',
                      FloatParam,
                      label='Exposure per frame (e/A^2)',
                      help='Exposure per frame, in electrons per square '
                      'Angstrom')

        #group = form.addGroup('Expert Options')
        form.addParam('minShiftInitSearch',
                      FloatParam,
                      default=2.,
                      label='Min. Shift Initial search (A)',
                      help='Initial search will be limited to between the '
                      'inner and outer radii',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('OutRadShiftLimit',
                      FloatParam,
                      default=200.,
                      label='Outer radius shift limit (A)',
                      help='The maximum shift of each alignment step will be '
                      'limited to this value',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('Bfactor',
                      FloatParam,
                      default=1500.,
                      label='B-factor (A^2)',
                      help='B-factor to apply to images (A^2)',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('HWVertFourMask',
                      IntParam,
                      default=1,
                      label='Half-width vertical Fourier mask',
                      help='The vertical line mask will be twice this size. '
                      'The central cross mask helps reduce problems by '
                      'line artefacts from the detector',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('HWHoriFourMask',
                      IntParam,
                      default=1,
                      label='Half-width horizontal Fourier mask',
                      help='The horizontal line mask will be twice this size. '
                      'The central cross mask helps reduce problems by '
                      'line artefacts from the detector',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('terminationShiftThreshold',
                      FloatParam,
                      default=0.1,
                      label='Termination shift threshold',
                      help='Alignment will stop at this number, even if the '
                      'threshold shift is not reached',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('maximumNumberIterations',
                      IntParam,
                      default=10,
                      label='Maximum number of iterations',
                      help='Maximum number of iterations',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('doRestoreNoisePower',
                      BooleanParam,
                      default=True,
                      label='Restore Noise Power? ',
                      help='Restore Noise Power? ',
                      expertLevel=LEVEL_ADVANCED)
        form.addParam('doVerboseOutput',
                      BooleanParam,
                      default=False,
                      label='Verbose Output?',
                      help='Verbose Output?',
                      expertLevel=LEVEL_ADVANCED)
        form.addParallelSection(threads=1, mpi=1)