예제 #1
0
	def generateDensMap(self,
						labelsInit  = [],
						labelsLater = []):

		# run FFT job to generate density map

		self.printStepNumber()
		if self.densMapType in ('DIFF','SIMPLE'):
			tags = ['FP_',
					'SIGFP_',
					'FOM_']
			labelsInit 	= [i+self.initPDB for i in tags] + ['PHIC_'+self.phaseDataset]
			labelsLater = [i+self.laterPDB for i in tags] + ['PHIC_'+self.phaseDataset]

		if self.densMapType == '2FOFC':
			labelsInit 	= ['']*4
			labelsLater = ['FWT_{}'.format(self.laterPDB),'','','PHIC']
		
		if self.densMapType != 'END':
			fft = FFTjob(mapType   = self.densMapType,
						 mapTag    = self.mapTag,
						 FOMweight = self.FOMweight,
						 pdbFile   = self.reorderedPDBFile,
						 mtzFile   = self.densMapMtz,
					     outputDir = self.outputDir,
					     axes      = self.axes,
					     gridSamps = self.gridSamps,
					     labels1   = labelsLater,
					     labels2   = labelsInit,
					     runLog    = self.runLog)
			success = fft.run()
			self.densityMap = fft.outputMapFile

		else:
			# run END job if required (may take time to run!!)
			endInputPDB = self.pdbcurPDBinputFile
			endInputMTZ = ''.join(endInputPDB.split('.')[:-1]+['.mtz'])
			endInputEFF = ''.join(endInputPDB.split('.')[:-1]+['.eff'])
			
			end = ENDjob(pdbFile   = endInputPDB,
						 mtzFile   = endInputMTZ,
						 effFile   = endInputEFF,
						 outputDir = self.outputDir,
						 gridSamps = self.gridSamps,
						 runLog    = self.runLog)
			success = end.run()
			self.densityMap = end.outputMapFile
		return success
예제 #2
0
    def generateCCP4DensMap(self,
                            labelsInit=[], labelsLater=[]):

        # run FFT job to generate density map

        self.printStepNumber()

        densMap = '{}{}_FFT.map'.format(self.outputDir, self.densMapNaming)

        if self.densMapType in ('DIFF', 'HIGHONLY'):
            # note that the distinction in these options only comes
            # apparent in FFTjob.py. Even though HIGHONLY'
            # calculate maps using only the later dataset info, dummy
            # information for labelsInit is provided anyway for simplicity
            tags = ['FP_', 'SIGFP_', 'FOM_']
            labelsInit = [i+self.Mtz1LabelRename for i in tags] +\
                         ['PHIC_'+self.Mtz3LabelRename]
            labelsLater = [i+self.Mtz2LabelRename for i in tags] +\
                          ['PHIC_'+self.Mtz3LabelRename]

        if self.densMapType == '2FOFC':
            if self.useLaterCellDims:
                labelsInit = ['']*4
                labelsLater = ['FWT{}'.format(self.Mtz2LabelRename),
                               '', '', 'PHIC']
            else:
                labelsLater = ['']*4
                labelsInit = ['FWT{}'.format(self.Mtz2LabelRename),
                              '', '', 'PHIC']

        if self.densMapType != 'END':

            fft = FFTjob(
                mapType=self.densMapType, mapTag=self.mapTag,
                FOMweight=self.FOMweight, runLog=self.runLog,
                pdbFile=self.reorderedPDBFile, outputMapFile=densMap,
                mtzFile=self.densMapMtz, useSigLabs=not self.ignoreSIGFs,
                outputDir=self.outputDir, axes=self.axes,
                gridSamps=self.gridSamps, labels1=labelsLater,
                labels2=labelsInit,
                lowResCutoff=self.mapResLimits.split(',')[1],
                highResCutoff=self.mapResLimits.split(',')[0])

            if self.useLaterCellDims:
                fft.labels1 = labelsLater
                fft.labels2 = labelsInit
            else:
                fft.labels1 = labelsInit
                fft.labels2 = labelsLater

            success = fft.run()
            self.densityMap = fft.outputMapFile

            if success and not self.useLaterCellDims:
                m = self.multiplyMapByFactor(map=self.densityMap)
                self.densityMap = m

        else:
            # run END job if required (may take time to run!!)
            endInputPDB = self.inputPDBfile
            endInputMTZ = ''.join(endInputPDB.split('.')[:-1]+['.mtz'])
            endInputEFF = ''.join(endInputPDB.split('.')[:-1]+['.eff'])

            end = ENDjob(pdbFile=endInputPDB, mtzFile=endInputMTZ,
                         effFile=endInputEFF, outputDir=self.outputDir,
                         gridSamps=self.gridSamps, runLog=self.runLog)
            success = end.run()
            self.densityMap = end.outputMapFile

        if not success:
            error(text='Failure to successfully generate density map',
                  log=self.runLog)
예제 #3
0
	def runPipeline(self):

		# read input file first
		success = self.readInputFile()
		if success is False:
			return 1

		# create log file
		self.runLog = logFile('{}/{}_runLog_2.txt'.format(self.outputDir,self.jobName))

		# run pdbcur job 
		pdbcur = PDBCURjob(self.pdbcurPDBinputFile,self.outputDir,self.runLog)
		success = pdbcur.run()
		if success is False:
			return 2

		self.PDBCURoutputFile = pdbcur.outputPDBfile

		# reorder atoms in PDB file
		self.renumberPDBFile()

		# get space group from PDB file
		success = self.getSpaceGroup()
		if success is False:
			return 3

		# run SFALL job
		sfall = SFALLjob(self.reorderedPDBFile,self.outputDir,self.sfall_VDWR,
						 self.spaceGroup,self.sfall_GRID,'ATMMOD',self.runLog)
		success = sfall.run()
		if success is False:
			return 4

		# run FFT job
		sfallMap = mapTools(sfall.outputMapFile)
		axes = [sfallMap.fastaxis,sfallMap.medaxis,sfallMap.slowaxis]
		gridSamps = [sfallMap.gridsamp1,sfallMap.gridsamp2,sfallMap.gridsamp3]
		labelsInit = ['FP_'+self.initPDB,'SIGFP_'+self.initPDB,'FOM_'+self.initPDB,'PHIC_'+self.initPDB]
		labelsLater = ['FP_'+self.laterPDB,'SIGFP_'+self.laterPDB,'FOM_'+self.laterPDB,'PHIC_'+self.laterPDB]
		
		if self.densMapType != 'END':
			fft = FFTjob(self.densMapType,self.FOMweight,self.reorderedPDBFile,self.inputMtzFile,
						 self.outputDir,axes,gridSamps,labelsLater,labelsInit,self.runLog)
			success = fft.run()
		else:
			# run END job if required (may take time to run!!)
			endInputPDB = self.pdbcurPDBinputFile
			endInputMTZ = ''.join(endInputPDB.split('.')[:-1]+['.mtz'])
			endInputEFF = ''.join(endInputPDB.split('.')[:-1]+['.eff'])
			end = ENDjob(endInputPDB,endInputMTZ,endInputEFF,self.outputDir,gridSamps,self.runLog)
			success = end.run()

		if success is False:
			return 5

		# crop fft and atom-tagged maps to asymmetric unit:
		mapmask1 = MAPMASKjob(sfall.outputMapFile,'',self.outputDir,self.runLog)
		success = mapmask1.crop2AsymUnit()
		if success is False:
			return 6

		# choose correct density map to include in MAPMASK cropping below
		if self.densMapType != 'END':
			inputDensMap = fft.outputMapFile
		else: 
			inputDensMap = end.outputMapFile

		# switch END map axes to match SFALL atom-tagged map if required
		if self.densMapType == 'END':
			mapmask_ENDmap = MAPMASKjob(inputDensMap,'',self.outputDir,self.runLog)
			success = mapmask_ENDmap.switchAxisOrder(axes,self.spaceGroup)
		if success is False:
			return 7.0
		else: inputDensMap = mapmask_ENDmap.outputMapFile

		# run MAPMASK job to crop fft density map to asym unit
		mapmask2 = MAPMASKjob(inputDensMap,'',self.outputDir,self.runLog)
		success = mapmask2.crop2AsymUnit()
		if success is False:
			return 7.1

		# run MAPMASK job to crop fft density map to same grid 
		# sampling dimensions as SFALL atom map
		mapmask3 = MAPMASKjob(mapmask2.outputMapFile,mapmask1.outputMapFile,self.outputDir,self.runLog)
		success = mapmask3.cropMap2Map()
		if success is False:
			return 8

		# perform map consistency check between cropped fft and sfall maps
		fftMap = mapTools(mapmask3.outputMapFile)
		fftMap.readHeader()
		sfallMap = mapTools(mapmask1.outputMapFile)
		sfallMap.readHeader()
		success = self.mapConsistencyCheck(sfallMap,fftMap)
		if success is False:
			return 9
		else:
			return 0