def main(): '''Main function for the primer design program. Imports primerDesign, Bio, CommandLine, and sequenceAnalysis. Main function takes in inputs and boolean checks from the command line. These include the target sequence, restriction enzymes one and two, any changes to start and stop codons, and a verbosity check which will enable printing either to standard output or a output file. Output would appear as the following after a successful run of main: ############################################################ FastA Header Forward Primer Primer Sequence {} nucleotides were added to give {} efficiency after {} hours. Buffer {} for digestion at {} degrees. Melting Temperature Forward GC Content Percentage Forward Reverse Primer Primer Sequence {} nucleotides were added to give {} efficiency after {} hours. Buffer {} for digestion at {} degrees. Melting Temperature Reverse GC Content Percentage Reverse ############################################################ Should errors occur such as improper target sequence or (Fill in the check conditions we can think of here), a message will be displayed indicating the potential problem to the user: Error: This program has detected that (Situation). Please correct your (Situation) and try again. After the message is displayed, the program will exit and return back to the terminal line. ''' ################################################################################################### #Main method variables cl = CommandLine.Command_Line() gcForward = None gcReverse = None #Gather the restriction enzymes restrictionEnzyme1 = cl.args.enzymeOne restrictionEnzyme2 = cl.args.enzymeTwo #Gather the start and stop codon startCodon = cl.args.start stopCodon = cl.args.stop #Verbosity Boolean verb = cl.args.verbosity #File Name targetFile = cl.args.target #Marker Number markerNumber = 60 #Degree Symbol degree = "\u00b0" ################################################################################################### #Check to see if all of the required elements are in place. If any value is at none, terminate the program with a message if targetFile is None: print( "No Target Sequence inputted. Please retry with a proper input file in the appropriate location. See -h for command line help." ) sys.exit() else: pass if restrictionEnzyme1 is None: print( "No Enzyme One inputted. Please retry with an Enzyme One in the appropriate location. See -h for command line help." ) sys.exit() else: pass if restrictionEnzyme2 is None: print( "No Enzyme Two inputted. Please retry with an Enzyme Two in the appropriate location. See -h for command line help." ) sys.exit() else: pass ################################################################################################### fastA = sequenceAnalysis.FastAreader( targetFile) #Read from the file collected by CommandLine class for head, seq in fastA.readFasta( ): #Ideally there should be only one fastA to read given a run. #If we decide otherwise, place all of the class method calls within the loop createdPrimer = primerDesign.primerDesign(head, seq, restrictionEnzyme1, restrictionEnzyme2, startCodon, stopCodon) #createdPrimer.buildPrimers() #Build the primers using the built in buildPrimers method. Results are stored in the class object nucForward = sequenceAnalysis.NucParams(str(createdPrimer.forwardPrimer)) nucReverse = sequenceAnalysis.NucParams(str(createdPrimer.reversePrimer)) gcForward = (nucForward.nucComposit["G"] + nucForward.nucComposit["C"]) / nucForward.nucCount() gcReverse = (nucReverse.nucComposit["G"] + nucReverse.nucComposit["C"]) / nucReverse.nucCount() ################################################################################################### #Printing Section #Print either to an output file or std out depending upon verbosity condition if verb is True: #Verbosity mode output. If enabled, writes to a file instead of std out. with open("PrimerOut.txt", "w") as p: p.write("#" * markerNumber + "\n\n") p.write(createdPrimer.header + "\n\n") p.write("Forward Primer\n") p.write(createdPrimer.finalFwdPrimer + "\n") p.write("\n") p.write( "'{0}' nucleotides were added to give {1} efficiency after {2} hours.\n" .format( createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme1] [0], createdPrimer.restrictionEnzymeDict[ createdPrimer.enzyme1][1], createdPrimer.restrictionEnzymeDict[ createdPrimer.enzyme1][2])) p.write("Buffer {} for digestion at {} Degrees.\n\n".format( createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme1][3], createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme1][4])) p.write("Melting Temperature = " + str(createdPrimer.tempOfFwd) + degree + "C" + "\n") p.write("\n") p.write(str.format("{0:.4f}", gcForward) + " % GC Content\n") p.write("\n") p.write("Reverse Primer\n") p.write(createdPrimer.finalRevPrimer + "\n") p.write("\n") p.write( "'{0}' nucleotides were added to give {1} efficiency after {2} hours.\n" .format( createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme2] [0], createdPrimer.restrictionEnzymeDict[ createdPrimer.enzyme2][1], createdPrimer.restrictionEnzymeDict[ createdPrimer.enzyme2][2])) p.write("Buffer {} for digestion at {} Degrees.\n\n".format( createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme2][3], createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme2][4])) p.write("Melting Temperature = " + str(createdPrimer.tempOfRev) + degree + "C" + "\n") p.write("\n") p.write(str.format("{0:.4f}", gcReverse) + " % GC Content\n") p.write("#" * markerNumber) else: #Print to std out instead of to a file print("#" * markerNumber) print(createdPrimer.header) print() print("Forward Primer") print(createdPrimer.finalFwdPrimer) print() print( "'{0}' nucleotides were added to give {1} efficiency after {2} hours.\n" .format( createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme1][0], createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme1][1], createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme1][2])) print("Buffer {} for digestion at {} Degrees.\n".format( createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme1][3], createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme1][4])) print("Melting Temperature = " + str(createdPrimer.tempOfFwd) + "C") print() print(str.format("{0:.4f}", gcForward) + " % GC Content\n") print() print("Reverse Primer") print(createdPrimer.finalRevPrimer) print() print( "'{0}' nucleotides were added to give {1} efficiency after {2} hours.\n" .format( createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme2][0], createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme2][1], createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme2][2])) print("Buffer {} for digestion at {} Degrees.\n".format( createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme2][3], createdPrimer.restrictionEnzymeDict[createdPrimer.enzyme2][4])) print() print("Melting Temperature = " + str(createdPrimer.tempOfRev) + "C") print() print(str.format("{0:.4f}", gcReverse) + " % GC Content\n") print() print("#" * markerNumber)