bool SeqPath::check_if_correct(const string& str, const Config *config) const { const vector<mass_t>& aa2mass = config->get_aa2mass(); const char *path_str = seq_str.c_str(); const char *corr_str = str.c_str(); int len_path_str = strlen(path_str); int len_corr_str = strlen(corr_str); if (len_path_str>len_corr_str) return false; int i; for (i=0; i<=len_corr_str-len_path_str; i++) { int j; bool correct_seq = true; for (j=0; j<len_path_str; j++) if (! (path_str[j] == corr_str[i+j] || (path_str[j] == 'I' && corr_str[i+j]== 'L') || (path_str[j] == 'L' && corr_str[i+j]== 'I') || (path_str[j] == 'Q' && corr_str[i+j]== 'K') || (path_str[j] == 'K' && corr_str[i+j]== 'Q') ) ) { correct_seq = false; break; } if (correct_seq) { // check prefix mass Peptide pep; pep.parseFromString(config,corr_str); const vector<int>& aas= pep.get_amino_acids(); mass_t mass=0; int j; if (n_term_mass == 0 && i==0) return true; for (j=0; j<aas.size(); j++) { mass+=aa2mass[aas[j]]; if (fabs(mass-this->n_term_mass)<6) return true; if (mass>n_term_mass) break; } } } return false; }
void AllScoreModels::predict_fragmentation( const char* input_file, size_t num_peaks) { FILE* stream = fopen(input_file,"r"); if (! stream) { cout << "Error: couldn't open file for reading: " << input_file << endl; exit(1); } PeptideRankScorer *dnv_rank = (PeptideRankScorer *)get_rank_model_ptr(1); PeakRankModel *prm = this->get_peak_prediction_model_ptr(3); char buffer[128]; char pep_str[128]; while (fgets(buffer,128,stream)) { int charge; if (sscanf(buffer,"%s %d",pep_str,&charge) != 2) continue; cout << ">> " << pep_str << "\t" << charge << endl; if (charge<1 || charge>=prm->get_size_thresholds().size()) { cout << "Invalid charge!" << endl; continue; } Peptide pep; pep.parseFromString(&config_,static_cast<string>(pep_str)); PeptideSolution sol; sol.pep = pep; sol.reaches_n_terminal=true; sol.reaches_c_terminal=true; sol.charge = charge; sol.pm_with_19 = pep.get_mass_with_19(); PeptidePeakPrediction ppp; prm->calc_peptide_predicted_scores(sol, ppp); const size_t num_frags = ppp.frag_idxs.size(); vector< vector<int> > predicted_ranks; calc_combined_peak_ranks(ppp.rank_scores, predicted_ranks); vector<PeakTuple> tuples; for (size_t f=0; f<num_frags; f++) for (size_t i=0; i<ppp.rank_scores[f].size(); i++) if (predicted_ranks[f][i]<999) { PeakTuple pt; pt.frag_idx = f; pt.pos =i; pt.rank = predicted_ranks[f][i]; pt.score = ppp.rank_scores[f][i]; tuples.push_back(pt); } sort(tuples.begin(),tuples.end()); if (tuples.size()<1) continue; const size_t num_aas = pep.get_num_aas(); vector<mass_t> breakage_masses; pep.calc_expected_breakage_masses(&config_, breakage_masses); cout << fixed << "Rank\tIon\tm/z\tScore" << endl; for (size_t i=0; i<num_peaks && i<tuples.size(); i++) { PeakTuple pt = tuples[i]; cout << i+1 << "\t"; const FragmentType& ft = config_.get_fragment(ppp.frag_idxs[pt.frag_idx]); cout << ft.label << ":" << (ft.orientation == PREFIX ? pt.pos : num_aas - pt.pos) << "\t"; mass_t mz = ft.calc_expected_mass(breakage_masses[pt.pos],pep.get_mass_with_19()); cout << setprecision(2); if (mz<100) cout << " "; if (mz<1000) cout << " "; cout << mz << "\t"; cout << setprecision(3) << pt.score << endl; } cout << endl; } fclose(stream); }
bool InspectResultsLine::parse_from_fields(Config *config, const vector<string>& fields) { if (fields.size() < 20) { cout<< "Error: inspect results line has " << fields.size() << ", expecting 20-22" << endl; exit(1); } SpectrumFile = fields[0]; if (sscanf(fields[1].c_str(),"%d",&scan) != 1 || scan<0 || scan>100000000) error("scan"); Annotation = fields[2]; Protein = fields[3]; if (sscanf(fields[4].c_str(),"%d",&Charge) != 1 || Charge<0 || Charge>20) error("Charge"); if (sscanf(fields[5].c_str(),"%f",&MQScore) != 1 || MQScore<NEG_INF || MQScore>POS_INF) error("MQScore"); if (sscanf(fields[6].c_str(),"%d",&Length) != 1 || Length<1 || Length>POS_INF) error("Length"); if (sscanf(fields[7].c_str(),"%f",&TotalPRMScore) != 1 || TotalPRMScore<NEG_INF || TotalPRMScore>POS_INF) error("TotalPRMScore"); if (sscanf(fields[8].c_str(),"%f",&MedianPRMScore) != 1 || MedianPRMScore<NEG_INF || MedianPRMScore>POS_INF) error("MedianPRMScore"); if (sscanf(fields[9].c_str(),"%f",&FractionY) != 1 || FractionY<0 || FractionY>1000) error("FractionY"); if (sscanf(fields[10].c_str(),"%f",&FractionB) != 1 || FractionB<0 || FractionB>1000) error("FractionB"); if (sscanf(fields[11].c_str(),"%f",&Intensity) != 1 || Intensity<0) error("Intensity"); if (sscanf(fields[12].c_str(),"%d",&NTT) != 1 || NTT<0 || NTT>3) error("NTT"); if (sscanf(fields[13].c_str(),"%f",&p_value) != 1) error("p_value"); if (sscanf(fields[14].c_str(),"%f",&F_Score) != 1) error("F_Score"); if (sscanf(fields[15].c_str(),"%f",&DeltaScore) != 1) error("DeltaScore"); if (sscanf(fields[16].c_str(),"%f",&DeltaScoreOther) != 1) error("DeltaScoreOther"); if (sscanf(fields[17].c_str(),"%d",&RecordNumber) != 1) error("RecordNumber"); if (sscanf(fields[18].c_str(),"%d",&DBFilePos) != 1) error("DBFilePos"); if (sscanf(fields[19].c_str(),"%d",&SpecFilePos) != 1) error("SpecFilePos"); if (fields.size()>20 && sscanf(fields[20].c_str(),"%f",&PrecursorMz) != 1) error("SpecFilePos"); if (fields.size()>21 && sscanf(fields[21].c_str(),"%f",&PrecursorError) != 1) error("SpecFilePos"); Score = MQScore; const vector<int>& char2aa = config->get_char2aa(); const int ann_length = Annotation.length(); if ((Annotation[1] != '.') || (Annotation[ann_length-2] != '.')) { cout << "Error: bad annotation format: " << Annotation << endl; cout << "Expecting X.XXXXXXXXX.X" << endl; cout << "Ann1 : " << Annotation[1] << endl; cout << "Ann n-2: " << Annotation[ann_length-2] << endl; exit(1); } // cout << "|" << Annotation << "|" << endl; aaBefore = char2aa[Annotation[0]]; aaAfter = char2aa[Annotation[ann_length-1]]; pep.parseFromString(config,Annotation.substr(2,ann_length-4)); return true; }