static rc_t SRADumper_DumpRun( const SRATable* table, spotid_t minSpotId, spotid_t maxSpotId, const SRASplitterFactory* factories ) { rc_t rc = 0, rcr = 0; spotid_t spot = 0; make_readmask( readmask ); const SRASplitter* root_splitter = NULL; rc = SRASplitterFactory_NewObj( factories, &root_splitter ); for( spot = minSpotId; rc == 0 && spot <= maxSpotId; spot++ ) { reset_readmask( readmask ); rc = SRASplitter_AddSpot( root_splitter, spot, readmask ); rc = rc ? rc : Quitting(); } rcr = SRASplitter_Release( root_splitter ); return rc ? rc : rcr; }
/* skip all reads with len < minreadlen */ static rc_t AbsolidReadLenFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask) { rc_t rc = 0; AbsolidReadLenFilter* self = (AbsolidReadLenFilter*)cself; if( self == NULL || key == NULL ) { rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid); } else { *key = ""; if( rc == 0 && (rc = AbsolidReaderSeekSpot(self->reader, spot)) == 0 ) { uint32_t num_reads = 0; if( (rc = AbsolidReader_SpotInfo(self->reader, NULL, NULL, NULL, &num_reads)) == 0 ) { uint32_t readId; make_readmask(new_mask); INSDC_coord_len read_len = 0; clear_readmask(new_mask); for(readId = 0; rc == 0 && readId < num_reads; readId++) { if( !isset_readmask(readmask, readId) ) { continue; } rc = AbsolidReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len); if( rc == 0 && read_len > 0 ) { set_readmask(new_mask, readId); } } copy_readmask(new_mask, readmask); } } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) { SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot)); *key = NULL; rc = 0; } } return rc; }
/* leave only up to 2 first bio reads */ static rc_t Absolid2BioFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask) { rc_t rc = 0; Absolid2BioFilter* self = (Absolid2BioFilter*)cself; if( self == NULL || key == NULL ) { rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid); } else { if( (rc = AbsolidReaderSeekSpot(self->reader, spot)) == 0 ) { uint32_t num_reads = 0; if( (rc = AbsolidReader_SpotInfo(self->reader, NULL, NULL, NULL, &num_reads)) == 0 ) { uint32_t q, readId; make_readmask(new_mask); SRAReadTypes read_type = SRA_READ_TYPE_TECHNICAL; clear_readmask(new_mask); for(q = 0, readId = 0; rc == 0 && readId < num_reads && q < 2; readId++) { if( (rc = AbsolidReader_SpotReadInfo(self->reader, readId + 1, &read_type, NULL, NULL, NULL, NULL)) == 0 ) { if( read_type & SRA_READ_TYPE_BIOLOGICAL ) { set_readmask(new_mask, readId); q++; } } } *key = ""; copy_readmask(new_mask, readmask); } } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) { SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot)); *key = NULL; rc = 0; } } return rc; }