
from CCP4PluginScript import CInternalPlugin,CPluginScript
from PyQt4 import QtCore
import os,glob,re,time,sys
import CCP4XtalData
from lxml import etree
import math
import CCP4Modules,CCP4Utils

class hklin2cif(CPluginScript):
    DESCRIPTION = 'Perform multiple alignment'
    TASKNAME = 'hklin2cif'                                  # Task name - should be same as class name
    TASKVERSION= 0.0                                     # Version of this plugin
    ASYNCHRONOUS = False
    TIMEOUT_PERIOD =3.
    TASKCOMMAND='mtz2cif'

    ERROR_CODES = {  200 : { 'description' : 'Failed to add item to mol list' },201 : { 'description' : 'Failed to setFullPath' },}
    
    def __init__(self,*args,**kws):
        CPluginScript.__init__(self, *args,**kws)
        self.xmlroot = etree.Element('Hklin2cif')

    def makeCommandAndScript(self):
        self.outputCifPath = os.path.normpath(os.path.join(self.getWorkDirectory(),'Reflections.cif'))
        self.appendCommandLine(['HKLIN',self.container.inputData.HKLIN.__str__(),'HKLOUT',self.outputCifPath])
        columns = self.container.inputData.HKLIN.fileContent.listOfColumns
        columnLabels = [column.columnLabel for column in columns]
        self.appendCommandScript('DATABLOCK data_ForSubmission')
        labinLine = 'labin'
        if 'I' in columnLabels and 'SIGI' in columnLabels:
            labinLine += ' I=I SIGI=SIGI'
        elif 'F' in columnLabels and 'SIGF' in columnLabels:
            labinLine += ' FP=F SIGFP=SIGF'
        elif 'Iplus' in columnLabels and 'SIGIplus' in columnLabels and 'Iminus' in columnLabels and 'SIGIminus' in columnLabels:
            labinLine += ' I(+)=Iplus SIGI(+)=SIGIplus I(-)=Iminus SIGI(-)=SIGIminus'
        elif 'Fplus' in columnLabels and 'SIGFplus' in columnLabels and 'Fminus' in columnLabels and 'SIGFminus' in columnLabels:
            labinLine += ' F(+)=Fplus SIGF(+)=SIGFplus F(-)=Fminus SIGF(-)=SIGFminus'
        
        if 'FREER' in columnLabels: labinLine += ' FREE=FREER'
        self.appendCommandScript(labinLine)
        
        return CPluginScript.SUCCEEDED

    def processOutputFiles(self):
        self.container.outputData.CIFFILE.setFullPath(self.outputCifPath)
        self.container.outputData.CIFFILE.annotation = 'Cif file of observations used in refinement'
        return CPluginScript.SUCCEEDED
