def createImagicBatchFileScaling(self):
        # IMAGIC batch file creation

        filename = os.path.join(self.params['rundir'], "prepareStack.batch")
        f = open(filename, 'w')
        f.write("#!/bin/csh -f\n")
        f.write("setenv IMAGIC_BATCH 1\n")

        append_log = False  ### log file for imagic MRA, appended only if options are given

        #### Bin down stack, low-pass filter and high-pass filter images

        if self.params['bin'] > 1:
            f.write(
                str(self.imagicroot) +
                "/stand/coarse.e <<EOF > prepareStack.log\n")
            f.write("start\n")
            f.write("start_coarse\n")
            f.write(str(self.params['bin']) + "\n")
            f.write("EOF\n")
            f.write(
                str(self.imagicroot) +
                "/stand/im_rename.e <<EOF >> prepareStack.log\n")
            f.write("start_coarse\n")
            f.write("start\n")
            f.write("EOF\n")
            append_log = True
        if self.params['highpass'] is not None and self.params[
                'lowpass'] is not None:
            ### convert to IMAGIC-specific filtering parameters
            highpass, lowpass = apIMAGIC.convertFilteringParameters(
                self.params['highpass'], self.params['lowpass'],
                self.params['apix'])
            f.write(
                str(self.imagicroot) + "/incore/incband.e OPT BAND-PASS <<EOF")
            if append_log is True:
                f.write(" >> prepareStack.log\n")
            else:
                f.write(" > prepareStack.log\n")
            f.write("start\n")
            f.write("start_filt\n")
            f.write(str(highpass) + "\n")
            f.write("0\n")
            f.write(str(lowpass) + "\n")
            f.write("NO\n")
            f.write("EOF\n")
            f.write(
                str(self.imagicroot) +
                "/stand/im_rename.e <<EOF >> prepareStack.log\n")
            f.write("start_filt\n")
            f.write("start\n")
            f.write("EOF\n")
            append_log = True

        f.close()

        return filename
    def createImagicBatchFileScaling(self):
        # IMAGIC batch file creation

        filename = os.path.join(self.params["rundir"], "prepareStack.batch")
        f = open(filename, "w")
        f.write("#!/bin/csh -f\n")
        f.write("setenv IMAGIC_BATCH 1\n")

        append_log = False  ### log file for imagic MRA, appended only if options are given

        #### Bin down stack, low-pass filter and high-pass filter images

        if self.params["bin"] > 1:
            f.write(str(self.imagicroot) + "/stand/coarse.e <<EOF > prepareStack.log\n")
            f.write("start\n")
            f.write("start_coarse\n")
            f.write(str(self.params["bin"]) + "\n")
            f.write("EOF\n")
            f.write(str(self.imagicroot) + "/stand/im_rename.e <<EOF >> prepareStack.log\n")
            f.write("start_coarse\n")
            f.write("start\n")
            f.write("EOF\n")
            append_log = True
        if self.params["highpass"] is not None and self.params["lowpass"] is not None:
            ### convert to IMAGIC-specific filtering parameters
            highpass, lowpass = apIMAGIC.convertFilteringParameters(
                self.params["highpass"], self.params["lowpass"], self.params["apix"]
            )
            f.write(str(self.imagicroot) + "/incore/incband.e OPT BAND-PASS <<EOF")
            if append_log is True:
                f.write(" >> prepareStack.log\n")
            else:
                f.write(" > prepareStack.log\n")
            f.write("start\n")
            f.write("start_filt\n")
            f.write(str(highpass) + "\n")
            f.write("0\n")
            f.write(str(lowpass) + "\n")
            f.write("NO\n")
            f.write("EOF\n")
            f.write(str(self.imagicroot) + "/stand/im_rename.e <<EOF >> prepareStack.log\n")
            f.write("start_filt\n")
            f.write("start\n")
            f.write("EOF\n")
            append_log = True

        f.close()

        return filename
    def createImagicBatchFileMRA(self):
        # IMAGIC batch file creation

        ##### DELETE HEADERS!!!!!!!!!!

        apIMAGIC.copyFile(self.params['rundir'], "start.hed", headers=True)
        apIMAGIC.copyFile(self.params['rundir'],
                          "references.hed",
                          headers=True)

        filename = os.path.join(self.params['rundir'], "imagicMRA.batch")
        f = open(filename, 'w')
        f.write("#!/bin/csh -f\n")
        f.write("setenv IMAGIC_BATCH 1\n")

        append_log = False  ### log file for imagic MRA, appended only if options are given

        #### OPTION OF PREPARING MULTI-REFERENCE ALIGNMENT REFERENCES

        if (self.params['refs'] is True
                and self.params['thresh_refs'] is not None
                and self.params['maskrad_refs'] is not None):
            f.write(str(self.imagicroot) + "/align/alirefs.e <<EOF")
            if append_log is True:
                f.write(" >> multiReferenceAlignment.log\n")
            else:
                f.write(" > multiReferenceAlignment.log\n")
            f.write("ALL\n")
            f.write("CCF\n")
            f.write("references\n")
            f.write("NO\n")
            f.write(str(self.params['maskrad_refs']) + "\n")
            f.write("references_prep\n")
            f.write(str(self.params['thresh_refs']) + "\n")
            f.write("0.1\n")
            f.write("-180,180\n")
            if self.params['mirror'] is True:
                f.write("YES\n")
                f.write("NO\n")
                f.write("TANDEM\n")
            else:
                f.write("NO\n")
            f.write("5\n")
            f.write("NO\n")
            f.write("EOF\n")
            f.write(
                str(self.imagicroot) +
                "/stand/im_rename.e <<EOF >> multiReferenceAlignment.log\n")
            f.write("references_prep\n")
            f.write("references\n")
            f.write("EOF\n")
            append_log = True

        ### if centering is specified, center particle in a reference-free translational alignment to the total sum
        if self.params['center'] is True:
            if self.params['nproc'] > 1:
                f.write(str(self.imagicroot)+"/openmpi/bin/mpirun -np "+str(self.params['nproc'])+\
                        " -x IMAGIC_BATCH "+str(self.imagicroot)+"/align/alimass.e_mpi <<EOF")
                if append_log is True:
                    f.write(" >> multiReferenceAlignment.log\n")
                else:
                    f.write(" > multiReferenceAlignment.log\n")
                f.write("YES\n")
                f.write(str(self.params['nproc']) + "\n")
            else:
                f.write(str(self.imagicroot) + "/align/alimass.e <<EOF")
                if append_log is True:
                    f.write(" >> multiReferenceAlignment.log\n")
                else:
                    f.write(" > multiReferenceAlignment.log\n")
                f.write("NO\n")

            f.write("start\n")
            f.write("start_cent\n")
            f.write("TOTSUM\n")
            f.write("CCF\n")
            f.write(str(self.params['max_shift_orig']) + "\n")
            f.write("3\n")
            f.write("NO_FILTER\n")
            f.write("EOF\n")
            #                       f.write(str(self.imagicroot)+"/stand/im_rename.e <<EOF >> multiReferenceAlignment.log\n")
            #                       f.write("start_cent\n")
            #                       f.write("start\n")
            #                       f.write("EOF\n")
            append_log = True

        ### multi-reference alignment
        if self.params['nproc'] > 1:
            f.write(str(self.imagicroot)+"/openmpi/bin/mpirun -np "+str(self.params['nproc'])+\
                    " -x IMAGIC_BATCH "+str(self.imagicroot)+"/align/mralign.e_mpi <<EOF")
            ### there is a bug in IMAGIC that makes the logfile tremendously big
            #                       if append_log is True:
            #                               f.write(" >> multiReferenceAlignment.log\n")
            #                       else:
            #                               f.write(" > multiReferenceAlignment.log\n")

            f.write("\n")

            f.write("YES\n")
            f.write(str(self.params['nproc']) + "\n")
        else:
            f.write(str(self.imagicroot) + "/align/mralign.e <<EOF")
            ### there is a bug in IMAGIC that makes the logfile tremendously big
            #                       if append_log is True:
            #                               f.write(" >> multiReferenceAlignment.log\n")
            #                       else:
            #                               f.write(" > multiReferenceAlignment.log\n")

            f.write("\n")

            f.write("NO\n")

        f.write("FRESH\n")
        f.write("ALL_REFERENCES\n")
        f.write("ALIGNMENT\n")
        f.write("%s\n" % (self.params['alignment_type']))
        if self.params['alignment_type'].lower() == "all":
            f.write("%s\n" % (self.params['first_alignment']))
        if self.params['alignment_type'].lower() == "brute_force":
            f.write("%d\n" % (self.params['num_orientations']))
        f.write("CCF\n")
        if self.params['center'] is True:
            f.write("start_cent\n")
        else:
            f.write("start\n")
        f.write("alignstack\n")
        f.write("start\n")
        f.write("references\n")
        if self.params['lowpass_refs'] is not None:
            hpfilt_imagic, lpfilt_imagic = apIMAGIC.convertFilteringParameters(
                "", self.params['lowpass_refs'], self.params['apix'])
            f.write("LOWPASS\n")
            f.write(str(lpfilt_imagic) + "\n")
        else:
            f.write("NO\n")
        f.write("NO\n")
        f.write(str(self.params['max_shift_orig']) + "\n")
        if self.params['center'] is True:
            f.write(str(self.params['max_shift_this']) + "\n")
        f.write("-180,180\n")
        if self.params['center'] is True:
            f.write("-180,180\n")
        f.write("INTERACTIVE\n")
        f.write(str(self.params['samp_param']) + "\n")
        f.write(
            str(self.params['minrad']) + "," + str(self.params['maxrad']) +
            "\n")
        f.write(str(self.params['numiter']) + "\n")
        f.write("NO\n")
        f.write("EOF\n")

        ### write out alignment parameters to file
        f.write(
            str(self.imagicroot) +
            "/stand/headers.e <<EOF >> multiReferenceAlignment.log\n")
        f.write("PLT\n")
        f.write("INDEX\n")
        f.write("NUMBER_OF_INDEX\n")
        f.write("100;112;113;104;107\n"
                )  ### rotation, shiftx, shifty, ccc, reference num
        #               f.write("NO\n")
        f.write("alignstack\n")
        f.write("outparams.plt\n")
        f.write("EOF\n")

        f.close()

        return filename
	def createImagicBatchFileMRA(self):
		# IMAGIC batch file creation

		##### DELETE HEADERS!!!!!!!!!!
		
		apIMAGIC.copyFile(self.params['rundir'], "start.hed", headers=True)
		apIMAGIC.copyFile(self.params['rundir'], "references.hed", headers=True)		

		filename = os.path.join(self.params['rundir'], "imagicMRA.batch")
		f = open(filename, 'w')
		f.write("#!/bin/csh -f\n")
		f.write("setenv IMAGIC_BATCH 1\n")

		append_log = False ### log file for imagic MRA, appended only if options are given

		#### OPTION OF PREPARING MULTI-REFERENCE ALIGNMENT REFERENCES

		if (self.params['refs'] is True and self.params['thresh_refs'] is not None and self.params['maskrad_refs'] is not None):
			f.write(str(self.imagicroot)+"/align/alirefs.e <<EOF")
			if append_log is True:
				f.write(" >> multiReferenceAlignment.log\n")
			else:
				f.write(" > multiReferenceAlignment.log\n")
			f.write("ALL\n")
			f.write("CCF\n")
			f.write("references\n")
			f.write("NO\n")
			f.write(str(self.params['maskrad_refs'])+"\n")
			f.write("references_prep\n")
			f.write(str(self.params['thresh_refs'])+"\n")
			f.write("0.1\n")
			f.write("-180,180\n")
			if self.params['mirror'] is True:
				f.write("YES\n")
				f.write("NO\n")
				f.write("TANDEM\n")
			else:
				f.write("NO\n")
			f.write("5\n")
			f.write("NO\n")
			f.write("EOF\n")
			f.write(str(self.imagicroot)+"/stand/im_rename.e <<EOF >> multiReferenceAlignment.log\n")
			f.write("references_prep\n")
			f.write("references\n")
			f.write("EOF\n")
			append_log = True
			
		### if centering is specified, center particle in a reference-free translational alignment to the total sum
		if self.params['center'] is True:
			if self.params['nproc'] > 1:
				f.write(str(self.imagicroot)+"/openmpi/bin/mpirun -np "+str(self.params['nproc'])+\
					" -x IMAGIC_BATCH "+str(self.imagicroot)+"/align/alimass.e_mpi <<EOF")
				if append_log is True:
					f.write(" >> multiReferenceAlignment.log\n")
				else:
					f.write(" > multiReferenceAlignment.log\n")
				f.write("YES\n")
				f.write(str(self.params['nproc'])+"\n")
			else:
				f.write(str(self.imagicroot)+"/align/alimass.e <<EOF")
				if append_log is True:
					f.write(" >> multiReferenceAlignment.log\n")
				else:
					f.write(" > multiReferenceAlignment.log\n")
				f.write("NO\n")
				
			f.write("start\n")
			f.write("start_cent\n")
			f.write("TOTSUM\n")
			f.write("CCF\n")
			f.write(str(self.params['max_shift_orig'])+"\n")
			f.write("3\n")
			f.write("NO_FILTER\n")
			f.write("EOF\n")
#			f.write(str(self.imagicroot)+"/stand/im_rename.e <<EOF >> multiReferenceAlignment.log\n")
#			f.write("start_cent\n")
#			f.write("start\n")
#			f.write("EOF\n")
			append_log = True
			
		### multi-reference alignment		
		if self.params['nproc'] > 1:
			f.write(str(self.imagicroot)+"/openmpi/bin/mpirun -np "+str(self.params['nproc'])+\
				" -x IMAGIC_BATCH "+str(self.imagicroot)+"/align/mralign.e_mpi <<EOF")
			### there is a bug in IMAGIC that makes the logfile tremendously big
#			if append_log is True:
#				f.write(" >> multiReferenceAlignment.log\n")
#			else:
#				f.write(" > multiReferenceAlignment.log\n")

			f.write("\n")

			f.write("YES\n")
			f.write(str(self.params['nproc'])+"\n")
		else:
			f.write(str(self.imagicroot)+"/align/mralign.e <<EOF")
			### there is a bug in IMAGIC that makes the logfile tremendously big
#			if append_log is True:
#				f.write(" >> multiReferenceAlignment.log\n")
#			else:
#				f.write(" > multiReferenceAlignment.log\n")

			f.write("\n")

			f.write("NO\n")
			
		f.write("FRESH\n")
		f.write("ALL_REFERENCES\n")
		f.write("ALIGNMENT\n")
		f.write("%s\n" % (self.params['alignment_type']))
		if self.params['alignment_type'].lower() == "all":
			f.write("%s\n" % (self.params['first_alignment']))
		if self.params['alignment_type'].lower() == "brute_force":
			f.write("%d\n" % (self.params['num_orientations']))
		f.write("CCF\n")
		if self.params['center'] is True:
			f.write("start_cent\n")
		else:
			f.write("start\n")
		f.write("alignstack\n")
		f.write("start\n")
		f.write("references\n")
		if self.params['lowpass_refs'] is not None:
			hpfilt_imagic, lpfilt_imagic = apIMAGIC.convertFilteringParameters("", self.params['lowpass_refs'], self.params['apix'])
			f.write("LOWPASS\n")
			f.write(str(lpfilt_imagic)+"\n")
		else:
			f.write("NO\n")
		f.write("NO\n")
		f.write(str(self.params['max_shift_orig'])+"\n")
		if self.params['center'] is True:
			f.write(str(self.params['max_shift_this'])+"\n")
		f.write("-180,180\n")
		if self.params['center'] is True:
			f.write("-180,180\n")
		f.write("INTERACTIVE\n")
		f.write(str(self.params['samp_param'])+"\n")
		f.write(str(self.params['minrad'])+","+str(self.params['maxrad'])+"\n")
		f.write(str(self.params['numiter'])+"\n")	
		f.write("NO\n")
		f.write("EOF\n")
		
		### write out alignment parameters to file
		f.write(str(self.imagicroot)+"/stand/headers.e <<EOF >> multiReferenceAlignment.log\n")
		f.write("PLT\n")
		f.write("INDEX\n")
		f.write("NUMBER_OF_INDEX\n")
		f.write("100;112;113;104;107\n") ### rotation, shiftx, shifty, ccc, reference num
#		f.write("NO\n")
		f.write("alignstack\n")
		f.write("outparams.plt\n")
		f.write("EOF\n")

		f.close()

		return filename