Exemple #1
0
EnsPIntron ensIntronNewExons(EnsPExon exon1, EnsPExon exon2)
{
    ajint strand = 0;
    
    ajuint start = 0;
    ajuint end   = 0;
    
    AjPStr seqname1 = NULL;
    AjPStr seqname2 = NULL;
    
    EnsPFeature feature  = NULL;
    EnsPFeature feature1 = NULL;
    EnsPFeature feature2 = NULL;
    
    EnsPIntron intron = NULL;
    
    EnsPSlice slice1 = NULL;
    EnsPSlice slice2 = NULL;
    
    /*
     ajDebug("ensIntronNew\n"
	     "  exon1 %p\n"
	     "  exon2 %p\n",
	     exon1,
	     exon2);
     
     ensExonTrace(exon1, 1);
     
     ensExonTrace(exon2, 1);
     */
    
    if(!exon1)
	return NULL;
    
    if(!exon2)
	return NULL;
    
    feature1 = ensExonGetFeature(exon1);
    feature2 = ensExonGetFeature(exon2);
    
    slice1 = ensFeatureGetSlice(feature1);
    slice2 = ensFeatureGetSlice(feature2);
    
    seqname1 = ensFeatureGetSequenceName(feature1);
    seqname2 = ensFeatureGetSequenceName(feature2);
    
    /* Both Exons have to be on the same Slice or sequence. */
    
    if(slice1 && slice2 && (!ensSliceMatch(slice1, slice2)))
    {
	ajDebug("ensIntronNewExons got Exons on different Slices.\n");
	
	return NULL;
    }
    else if(seqname1 && seqname2 && (!ajStrMatchCaseS(seqname1, seqname2)))
    {
	ajDebug("ensIntronNewExons got Exons on different sequence names.\n");
	
	return NULL;
    }
    else
    {
	ajDebug("ensIntronNewExons got Exons on Slice and sequence names.\n");
	
	return NULL;
    }
    
    if(ensFeatureGetStrand(feature1) != ensFeatureGetStrand(feature2))
    {
	ajDebug("ensIntronNewExons got Exons on different strands.\n");
	
	return NULL;
    }
    
    if(ensFeatureGetStrand(feature1) >= 0)
    {
	start = ensFeatureGetEnd(feature1) + 1;
	
	end = ensFeatureGetStart(feature2) - 1;
    }
    else
    {
	start = ensFeatureGetEnd(feature2) + 1;
	
	end = ensFeatureGetStart(feature1) - 1;
    }
    
    if(start > (end + 1))
    {
	ajDebug("ensIntronNewExons requires that the start coordinate %u "
		"is less than the end coordinate %u + 1 ", start, end);
	
	return NULL;
    }
    
    strand = ensFeatureGetStrand(feature1);
    
    if(slice1)
	feature = ensFeatureNewS((EnsPAnalysis) NULL,
				 slice1,
				 start,
				 end,
				 strand);
    
    if(seqname1)
	feature = ensFeatureNewN((EnsPAnalysis) NULL,
				 seqname1,
				 start,
				 end,
				 strand);
    
    if(feature)
    {
	AJNEW0(intron);
	
	intron->Feature = feature;
        
	intron->PreviousExon = ensExonNewRef(exon1);
	
	intron->NextExon = ensExonNewRef(exon2);
	
	intron->Use = 1;	
    }
    else
	ajDebug("ensIntronNewExons could not create an Ensembl Feature.\n");
    
    return intron;
}
Exemple #2
0
static AjBool karyotypeBandadaptorFetchAllBySQL(EnsPDatabaseadaptor dba,
                                                const AjPStr statement,
                                                EnsPAssemblymapper am,
                                                EnsPSlice slice,
                                                AjPList kblist)
{
    ajuint identifier = 0;
    
    ajuint srid    = 0;
    ajuint srstart = 0;
    ajuint srend   = 0;
    
    AjPStr name  = NULL;
    AjPStr stain = NULL;
    
    AjPSqlstatement sqls = NULL;
    AjISqlrow sqli       = NULL;
    AjPSqlrow sqlr       = NULL;
    
    EnsPCoordsystemadaptor csa = NULL;
    
    EnsPFeature feature = NULL;
    
    EnsPKaryotypeband kb         = NULL;
    EnsPKaryotypebandadaptor kba = NULL;
    
    EnsPSlice srslice   = NULL;
    EnsPSliceadaptor sa = NULL;
    
    if(!dba)
	return ajFalse;
    
    if(!statement)
	return ajFalse;
    
    (void) am;
    
    (void) slice;
    
    if(!kblist)
	return ajFalse;
    
    csa = ensRegistryGetCoordsystemadaptor(dba);

    /*
    ** AJB: The variable kba, set below, is not used elsewhere
    ** in the function. Needs fixing appropriately.
    */
    
    kba = ensRegistryGetKaryotypebandadaptor(dba);
    
    sa = ensRegistryGetSliceadaptor(dba);
    
    sqls = ensDatabaseadaptorSqlstatementNew(dba, statement);
    
    sqli = ajSqlrowiterNew(sqls);
    
    while(!ajSqlrowiterDone(sqli))
    {
	identifier = 0;
	srid       = 0;
	srstart    = 0;
	srend      = 0;
	name       = ajStrNew();
	stain      = ajStrNew();
	
	sqlr = ajSqlrowiterGet(sqli);
	
	ajSqlcolumnToUint(sqlr, &identifier);
	ajSqlcolumnToUint(sqlr, &srid);
	ajSqlcolumnToUint(sqlr, &srstart);
	ajSqlcolumnToUint(sqlr, &srend);
        ajSqlcolumnToStr(sqlr, &name);
        ajSqlcolumnToStr(sqlr, &stain);
	
	/* Need to get the internal Ensembl Sequence Region identifier. */
	
	srid = ensCoordsystemadaptorGetInternalSeqregionIdentifier(csa, srid);
	
	/*
	** FIXME: karyotype.seq_region_start and karyotype.seq_region_end are
	** defined as signed in the tables.sql file.
	** All other features use unsigned start and end coordinates.
	*/
	
	ensSliceadaptorFetchBySeqregionIdentifier(sa, srid, 0, 0, 0, &srslice);
	
	feature = ensFeatureNewS((EnsPAnalysis) NULL,
				 srslice,
				 srstart,
				 srend,
				 1);
	
	kb = ensKaryotypebandNew(identifier, feature, name, stain);
	
	ajListPushAppend(kblist, (void *) kb);
	
	ensFeatureDel(&feature);
	
	ensSliceDel(&srslice);
	
	ajStrDel(&name);
	ajStrDel(&stain);
    }
    
    ajSqlrowiterDel(&sqli);
    
    ajSqlstatementDel(&sqls);
    
    return ajTrue;
}