Advertisement
Guest User

Untitled

a guest
Nov 15th, 2013
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.77 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys
  5.  
  6. class Csomopont(object):
  7.     def __init__(self,b):
  8.         self.betu = b
  9.         self.balNulla=None
  10.         self.jobbEgy=None
  11.  
  12.     def ujNullasGyermek (self,gy):
  13.         self.balNulla = gy
  14.  
  15.     def ujEgyesGyermek (self,gy):
  16.         self.jobbEgy = gy
  17.  
  18. class LZWBinFa(object):            
  19.     def __init__(self):
  20.         self.gyoker = Csomopont ('/')
  21.         self.fa = self.gyoker
  22.         self.melyseg=0
  23.  
  24.     def beolvas (self,b):
  25.         if b == '0':
  26.             if self.fa.balNulla == None:   
  27.                 uj = Csomopont ('0')
  28.                 self.fa.ujNullasGyermek (uj)
  29.                 self.fa = self.gyoker
  30.             else:          
  31.                 self.fa = self.fa.balNulla
  32.         else:
  33.             if self.fa.jobbEgy == None:
  34.                 uj = Csomopont ('1')
  35.                 self.fa.ujEgyesGyermek (uj)
  36.                 self.fa = self.gyoker
  37.             else:
  38.                 self.fa = self.fa.jobbEgy
  39.  
  40.     def kiir (self,elem,fajl):
  41.         if (elem != None):
  42.             self.melyseg+=1
  43.             self.kiir (elem.jobbEgy, fajl)
  44.             for i in xrange(self.melyseg):
  45.                 fajl.write ("---")
  46.             fajl.write (elem.betu + "(" + str(self.melyseg - 1) + ")" + "\n")
  47.             self.kiir (elem.balNulla, fajl)
  48.             self.melyseg-=1
  49.  
  50.     def rmelyseg (self,elem):
  51.         if elem != None:
  52.             self.melyseg+=1
  53.             if self.melyseg > self.maxMelyseg:
  54.                 self.maxMelyseg = self.melyseg
  55.             self.rmelyseg (elem.jobbEgy)
  56.             self.rmelyseg (elem.balNulla)
  57.             self.melyseg-=1
  58.     def ratlag (self,elem):
  59.         if elem != None:
  60.             self.melyseg+=1
  61.             self.ratlag (elem.jobbEgy)
  62.             self.ratlag (elem.balNulla)
  63.             self.melyseg-=1
  64.             if elem.jobbEgy == None and elem.balNulla == None:
  65.                 self.atlagdb+=1
  66.                 self.atlagosszeg += self.melyseg
  67.  
  68.     def rszoras (self,elem):
  69.         if elem != None:
  70.             self.melyseg+=1
  71.             self.rszoras (elem.jobbEgy)
  72.             self.rszoras (elem.balNulla)
  73.             self.melyseg-=1
  74.             if (elem.jobbEgy == None and elem.balNulla == None):
  75.                 self.atlagdb+=1
  76.                 self.szorasosszeg += ((self.melyseg - self.atlag) * (self.melyseg - self.atlag))
  77.  
  78.     def getMelyseg (self):
  79.         self.melyseg = self.maxMelyseg = 0
  80.         self.rmelyseg (self.gyoker)
  81.         return self.maxMelyseg - 1
  82.  
  83.     def getSzoras (self):
  84.         self.atlag = self.getAtlag ()
  85.         self.szorasosszeg = 0.0
  86.         self.melyseg = self.atlagdb = 0
  87.         self.rszoras (self.gyoker)
  88.         if self.atlagdb - 1 > 0:
  89.             self.szoras = pow((self.szorasosszeg / (self.atlagdb - 1)),1/2)
  90.         else:
  91.             self.szoras = pow(self.szorasosszeg,1/2)
  92.         return self.szoras
  93.  
  94.     def getAtlag (self):
  95.         self.melyseg = self.atlagosszeg = self.atlagdb = 0
  96.         self.ratlag (self.gyoker)
  97.         self.atlag = float(self.atlagosszeg) / self.atlagdb
  98.         return self.atlag
  99.  
  100. class Humangenom(object):
  101.     def usage (self):
  102.         print "Usage: lzwtree in_file out_file"
  103.  
  104.     def main (self):
  105.         if len(sys.argv)!=3:
  106.             self.usage ()
  107.             sys.exit(1)
  108.         with open (sys.argv[1],"r") as beFile:
  109.             with open (sys.argv[2],"w") as kiFile:
  110.                 self.binFa=LZWBinFa()
  111.                 li=[sor for sor in beFile]
  112.                 kommentben=False
  113.                 bekerul=False
  114.                 for sor in li:
  115.                     if bekerul==False:
  116.                         bekerul=True
  117.                         continue
  118.                     for b in sor:
  119.                         if b == '>':
  120.                             kommentben = True
  121.                             continue
  122.                         if b == '\n':
  123.                             kommentben = False
  124.                             continue
  125.                         if kommentben:
  126.                             continue
  127.                         if b == 'N':
  128.                             continue
  129.                         szo = ord(b)
  130.                         lii=[]
  131.                         for i in xrange(8):
  132.                             if int(szo / pow (2, 7 - i))==1:
  133.                                 lii.append(1)
  134.                                 szo -= pow (2, 7 - i)
  135.                             else:
  136.                                 lii.append(0)
  137.                         for i in lii:                            
  138.                             self.binFa.beolvas (str(i))
  139.                 self.binFa.kiir (self.binFa.gyoker, kiFile)
  140.                 kiFile.write ("depth = " + str(self.binFa.getMelyseg ()) + "\n")
  141.                 kiFile.write ("mean = " + str(self.binFa.getAtlag ()) + "\n")
  142.                 kiFile.write ("var = " + str(self.binFa.getSzoras ()) + "\n")
  143.  
  144. if __name__=="__main__":
  145.     a=Humangenom()
  146.     a.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement