Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import sys
- class Csomopont(object):
- def __init__(self,b):
- self.betu = b
- self.balNulla=None
- self.jobbEgy=None
- def ujNullasGyermek (self,gy):
- self.balNulla = gy
- def ujEgyesGyermek (self,gy):
- self.jobbEgy = gy
- class LZWBinFa(object):
- def __init__(self):
- self.gyoker = Csomopont ('/')
- self.fa = self.gyoker
- self.melyseg=0
- def beolvas (self,b):
- if b == '0':
- if self.fa.balNulla == None:
- uj = Csomopont ('0')
- self.fa.ujNullasGyermek (uj)
- self.fa = self.gyoker
- else:
- self.fa = self.fa.balNulla
- else:
- if self.fa.jobbEgy == None:
- uj = Csomopont ('1')
- self.fa.ujEgyesGyermek (uj)
- self.fa = self.gyoker
- else:
- self.fa = self.fa.jobbEgy
- def kiir (self,elem,fajl):
- if (elem != None):
- self.melyseg+=1
- self.kiir (elem.jobbEgy, fajl)
- for i in xrange(self.melyseg):
- fajl.write ("---")
- fajl.write (elem.betu + "(" + str(self.melyseg - 1) + ")" + "\n")
- self.kiir (elem.balNulla, fajl)
- self.melyseg-=1
- def rmelyseg (self,elem):
- if elem != None:
- self.melyseg+=1
- if self.melyseg > self.maxMelyseg:
- self.maxMelyseg = self.melyseg
- self.rmelyseg (elem.jobbEgy)
- self.rmelyseg (elem.balNulla)
- self.melyseg-=1
- def ratlag (self,elem):
- if elem != None:
- self.melyseg+=1
- self.ratlag (elem.jobbEgy)
- self.ratlag (elem.balNulla)
- self.melyseg-=1
- if elem.jobbEgy == None and elem.balNulla == None:
- self.atlagdb+=1
- self.atlagosszeg += self.melyseg
- def rszoras (self,elem):
- if elem != None:
- self.melyseg+=1
- self.rszoras (elem.jobbEgy)
- self.rszoras (elem.balNulla)
- self.melyseg-=1
- if (elem.jobbEgy == None and elem.balNulla == None):
- self.atlagdb+=1
- self.szorasosszeg += ((self.melyseg - self.atlag) * (self.melyseg - self.atlag))
- def getMelyseg (self):
- self.melyseg = self.maxMelyseg = 0
- self.rmelyseg (self.gyoker)
- return self.maxMelyseg - 1
- def getSzoras (self):
- self.atlag = self.getAtlag ()
- self.szorasosszeg = 0.0
- self.melyseg = self.atlagdb = 0
- self.rszoras (self.gyoker)
- if self.atlagdb - 1 > 0:
- self.szoras = pow((self.szorasosszeg / (self.atlagdb - 1)),1/2)
- else:
- self.szoras = pow(self.szorasosszeg,1/2)
- return self.szoras
- def getAtlag (self):
- self.melyseg = self.atlagosszeg = self.atlagdb = 0
- self.ratlag (self.gyoker)
- self.atlag = float(self.atlagosszeg) / self.atlagdb
- return self.atlag
- class Humangenom(object):
- def usage (self):
- print "Usage: lzwtree in_file out_file"
- def main (self):
- if len(sys.argv)!=3:
- self.usage ()
- sys.exit(1)
- with open (sys.argv[1],"r") as beFile:
- with open (sys.argv[2],"w") as kiFile:
- self.binFa=LZWBinFa()
- li=[sor for sor in beFile]
- kommentben=False
- bekerul=False
- for sor in li:
- if bekerul==False:
- bekerul=True
- continue
- for b in sor:
- if b == '>':
- kommentben = True
- continue
- if b == '\n':
- kommentben = False
- continue
- if kommentben:
- continue
- if b == 'N':
- continue
- szo = ord(b)
- lii=[]
- for i in xrange(8):
- if int(szo / pow (2, 7 - i))==1:
- lii.append(1)
- szo -= pow (2, 7 - i)
- else:
- lii.append(0)
- for i in lii:
- self.binFa.beolvas (str(i))
- self.binFa.kiir (self.binFa.gyoker, kiFile)
- kiFile.write ("depth = " + str(self.binFa.getMelyseg ()) + "\n")
- kiFile.write ("mean = " + str(self.binFa.getAtlag ()) + "\n")
- kiFile.write ("var = " + str(self.binFa.getSzoras ()) + "\n")
- if __name__=="__main__":
- a=Humangenom()
- a.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement