def dataBalancer(contigdict, gff_name, gbk_name):
    """
    Input: 3
        contigdict, contig dictionary van merger.
        gff_name: bestandsnaam
        gbk_name: bestandsnaam

    De functie heeft eerst gebruik gemaakt van multi process, maar
    blijkt bij monitoring het toch niet nodig te hebben.

    De functie maakt een generator aan met de naam data. Vervolgens
    worden de loop variabelen data en stop gemaakt.

    In rij komt elke yield van data te staan. En stop is de boolean om
    de loop te stoppen als rij een None yield.

    De functie loopt op een while met als conditie dat de loop stopt
    als er geen regels meer in het bestand zitten.

    In de while loop wordt de resultaat lijst aangemaakt en de draden
    lijst. De draden lijst is voor de eerste for loop.
        In de eerste for loop wordt er 8 keer geloopt. Dit was voor de
        8 cores, maar werkt serial ook erg goed. In de 8 for loop wordt
        er 100 duizend keer geloopt om data punten te yielden en toe te
        voegen aan de lijst draadlijst, tenzij er een None wordt geyield,
        dan wordt de loop afgesloten.
    De 8 multi dementionale lijsten worden na de vul loops 1 voor 1
    doorgegven aan de functie lijst_gb_invoer, het resultaat daarvan
    wordt in de resultaat lijst gezet en wordt doorgegeven aan
    write_list zodat er 800k lines geschreven worden.
    """
    print "start verdeel"
    print gff_name
    verdeelstat = Statistiek()
    data = open_gff(gff_name)
    rij = ""  #declaratie voor while loop
    stop = False
    while rij != None:
        resultaat = []
        draden = []
        for x in range(8):
            draadlijst = []
            for x in range(100000):
                rij = data.next()

                if rij == None:
                    stop = True
                    break
                else:
                    draadlijst.append(rij)
            draden.append(draadlijst)
            if stop:
                break
        for draad in draden:
            resultaat.append(lijst_gb_invoer(draad, contigdict))
        write_list(resultaat, gbk_name)

    verdeelstat.stop()
    print "einde verdeelstation"
def gff_conversie(gff_name, fasta_name, annot_file, gbk_name):
    #Functie hernoemd van main naar gff_conversie
    """
    De functie roept de andere functies aan:
    het openen van de file, het maken van een multidimensionale lijst,
    het filteren van de attributen, het maken van de genbank file en
    het schrijven van de afsluitende tag //
    """
    print "Merger maken"
    merger = Merger(fasta_name)
    refference(annot_file)
    print "Merger klaar"

    stopwatch = Statistiek()
    make_gbk_file(gbk_name)
    write_file('LOCUS PLACEHOLDER\n', gbk_name)
    write_file('FEATURES\t\tLocation/Qualifiers\n', gbk_name)
    write_file("PLACEHOLDER\n", gbk_name)
    print "GFF bestand openen"
    contigdict = merger.getdict()
    dataBalancer(contigdict, gff_name, gbk_name)
    print "Na verdeel"
    print "Bestand genereren"
    print "DO FASTA"

    # print merger.get_fasta()
    print "DONE FASTA"

    highest_stop = 10
    lowest_start = 1

    insert_values(highest_stop, lowest_start, 2, gbk_name)
    insert_values(highest_stop, "unspecified", 0, gbk_name)
    print "Sequentie schrijven"
    generate_fasta(fasta_name, gbk_name)
    ##write_file()
    sluiter = "//"
    
    write_file(sluiter, gbk_name)
    print "Klaar!"
    stopwatch.stop()
def gff_conversie(gff_name, fasta_name, annot_file, gbk_name):
    #Functie hernoemd van main naar gff_conversie
    """
    De functie roept de andere functies aan:
    het openen van de file, het maken van een multidimensionale lijst,
    het filteren van de attributen, het maken van de genbank file en
    het schrijven van de afsluitende tag //
    """
    print "Merger maken"
    merger = Merger(fasta_name)
    refference(annot_file)
    print "Merger klaar"

    stopwatch = Statistiek()
    make_gbk_file(gbk_name)
    write_file('LOCUS PLACEHOLDER\n', gbk_name)
    write_file('FEATURES\t\tLocation/Qualifiers\n', gbk_name)
    write_file("PLACEHOLDER\n", gbk_name)
    print "GFF bestand openen"
    contigdict = merger.getdict()
    dataBalancer(contigdict, gff_name, gbk_name)
    print "Na verdeel"
    print "Bestand genereren"
    print "DO FASTA"

    # print merger.get_fasta()
    print "DONE FASTA"

    highest_stop = 10
    lowest_start = 1

    insert_values(highest_stop, lowest_start, 2, gbk_name)
    insert_values(highest_stop, "unspecified", 0, gbk_name)
    print "Sequentie schrijven"
    generate_fasta(fasta_name, gbk_name)
    ##write_file()
    sluiter = "//"

    write_file(sluiter, gbk_name)
    print "Klaar!"
    stopwatch.stop()
def dataBalancer(contigdict, gff_name, gbk_name):
    """
    Input: 3
        contigdict, contig dictionary van merger.
        gff_name: bestandsnaam
        gbk_name: bestandsnaam

    De functie heeft eerst gebruik gemaakt van multi process, maar
    blijkt bij monitoring het toch niet nodig te hebben.

    De functie maakt een generator aan met de naam data. Vervolgens
    worden de loop variabelen data en stop gemaakt.

    In rij komt elke yield van data te staan. En stop is de boolean om
    de loop te stoppen als rij een None yield.

    De functie loopt op een while met als conditie dat de loop stopt
    als er geen regels meer in het bestand zitten.

    In de while loop wordt de resultaat lijst aangemaakt en de draden
    lijst. De draden lijst is voor de eerste for loop.
        In de eerste for loop wordt er 8 keer geloopt. Dit was voor de
        8 cores, maar werkt serial ook erg goed. In de 8 for loop wordt
        er 100 duizend keer geloopt om data punten te yielden en toe te
        voegen aan de lijst draadlijst, tenzij er een None wordt geyield,
        dan wordt de loop afgesloten.
    De 8 multi dementionale lijsten worden na de vul loops 1 voor 1
    doorgegven aan de functie lijst_gb_invoer, het resultaat daarvan
    wordt in de resultaat lijst gezet en wordt doorgegeven aan
    write_list zodat er 800k lines geschreven worden.
    """
    print "start verdeel"
    print gff_name
    verdeelstat = Statistiek()
    data = open_gff(gff_name)
    rij = "" #declaratie voor while loop
    stop = False
    while rij != None:
        resultaat = []
        draden = []
        for x in range(8):
            draadlijst = []
            for x in range(100000):
                rij = data.next()
                
                if rij == None:
                    stop = True
                    break
                else:
                   draadlijst.append(rij)
            draden.append(draadlijst)      
            if stop:
                break
        for draad in draden:
            resultaat.append(lijst_gb_invoer(draad,contigdict))
        write_list(resultaat, gbk_name)
                   

    
    verdeelstat.stop()    
    print "einde verdeelstation"