#! /usr/bin/env ccp4-python # # Copyright (C) 2005 Ronan Keegan # # This code is distributed under the terms and conditions of the # CCP4 Program Suite Licence Agreement as a CCP4 Application. # A copy of the CCP4 licence can be obtained by writing to the # CCP4 Secretary, Daresbury Laboratory, Warrington WA4 4AD, UK. # # # # Script to generate output in loggraph format # Ronan Keegan 19/12/05 import os class Loggraph: """ A class to handle the creating of output from MRBUMP in loggraph mark-up. Written in general enough form to be used from anywhere.""" def __init__(self): self.header='' self.footer='' self.table='' self.graphs = ' $GRAPHS' self.labels='' self.no_of_cols=0 self.no_of_graphs=0 def setNoofCols(self, number): self.no_of_cols = number def setHeader(self, header): self.header = header def setFooter(self, footer): self.footer = footer def setTable(self, tablename): self.table = ' $TABLE: ' self.table += tablename def addGraphs(self, graphname, *columns): """ Add another plot to the Graph. """ if self.no_of_graphs >= 1: self.graphs += '\n ' self.graphs += ': ' + graphname + ' :N:' for i in columns: self.graphs += `i` + ',' self.graphs = self.graphs[0:-1] + ':' self.no_of_graphs = self.no_of_graphs + 1 def setLabels(self, *labels): """ Set the column labels. """ count=0 self.labels = ' $$\n ' for i in labels: if count == len(labels) - 1: self.labels += i + ' $$' else: self.labels += i + ' ' count = count + 1 self.labels += '\n $$' def write_log(self, array): """ Write the output for Loggraph to interpret. Requires a 2-D array of data.""" # Construct the header h_line = 'For inline graphs use a Java browser' self.setHeader(h_line) self.setFooter(f_line) # Start outputing the code print "" print self.header print self.table print self.graphs print self.labels # Output the data columns for i in range(len(array[0])): line = '' for j in range(len(array)): if type(array[j][i]) == float: line += '\t%.3f' % array[j][i] else: line += '\t' + `array[j][i]` print line # Print the footer print self.footer print "" # Example output: # # $TABLE: Search model sequence alignment scores against target sequence: # $GRAPHS: Alignment Score :N:1,2: # : Sequence Identity :N:1,3: # $$ # model Score fractional-identity $$ # $$ # for i in mstat.sorted_list: # print "\t %d \t %.3f \t %.3f" % \ # (model_count, i[1], mstat.chain_list[i[0]].alignment.seqID) # $$ # ">For inline graphs use a Java browser if __name__=='__main__': l=Loggraph() l.setTable('Test name') l.addGraphs('graph1', 1, 2) l.addGraphs('graph2', 1, 3) l.setLabels('label1', 'label2', 'label3') a=(1,2,3,4) b=(2.0,3.0,6.0,2.0) c=(4.1,2.2,8.3,4.7) array=(a,b,c) l.write_log(array)