from CCP4ReportParser import *
import sys
from lxml import etree

class gesamt_report(Report):
    # Specify which gui task and/or pluginscript this applies to
    TASKNAME = 'gesamt'
    RUNNING = False
    def __init__(self,xmlnode=None,jobInfo={},jobStatus=None,**kw):
        Report. __init__(self,xmlnode=xmlnode,jobInfo=jobInfo,**kw)
        
        if jobStatus is not None and jobStatus.lower() == 'nooutput':
            return
        
        textDiv = self.addDiv(style='font-size:110%;')
        transformationNodes = self.xmlnode.xpath('//Gesamt/Transformation')
        if len(transformationNodes) ==0:
            messageText = 'No superpositions found : suggest you inspect the log file'
            textDiv.addText(text=messageText)
        elif len(transformationNodes) >1:
            messageText = 'Apparently more than 1 superposition found : report to developer (martin.noble@ncl.ac.uk)'
            textDiv.addText(text=messageText)
        else:
            messageText = 'Superimposed '+transformationNodes[0].get('nRes')+' residues with rms='+transformationNodes[0].get('rms')+' and Q='+transformationNodes[0].get('q')
            textDiv.addText(text=messageText)
            textDiv.append('<br/>')
            messageText = 'Euler angles Alpha='+transformationNodes[0].get('alpha')+', beta='+transformationNodes[0].get('beta')+', gamma='+transformationNodes[0].get('gamma')
            textDiv.addText(text=messageText)
            textDiv.append('<br/>')
            messageText = 'Cartesian shift x='+transformationNodes[0].get('x')+', y='+transformationNodes[0].get('y')+', z='+transformationNodes[0].get('z')
            textDiv.addText(text=messageText)
            textDiv.append('<br/>')
            progressGraph = self.addFlotGraph(title="Inter-residue distances",select="//Gesamt/Transformation/PerResidue/Row",style="height:250px; width:600px;float:left;border:0px solid white;")
            progressGraph.addData(title="Residue_number",         select="iRes")
            progressGraph.addData(title="Distance", select="Distance")
            plot = progressGraph.addPlotObject()
            plot.append('title','Distances')
            plot.append('plottype','xy')
            plot.append('xintegral','true')
            for coordinate, colour in [(2,'blue')]:
                plotLine = plot.append('plotline',xcol=1,ycol=coordinate,colour=colour)
            self.addDiv(style='clear:both')
            equivalenceFold = self.addFold(label='List of equivalenced residues')
            equivalenceNodes = self.xmlnode.xpath('//Gesamt/Transformation/PerResidue/Row/Equivalence')
            iRow = 0
            for equivalenceNode in equivalenceNodes:
                equivalenceFold.addPre(text = equivalenceNode.text+': Position '+str(iRow))
                iRow += 1
