#!/usr/bin/env python import cgi, cgitb import sys import os import shutil import string import twisted_sync import xmlrpclib cgitb.enable() class Application: def __init__(self, form, server): self.form = form self.server = server self.name = "" self.yname= "" self.rvv = "0" self.sv1 = "0" self.sv2 = "0" self.sv3 = "0" self.sl1 = "0" self.sl2 = "0" self.sl3 = "0" self.url = "" self.process = None self.names = ['bd1','bd2','bd3','bd4','bd5','bd6','bd7'] self.sendHeader() self.showDatamining() if self.form.has_key('diff'): self.address = self.form["diff"].value else: self.address = self.diffProcess() if self.form.has_key('Dataset'): self.name = self.form["Dataset"].value if self.form.has_key('responsevariable'): self.resvar = self.form["responsevariable"].value if self.form.has_key('compt'): self.showComponent = self.form["compt"].value else: self.showComponent = 'Constant' self.createDataForm() if self.form.has_key('action') and self.form['action'].value == 'Show Data': self.diffProcess() self.createData() self.chooseModel() self.showData() if self.form.has_key('component') and self.form['component'].value == 'Add Component': self.getComponents() self.addComponent() self.chooseModel() self.showData() if self.form.has_key('clear') and self.form['clear'].value == 'Reset': self.reset() self.chooseModel() self.showData() if self.form.has_key('process') and self.form['process'].value == 'Show Model': self.processModel() self.getComponents() self.chooseModel() self.showDataAndEvaluation() self.showAuthors() self.endHtml() def sendHeader(self): print 'Content-type: text/html' print def endHtml(self): print '' print '' def showDatamining(self): print ''' Geographic Application

ANU Data Mining Group

''' def createDataForm(self): #select1 = select2 = select3 = "" rv1=rv2=rv3=rv4=rv5=rv6=rv7=rv8=rv9=rv10=rv11=rv12=rv13=rv14=rv15=rv16=rv17=rv18=rv19=rv20="" if self.form.has_key('responsevariable'): if self.resvar: if self.resvar == "amt": rv1 = "SELECTED" elif self.resvar == "mdr": rv2 = "SELECTED" elif self.resvar == "isotherm": rv3 = "SELECTED" elif self.resvar == "temp_seas": rv4 = "SELECTED" elif self.resvar == "mtwm": rv5 = "SELECTED" elif self.resvar == "mtcm": rv6 = "SELECTED" elif self.resvar == "tempar": rv7 = "SELECTED" elif self.resvar == "mtwq": rv8 = "SELECTED" elif self.resvar == "mtdq": rv9 = "SELECTED" elif self.resvar == "mtwarmq": rv10 = "SELECTED" elif self.resvar == "mtcq": rv11 = "SELECTED" elif self.resvar == "annprecip": rv12 = "SELECTED" elif self.resvar == "precipwm": rv13 = "SELECTED" elif self.resvar == "precipdm": rv14 = "SELECTED" elif self.resvar == "precipseason": rv15 = "SELECTED" elif self.resvar == "precipwq": rv16 = "SELECTED" elif self.resvar == "precipdq": rv17 = "SELECTED" elif self.resvar == "precipwarmq": rv18 = "SELECTED" elif self.resvar == "precipcoldq": rv19 = "SELECTED" elif self.resvar == "dtm": rv20 = "SELECTED" print '''
'''% self.address print '''''' print '''''' %(rv1,rv2,rv3,rv4,rv5,rv6,rv7,rv8,rv9,rv10,rv11,rv12,rv13,rv14,rv15,rv16,rv17,rv18,rv19,rv20) print '''
Data set
Response variable
 
''' print '''
''' def chooseModel(self): v1 = [] l1 = [] v2 = [] l2 = [] v3 = [] l3 = [] for i in range (7): if i == int(self.sv1): v1.append("SELECTED") else: v1.append("") if i == int(self.sv2): v2.append("SELECTED") else: v2.append("") if i == int(self.sv3): v3.append("SELECTED") else: v3.append("") for i in range (6): if i == int(self.sl1): l1.append("SELECTED") else: l1.append("") if i == int(self.sl2): l2.append("SELECTED") else: l2.append("") if i == int(self.sl3): l3.append("SELECTED") else: l3.append("") print '''''' print ''''''% self.showComponent print '''''' % (v1[0],v1[1],v1[2],v1[3],v1[4],v1[5],v1[6]) print '''''' % (l1[0], l1[1], l1[2], l1[3], l1[4], l1[5]) print '''''' print '''''' % (v2[0],v2[1],v2[2],v2[3],v2[4],v2[5],v2[6]) print '''''' %(l2[0], l2[1], l2[2], l2[3], l2[4]) print '''''' print ''''''% (v3[0],v3[1],v3[2],v3[3],v3[4],v3[5],v3[6]) print '''''' %(l3[0], l3[1], l3[2], l3[3]) print '''''' print '''
Model used: %s

Factor

Variable

Level

 

 

1

''' print '''

''' print '''

 

2

''' print '''

''' print '''

 

3

''' print '''

''' print '''

 

'''% self.showComponent def showData(self): picname = self.address +"_"+ self.resvar+".gif" print '''

Data

 

 
'''%picname print '''
''' def showDataAndEvaluation(self): #import Image picname = self.address +"_"+ self.resvar+"_yy" #Image.open("%s.pbm" %picname).save("%s.png" %picname) print '''

Data

     

Prediction

     

Predicted vs Data Values

''' %(self.address+"_"+self.resvar, "pred_"+self.address+"_"+self.resvar, self.address+"_"+self.resvar+"_yy") print '''
''' def createData(self): #sys.stderr = open('/dev/null', 'w') filename = self.address +"_"+ self.resvar+".gif" self.server.seqRun('data', self.address, self.resvar) self.server.getfile(filename) self.server.clear(self.address) #sys.stdout.close() self.showComponent = "Constant" def getComponents(self): self.sv1 = self.form["variable_1"].value self.sv2 = self.form["variable_2"].value self.sv3 = self.form["variable_3"].value self.sl1 = self.form["level_1"].value self.sl2 = self.form["level_2"].value self.sl3 = self.form["level_3"].value def addComponent(self): nvars = 7 ivec = [] lvec = [] f = [] ivec.append(int(self.sv1)) ivec.append(int(self.sv2)) ivec.append(int(self.sv3)) lvec.append(int(self.sl1)) lvec.append(int(self.sl2)) lvec.append(int(self.sl3)) if self.sl1 == '0' and self.sl2 == '0' and self.sl3 == '0': self.showComponent = 'Constant' return else: A = self.server.component(self.name, self.address, ivec, lvec, nvars) self.showComponent = self.showmodel(A) def reset(self): self.rvv = "0" self.sv1 = "0" self.sv2 = "0" self.sv3 = "0" self.sl1 = "0" self.sl2 = "0" self.sl3 = "0" self.showComponent = "Constant" f = self.server.clear(self.address) def processModel(self): predname = 'pred_' + self.address +"_"+ self.resvar+".gif" yyname = self.address +"_"+ self.resvar+"_yy.pbm" if self.showComponent == 'Constant': self.server.seqRun('model', self.address, self.resvar) else: out = self.server.run('python', 'model.py', self.address, self.resvar) self.server.getfile(predname) self.server.getfile(yyname) #print out def showmodel(self, A): names = self.names if (len(A) == 1) & (A[0] == len(A[0])*[0,]): return "Constant" A.sort() Ared = [] for i in range(len(A)-1,0,-1): # need to follow ordering alpha = A[i] alpha_include = True for alphax in Ared: cvec = map(lambda x,y : x <= y, alpha, alphax) if reduce(lambda x,y:x*y, cvec): alpha_include = False if alpha_include: Ared.append(alpha) Ared.sort() def alphaprint(alpha, names): # printing the alpha ialpha = filter(lambda i,alpha=alpha: alpha[i]>0, tuple(range(len(alpha)))) lalpha = filter(lambda a: a>0 , alpha) return zip(map(lambda i,names=names:names[i],ialpha), lalpha) funlabs = map(lambda alpha,names=names: alphaprint(alpha,names), Ared) funlabs.sort() onec = lambda funlabsi: reduce(lambda x1,x2:x1+"*%s(%d)"%x2, funlabsi[1:], "%s(%d)"%funlabsi[0]) return reduce(lambda y1,y2,onec=onec:y1+"+%s"%(onec(y2)), funlabs[1:], onec(funlabs[0])) def showAuthors(self): print '''Main Software Contributors: ''' def diffProcess(self): from random import choice file = "" for i in range (15): str = choice(string.ascii_lowercase) file = file + str return file if __name__=="__main__": # kick off the script try: form = cgi.FieldStorage() server = twisted_sync.ServerProxy('localhost', 9999) app = Application(form, server) except: # for debugging #app.sendHeader() print '

A exception occured\n

'
        print '

This problem is possibly caused by the remote server running on the Linux Cluster. \n

'
        print '

Please send a email to Margaret Kahn to report this. Thank you.\n

'
        #traceback.print_exc()
        #print '
'