Ejemplo n.º 1
0
def deleteChromosome(chr_id):
    LOG.INFO("Rozpoczynam usuwanie chromosomu o ID: " + str(chr_id))
    try:
        chr = Chromosome.objects.get(id=int(chr_id))
    except Chromosome.DoesNotExist:
        LOG.WARN("Brak chromosomu o ID: " + str(chr_id))
        return None
    chr.delete()

    LOG.DEBUG("Usuwam wszystkie dlugosci chromosomow z chromosomu: " +
              str(chr_id))
    # Usuniecie wszystkich ChromosomeLength
    try:
        ChromosomeLength.objects.filter(chr_id=int(chr_id)).delete()
    except Exception:
        LOG.DEBUG("Brak dlugosci chromosomu: " + str(chr_id))

    LOG.DEBUG("Usuwam wszystkie scaffoldy wraz z contigami z chromosomu: " +
              str(chr_id))
    # Usuniecie wszystkich Scaffoldow, ScaffoldPositions oraz Contigs
    scaffs = Scaffold.objects.filter(chromosome_id=int(chr_id))
    for scaff in scaffs:
        deleteScaffold(scaff.id, True)

    LOG.INFO("Zakonczylem usuwanie chromosomu o ID: " + str(chr_id))
Ejemplo n.º 2
0
def getMarkerFromScaffoldTree(start, stop):
    LOG.INFO("Rozpoczynam poszukiwanie markerow w drzewie (s). Od " + str(start) + " do " + str(stop))
    markers_return = []
    LOG.DEBUG("Drzewo markerow (s): " + str(MarkersScaffoldTreeObject.interval_tree))
    if MarkersScaffoldTreeObject.interval_tree == None:
        LOG.DEBUG("Drzewo markerow nie zostalo zbudowane!")
        return None
    markers_result = MarkersScaffoldTreeObject.interval_tree.find(start, stop)
    i = 0
    for marker in markers_result:
        # Obiekt markera
        try:
            mar = Marker.objects.all().get(name = marker.marker_name)
        except Marker.DoesNotExist:
            LOG.WARN("Brak contigu o ID: " + str(marker.marker_name))
            return None
        markers_return.append(mar)
        i += 1
        
    markers_return.sort(key = lambda x: x.scaff_id, reverse = False)
    markers_return.sort(key = lambda x: x.scaffold_start, reverse = False)

    LOG.DEBUG("Wynik poszukiwan markerow (" + str(start) + " - " + str(stop) + "):\n" + str(markers_return))
    LOG.INFO("Zakonczylem przeszukiwanie markerow w drzewie.")
    
    return markers_return
Ejemplo n.º 3
0
def addOrganism(org_name, org_desc, chrs_count):
    LOG.INFO("Rozpoczynam dodawanie organizmu: " + str(org_name) +
             ". Ilosc chromosomow: " + str(chrs_count) + ". Opis: " +
             str(org_desc))
    organism = None
    try:
        organism = Organism(name=str(org_name), description=str(org_desc))
        organism.save()
        LOG.DEBUG("Dodano organizm: " + str(organism.id))
    except Exception:
        LOG.WARN("Blad podczas dodawania nowego organizmu: " + str(org_name))
        return None

    try:
        # Dodanie wszystkich chromosomow
        for i in range(chrs_count):
            chr = Chromosome(name=("Chromosome " + str(i + 1)),
                             organism_id=int(organism.id))
            chr.save()
            LOG.DEBUG("Dodano chromosom: " + str(chr.name) + " (" +
                      str(chr.id) + ")" + " do organizmu: " +
                      str(chr.organism_id))
    except Exception:
        LOG.WARN("Blad podczas dodawania nowego chromosomu do organizmu: " +
                 str(org_name))
        return None

    LOG.INFO("Zakonczylem dodawanie organizmu: " + str(org_name))
    return organism.id
Ejemplo n.º 4
0
def getChromosomeByID(chr_id):
    LOG.INFO("Rozpoczynam pobieranie obiektu chromosomu o ID: " + str(chr_id))
    chromosome = Chromosome.objects.filter(id=int(chr_id)).values()
    try:
        chromosome_ret = chromosome[0]
    except IndexError:
        LOG.WARN("Nie istnieje chromosom o ID: " + str(chr_id))
        return None

    LOG.DEBUG("Pobieram typy asemblacji organizmu: " +
              str(chromosome_ret['organism_id']))

    # Pobranie pierwszego typu asemblacji danego organizmu
    org_assembs = Assemb.objects.filter(
        organism_id=int(chromosome_ret['organism_id']))
    if len(org_assembs) == 0:
        return None

    LOG.DEBUG("Typy asemblacji organizmu: " +
              str(chromosome_ret['organism_id']) + ": " + str(org_assembs))

    # Wybieramy tego, ktory jest najdluzszy sumarycznie
    ass_lenghts = {}
    for ass in org_assembs:
        chr_len_objs = ChromosomeLength.objects.filter(assemb_id=ass.id)
        total_len = 0.0
        for chr_len_obj in chr_len_objs:
            total_len += chr_len_obj.length
        LOG.DEBUG("Typ asemblacji: " + str(ass) + ". Sumaryczna dlugosc: " +
                  str(total_len))
        ass_lenghts[ass.id] = total_len

    max_assemb = max(ass_lenghts, key=ass_lenghts.get)
    LOG.DEBUG("Typ asemblacji o najwiekszej sumie dlugosci chromosomow: " +
              str(max_assemb))

    if max_assemb == 0.0:
        LOG.DEBUG("Najdluzszy chromosom ma 0 dlugosc.")
        return None

    try:
        chr_len = ChromosomeLength.objects.get(chr_id=chromosome_ret['id'],
                                               assemb_id=max_assemb)
    except ChromosomeLength.DoesNotExist:
        LOG.WARN("Chromosome o ID: " + str(chr_id) +
                 " nie ma zadnej dlugosci.")
        return None
    print "Dlugosc:", chr_len
    chromosome_ret['length'] = chr_len.length
    LOG.INFO("Zakonczylem pobieranie obiektu chromosomu o ID: " + str(chr_id))
    return chromosome_ret
Ejemplo n.º 5
0
def getContigFromTree(start, stop):
    contigs_return = []
    if ContigsTreeObject.interval_tree == None:
        return contigs_return
    LOG.INFO("Rozpoczynam poszukiwanie contigow w drzewie. Od " + str(start) + " do " + str(stop))
    contigs_result = ContigsTreeObject.interval_tree.find(start, stop)
    i = 0
    for contig in contigs_result:
        # Obiekt contigu
        try:
            cont = Contig.objects.all().get(id = contig.contig_id)
        except Contig.DoesNotExist:
            LOG.WARN("Brak contigu o ID: " + str(contig.contig_id))
            return None
        #cont_wrap = ContigWrap(cont.id, cont.scaff_id, cont.order, cont.start, cont.end, cont.sequence, cont.length_bp)
        contigs_return.append(cont)
        i += 1
        
    contigs_return.sort(key = lambda x: x.scaff_id, reverse = False)
    contigs_return.sort(key = lambda x: x.start, reverse = False)

    LOG.DEBUG("Wynik poszukiwan (" + str(start) + " - " + str(stop) + "):\n" + str(contigs_return))
    LOG.INFO("Zakonczylem przeszukiwanie contigow w drzewie.")
    
    return contigs_return
Ejemplo n.º 6
0
def searchProgressSW(pattern,
                     match=2,
                     mismatch=-1,
                     gap_open=-1,
                     gap_extend=-1,
                     structs="A"):
    LOG.INFO(
        "Rozpoczynam poszukiwanie podobnej sekwencji algorytmem SW.\nMATCH: " +
        str(match) + "\nMISMATCH: " + str(mismatch) + "\nGAP OPEN: " +
        str(gap_open) + "\nGAP EXTEND: " + str(gap_extend) + "\nWzorzec: " +
        str(pattern) + "\nPoszukuje: " + str(structs))
    rm = RemoteManager()
    params = {
        "pattern": pattern,
        "structs": structs,
        "match": match,
        "mismatch": mismatch,
        "gap_open": gap_open,
        "gap_extend": gap_extend
    }
    tid = rm.run(searchSW, params)
    LOG.DEBUG("Poszukiwanie podobnej sekwencji algorytmem SW. Numer watku: " +
              str(tid))

    return tid
Ejemplo n.º 7
0
def findProgressKMP(pattern, structs = "A"):
    LOG.INFO("Rozpoczynam poszukiwanie podobnej sekwencji algorytmem KMP.\nWzorzec: " + str(pattern) + ". Poszukuje: " + str(structs))
    rm = RemoteManager()
    params = {"pattern" : pattern, "structs" : structs}
    tid = rm.run(findKMP, params)
    LOG.DEBUG("Poszukiwanie podobnej sekwencji algorytmem KMP. Numer watku: " + str(tid))
    
    return tid
Ejemplo n.º 8
0
def getScaffByContID(cont_id):
    LOG.INFO("Rozpoczynam pobieranie scaffoldu, na ktorym jest contig o ID: " + str(cont_id))
    try:
        c = Contig.objects.get(id = int(cont_id))
    except Contig.DoesNotExist:
        LOG.WARN("Brak contigu o ID: " + str(cont_id))
        return None
    scaff_id = c.scaff_id
    #TODO: Funkcja musisz zwracac scaffold, do ktorego nalezy dany contig. Problem? Do ktorej ScaffoldPosition nalezy ten contig?
    LOG.DEBUG("Contig o ID: " + str(cont_id) + " znajduje sie na scaffoldzie o ID: " + str(scaff_id))
    LOG.INFO("Zakonczylem pobieranie scaffoldu na ktorym jest contig o ID: " + str(cont_id))
    return c.scaff_id
Ejemplo n.º 9
0
def deleteOrganism(org_id):
    LOG.INFO("Rozpoczynam usuwanie organizmu o ID: " + str(org_id))
    try:
        o = Organism.objects.get(id=int(org_id))
    except Organism.DoesNotExist:
        LOG.WARN("Brak organizmu o ID: " + str(org_id))
        return None
    o.delete()

    LOG.DEBUG("Usuwam wszystkie chromosomy organizmu: " + str(org_id) +
              " wraz z podleglymi strukturami")
    # Usuniecie wszystkich chromosomow ze wszystkimi strukturami
    chrs = Chromosome.objects.filter(organism_id=int(org_id))
    for chromosome in chrs:
        LOG.DEBUG("Usuwam chromosome: " + str(chromosome.id) +
                  " z organizmu: " + str(org_id))
        deleteChromosome(chromosome.id)

    LOG.DEBUG("Usuwam wszystkie typy asemblacji z organizmu: " + str(org_id))
    # Usuniecie wszystkich typow asemblacji
    Assemb.objects.filter(organism_id=int(org_id)).delete()

    LOG.INFO("Zakonczylem usuwanie organizmu o ID: " + str(org_id))
    return True
Ejemplo n.º 10
0
def buildMarkerContigTree(cont_id):
    LOG.INFO("Rozpoczynam budowanie drzewa przedzialowego markerow dla contigu o ID:" + str(cont_id))
    markers = Marker.objects.all().filter(cont_id = int(cont_id))
    LOG.DEBUG("Ilosc markerow na contigu o ID: " + str(cont_id) + " wynosi: " + str(len(markers)))
    markers_to_tree = []
    for marker in markers:
        marker_interval = MarkerInterval(marker.name, marker.contig_start, marker.contig_end, -1)
        markers_to_tree.append(marker_interval)

    if len(markers) != 0:
        # Zapamietanie obiektu drzewa przedzialowego
        MarkersContigTreeObject.interval_tree = MarkerIntervalTree(markers_to_tree)
        LOG.INFO("Zakonczylem budowanie drzewa przedzialowego markerow dla contigu o ID:" + str(cont_id))
        return 1
    else:
        LOG.INFO("Nie znaleziono markerow dla contigu o ID:" + str(cont_id))
        return 0
Ejemplo n.º 11
0
def buildContigTree(scaff_id):
    LOG.INFO("Rozpoczynam budowanie drzewa przedzialowego contigow dla scaffoldu o ID:" + str(scaff_id))
    contigs = Contig.objects.all().filter(scaff_id = str(scaff_id))
    LOG.DEBUG("Ilosc contigow na scaffoldzie o ID: " + str(scaff_id) + " wynosi: " + str(len(contigs)))
    contigs_to_tree = []
    for contig in contigs:
        contig_interval = ContigInterval(contig.id, contig.start, contig.end, -1)
        contigs_to_tree.append(contig_interval)

    if len(contigs) != 0:
        # Zapamietanie obiektu drzewa przedzialowego
        ContigsTreeObject.interval_tree = ContigIntervalTree(contigs_to_tree)
        LOG.INFO("Zakonczylem budowanie drzewa przedzialowego contigow dla scaffoldu o ID:" + str(scaff_id))
        return 1
    else:
        LOG.INFO("Nie znaleziono contigow dla scaffoldu o ID: " + str(scaff_id))
        return 0
Ejemplo n.º 12
0
def getMarkersOnScaffold(scaff_id):
    LOG.INFO("Rozpoczynam pobieranie markerow ze scaffoldu o ID: " + str(scaff_id))
    markers = Marker.objects.all().filter(scaff_id = str(scaff_id))
    LOG.DEBUG("Ilosc markerow na scaffoldzie o ID: " + str(scaff_id) + " wynosi " + str(len(markers)))
    
    marks_return = []
    
    for mark in markers:
        try:
            m = Marker.objects.all().get(name = mark.name)
        except Marker.DoesNotExist:
            LOG.WARN("Brak markera o nazwie: " + str(mark.name))
            return None
        #TODO: Tutaj jezeli nie bedzie dzialalo bedzie trzeba zrobic jakiegos Wrapa
        marks_return.append(m)
    
    LOG.INFO("Zakonczylem pobieranie markerow ze scaffoldu o ID: " + str(scaff_id))
    return marks_return
Ejemplo n.º 13
0
def getContigs(scaff_id):
    LOG.INFO("Rozpoczynam pobieranie contigow ze scaffoldu o ID: " + str(scaff_id))
    contigs = Contig.objects.all().filter(scaff_id = str(scaff_id))
    LOG.DEBUG("Ilosc contigow na scaffoldzie o ID: " + str(scaff_id) + " wynosi " + str(len(contigs)))
    
    conts_return = []
    
    for cont in contigs:
        try:
            c = Contig.objects.all().get(id = cont.id)
        except Contig.DoesNotExist:
            LOG.WARN("Brak contigu o ID: " + str(cont.id))
            return None
        cont_wrap = ContigWrap(c.id, c.scaff_id, c.order, c.start, c.end, c.sequence, c.length_bp)
        conts_return.append(cont_wrap)
    
    LOG.INFO("Zakonczylem pobieranie contigow ze scaffoldu o ID: " + str(scaff_id))
    return conts_return
Ejemplo n.º 14
0
def getContigsDict(scaff_id):
    LOG.INFO("Rozpoczynam pobieranie contigow ze scaffoldu o ID: " + str(scaff_id))
    contigs = Contig.objects.all().filter(scaff_id = str(scaff_id))
    LOG.DEBUG("Ilosc contigow na scaffoldzie o ID: " + str(scaff_id) + " wynosi " + str(len(contigs)))
    
    conts_return = []
    
    for i, cont in enumerate(contigs):
        cont_dict = {}
        cont_dict['LP'] = i + 1
        cont_dict['ID'] = cont.id
        cont_dict['SCAFF_ID'] = cont.scaff_id
        cont_dict['START_INDEX'] = cont.start
        cont_dict['END_INDEX'] = cont.end
        cont_dict['LENGTH'] = cont.length_bp
        conts_return.append(cont_dict)
    
    LOG.INFO("Zakonczylem pobieranie contigow ze scaffoldu o ID: " + str(scaff_id))
    return conts_return
Ejemplo n.º 15
0
def getMarkersDictOnCont(cont_id):
    LOG.INFO("Rozpoczynam pobieranie markerow z contiga o ID: " + str(cont_id))
    markers = Marker.objects.all().filter(cont_id = int(cont_id))
    LOG.DEBUG("Ilosc markerow na contigu o ID: " + str(cont_id) + " wynosi " + str(len(markers)))
    
    marks_return = []
    
    for i, mark in enumerate(markers):
        mark_dict = {}
        mark_dict['LP'] = i + 1
        mark_dict['NAME'] = mark.name
        mark_dict['CHR_ID'] = mark.chr_id
        mark_dict['POS_CM'] = mark.pos_cm
        mark_dict['CONT_ID'] = mark.cont_id
        mark_dict['START_INDEX'] = mark.contig_start
        mark_dict['END_INDEX'] = mark.contig_end
        marks_return.append(mark_dict)
    
    LOG.INFO("Zakonczylem pobieranie markerow z contiga o ID: " + str(cont_id))
    return marks_return
Ejemplo n.º 16
0
def getMarkersDictOnScaff(scaff_id):
    LOG.INFO("Rozpoczynam pobieranie markerow ze scaffoldu o ID: " + str(scaff_id))
    markers = Marker.objects.all().filter(scaff_id = str(scaff_id))
    LOG.DEBUG("Ilosc markerow na scaffoldzie o ID: " + str(scaff_id) + " wynosi " + str(len(markers)))
    
    marks_return = []
    
    for i, mark in enumerate(markers):
        mark_dict = {}
        mark_dict['LP'] = i + 1
        mark_dict['NAME'] = mark.name
        mark_dict['CHR_ID'] = mark.chr_id
        mark_dict['POS_CM'] = mark.pos_cm
        mark_dict['SCAFF_ID'] = mark.scaff_id
        mark_dict['START_INDEX'] = mark.scaffold_start
        mark_dict['END_INDEX'] = mark.scaffold_end
        marks_return.append(mark_dict)
    
    LOG.INFO("Zakonczylem pobieranie markerow ze scaffoldu o ID: " + str(scaff_id))
    return marks_return
Ejemplo n.º 17
0
def findProgressBLAST_SW(pattern, w, t, c, cut_off, structs="A"):
    LOG.INFO(
        "Rozpoczynam poszukiwanie podobnej sekwencji algorytmem BLAST.\nW: " +
        str(w) + "\nT: " + str(t) + "\nC: " + str(c) + "\nCUT OFF: " +
        str(cut_off) + "\nWzorzec: " + str(pattern) + "\nPoszukuje: " +
        str(structs))
    rm = RemoteManager()
    params = {
        "pattern": pattern,
        "w": w,
        "t": t,
        "c": c,
        "cut_off": cut_off,
        "structs": structs
    }
    tid = rm.run(runBLAST_SW, params)
    LOG.DEBUG(
        "Poszukiwanie podobnej sekwencji algorytmem BLAST. Numer watku: " +
        str(tid))

    return tid
Ejemplo n.º 18
0
def findKMP(callback, pattern, structs):
    # Sprawdzamy czy na pewno mamy do czynienia z lancuchem znakow
    if not isinstance(pattern, basestring):
        LOG.WARN("Wzorzec nie jest dozwolona sekwencja znakow!")
        return None
    pattern = str(pattern)

    # Wynik
    results = []

    # Tworzymy obiekt algorytmu
    LOG.INFO("Utowrzenie obiektu algorytmu KMP.")
    kmp = calc.KMP()

    # Obliczenie tablicy pomocniczej
    LOG.INFO("Obliczenie tablicy pomocniczej.")
    status = kmp.calculateTable(pattern)

    if "S" in structs or "A" in structs:
        # 5 %
        callback(5, "Retrieving the scaffolds database...")
        LOG.INFO("Pobranie sekwencji scaffoldow.")

        # Scaffolds
        scaffs = Scaffold.objects.values('id', 'sequence')

        # 20 %
        callback(20, "Searching in scaffolds...")
        LOG.INFO("Uruchomienie algorytmu dla sekwencji scaffoldow.")

        scaffs_results = _findKMP(callback, pattern, scaffs, kmp, "Scaffold")
        results.extend(scaffs_results)
        LOG.DEBUG("Ilosc znalezionych scaffoldow: " + str(len(scaffs_results)))

    if "U" in structs or "A" in structs:
        # 40 %
        callback(40, "Retrieving the undefined scaffolds database...")
        LOG.INFO("Pobranie sekwencji niezdefiniowanych scaffolodow.")

        # Undefined Scaffolds
        udef_scaffs = UndefinedScaffold.objects.values('id', 'sequence')

        # 55 %
        callback(55, "Searching in undefined scaffolds...")
        LOG.INFO(
            "Uruchomienie algorytmu dla sekwencji niezdefiniowanych scaffoldow."
        )

        udef_scaffs_results = _findKMP(callback, pattern, udef_scaffs, kmp,
                                       "Undefined scaffold")
        results.extend(udef_scaffs_results)
        LOG.DEBUG("Ilosc znalezionych niezdefiniowanych scaffoldow: " +
                  str(len(udef_scaffs_results)))

    if "C" in structs or "A" in structs:
        # 75 %
        callback(75, "Retrieving the contigs database...")
        LOG.INFO("Pobranie sekwencji contigow.")

        # Contigs
        conts = Contig.objects.values('id', 'sequence')

        # 90 %
        callback(90, "Searching in contigs...")
        LOG.INFO("Uruchomienie algorytmu dla sekwencji contigow.")

        conts_results = _findKMP(callback, pattern, conts, kmp, "Contig")
        results.extend(conts_results)
        LOG.DEBUG("Ilosc znalezionych contigow: " + str(len(conts_results)))

    # 95 %
    callback(95, "Saving results...")

    return (True, results)
Ejemplo n.º 19
0
def _runBLAST(pattern, w, t, c, cut_off, structs="A", callback=None):
    # Sprawdzamy czy na pewno mamy do czynienia z lancuchem znakow
    if not isinstance(pattern, basestring):
        LOG.WARN("Wzorzec nie jest dozwolona sekwencja znakow!")
        return None
    pattern = str(pattern)

    if callback == None:
        callback = debug

    # Wynik
    results = []

    start = time.time()

    # Tworzymy obiekt algorytmu
    LOG.INFO("Utworzenie obiektu algorytmu BLAST.")
    blast = calc.Blast(w, t, c)

    callback(5, "Preparing sequence...")
    LOG.INFO("Przygotowanie sekwencji.")

    res = blast.prepare(str(pattern))
    if res == 0:
        LOG.WARN(
            "Parametr W (= " + str(w) +
            ") powinien byc nie wiekszy od dlugosci zadanej sekwencji (= " +
            str(len(pattern)) + ").")
        return (
            False, "Parametr W (= " + str(w) +
            ") powinien byc nie wiekszy od dlugosci zadanej sekwencji (= " +
            str(len(pattern)) + ").")

    types = []
    # Scaffolds
    if "S" in structs or "A" in structs:
        callback(10, "Retrieving the scaffolds database...")
        LOG.INFO("Pobranie sekwencji scaffolodow.")
        scaffs = Scaffold.objects.values('id', 'sequence')
        types.append(("Scaffold", scaffs))
    # Undefined Scaffolds
    if "U" in structs or "A" in structs:
        callback(11, "Retrieving the undefined scaffolds database...")
        LOG.INFO("Pobranie sekwencji niezdefiniowanych scaffolodow.")
        uscaffs = UndefinedScaffold.objects.values('id', 'sequence')
        types.append(("Undefined scaffold", uscaffs))
    # Contigs
    if "C" in structs or "A" in structs:
        callback(12, "Retrieving the contigs database...")
        LOG.INFO("Pobranie sekwencji contigow.")
        conts = Contig.objects.values('id', 'sequence')
        types.append(("Contig", conts))

    callback(15, "Adding sequences to algorithm...")
    LOG.INFO("Dodanie sekwencji do algorytmu.")

    id_type = {}
    #TODO: TESTOWO OGRANICZONE!!!
    for (type_, seqs) in types:
        for seq in seqs[:10]:
            blast.addSequence(str(seq['id']), str(seq['sequence']))
            id_type[str(seq['id'])] = str(type_)

    callback(50, "Searching in database...")
    LOG.INFO("Przeszukanie sekwencji.")

    res = blast.search()

    if res == 0:
        LOG.WARN(
            "Zbyt wysoka wartosc parametru W (= " + str(w) +
            "). Nie mozna odnalezc zadnego fragmentu poszukiwanej sekwecji.")
        return (
            False, "Zbyt wysoka wartosc parametru W (= " + str(w) +
            "). Nie mozna odnalezc zadnego fragmentu poszukiwanego sekwecji.")

    callback(70, "Limiting the set of sequences...")
    LOG.INFO("Zmniejszenie liczby elementow najistotniejszych.")

    res = blast.estimate()

    if res == 0:
        LOG.WARN("Zbyt wysoka wartosc parametru T (= " + str(t) +
                 "). Powinien zawierac sie w zakresie od " +
                 str(blast.getMinRate()) + " do " + str(blast.getMaxRate()) +
                 ", srednia wartosc rate wynosi " + str(blast.getAvgRate()))
        return (False, "Zbyt wysoka wartosc parametru T (= " + str(t) +
                "). Powinien zawierac sie w zakresie od " +
                str(blast.getMinRate()) + " do " + str(blast.getMaxRate()) +
                ", srednia wartosc rate wynosi " + str(blast.getAvgRate()))

    callback(90, "Extending keywords...")
    LOG.INFO("Rozszerzenie slow kluczowych.")

    res = blast.extend()

    callback(95, "Calculating additional parameters...")
    LOG.INFO("Obliczenie dodatkowych parametrow.")

    res = blast.evaluate()

    callback(99, "Retreving results...")
    LOG.INFO("Pobranie " + str(cut_off) + " najlepszych sekwencji.")

    aligns = blast.getAligns(cut_off)

    LOG.INFO("Pogrupowanie wynikow. Pobranych rezultatow: " + str(len(aligns)))
    aligns_len = len(aligns)
    # Zebranie wynikow
    for i, align in enumerate(aligns):
        same = align.getSame()
        align_len = align.getAlignLength()
        seq_id = align.getSequenceId()
        result = {}
        try:
            result['TYPE'] = id_type[str(seq_id)]
        except KeyError:
            result['TYPE'] = "Unknown"
        result['ID'] = str(seq_id)
        result['SCORE'] = str(align.getScore())
        result['IDENTITY'] = str((float(same) / float(align_len) * 100.00))
        result['GAPS'] = str(align.getGaps())
        result['LENGTH'] = str(align_len)
        result['SEQ_START_INDEX'] = str(align.getSeqStart())
        result['SEQ_END_INDEX'] = str(align.getSeqEnd())
        results.append(result)
        LOG.DEBUG("Zapisalem wynik " + str(i + 1) + "/" + str(aligns_len) +
                  ":\n" + str(result))
    LOG.INFO("Zakonczylem grupowanie wynikow. Rezultatow: " +
             str(len(results)))

    end = time.time()
    LOG.DEBUG("Czas dzialania algorytmu BLAST dla sekwencji o dlugosci " +
              str(len(str(pattern))) + ": " + str(end - start) + "s.")

    return (True, results)
Ejemplo n.º 20
0
def _searchSW(pattern,
              structs,
              match=2,
              mismatch=-1,
              gap_open=-3,
              gap_extend=-1,
              callback=None):
    # Sprawdzamy czy na pewno mamy do czynienia z lancuchem znakow
    if not isinstance(pattern, basestring):
        LOG.WARN("Wzorzec nie jest dozwolona sekwencja znakow!")
        return None
    pattern = str(pattern)

    if callback == None:
        callback = debug

    # Wynik
    results = []

    # Tworzymy obiekt algorytmu
    LOG.INFO("Utworzenie obiektu algorytmu SW.")
    sw = calc.SW()

    if "S" in structs or "A" in structs:
        # 5 %
        callback(5, "Retrieving the scaffolds database...")
        LOG.INFO("Pobranie sekwencji scaffoldow z bazy danych.")

        # Scaffolds
        scaffs = Scaffold.objects.values('id', 'sequence')

        # 20 %
        callback(20, "Searching in scaffolds...")
        LOG.INFO("Uruchomienie algorytmu dla sekwencji scaffoldow.")

        scaffs_results = _searchMaxSW(callback, pattern, scaffs, sw, match,
                                      mismatch, gap_open, gap_extend,
                                      "Scaffold")
        results.extend(scaffs_results)
        LOG.DEBUG("Ilosc znalezionych scaffoldow: " + str(len(scaffs_results)))

    if "U" in structs or "A" in structs:
        # 40 %
        callback(40, "Retrieving the undefined scaffolds database...")
        LOG.INFO("Pobranie sekwencji niezdefiniowanych scaffoldow.")

        # Undefined Scaffolds
        udef_scaffs = UndefinedScaffold.objects.values('id', 'sequence')

        # 55 %
        callback(55, "Searching in undefined scaffolds...")
        LOG.INFO(
            "Uruchomienie algorytmu dla sekwencji niezdefiniowanych scaffoldow."
        )

        udef_scaffs_results = _searchMaxSW(callback, pattern, udef_scaffs, sw,
                                           match, mismatch, gap_open,
                                           gap_extend, "Undefined scaffold")
        results.extend(udef_scaffs_results)
        LOG.DEBUG("Ilosc znalezionych niezdefiniowanych scaffoldow: " +
                  str(len(udef_scaffs_results)))

    if "C" in structs or "A" in structs:
        # 75 %
        callback(75, "Retrieving the contigs database...")
        LOG.INFO("Pobranie sekwencji contigow.")

        # Contigs
        conts = Contig.objects.values('id', 'sequence')

        # 90 %
        callback(90, "Searching in contigs...")
        LOG.INFO("Uruchomienie algorytmu dla sekwencji contigow.")

        conts_results = _searchMaxSW(callback, pattern, conts, sw, match,
                                     mismatch, gap_open, gap_extend, "Contig")
        results.extend(conts_results)
        LOG.DEBUG("Ilosc znalezionych contigow: " + str(len(conts_results)))

    # 95 %
    callback(95, "Saving results...")

    return results
Ejemplo n.º 21
0
def updateAssembs(new_assembs, org_id):
    LOG.INFO(
        "Rozpoczynam uaktualnianie wszystkich typow asemblacji dla organizmu: "
        + str(org_id))
    LOG.DEBUG("Nowe typy asemblacji: " + str(new_assembs))

    new_assembs_tmp_dict = {}
    added_assembs = []
    # DODANIE
    for new_ass in new_assembs:
        try:
            # Jezeli ID = -1 -> dodajemy
            if int(new_ass['ID']) == -1:
                LOG.DEBUG("Dodaje nowy typ asemblacji: " +
                          str(new_ass['NAME']))
                a = Assemb(name=new_ass['NAME'],
                           description=new_ass['DESC'],
                           organism_id=int(org_id))
                a.save()
                new_ass['ID'] = str(a.id)
                added_assembs.append(new_ass['ID'])

                # Dodanie odpowiednich ChromosomeLength
                LOG.DEBUG("Dodaje odpowiednie wpisy w ChromosomeLength.")
                chromosomes = Chromosome.objects.all().filter(
                    organism_id=int(org_id))
                LOG.DEBUG("Wszystkie chromosomy organizmu: " + str(org_id) +
                          ": " + str(chromosomes))
                for chromosome_obj in chromosomes:
                    LOG.DEBUG("Dodaje nowa dlugosc chromosomu " +
                              str(chromosome_obj.id) +
                              " dla typu asemblacji: " + str(new_ass['NAME']))
                    chr_len_new = ChromosomeLength(chr_id=chromosome_obj.id,
                                                   assemb_id=a.id,
                                                   length=0.0)
                    chr_len_new.save()
                    LOG.DEBUG(
                        "Dodalem nowa dlugosc chromosomu dla typu asemblacji: "
                        + str(new_ass['NAME']) + " --> " + str(chr_len_new.id))

            # Jezeli nie -> dodajemy do new_assembs_tmp_dict, zeby ponizszy for byl wydajniejszy
            else:
                new_assembs_tmp_dict[int(new_ass['ID'])] = {
                    'NAME': new_ass['NAME'],
                    'DESC': new_ass['DESC']
                }
        except Exception:
            LOG.WARN("Blad podczas dodawania nowych typow asemblacji.")
            return None

    # UAKTUALNIENIE / USUNIECIE
    assembs_db = Assemb.objects.filter(organism_id=int(org_id))
    LOG.DEBUG("Typy asemblacji w bazie przed modyfikacja oraz usuwaniem: " +
              str(assembs_db))
    try:
        for ass in assembs_db:
            # Jezeli istnieje w slowniku -> uaktualniamy name i desc
            if new_assembs_tmp_dict.has_key(int(ass.id)):
                LOG.DEBUG("Uaktualniam typ asemblacji: " + str(ass))
                ass.name = new_assembs_tmp_dict[int(ass.id)]['NAME']
                ass.description = new_assembs_tmp_dict[int(ass.id)]['DESC']
                ass.save()
            # Jezeli nie ma w slowniku i w nowo dodanych -> usuwamy
            else:
                LOG.DEBUG("Probuje usunac typ asemblacji: " + str(ass))
                if str(ass.id) not in added_assembs:
                    LOG.DEBUG("Usuwam typ asemblacji: " + str(ass))
                    ass.delete()
    except ValueError:
        LOG.WARN(
            "Blad podczas dodawania nowych typow asemblacji (ValueError).")
        return None

    LOG.INFO("Zakonczylem uaktualnianie wszystkich typow asemblacji.")
    return new_assembs