def readParamsFromOptimiserFile(self, iternum):
		"""
		read the recon_it000_optimiser.star file to get iteration parameters,
		such as symmetry and phase residual cutoff
		"""
		iterparams = {'iternum': iternum,}
		#recondir = os.path.join(self.params['rundir'], "recon")
		recondir = self.params['rundir']

		optimiserfile = "recon_it%03d_optimiser.star"%(iternum)
		optimiserfilepath = os.path.join(recondir, optimiserfile)
		
		# Create a dictionary of parameters found in the optimiser file
		paramdict = {}
		
		### parse optimiser file to populate dictionary
		f = starFile.StarFile( optimiserfilepath )
		f.read()
		dataBlock = f.getDataBlock("data_optimiser_general")
		paramdict = dataBlock.getLabelDict()
		header    = f.getHeader()
		
		# Parse the header for the command line options used to run relion
		sheader = header.strip()
		bits = sheader.split("--")
		for bit in bits:
			params = bit.split()
			key = params[0]
			if len(params) > 1 :
				value = params[1]
				paramdict[key] = value
			else:
				paramdict[key] = True
		
		if 'ini_high' not in paramdict:
			paramdict['ini_high'] = 0
		
		iterparams['ctf']                     = self.convertBool(paramdict['_rlnDoCorrectCtf']) if paramdict['_rlnDoCorrectCtf'] else False
		iterparams['ctf_intact_first_peak']   = self.convertBool(paramdict['_rlnDoIgnoreCtfUntilFirstPeak']) if paramdict['_rlnDoIgnoreCtfUntilFirstPeak'] else False
		iterparams['ctf_corrected_ref']       = self.convertBool(paramdict['_rlnRefsAreCtfCorrected']) if paramdict['_rlnRefsAreCtfCorrected'] else False
		iterparams['offset_step']             = int(paramdict['offset_step'])
		iterparams['auto_local_healpix_order'] = int(paramdict['_rlnAutoLocalSearchesHealpixOrder'])
		iterparams['healpix_order']           = int(paramdict['healpix_order'])
		iterparams['offset_range']            = int(paramdict['offset_range'])
		iterparams['ini_high']                = int(paramdict['ini_high'])
		iterparams['sym']                     = paramdict['sym']

		### convert symetry to Appion
		symtext = apFrealign.convertFrealignSymToAppionSym(iterparams['sym'])
		symmdata = apSymmetry.findSymmetry(symtext)
		apDisplay.printMsg("Found symmetry %s with id %s"%(symmdata['eman_name'], symmdata.dbid))
		iterparams['symmdata'] = symmdata
		
		return iterparams
	def readParamsFromOptimiserFile(self, iternum):
		"""
		read the recon_it000_optimiser.star file to get iteration parameters,
		such as symmetry and phase residual cutoff
		"""
		iterparams = {'iternum': iternum,}
		#recondir = os.path.join(self.params['rundir'], "recon")
		recondir = self.params['rundir']

		optimiserfile = "recon_it%03d_optimiser.star"%(iternum)
		optimiserfilepath = os.path.join(recondir, optimiserfile)
		
		# Create a dictionary of parameters found in the optimiser file
		paramdict = {}
		
		### parse optimiser file to populate dictionary
		f = starFile.StarFile( optimiserfilepath )
		f.read()
		dataBlock = f.getDataBlock("data_optimiser_general")
		paramdict = dataBlock.getLabelDict()
		header    = f.getHeader()
		
		# Parse the header for the command line options used to run relion
		sheader = header.strip()
		bits = sheader.split("--")
		for bit in bits:
			params = bit.split()
			key = params[0]
			if len(params) > 1 :
				value = params[1]
				paramdict[key] = value
			else:
				paramdict[key] = True
		
		if 'ini_high' not in paramdict:
			paramdict['ini_high'] = 0
		
		iterparams['ctf']                     = self.convertBool(paramdict['_rlnDoCorrectCtf']) if paramdict['_rlnDoCorrectCtf'] else False
		iterparams['ctf_intact_first_peak']   = self.convertBool(paramdict['_rlnDoIgnoreCtfUntilFirstPeak']) if paramdict['_rlnDoIgnoreCtfUntilFirstPeak'] else False
		iterparams['ctf_corrected_ref']       = self.convertBool(paramdict['_rlnRefsAreCtfCorrected']) if paramdict['_rlnRefsAreCtfCorrected'] else False
		iterparams['offset_step']             = int(paramdict['offset_step'])
		iterparams['auto_local_healpix_order'] = int(paramdict['_rlnAutoLocalSearchesHealpixOrder'])
		iterparams['healpix_order']           = int(paramdict['healpix_order'])
		iterparams['offset_range']            = int(paramdict['offset_range'])
		iterparams['ini_high']                = int(paramdict['ini_high'])
		iterparams['sym']                     = paramdict['sym']

		### convert symetry to Appion
		symtext = apFrealign.convertFrealignSymToAppionSym(iterparams['sym'])
		symmdata = apSymmetry.findSymmetry(symtext)
		apDisplay.printMsg("Found symmetry %s with id %s"%(symmdata['eman_name'], symmdata.dbid))
		iterparams['symmdata'] = symmdata
		
		return iterparams
    def readParamsFromCombineFile(self, iternum):
        """
		read the combine file to get iteration parameters,
		such as symmetry and phase residual cutoff
		"""
        iterparams = {
            'iternum': iternum,
        }
        recondir = os.path.join(self.params['rundir'], "recon")

        combinefile = "iter%03d/frealign.iter%03d.proc%03d.sh" % (
            iternum, iternum, iternum)
        conbinefilepath = os.path.join(recondir, combinefile)
        apDisplay.printMsg("Reading combine file %s for parameters" %
                           (conbinefilepath))
        f = open(conbinefilepath, "r")
        ### locate start
        for line in f:
            if line.startswith("### START FREALIGN ###"):
                break

        ### parse file
        cards = []
        for line in f:
            cards.append(line.strip())
            if line.startswith("EOF"):
                break
        f.close()

        ### get lots of info from card #1
        data = cards[1].split(",")
        #print data
        iterparams['cform'] = data[0]
        iterparams['iflag'] = int(data[1])
        iterparams['fmag'] = self.convertBool(data[2])
        iterparams['fdef'] = self.convertBool(data[3])
        iterparams['fastig'] = self.convertBool(data[4])
        iterparams['fpart'] = self.convertBool(data[5])
        iterparams['iewald'] = float(data[6])
        iterparams['fbeaut'] = self.convertBool(data[7])
        iterparams['fcref'] = self.convertBool(data[8])
        iterparams['fbfact'] = self.convertBool(data[9])
        iterparams['fmatch'] = self.convertBool(data[10])
        iterparams['ifsc'] = self.convertBool(data[11])
        iterparams['fstat'] = self.convertBool(data[12])
        iterparams['iblow'] = int(data[13])

        ### get lots of info from card #2
        data = cards[2].split(",")
        #print data
        iterparams['mask'] = float(data[0])
        iterparams['imask'] = float(data[1])
        iterparams['wgh'] = float(data[3])
        iterparams['xstd'] = float(data[4])
        iterparams['pbc'] = float(data[5])
        iterparams['boff'] = float(data[6])
        iterparams['dang'] = float(data[7])  ### only used for recon search
        iterparams['itmax'] = int(data[8])
        iterparams['ipmax'] = int(data[9])

        ### get symmetry info from card #5
        apDisplay.printMsg("Found Frealign symmetry %s in card 5" %
                           (cards[5], ))
        symtext = apFrealign.convertFrealignSymToAppionSym(cards[5])
        print symtext
        symmdata = apSymmetry.findSymmetry(symtext)
        apDisplay.printMsg("Found symmetry %s with id %s" %
                           (symmdata['eman_name'], symmdata.dbid))
        iterparams['symmdata'] = symmdata

        ### get threshold info from card #6
        data = cards[6].split(",")
        #print data
        iterparams['target'] = float(data[2])
        iterparams['thresh'] = float(data[3])
        iterparams['cs'] = float(data[4])

        ### get limit info from card #7
        data = cards[7].split(",")
        #print data
        iterparams['rrec'] = float(data[0])
        iterparams['highpass'] = float(data[1])
        iterparams['lowpass'] = float(data[2])
        iterparams['rbfact'] = float(data[4])

        #print iterparams
        return iterparams
	def readParamsFromCombineFile(self, iternum):
		"""
		read the combine file to get iteration parameters,
		such as symmetry and phase residual cutoff
		"""
		iterparams = {'iternum': iternum,}
		recondir = os.path.join(self.params['rundir'], "recon")

		combinefile = "iter%03d/frealign.iter%03d.proc%03d.sh"%(iternum, iternum, iternum)
		conbinefilepath = os.path.join(recondir, combinefile)
		apDisplay.printMsg("Reading combine file %s for parameters"%(conbinefilepath))
		f = open(conbinefilepath, "r")
		### locate start
		for line in f:
			if line.startswith("### START FREALIGN ###"):
				break

		### parse file
		cards = []
		for line in f:
			cards.append(line.strip())
			if line.startswith("EOF"):
				break
		f.close()

		### get lots of info from card #1
		data = cards[1].split(",")
		#print data
		iterparams['cform'] = data[0]
		iterparams['iflag'] = int(data[1])
		iterparams['fmag'] = self.convertBool(data[2])
		iterparams['fdef'] = self.convertBool(data[3])
		iterparams['fastig'] = self.convertBool(data[4])
		iterparams['fpart'] = self.convertBool(data[5])
		iterparams['iewald'] = float(data[6])
		iterparams['fbeaut'] = self.convertBool(data[7])
		iterparams['fcref'] = self.convertBool(data[8])
		iterparams['fbfact'] = self.convertBool(data[9])
		iterparams['fmatch'] = self.convertBool(data[10])
		iterparams['ifsc'] = self.convertBool(data[11])
		iterparams['fstat'] = self.convertBool(data[12])
		iterparams['iblow'] = int(data[13])

		### get lots of info from card #2
		data = cards[2].split(",")
		#print data
		iterparams['mask'] = float(data[0])
		iterparams['imask'] = float(data[1])
		iterparams['wgh'] = float(data[3])
		iterparams['xstd'] = float(data[4])
		iterparams['pbc'] = float(data[5])
		iterparams['boff'] = float(data[6])
		iterparams['dang'] = float(data[7]) ### only used for recon search
		iterparams['itmax'] = int(data[8])
		iterparams['ipmax'] = int(data[9])

		### get symmetry info from card #5
		apDisplay.printMsg("Found Frealign symmetry %s in card 5"%(cards[5], ))
		symtext = apFrealign.convertFrealignSymToAppionSym(cards[5])
		print symtext
		symmdata = apSymmetry.findSymmetry(symtext)
		apDisplay.printMsg("Found symmetry %s with id %s"%(symmdata['eman_name'], symmdata.dbid))
		iterparams['symmdata'] = symmdata

		### get threshold info from card #6
		data = cards[6].split(",")
		#print data
		iterparams['target'] = float(data[2])
		iterparams['thresh'] = float(data[3])
		iterparams['cs'] = float(data[4])

		### get limit info from card #7
		data = cards[7].split(",")
		#print data
		iterparams['rrec'] = float(data[0])
		iterparams['highpass'] = float(data[1])
		iterparams['lowpass'] = float(data[2])
		iterparams['rbfact'] = float(data[4])

		#print iterparams
		return iterparams