示例#1
0
MapperRangeSet *PredictionTranscript_cDNA2Genomic(PredictionTranscript *trans, int start, int end) {
    Mapper *mapper;

    mapper = PredictionTranscript_getcDNACoordMapper(trans);

    return Mapper_mapCoordinates(mapper, (IDType)trans, start, end, 1, "cdna" );
}
示例#2
0
int testTransform(Mapper *mapper, int srcId, int srcStart, int srcEnd, int srcStrand, char *srcType, int dest[][4], int nDest ) {

  MapperRangeSet *results = Mapper_mapCoordinates(mapper, srcId, srcStart, srcEnd, srcStrand, srcType);

  printf("\nNew test\n");

  int diff = 0;
  printf("Number of results = %d nDest = %d\n",MapperRangeSet_getNumRange(results), nDest);
  if (MapperRangeSet_getNumRange(results) != nDest) {
    diff =1;
  
  } else{
    int i;
    for (i=0;i<MapperRangeSet_getNumRange(results) && !diff;i++) {
      MapperRange *range = MapperRangeSet_getRangeAt(results, i);

      switch (range->rangeType) {
        case MAPPERRANGE_COORD :
          {
            MapperCoordinate *mc = (MapperCoordinate *)range;
            printf("Coord: "IDFMTSTR" %ld %ld %d\n", mc->id, mc->start, mc->end, mc->strand);
            if (dest[i][0] != mc->id || dest[i][1] != mc->start || dest[i][2] != mc->end || dest[i][3] != mc->strand) {
              diff=1;
            }
          } 
          break;
        case MAPPERRANGE_GAP :
          {
            MapperGap *mg = (MapperGap *)range;
            
            printf("Gap: %ld %ld\n", mg->start, mg->end);
            if (dest[i][0] != srcId || dest[i][1] != mg->start || dest[i][2] != mg->end || dest[i][3] != 0) {
              diff=1;
            }
          } 
          break;
        default:
          {
            printf("Unhandled range type %d\n",range->rangeType);
            diff=1;
          }
          break;
      }
    }
  }
  if (diff) {
    printf("DIFFERENCE\n");
  }
  return 1;
}
示例#3
0
MapperRangeSet *PredictionTranscript_genomic2cDNA(PredictionTranscript *trans, int start, int end, int strand, BaseContig *contig) {
    Mapper *mapper;

    // "ids" in mapper are contigs of exons, so use the same contig that should
    // be attached to all of the exons...
    if (!contig) {
        Vector *translateable = PredictionTranscript_getAllTranslateableExons(trans);
        PredictionExon *firstExon;
        if (!Vector_getNumElement(translateable)) {
            return MapperRangeSet_new();
        }
        firstExon = Vector_getElementAt(translateable, 0);
        contig = (BaseContig*)PredictionExon_getSlice(firstExon);
        Vector_free(translateable);
    }

    mapper = PredictionTranscript_getcDNACoordMapper(trans);

    return Mapper_mapCoordinates(mapper,(IDType)contig, start, end, strand, "genomic");
}
示例#4
0
MapperRangeSet *AssemblyMapper_mapImpl(AssemblyMapper *am, char *frmSeqRegionName, long frmStart, long frmEnd, int frmStrand, CoordSystem *frmCs, int fakeFastMapFlag, Slice *toSlice) {
  Mapper *mapper  = AssemblyMapper_getMapper(am);
  CoordSystem *asmCs  = AssemblyMapper_getAssembledCoordSystem(am);
  CoordSystem *cmpCs  = AssemblyMapper_getComponentCoordSystem(am);
  AssemblyMapperAdaptor *adaptor = AssemblyMapper_getAdaptor(am);

  char *frm;

  IDType seqRegionId = AssemblyMapper_getSeqRegionId(am, frmSeqRegionName, frmCs);

  // Speed critical section:
  // Try to do simple pointer equality comparisons of the coord system
  // objects first since this is likely to work most of the time and is
  // much faster than a function call.

  if ( frmCs == cmpCs
       || ( frmCs != asmCs && !CoordSystem_compare(frmCs,  cmpCs)) ) {
    if ( !IDHash_contains(AssemblyMapper_getComponentRegister(am), seqRegionId) ) {
      AssemblyMapperAdaptor_registerComponent( adaptor, am, seqRegionId);
    }
    frm = "component";

  } else if ( frmCs == asmCs || !CoordSystem_compare(frmCs, asmCs) ) {
    // This can be probably be sped up some by only calling registered
    // assembled if needed.
    AssemblyMapperAdaptor_registerAssembled( adaptor, am, seqRegionId, frmStart, frmEnd);

    frm = "assembled";
  } else {
    fprintf(stderr,"Coordinate system %s %s is neither the assembled nor the component coordinate system of this AssemblyMapper\n",
            CoordSystem_getName(frmCs), CoordSystem_getVersion(frmCs) );

  }

  return Mapper_mapCoordinates( mapper, seqRegionId, frmStart, frmEnd, frmStrand, frm );
}
示例#5
0
MapperRangeSet *Mapper_mapInsert(Mapper *m, IDType id, long start, long end, int strand, char *type, int fastmap) {

  // swap start/end and map the resultant 2bp coordinate
  long tmp;
  tmp = start;
  start = end;
  end = tmp;
  
  MapperRangeSet *coords = Mapper_mapCoordinates(m, id, start, end, strand, type);

  MapperRangeSet *retSet = MapperRangeSet_new(); 

  if (MapperRangeSet_getNumRange(coords) == 1) {
// Note assuming its a mapper coordinate - not sure if this is always true
    MapperCoordinate *c = (MapperCoordinate *)MapperRangeSet_getRangeAt(coords,0);

    // swap start and end to convert back into insert
    MapperCoordinate *newC = MapperCoordinate_new(c->id, c->end, c->start, c->strand, c->coordSystem, 0); // Perl didn't set rank so use 0
    MapperRangeSet_addRange(retSet, (MapperRange *)newC);

  } else {
    if (MapperRangeSet_getNumRange(coords) != 2) {
      fprintf(stderr, "Unexpected: Got %d expected 2.\n", MapperRangeSet_getNumRange(coords));
      exit(1);
    }

    // adjust coordinates, remove gaps
    MapperRange *c1, *c2;

    if (strand == -1) {
      c1 = MapperRangeSet_getRangeAt(coords,1);
      c2 = MapperRangeSet_getRangeAt(coords,0);
    } else {
      c1 = MapperRangeSet_getRangeAt(coords,0);
      c2 = MapperRangeSet_getRangeAt(coords,1);
    }

    //@coords = ();

    // Was ref($c1) eq 'Bio::EnsEMBL::Mapper::Coordinate' so think this WON'T include MAPPERRANGE_INDEL

    MapperCoordinate *newC1 = NULL;
    if (c1->rangeType == MAPPERRANGE_COORD) {
      MapperCoordinate *mcC1 = (MapperCoordinate *)c1;
      // insert is after first coord
      if (mcC1->strand * strand == -1) {
        mcC1->end--;
      } else {
        mcC1->start++;
      }
      newC1 = MapperCoordinate_new(mcC1->id, mcC1->start, mcC1->end, mcC1->strand, mcC1->coordSystem, 0); // Perl didn't set rank, so use 0
    }

    // (see above for note on this condition if (ref($c2) eq 'Bio::EnsEMBL::Mapper::Coordinate') 
    MapperCoordinate *newC2 = NULL;
    if (c2->rangeType == MAPPERRANGE_COORD) {
      MapperCoordinate *mcC2 = (MapperCoordinate *)c2;
      // insert is before second coord
      if(mcC2->strand * strand == -1) {
        mcC2->start++;
      } else {
        mcC2->end--;
      }
      newC2 = MapperCoordinate_new(mcC2->id, mcC2->start, mcC2->end, mcC2->strand, mcC2->coordSystem, 0); // Perl didn't set rank, so use 0
    }
   
    if (strand == -1) { // Add in 2, 1 order
      if (newC2) MapperRangeSet_addRange(retSet, (MapperRange *)newC2);
      if (newC1) MapperRangeSet_addRange(retSet, (MapperRange *)newC1);
    } else {  // Add in 1, 2 order
      if (newC1) MapperRangeSet_addRange(retSet, (MapperRange *)newC1);
      if (newC2) MapperRangeSet_addRange(retSet, (MapperRange *)newC2);
    }

  }

  if (fastmap) {
    if (MapperRangeSet_getNumRange(coords) != 1) {
      MapperRangeSet_free(retSet);
      retSet = NULL;
    } else {
      MapperRange *c = MapperRangeSet_getRangeAt(coords, 0);

      // Type check - not sure what we're supposed to have here so belt and braces seem appropriate
      if (c->rangeType != MAPPERRANGE_COORD) {
        fprintf(stderr, "Expected a Coordinate range, got a %d range (look up in MapperRange.h)\n", c->rangeType);
        exit(1);
      }
      
      MapperCoordinate *mcC = (MapperCoordinate *)c;

      MapperCoordinate *newC = MapperCoordinate_new(mcC->id, mcC->start, mcC->end, mcC->strand, mcC->coordSystem, 0); // Perl didn't set rank, so use 0
      MapperRangeSet_addRange(retSet, (MapperRange *)newC);

/*
      return ($c->{'id'}, $c->{'start'}, $c->{'end'},
              $c->{'strand'}, $c->{'coord_system'});
*/
    }
  }

  MapperRangeSet_free(coords);

  return retSet;
}