void processCCO(SnapConConMesg *cco) { int *contigGapToUngap = NULL; int contigLengthGapped = strlen(cco->consensus); int contigLengthUngap = 0; int i = 0, j = 0; int isDegenerate = 0; // By definition, a degenerate contig has one unitig and is unplaced. // In reality, those two conditions always occur together. // FILE *len = ctglen; FILE *frg = frgctg; FILE *utg = utgctg; FILE *var = varctg; if ((cco->placed == AS_UNPLACED) && (cco->num_unitigs == 1)) { isDegenerate = 1; len = deglen; frg = frgdeg; utg = utgdeg; var = vardeg; } contigGapToUngap = (int *)safe_calloc(contigLengthGapped + 1, sizeof(int)); contigGapToUngap[0] = 0; for (i=0; i<contigLengthGapped; i++) { if (cco->consensus[i] != '-') contigLengthUngap++; contigGapToUngap[i+1] = contigLengthUngap; } fprintf(len, "%s\t%d\n", AS_UID_toString(cco->eaccession), contigLengthUngap); if (isDegenerate == 0) fprintf(ctginf, "%s\t%d\t%d\t%d\t%d\n", AS_UID_toString(cco->eaccession), contigLengthUngap, cco->num_unitigs, cco->num_pieces, cco->num_vars); else fprintf(deginf, "%s\t%d\t%d\t%d\t%d\t%s\t%f\t%f\n", AS_UID_toString(cco->eaccession), contigLengthUngap, cco->num_unitigs, cco->num_pieces, cco->num_vars, AS_UID_toString(cco->unitigs[0].eident), covStat[cco->unitigs[0].eident], microHet[cco->unitigs[0].eident]); uid2iid[cco->eaccession] = cco->iaccession; if (ctgInfoMax <= cco->iaccession) { ctgInfoMax *= 2; ctgInfo = (ctgInfo_t *)safe_realloc(ctgInfo, ctgInfoMax * sizeof(ctgInfo_t)); } ctgInfo[cco->iaccession].len = contigLengthUngap; // VAR/variants for (i=0; i<cco->num_vars; i++) { IntMultiVar *v = cco->vars + i; int bgn = contigGapToUngap[v->position.bgn]; int end = contigGapToUngap[v->position.end]; fprintf(var, "%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%s\t%s\t%s\n", v->enc_var_seq, AS_UID_toString(cco->eaccession), bgn, end, v->num_reads, v->num_alleles_confirmed, v->min_anchor_size, v->var_length, v->enc_num_reads, v->enc_weights, v->enc_read_ids); } // Remember what fragments were placed. This is used to ignore // some fragments when reporting unplaced surrogate fragments. set<AS_UID> placed; // MPS/fragments for (i=0; i<cco->num_pieces; i++) { int bgn = contigGapToUngap[cco->pieces[i].position.bgn]; int end = contigGapToUngap[cco->pieces[i].position.end]; char ori = ORIF; // If bgn == end, then the fragment fell entirely within a gap. if (cco->pieces[i].position.bgn > cco->pieces[i].position.end) { ori = ORIR; end = contigGapToUngap[cco->pieces[i].position.bgn]; bgn = contigGapToUngap[cco->pieces[i].position.end]; } fprintf(frg, "%s\t%s\t%d\t%d\t%c\n", AS_UID_toString(cco->pieces[i].eident), AS_UID_toString(cco->eaccession), bgn, end, ori); if (writeUnplaced) placed.insert(cco->pieces[i].eident); } // UPS/unitigs for (i=0; i<cco->num_unitigs; i++) { int bgn = contigGapToUngap[cco->unitigs[i].position.bgn]; int end = contigGapToUngap[cco->unitigs[i].position.end]; char ori = ORIF; // If this is a SURROGATE UNITIG, report "fraguid unitiguid contiguid" if (cco->unitigs[i].position.bgn > cco->unitigs[i].position.end) { ori = ORIR; end = contigGapToUngap[cco->unitigs[i].position.bgn]; bgn = contigGapToUngap[cco->unitigs[i].position.end]; } if (isDegenerate == 0) fprintf(utg, "%s\t%s\t%d\t%d\t%c\t%s\n", AS_UID_toString(cco->unitigs[i].eident), AS_UID_toString(cco->eaccession), bgn, end, ori, decodeUnitigType(cco->unitigs[i].type)); else fprintf(utg, "%s\t%s\t%d\t%d\t%c\n", AS_UID_toString(cco->unitigs[i].eident), AS_UID_toString(cco->eaccession), bgn, end, ori); // unplaced surrogate fragments if ((writeUnplaced) && (surrogateUnitigFrags.count(cco->unitigs[i].eident) > 0)) { vector<surFrag_t> &frg = surrogateUnitigFrags[cco->unitigs[i].eident]; for (uint32 ii=0; ii<frg.size(); ii++) { char const *status = "unplaced"; if (placed.count(frg[ii].id) > 0) { // Read already placed. //continue; status = "resolved"; } int32 frgbgn = frg[ii].bgn + bgn; int32 frgend = frg[ii].end + bgn; if (ori == ORIR) { frgbgn = end - frg[ii].bgn; frgend = end - frg[ii].end; } if (frgbgn < frgend) { fprintf(sfgctg, "%s\t%s\t%d\t%d\t%c\t%s\t%s\n", AS_UID_toString(frg[ii].id), AS_UID_toString(cco->eaccession), contigGapToUngap[frgbgn], contigGapToUngap[frgend], ORIF, status, AS_UID_toString(cco->unitigs[i].eident)); } else { fprintf(sfgctg, "%s\t%s\t%d\t%d\t%c\t%s\t%s\n", AS_UID_toString(frg[ii].id), AS_UID_toString(cco->eaccession), contigGapToUngap[frgend], contigGapToUngap[frgbgn], ORIR, status, AS_UID_toString(cco->unitigs[i].eident)); } } } } safe_free(contigGapToUngap); }
void VmBase::refresh_most() { vm_ids_.clear(); stable_vmthread_id_to_vm_id_.clear(); name_.clear(); uuid_.clear(); vsocket_num_.clear(); vcore_num_.clear(); vhpthread_num_.clear(); total_mem_size_.clear(); string cmd = "ps -C " + vm_cmd_ + " -wwo etime=,pid=,args="; time_t cur_time; time(&cur_time); FILE* data = popen(cmd.c_str(), "r"); string pid; string start_timestamp; vector<string> args; string tmp_str; while(fgets(buf_.get(), BUF_SIZE, data)) { args.clear(); istringstream is(buf_.get()); is >> start_timestamp; long long days = 0; long long hours = 0; long long minutes = 0; long long seconds = 0; time_t start_time; if (count(start_timestamp.begin(), start_timestamp.end(), '-') > 0) sscanf(start_timestamp.c_str(), "%lld-%lld:%lld:%lld", &days, &hours, &minutes, &seconds); else if (count(start_timestamp.begin(), start_timestamp.end(), ':') == 2) sscanf(start_timestamp.c_str(), "%lld:%lld:%lld", &hours, &minutes, &seconds); else if (count(start_timestamp.begin(), start_timestamp.end(), ':') == 1) sscanf(start_timestamp.c_str(), "%lld:%lld", &minutes, &seconds); start_time = cur_time - (((days * 24 + hours) * 60 + minutes) * 60 + seconds); is >> pid; while(is) { is >> tmp_str; args.push_back(tmp_str); } //add vm_ids VmId vm_id(start_time, stoull(pid)); vm_ids_.insert(vm_id); //add name string name = ""; auto name_iter = find(args.begin(), args.end(), "-name"); if (name_iter != args.end()) { ++name_iter; name = *name_iter; } else { //TODO throw //because of cgroup need it } name_[vm_id] = name; //add uuid string uuid = ""; auto uuid_iter = find(args.begin(), args.end(), "-uuid"); if (uuid_iter != args.end()) { ++uuid_iter; uuid = *uuid_iter; } uuid_[vm_id] = uuid; //add vsocket vcore vhpthread auto iter = find(args.begin(), args.end(), "-smp"); if (iter != args.end()) { ++iter; vector<string> ops; str_tools::split(*iter, ',', ops); for(auto& op : ops) { vector<string> data; str_tools::split(op, '=', data); if (data.size() == 2) { if(data[0] == "sockets") vsocket_num_[vm_id] = stoi(data[1]); else if(data[0] == "cores") vcore_num_[vm_id] = stoi(data[1]); else if(data[0] == "threads") vhpthread_num_[vm_id] = stoi(data[1]); } } } //add total_mem_size int size = -1; auto size_iter = find(args.begin(), args.end(), "-m"); if (size_iter != args.end()) { ++size_iter; size = stoi(*size_iter); } total_mem_size_[vm_id] = size; } pclose(data); }