Example #1
0
TEST(settings_types, DoubleList)
{
    DoubleList l;
    {
        ASSERT_TRUE(l.set_default("0.0,1.1,2.2,3.3,4.4,5.5"));
        ASSERT_TRUE(l.is_default());
        ASSERT_EQ(6, l.size());
        for (int i = 0; i < l.size(); ++i) {
            ASSERT_EQ(double(i)+double(i)/10., l.values()[i]);
        }
        ASSERT_STREQ("0.0,1.1,2.2,3.3,4.4,5.5", l.get_value());
    }
    {
        ASSERT_TRUE(l.set_value("0.01234567891011,  666.6"));
        ASSERT_FALSE(l.is_default());
        ASSERT_EQ(2, l.size());
        ASSERT_DOUBLE_EQ(0.01234567891011, l.values()[0]);
        ASSERT_EQ(666.6, l.values()[1]);
        // FIXME(BM) string printing to not enough decimal places!
        EXPECT_STREQ("0.01234567891011,666.6", l.get_value());
    }
}
  void  XQuestResultXMLFile::writeXQuestXML(String out_file, String base_name, const std::vector< PeptideIdentification >& peptide_ids, const std::vector< std::vector< OPXLDataStructs::CrossLinkSpectrumMatch > >& all_top_csms, const PeakMap& spectra,
                                                String precursor_mass_tolerance_unit, String fragment_mass_tolerance_unit, double precursor_mass_tolerance, double fragment_mass_tolerance, double fragment_mass_tolerance_xlinks, String cross_link_name,
                                                double cross_link_mass_light, DoubleList cross_link_mass_mono_link, String in_fasta, String in_decoy_fasta, StringList cross_link_residue1, StringList cross_link_residue2, double cross_link_mass_iso_shift, String enzyme_name, Size missed_cleavages)
  {
    String spec_xml_name = base_name + "_matched";

    std::cout << "Writing xquest.xml to " << out_file << std::endl;
    std::ofstream xml_file;
    xml_file.open(out_file.c_str(), std::ios::trunc);
    // XML Header
    xml_file << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl;
    xml_file << "<?xml-stylesheet type=\"text/xsl\" href=\"\"?>" << std::endl;

    DateTime time= DateTime::now();
    String timestring = time.getDate() + " " + time.getTime();

    String mono_masses;
    if (cross_link_mass_mono_link.size() > 1)
    {
      for (Size k = 0; k < cross_link_mass_mono_link.size()-1; ++k)
      {
        mono_masses += String(cross_link_mass_mono_link[k]) + ", ";
      }
      mono_masses += cross_link_mass_mono_link[cross_link_mass_mono_link.size()-1];
    }

    String aarequired1, aarequired2;
    for (Size k= 0; k < cross_link_residue1.size()-1; ++k)
    {
      aarequired1 += cross_link_residue1[k] + ",";
    }
    aarequired1 += cross_link_residue1[cross_link_residue1.size()-1];
    for (Size k= 0; k < cross_link_residue2.size()-1; ++k)
    {
      aarequired2 += cross_link_residue2[k] + ",";
    }
    aarequired2 += cross_link_residue2[cross_link_residue2.size()-1];


    xml_file << "<xquest_results xquest_version=\"OpenPepXL 1.0\" date=\"" << timestring <<
             "\" author=\"Eugen Netz, Timo Sachsenberg\" tolerancemeasure_ms1=\"" << precursor_mass_tolerance_unit  <<
             "\" tolerancemeasure_ms2=\"" << fragment_mass_tolerance_unit << "\" ms1tolerance=\"" << precursor_mass_tolerance <<
             "\" ms2tolerance=\"" << fragment_mass_tolerance << "\" xlink_ms2tolerance=\"" << fragment_mass_tolerance_xlinks <<
             "\" crosslinkername=\"" << cross_link_name << "\" xlinkermw=\"" << cross_link_mass_light <<
             "\" monolinkmw=\"" << mono_masses << "\" database=\"" << in_fasta << "\" database_dc=\"" << in_decoy_fasta <<
             "\" xlinktypes=\"1111\" AArequired1=\"" << aarequired1 << "\" AArequired2=\"" << aarequired2 <<  "\" cp_isotopediff=\"" << cross_link_mass_iso_shift <<
             "\" enzyme_name=\"" << enzyme_name << "\" outputpath=\"" << spec_xml_name <<
             "\" Iontag_charges_for_index=\"1\" missed_cleavages=\"" << missed_cleavages <<
             "\" ntermxlinkable=\"0\" CID_match2ndisotope=\"1" <<
             "\" variable_mod=\"TODO\" nocutatxlink=\"1\" xcorrdelay=\"5\" >" << std::endl;


    for (std::vector< std::vector< OPXLDataStructs::CrossLinkSpectrumMatch > >::const_iterator top_csms_spectrum = all_top_csms.begin(); top_csms_spectrum != all_top_csms.end(); ++top_csms_spectrum)
    {
      std::vector< OPXLDataStructs::CrossLinkSpectrumMatch > top_vector = (*top_csms_spectrum);

      if (top_vector.empty())
      {
        continue;
      }
      // Spectrum Data, for each spectrum
      Size scan_index_light = top_vector[0].scan_index_light;
      Size scan_index_heavy = scan_index_light;
      if (cross_link_mass_iso_shift > 0)
      {
        scan_index_heavy = top_vector[0].scan_index_heavy;
      }
      const PeakSpectrum& spectrum_light = spectra[scan_index_light];
      double precursor_charge = spectrum_light.getPrecursors()[0].getCharge();

      double precursor_mz = spectrum_light.getPrecursors()[0].getMZ();
      double precursor_rt = spectrum_light.getRT();
      double precursor_mass = precursor_mz * static_cast<double>(precursor_charge) - static_cast<double>(precursor_charge) * Constants::PROTON_MASS_U;

      double precursor_mz_heavy = spectra[scan_index_heavy].getPrecursors()[0].getMZ();
      double precursor_rt_heavy = spectra[scan_index_heavy].getRT();

      // print information about new peak to file (starts with <spectrum_search..., ends with </spectrum_search>
      String spectrum_light_name = base_name + ".light." + scan_index_light;
      String spectrum_heavy_name = base_name + ".heavy." + scan_index_heavy;

      String spectrum_name = spectrum_light_name + String("_") + spectrum_heavy_name;
      String rt_scans = String(precursor_rt) + ":" + String(precursor_rt_heavy);
      String mz_scans = String(precursor_mz) + ":" + String(precursor_mz_heavy);

      // Mean ion intensity (light spectrum, TODO add heavy spectrum?)
      double mean_intensity= 0;
      if (cross_link_mass_iso_shift > 0)
      {
        for (SignedSize j = 0; j < static_cast<SignedSize>(spectrum_light.size()); ++j) mean_intensity += spectrum_light[j].getIntensity();
        for (SignedSize j = 0; j < static_cast<SignedSize>(spectra[scan_index_heavy].size()); ++j) mean_intensity += spectra[scan_index_heavy][j].getIntensity();
        mean_intensity = mean_intensity / (spectrum_light.size() + spectra[scan_index_heavy].size());
      }
      else
      {
        for (SignedSize j = 0; j < static_cast<SignedSize>(spectrum_light.size()); ++j) mean_intensity += spectrum_light[j].getIntensity();
        mean_intensity = mean_intensity / spectrum_light.size();
      }

      xml_file << "<spectrum_search spectrum=\"" << spectrum_name << "\" mean_ionintensity=\"" << mean_intensity << "\" ionintensity_stdev=\"" << "TODO" << "\" addedMass=\"" << "TODO" << "\" iontag_ncandidates=\"" << "TODO"
          << "\"  apriori_pmatch_common=\"" << "TODO" << "\" apriori_pmatch_xlink=\"" << "TODO" << "\" ncommonions=\"" << "TODO" << "\" nxlinkions=\"" << "TODO" << "\" mz_precursor=\"" << precursor_mz
          << "\" scantype=\"" << "light_heavy" << "\" charge_precursor=\"" << precursor_charge << "\" Mr_precursor=\"" << precursor_mass <<  "\" rtsecscans=\"" << rt_scans << "\" mzscans=\"" << mz_scans << "\" >" << std::endl;


      for (std::vector< OPXLDataStructs::CrossLinkSpectrumMatch>::const_iterator top_csm = top_csms_spectrum->begin(); top_csm != top_csms_spectrum->end(); ++top_csm)
      {
        String xltype = "monolink";
        String structure = top_csm->cross_link.alpha.toUnmodifiedString();
        String letter_first = structure.substr(top_csm->cross_link.cross_link_position.first, 1);

        double weight = top_csm->cross_link.alpha.getMonoWeight() + top_csm->cross_link.cross_linker_mass;
        int alpha_pos = top_csm->cross_link.cross_link_position.first + 1;
        int beta_pos = top_csm->cross_link.cross_link_position.second + 1;

        String topology = String("a") + alpha_pos;
        String id = structure + String("-") + letter_first + alpha_pos + String("-") + static_cast<int>(top_csm->cross_link.cross_linker_mass);

        if (top_csm->cross_link.getType() == OPXLDataStructs::CROSS)
        {
          xltype = "xlink";
          structure += "-" + top_csm->cross_link.beta.toUnmodifiedString();
          topology += String("-b") + beta_pos;
          weight += top_csm->cross_link.beta.getMonoWeight();
          id = structure + "-" + topology;
        }
        else if (top_csm->cross_link.getType() == OPXLDataStructs::LOOP)
        {
          xltype = "intralink";
          topology += String("-b") + beta_pos;
          String letter_second = structure.substr(top_csm->cross_link.cross_link_position.second, 1);
          id = structure + String("-") + letter_first + alpha_pos + String("-") + letter_second + beta_pos;
        }

         // Error calculation
        double cl_mz = (weight + (static_cast<double>(precursor_charge) * Constants::PROTON_MASS_U)) / static_cast<double>(precursor_charge);
        double error = precursor_mz - cl_mz;
        double rel_error = (error / cl_mz) / 1e-6;

        PeptideIdentification pep_id = peptide_ids[top_csm->peptide_id_index];
        std::vector< PeptideHit > pep_hits = pep_id.getHits();

        String prot_alpha = pep_hits[0].getPeptideEvidences()[0].getProteinAccession();
        if (pep_hits[0].getPeptideEvidences().size() > 1)
        {
          for (Size i = 1; i < pep_hits[0].getPeptideEvidences().size(); ++i)
          {
            prot_alpha = prot_alpha + "," + pep_hits[0].getPeptideEvidences()[i].getProteinAccession();
          }
        }

        String prot_beta = "";

        if (pep_hits.size() > 1)
        {
          prot_beta= pep_hits[1].getPeptideEvidences()[0].getProteinAccession();
          if (pep_hits[1].getPeptideEvidences().size() > 1)
          {
            for (Size i = 1; i < pep_hits[1].getPeptideEvidences().size(); ++i)
            {
              prot_alpha = prot_alpha + "," + pep_hits[1].getPeptideEvidences()[i].getProteinAccession();
            }
          }
        }
        // Hit Data, for each cross-link to Spectrum Hit (e.g. top 5 per spectrum)
        xml_file << "<search_hit search_hit_rank=\"" <<top_csm->rank << "\" id=\"" << id << "\" type=\"" << xltype << "\" structure=\"" << structure << "\" seq1=\"" << top_csm->cross_link.alpha.toUnmodifiedString() << "\" seq2=\"" << top_csm->cross_link.beta.toUnmodifiedString()
              << "\" prot1=\"" << prot_alpha << "\" prot2=\"" << prot_beta << "\" topology=\"" << topology << "\" xlinkposition=\"" << (top_csm->cross_link.cross_link_position.first+1) << "," << (top_csm->cross_link.cross_link_position.second+1)
              << "\" Mr=\"" << weight << "\" mz=\"" << cl_mz << "\" charge=\"" << precursor_charge << "\" xlinkermass=\"" << top_csm->cross_link.cross_linker_mass << "\" measured_mass=\"" << precursor_mass << "\" error=\"" << error
              << "\" error_rel=\"" << rel_error << "\" xlinkions_matched=\"" << (top_csm->matched_xlink_alpha + top_csm->matched_xlink_beta) << "\" backboneions_matched=\"" << (top_csm->matched_common_alpha + top_csm->matched_common_beta)
              << "\" weighted_matchodds_mean=\"" << "TODO" << "\" weighted_matchodds_sum=\"" << "TODO" << "\" match_error_mean=\"" << "TODO" << "\" match_error_stdev=\"" << "TODO" << "\" xcorrx=\"" << top_csm->xcorrx_max << "\" xcorrb=\"" << top_csm->xcorrc_max << "\" match_odds=\"" <<top_csm->match_odds << "\" prescore=\"" << top_csm->pre_score
              << "\" prescore_alpha=\"" << "TODO" << "\" prescore_beta=\"" << "TODO" << "\" match_odds_alphacommon=\"" << "TODO" << "\" match_odds_betacommon=\"" << "TODO" << "\" match_odds_alphaxlink=\"" << "TODO"
              << "\" match_odds_betaxlink=\"" << "TODO" << "\" num_of_matched_ions_alpha=\"" << (top_csm->matched_common_alpha + top_csm->matched_xlink_alpha) << "\" num_of_matched_ions_beta=\"" << (top_csm->matched_common_beta + top_csm->matched_xlink_beta) << "\" num_of_matched_common_ions_alpha=\"" << top_csm->matched_common_alpha
              << "\" num_of_matched_common_ions_beta=\"" << top_csm->matched_common_beta << "\" num_of_matched_xlink_ions_alpha=\"" << top_csm->matched_xlink_alpha << "\" num_of_matched_xlink_ions_beta=\"" << top_csm->matched_xlink_beta << "\" xcorrall=\"" << "TODO" << "\" TIC=\"" << top_csm->percTIC
              << "\" TIC_alpha=\"" << "TODO" << "\" TIC_beta=\"" << "TODO" << "\" wTIC=\"" << top_csm->wTIC << "\" intsum=\"" << top_csm->int_sum * 100 << "\" apriori_match_probs=\"" << "TODO" << "\" apriori_match_probs_log=\"" << "TODO"
              << "\" HyperCommon=\"" << top_csm->HyperCommon << "\" HyperXLink=\"" << top_csm->HyperXlink << "\" HyperAlpha=\"" << top_csm->HyperAlpha << "\" HyperBeta=\"" << top_csm->HyperBeta << "\" HyperBoth=\"" << top_csm->HyperBoth
              << "\" PScoreCommon=\"" << top_csm->PScoreCommon << "\" PScoreXLink=\"" << top_csm->PScoreXlink << "\" PScoreAlpha=\"" << top_csm->PScoreAlpha << "\" PScoreBeta=\"" << top_csm->PScoreBeta << "\" PScoreBoth=\"" << top_csm->PScoreBoth
              << "\" series_score_mean=\"" << "TODO" << "\" annotated_spec=\"" << "" << "\" score=\"" << top_csm->score << "\" >" << std::endl;
        xml_file << "</search_hit>" << std::endl;
      }
      // Closing tag for Spectrum
      xml_file << "</spectrum_search>" << std::endl;
    }

    // Closing tag for results (end of file)
    xml_file << "</xquest_results>" << std::endl;
    xml_file.close();

    return;
  }
Example #3
0
	bool Pattern::Match(const DoubleTimeList::const_iterator& current, const DoubleTimeList::const_iterator& end) const
	{
		DoubleTimeList points;
		size_t positionCount = Size();
		auto cit = current;
		size_t i = 0;
		while(i < positionCount && cit != end)
		{
			points.push_back(DoubleTimePoint((*cit).value, i++));
			cit++;
		}
		if (i < positionCount)
		{
			// points not enough for matching
			return false;
		}

		// sort the points by value
		struct PointCompare {
			bool operator() (DoubleTimePoint p1,DoubleTimePoint p2) { return p1.value < p2.value; }
		} compareObj;

		std::sort(points.begin(), points.end(), compareObj);

		// check each groups
		auto gcit = groups_.begin();
		auto pcit = points.begin();
		double max_in_last_group = -DBL_MAX;

		while(gcit != groups_.end() && pcit != points.end())
		{
			PointsGroup group = *gcit;
			DoubleList values;		
			// check fixed delta
			double delta = std::fabs(((*pcit).value - max_in_last_group) / ((*pcit).value + max_in_last_group));
			if (delta < fixed_delta_)
				return false;

			// make sure points in the group
			size_t i = 0; 
			size_t group_size = group.Size();
			while (i < group_size && pcit != points.end())
			{
				if (!group.In((int)(*pcit).position))
					return false;				
				values.push_back((*pcit).value);
				pcit++;
				i++;
			}

			// check adjacent for AdjacentGroup
			if (group.IsAdjacentGroup())
			{
				if (!group.CheckAdjacence(&values))
					return false;
			}

			max_in_last_group = values[values.size() - 1];
			gcit++;
		}
		return true;
	}
Example #4
0
	TEST_EQUAL(intlist[0], 1)
	TEST_EQUAL(intlist[1], 22)
	TEST_EQUAL(intlist[2], 333)

	TEST_EQUAL(p2.getValue("intlist2").valueType(),DataValue::INT_LIST)
	intlist = p2.getValue("intlist2");
	TEST_EQUAL(intlist.size(),0)

	TEST_EQUAL(p2.getValue("intlist3").valueType(),DataValue::INT_LIST)
	intlist = p2.getValue("intlist3");
	TEST_EQUAL(intlist.size(),1)
	TEST_EQUAL(intlist[0],1)

	TEST_EQUAL(p2.getValue("doublelist").valueType(), DataValue::DOUBLE_LIST)
	DoubleList doublelist = p2.getValue("doublelist");
	TEST_EQUAL(doublelist.size(),3);
	TEST_EQUAL(doublelist[0], 1.22)
	TEST_EQUAL(doublelist[1], 2.33)
	TEST_EQUAL(doublelist[2], 4.55)

	TEST_EQUAL(p2.getValue("doublelist2").valueType(),DataValue::DOUBLE_LIST)
	doublelist = p2.getValue("doublelist2");
	TEST_EQUAL(doublelist.size(),0)

	TEST_EQUAL(p2.getValue("doublelist3").valueType(),DataValue::DOUBLE_LIST)
	doublelist = p2.getValue("doublelist3");
	TEST_EQUAL(doublelist.size(),1)
	TEST_EQUAL(doublelist[0],1.4)

END_SECTION