diff uniqprimer-0.5.0/primertools/utils.py @ 3:3249d78ecfc2 draft

Uploaded
author dereeper
date Mon, 03 Jan 2022 09:56:55 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uniqprimer-0.5.0/primertools/utils.py	Mon Jan 03 09:56:55 2022 +0000
@@ -0,0 +1,207 @@
+'''
+Created on Jan 1, 2011
+
+@author: John L. Herndon
+@contact: herndon@cs.colostate.edu
+@organization: Colorado State University
+@group: Computer Science Department, Asa Ben-Hur's laboratory 
+'''
+
+
+import exceptions
+import time
+import os.path
+from os import pathsep
+from string import split
+import tempfile
+import shutil
+
+def getTimeStamp( ):
+    return time.strftime('%d%m%Y-%H%M%S')
+
+
+class Match( object ):
+    '''
+    record where two genomes line up. stores only alignments for one part of the genome
+    '''
+    def __init__( self, start, end, seqID ):
+        self.seqID = seqID
+        self.start = start
+        self.end = end
+    
+    def __repr__( self ):
+        return "Start: {0}, End:{1}, SeqID:{2}".format( self.start, self.end, self.seqID )
+    
+class PrimerSet( object ):
+    
+    def __init__( self, id ):
+        self.id = id
+        self.productSize = 0
+        self.forwardPrimer = ""
+        self.forwardMeltTemp = ""
+        self.reversePrimer = ""
+        self.reverseMeltTemp = ""
+        
+        
+    def setProductSize( self, productSize):
+        self.productSize = productSize
+        
+    def setForwardPrimerData( self, sequence, temp ):
+        self.forwardPrimer = sequence
+        self.forwardMeltTemp = temp
+        
+    def setReversePrimerData( self, sequence, temp):
+        self.reversePrimer = sequence
+        self.reverseMeltTemp = temp
+    
+
+#search function from http://code.activestate.com/recipes/52224-find-a-file-given-a-search-path/
+def search_file( filename ):
+    """ find file
+    """
+    search_path = os.getenv( 'PATH' )
+    logMessage( "utils::search_file", "Path: {0}".format( search_path ) )
+    file_found = 0
+    paths = split( search_path, pathsep )
+    for path in paths:
+        if os.path.exists( os.path.join( path, filename ) ):
+            file_found = 1
+            break
+    if file_found:
+        return os.path.abspath( os.path.join( path, filename ) )
+    else:
+        return None
+
+tempDir = ""
+removeTemp = True
+
+verbose = False
+
+
+def initialize( isVerbose, cleanup, lf): ##Mau: added lf
+    global removeTemp
+    global tempDir
+    global verbose
+    global logFile ##Mau: added  logFile variable
+
+    logFile = lf #:Mau add line
+    
+    verbose = isVerbose
+    tempDir = tempfile.mkdtemp( dir="" )
+    initializeLogging()
+    removeTemp = cleanup
+    logMessage( "utils::Initialize( )", "Initialization complete. Temporary directory: {0}".format( tempDir ) )
+    
+logFile = None
+
+
+def printProgressMessage( message ):
+    global verbose
+    if verbose == True:
+        print message
+
+def getTemporaryDirectory( ):
+    global tempDir
+    return tempDir
+
+def initializeLogging():
+    global logFile
+    #logFileName = "uniqprimer_{0}.log".format( getTimeStamp( ) )
+    #logFileName = "log_uniqprimer.txt"  ##Mau: commented out 
+    logFileName = logFile ##Mau: changed
+    logFile = open( logFileName, 'w' )
+    
+def shutdown( ):
+    global removeTemp
+    global tempDir
+    shutdownLogging( )
+    if removeTemp == True:
+        print "*** Removing temporary directory ***"
+        shutil.rmtree( tempDir )
+    
+def shutdownLogging( ):
+    global logFile
+    if logFile != None:
+        logFile.close( )
+
+def logList( method, list ):
+    
+    message = reduce( lambda x,y: str( x ) + " " + str( y ) , list )
+    logMessage(method, message)
+    
+    
+def logMessage( method, message ):
+    global logFile
+    if logFile == None:
+        return
+    log = "{0} - {1}".format( method, message )
+    
+    logFile.write( log + "\n" )
+    logFile.flush( )
+
+class EPrimerOptions( object ):
+    
+    def __init__( self ):
+        
+        self.minPrimerSize = 18
+        self.maxPrimerSize = 27
+        self.primerSize = 20
+        self.productRange = "200-250"
+    
+    def setPrimerSize( self, size ):
+        
+        size = int( size )
+        if size > 35:
+            size = 35
+        
+        self.primerSize = size
+        if self.primerSize < self.minPrimerSize:
+            self.maxPrimerSize = self.primerSize 
+        elif self.primerSize > self.maxPrimerSize:
+            self.maxPrimerSize = self.primerSize
+    
+    def getPrimerSize( self ):
+        return self.primerSize
+    
+    def setMinPrimerSize( self, minSize):
+        self.minPrimerSize = minSize
+    
+    def getMinPrimerSize( self  ):
+        return self.minPrimerSize
+
+    def setMaxPrimerSize( self, size ):
+        self.maxPrimerSize = size
+        
+    def getMaxPrimerSize( self ):
+        return self.maxPrimerSize
+    
+    def setProductRange( self, range ):
+        self.productRange = range
+        
+    def getProductRange( self ):
+        return self.productRange
+
+class NoPrimersExistException( exceptions.BaseException ):
+    
+    def __init__( self ):
+        exceptions.BaseException( self )
+
+class ProgramNotFoundException( exceptions.BaseException ):
+    
+    def __init__( self, programName, details ):
+        exceptions.BaseException.__init__(self)
+        self.programName = programName
+        self.details = details
+        
+class NoFileFoundException( exceptions.BaseException ):
+    
+    def __init__( self, filename ):
+        exceptions.BaseException.__init__(self)
+        self.filename = filename
+        
+        
+class ModuleNotInitializedException( exceptions.BaseException ):
+    
+    def __init__( self, moduleName, reason ):
+        self.moduleName = moduleName
+        self.reason = reason