CVDB::CVDB(const CVDBMgr& mgr, const string& acc_or_path) : m_Name(acc_or_path) { DECLARE_SDK_GUARD(); string path = CVPath::ConvertAccOrSysPathToPOSIX(acc_or_path); if ( rc_t rc = VDBManagerOpenDBRead(mgr, x_InitPtr(), 0, "%.*s", int(path.size()), path.data()) ) { *x_InitPtr() = 0; if ( (GetRCObject(rc) == RCObject(rcDirectory) || GetRCObject(rc) == RCObject(rcPath) || GetRCObject(rc) == RCObject(rcFile)) && GetRCState(rc) == rcNotFound ) { // no SRA accession NCBI_THROW2_FMT(CSraException, eNotFoundDb, "Cannot open VDB: "<<acc_or_path, rc); } else if ( GetRCObject(rc) == rcName && GetRCState(rc) == rcNotFound && GetRCContext(rc) == rcResolving ) { // invalid SRA database NCBI_THROW2_FMT(CSraException, eNotFoundDb, "Cannot open VDB: "<<acc_or_path, rc); } else if ( GetRCObject(rc) == RCObject(rcFile) && GetRCState(rc) == rcUnauthorized ) { // invalid SRA database NCBI_THROW2_FMT(CSraException, eProtectedDb, "Cannot open VDB: "<<acc_or_path, rc); } else if ( GetRCObject(rc) == RCObject(rcDatabase) && GetRCState(rc) == rcIncorrect ) { // invalid SRA database NCBI_THROW2_FMT(CSraException, eDataError, "Cannot open VDB: "<<acc_or_path, rc); } else { // other errors NCBI_THROW2_FMT(CSraException, eOtherError, "Cannot open VDB: "<<acc_or_path, rc); } } }
static rc_t FastqLoaderFmt_WriteData(FastqLoaderFmt* self, uint32_t argc, const SRALoaderFile* const argv[], int64_t* spots_bad_count) { rc_t rc = 0; uint32_t i, g = 0; FastqFileInfo* files = NULL; bool done; static IlluminaSpot spot; if( (files = calloc(argc, sizeof(*files))) == NULL ) { rc = RC(rcSRA, rcFormatter, rcReading, rcMemory, rcInsufficient); } for(i = 0; rc == 0 && i < argc; i++) { ExperimentQualityType qType; FastqFileInfo* file = &files[i]; file->file = argv[i]; FileReadData_init(file->spot, false); FileReadData_init(&file->spot[1], false); if( (rc = SRALoaderFile_QualityScoringSystem(file->file, &qType)) == 0 && (rc = SRALoaderFile_QualityEncoding(file->file, &file->qualEnc)) == 0 && (rc = SRALoaderFile_AsciiOffset(file->file, &file->qualOffset)) == 0 ) { file->qualType = ILLUMINAWRITER_COLMASK_NOTSET; if( qType == eExperimentQualityType_Undefined ) { qType = self->processing->quality_type; file->qualOffset = self->processing->quality_offset; } switch(qType) { case eExperimentQualityType_LogOdds: case eExperimentQualityType_Other: if( self->w454 != NULL || self->wIonTorrent != NULL ) { rc = RC(rcSRA, rcFormatter, rcConstructing, rcParam, rcInvalid); LOGERR(klogInt, rc, "quality type other than Phred is not supported for this PLATFORM"); } file->qualMin = -40; file->qualMax = 41; file->qualType = ILLUMINAWRITER_COLMASK_QUALITY_LOGODDS1; break; default: SRALoaderFile_LOG(file->file, klogWarn, rc, "quality_scoring_system attribute not set for this file, using Phred as default", NULL); case eExperimentQualityType_Phred: file->qualType = ILLUMINAWRITER_COLMASK_QUALITY_PHRED; file->qualMin = 0; file->qualMax = (self->wIllumina) ? 61: 127; break; } } } do { done = true; for(i = 0; rc == 0 && i < argc; i++) { FastqFileInfo* file = &files[i]; if( (rc = read_next_spot(self, file)) != 0 || !file->spot->ready ) { continue; } done = false; #if _DEBUGGING {{ FileReadData* ss = file->spot; do { DEBUG_MSG(3, ("file-%u: name:'%s', bc:%s, rd:%i, flt:%hu, seq '%.*s', qual %u bytes\n", i + 1, ss->name.data, ss->barcode.data, ss->read.read_id, ss->read.filter, ss->read.seq.len, ss->read.seq.data, ss->read.qual.len)); if( ss == &file->spot[1]){ break; } ss = file->spot[1].ready ? &file->spot[1] : NULL; } while( ss != NULL ); }} #endif } if( rc != 0 || done ) { break; } /* collect spot reads, matching by spot name * spot data may be split across multiple files */ IlluminaSpot_Init(&spot); for(i = 0; rc == 0 && i < argc; i++) { FileReadData* fspot = files[i].spot[0].ready ? &files[i].spot[0] : NULL; while(rc == 0 && fspot != NULL ) { rc = IlluminaSpot_Add(&spot, &fspot->name, &fspot->barcode, &fspot->read); if( rc == 0 ) { g = i; fspot->ready = false; } else if( GetRCState(rc) == rcIgnored ) { rc = 0; } else { SRALoaderFile_LOG(files[i].file, klogErr, rc, "$(msg)", "msg=adding data to spot"); } if( fspot == &files[i].spot[1]) { break; } fspot = files[i].spot[1].ready ? &files[i].spot[1] : NULL; } } if( rc == 0 ) { if( self->wIllumina != NULL ) { if( (rc = SRAWriterIllumina_Write(self->wIllumina, argv[0], &spot)) != 0 && GetRCTarget(rc) == rcFormatter && GetRCContext(rc) == rcValidating ) { SRALoaderFile_LOG(files[g].file, klogWarn, rc, "$(msg) $(spot_name)", "msg=bad spot,spot_name=%.*s", spot.name->len, spot.name->data); self->spots_bad_count++; if( self->spots_bad_allowed < 0 || self->spots_bad_count <= self->spots_bad_allowed ) { rc = 0; } } } else if( spot.nreads != 1 ) { rc = RC(rcSRA, rcFormatter, rcReading, rcData, rcUnsupported); SRALoaderFile_LOG(files[g].file, klogErr, rc, "$(msg)", "msg=multiple reads for this platform"); } else if( self->wIonTorrent != NULL ) { rc = SRAWriterIonTorrent_WriteRead(self->wIonTorrent, argv[0], spot.name, spot.reads[0].seq, spot.reads[0].qual, NULL, NULL, 0, 0, 0, 0); } else { rc = SRAWriter454_WriteRead(self->w454, argv[0], spot.name, spot.reads[0].seq, spot.reads[0].qual, NULL, NULL, 0, 0, 0, 0); } } } while( rc == 0 ); free(files); *spots_bad_count = self->spots_bad_count; return rc; }
size_t KWrtFmt_rc_t ( char * pout, size_t max, const char * fmt, rc_t rc_in ) { rc_t rc; const char * str; const char * mod_str; const char * targ_str; const char * ctx_str; const char * obj_str; const char * state_str; size_t needed; size_t mod_size; size_t targ_size; size_t ctx_size; size_t obj_size; size_t state_size; enum RCModule mod; enum RCTarget targ; enum RCContext ctx; int obj; enum RCState state; assert (pout); assert (fmt); if (*fmt == '#') rc = RCExplain (rc_in, pout, max, &needed); else if (rc_in != 0) { mod = GetRCModule (rc_in); targ = GetRCTarget (rc_in); ctx = GetRCContext (rc_in); obj = GetRCObject (rc_in); state = GetRCState (rc_in); if ((mod < 0) || (mod > rcLastModule_v1_1)) mod = rcLastModule_v1_1; if ((targ < 0) || (targ > rcLastTarget_v1_1)) targ = rcLastTarget_v1_1; if ((ctx < 0) || (ctx > rcLastContext_v1_1)) ctx = rcLastContext_v1_1; if ((obj < 0) || (obj > rcLastObject_v1_1)) obj = rcLastObject_v1_1; if ((state < 0) || (state > rcLastState_v1_1)) state = rcLastState_v1_1; mod_str = RCModuleStrings[mod]; str = strchrnul(mod_str, ' '); mod_size = str - mod_str; targ_str = RCTargetStrings[targ]; str = strchrnul(targ_str, ' '); targ_size = str - targ_str; ctx_str = RCContextStrings[ctx]; str = strchrnul(ctx_str, ' '); ctx_size = str - ctx_str; /* object is tricky because it overlaps target */ if (obj == 0) { obj_str = RCObjectStrings[obj]; str = strchrnul(obj_str, ' '); obj_size = str - obj_str; } else if (obj < rcLastTarget_v1_1) { obj_str = RCTargetStrings[obj]; str = strchrnul(obj_str, ' '); obj_size = str - obj_str; } else { obj -= (rcLastTarget_v1_1-1); obj_str = RCObjectStrings[obj]; str = strchrnul(obj_str, ' '); obj_size = str - obj_str; } state_str = RCStateStrings[state]; str = strchrnul(state_str, ' '); state_size = str - state_str; #if _DEBUGGING rc = string_printf (pout, max, & needed, "RC(%s:%u:%s %*s,%*s,%*s,%*s,%*s)", GetRCFilename(), GetRCLineno(), GetRCFunction(), (uint32_t)mod_size, mod_str, (uint32_t)targ_size, targ_str, (uint32_t)ctx_size, ctx_str, (uint32_t)obj_size, obj_str, (uint32_t)state_size, state_str); #else rc = string_printf (pout, max, & needed, "RC(%*s,%*s,%*s,%*s,%*s)", (uint32_t)mod_size, mod_str, (uint32_t)targ_size, targ_str, (uint32_t)ctx_size, ctx_str, (uint32_t)obj_size, obj_str, (uint32_t)state_size, state_str); #endif } else { state = GetRCState (rc_in); state_str = RCStateStrings[state]; str = strchrnul(state_str, ' '); state_size = str - state_str; rc = string_printf (pout, max, & needed, "RC(%*s)", (uint32_t)state_size, state_str); } return rc != 0 ? 0 : needed; }