Exemplo n.º 1
0
void
AntiDOS_update(AntiDOS *dos)
{
  time_t		t = time(0);
  assert(dos!=0);
  
  if (t-dos->min_time > ANTIDOS_TIME_BASE) {
    bool		was_changed = false;
    struct Data		*i;
    
    dos->min_time = t;
    for (i = Vector_begin(&dos->data); i!=Vector_end(&dos->data); ++i) {
      if (t - i->access_time>ANTIDOS_TIME_BASE) {
	i->ip.s_addr  = 0xFFFFFFFF;
	was_changed   = true;
      }
      else
	dos->min_time = MIN(dos->min_time, i->access_time);
    }

    if (was_changed) {
      Vector_sort(&dos->data, Data_sortCompare);
      for (i=Vector_end(&dos->data); i!=Vector_begin(&dos->data);) {
	--i;
	if (i->ip.s_addr!=0xFFFFFFFF) break;

	Vector_popback(&dos->data);
      }

      Vector_resize(&dos->data);
    }
  }
}
Exemplo n.º 2
0
char *Translation_modifyTranslation(Translation *translation, char *seq) {
  Vector *seqEds = Translation_getAllSeqEdits(translation);

  // Sort in reverse order to avoid complication of adjusting
  // downstream edits.
  // HACK:   The translation ENSP00000420939 somehow makes the next line
  //         bomb out ($a or $b becomes undef) if the start() method
  //         is used.  I haven't been able to find out why.  It has 10
  //         Selenocysteine seqedits that looks correct.
  //         /Andreas (release 59)
  if (Vector_getNumElement(seqEds)) {
    Vector_sort(seqEds, SeqEdit_reverseStartCompFunc);
  
  //  @seqeds = sort { $b->{'start'} <=> $a->{'start'} } @seqeds;
  
  
    // Apply all edits.
    // Not particularly efficient currently, could improve by precalculating maximum size of new seq prior to applying edits
    int i;
    for (i=0; i<Vector_getNumElement(seqEds); i++) {
      SeqEdit *se = Vector_getElementAt(seqEds, i);
      seq = SeqEdit_applyEdit(se, seq);
    }
  
    //$seq->seq($peptide);
  }

  Vector_free(seqEds);

  return seq;
}
Exemplo n.º 3
0
Vector *getGenes(Slice *slice, int flags) { 
  Vector *genes;
  genes = Slice_getAllGenes(slice, NULL, NULL, 1, NULL, NULL);

  Vector_sort(genes, geneStartCompFunc);

  return genes;
}
Exemplo n.º 4
0
void PredictionTranscript_sort(PredictionTranscript *trans) {
    PredictionExon *firstExon = PredictionTranscript_getExonAt(trans,0);
    int strand;
    int i;

    for (i=0; i<PredictionTranscript_getExonCount(trans); i++) {
        if (!PredictionTranscript_getExonAt(trans,i)) {
            return;
        }
    }

    strand = PredictionExon_getStrand(firstExon);

// Hack in using Exon function names
    if (strand == 1) {
        Vector_sort(PredictionTranscript_getExons(trans),Exon_forwardStrandCompFunc);
    } else if (strand == -1) {
        Vector_sort(PredictionTranscript_getExons(trans),Exon_reverseStrandCompFunc);
    }
}
Exemplo n.º 5
0
Vector *GenomicAlignAdaptor_mergeAlignsets(GenomicAlignAdaptor *gaa, Vector *alignSet1, Vector *alignSet2) {
  int i;
  Vector *bigList = Vector_new();
  IDHash *overlappingSets[2];
  Vector *mergedAligns;


  for (i=0;i<Vector_getNumElement(alignSet1); i++) {
    GenomicAlign *align = Vector_getElementAt(alignSet1, i);
    Vector_addElement(bigList, GenomicAlignListElem_new(DNAFrag_getDbID(GenomicAlign_getQueryDNAFrag(align)),
                                                        GenomicAlign_getQueryStart(align), align, 0));
    Vector_addElement(bigList, GenomicAlignListElem_new(DNAFrag_getDbID(GenomicAlign_getQueryDNAFrag(align)),
                                                        GenomicAlign_getQueryEnd(align)+0.5, align, 0));
  }

  for (i=0;i<Vector_getNumElement(alignSet2); i++) {
    GenomicAlign *align = Vector_getElementAt(alignSet2, i);
    Vector_addElement(bigList, GenomicAlignListElem_new(DNAFrag_getDbID(GenomicAlign_getConsensusDNAFrag(align)),
                                                        GenomicAlign_getConsensusStart(align), align, 1));
    Vector_addElement(bigList, GenomicAlignListElem_new(DNAFrag_getDbID(GenomicAlign_getConsensusDNAFrag(align)),
                                                        GenomicAlign_getConsensusEnd(align)+0.5, align, 1));
  }
  
  Vector_sort(bigList, GenomicAlignListElem_compFunc);

  // walking from start to end through sortlist and keep track of the 
  // currently overlapping set of Alignments
 
  overlappingSets[0] = IDHash_new(IDHASH_SMALL);
  overlappingSets[1] = IDHash_new(IDHASH_SMALL);

  mergedAligns = Vector_new();

  for (i=0; i<Vector_getNumElement(bigList); i++) {
    GenomicAlignListElem *gale  = Vector_getElementAt(bigList,i);

    GenomicAlign *align = gale->align;
    IDType alignID      = GenomicAlign_getDbID(align);
    int setNo           = gale->setNum;

    if (IDHash_contains(overlappingSets[setNo], alignID)) {
      // remove from current overlapping set
      IDHash_remove(overlappingSets[setNo], alignID, NULL);
    } else {
      int j;
      void **values = IDHash_getValues(overlappingSets[1-setNo]);

      // insert into the set and do all the overlap business
      IDHash_add(overlappingSets[setNo], alignID, align);

      // the other set contains everything this align overlaps with
      for (j=0; j<IDHash_getNumValues(overlappingSets[1-setNo]); j++) {
        GenomicAlign *align2 = values[j];
        if (setNo == 0) {
          GenomicAlignAdaptor_addDerivedAlignments(gaa, mergedAligns, align, align2);
        } else {
          GenomicAlignAdaptor_addDerivedAlignments(gaa, mergedAligns, align2, align);
        }
      }
      free(values);
    }
  }

// NIY Free gale

  return mergedAligns;
}