示例#1
0
  def test_runuis_nonswath(self):
    self.assertEqual(len(self.precursors_to_evaluate), 905)
    par = self.par
    cursor = self.db.cursor()
    prepare = []

    for precursor in self.precursors_to_evaluate:

      q3_low, q3_high = par.get_q3range_transitions()
      transitions = precursor.calculate_transitions(q3_low, q3_high)
      nr_transitions = len(transitions)

      precursors_obj = self.acollider._get_all_precursors(par, precursor, cursor)
      collisions_per_peptide = collider.get_coll_per_peptide_from_precursors(self.acollider, 
                transitions, precursors_obj, par, precursor)
      non_uis_list = collider.get_nonuis_list(collisions_per_peptide, par.max_uis)

      for order in range(1,min(par.max_uis+1, nr_transitions+1)): 
        prepare.append( (len(non_uis_list[order]), collider.choose(nr_transitions, 
          order), precursor.parent_id , order, -1) )

    found = False
    for p in prepare:
        if p == (0, 17.0, 1, 1, -1):
            found = True
    self.assertEqual(found, True)

    self.assertEqual(len(prepare), 905*par.max_uis)

    final_report = self.get_final_report(par, prepare)
    self.check_final_report_nonswath(final_report)
示例#2
0
    def test_runuis_nonswath(self):
        self.assertEqual(len(self.precursors_to_evaluate), 905)
        par = self.par
        cursor = self.db.cursor()
        prepare = []

        for precursor in self.precursors_to_evaluate:

            q3_low, q3_high = par.get_q3range_transitions()
            transitions = precursor.calculate_transitions(q3_low, q3_high)
            nr_transitions = len(transitions)

            precursors_obj = self.acollider._get_all_precursors(
                par, precursor, cursor)
            collisions_per_peptide = collider.get_coll_per_peptide_from_precursors(
                self.acollider, transitions, precursors_obj, par, precursor)
            non_uis_list = collider.get_nonuis_list(collisions_per_peptide,
                                                    par.max_uis)

            for order in range(1, min(par.max_uis + 1, nr_transitions + 1)):
                prepare.append(
                    (len(non_uis_list[order]),
                     collider.choose(nr_transitions,
                                     order), precursor.parent_id, order, -1))

        found = False
        for p in prepare:
            if p == (0, 17.0, 1, 1, -1):
                found = True
        self.assertEqual(found, True)

        self.assertEqual(len(prepare), 905 * par.max_uis)

        final_report = self.get_final_report(par, prepare)
        self.check_final_report_nonswath(final_report)
示例#3
0
    def test_runuis_swath_rangetree(self):
        self.assertEqual(len(self.precursors_to_evaluate), 905)
        swath_mode = False
        par = self.par
        R = self.R
        cursor = self.db.cursor()
        prepare = []

        self.min_q1 = 500
        self.max_q1 = 525

        # Get the precursors (now for 500-525 instead of the full range)
        ###########################################################################
        myprecursors = Precursors()
        cursor = self.db.cursor()
        myprecursors.getFromDB(par, cursor, self.min_q1 - par.q1_window,
                               self.max_q1 + par.q1_window)
        rtree = myprecursors.build_rangetree()
        self.precursors_to_evaluate = myprecursors.getPrecursorsToEvaluate(
            self.min_q1, self.max_q1)
        self.assertEqual(len(self.precursors_to_evaluate), 39)

        # If we dont use the DB, we use the rangetree to query and get our list of
        # precursors that are interfering. In SWATH we dont include a +/- q1_window
        # around our range or precursors because the precursor window is fixed to
        # (min_q1,max_q1) and no other precursors are considered.
        myprecursors.getFromDB(par, cursor, self.min_q1, self.max_q1)
        rtree = myprecursors.build_rangetree()

        for precursor in self.precursors_to_evaluate:

            q3_low, q3_high = par.get_q3range_transitions()
            transitions = precursor.calculate_transitions(q3_low, q3_high)
            nr_transitions = len(transitions)

            # Use the rangetree, whether it is swath or not
            collisions_per_peptide = self.myprecursors.get_collisions_per_peptide_from_rangetree(
                precursor, self.min_q1, self.max_q1, transitions, par, rtree)
            non_uis_list = collider.get_nonuis_list(collisions_per_peptide,
                                                    par.max_uis)

            for order in range(1, min(par.max_uis + 1, nr_transitions + 1)):
                prepare.append(
                    (len(non_uis_list[order]),
                     collider.choose(nr_transitions,
                                     order), precursor.parent_id, order, -1))

        self.assertEqual(len(prepare), 39 * par.max_uis)
        # self.assertEqual(prepare[0], (5, 8.0, 69, 1, -1) )

        final_report = self.get_final_report(par, prepare)
        self.check_final_report_swath(final_report)
示例#4
0
  def test_runuis_swath_rangetree(self):
    self.assertEqual(len(self.precursors_to_evaluate), 905)
    swath_mode = False
    par = self.par
    R = self.R
    cursor = self.db.cursor()
    prepare = []

    self.min_q1 = 500
    self.max_q1 = 525

    # Get the precursors (now for 500-525 instead of the full range)
    ###########################################################################
    myprecursors = Precursors()
    cursor = self.db.cursor()
    myprecursors.getFromDB(par, cursor, self.min_q1 - par.q1_window, self.max_q1 + par.q1_window)
    rtree = myprecursors.build_rangetree()
    self.precursors_to_evaluate = myprecursors.getPrecursorsToEvaluate(self.min_q1, self.max_q1)
    self.assertEqual(len(self.precursors_to_evaluate), 39)

    # If we dont use the DB, we use the rangetree to query and get our list of
    # precursors that are interfering. In SWATH we dont include a +/- q1_window
    # around our range or precursors because the precursor window is fixed to
    # (min_q1,max_q1) and no other precursors are considered.
    myprecursors.getFromDB(par, cursor, self.min_q1, self.max_q1)
    rtree = myprecursors.build_rangetree()

    for precursor in self.precursors_to_evaluate:

      q3_low, q3_high = par.get_q3range_transitions()
      transitions = precursor.calculate_transitions(q3_low, q3_high)
      nr_transitions = len(transitions)

      # Use the rangetree, whether it is swath or not
      collisions_per_peptide = self.myprecursors.get_collisions_per_peptide_from_rangetree(precursor, self.min_q1, self.max_q1, transitions, par, rtree)
      non_uis_list = collider.get_nonuis_list(collisions_per_peptide, par.max_uis)

      for order in range(1,min(par.max_uis+1, nr_transitions+1)): 
        prepare.append( (len(non_uis_list[order]), collider.choose(nr_transitions, 
          order), precursor.parent_id , order, -1) )

    self.assertEqual(len(prepare), 39*par.max_uis)
    # self.assertEqual(prepare[0], (5, 8.0, 69, 1, -1) )

    final_report = self.get_final_report(par, prepare)
    self.check_final_report_swath(final_report)
示例#5
0
    def test_runuis_nonswath_rangetree(self):
        self.assertEqual(len(self.precursors_to_evaluate), 905)
        par = self.par
        cursor = self.db.cursor()

        # If we dont use the DB, we use the rangetree to query and get our list of
        # precursors that are interfering. In SWATH we dont include a +/- q1_window
        # around our range or precursors because the precursor window is fixed to
        # (min_q1,max_q1) and no other precursors are considered.
        self.myprecursors.getFromDB(par, cursor, self.min_q1 - par.q1_window,
                                    self.max_q1 + par.q1_window)
        rtree = self.myprecursors.build_rangetree()

        prepare = []

        for precursor in self.precursors_to_evaluate:

            q3_low, q3_high = par.get_q3range_transitions()
            transitions = precursor.calculate_transitions(q3_low, q3_high)
            nr_transitions = len(transitions)

            # Use the rangetree, whether it is swath or not
            collisions_per_peptide = self.myprecursors.get_collisions_per_peptide_from_rangetree(
                precursor, precursor.q1 - par.q1_window,
                precursor.q1 + par.q1_window, transitions, par, rtree)
            non_uis_list = collider.get_nonuis_list(collisions_per_peptide,
                                                    par.max_uis)

            for order in range(1, min(par.max_uis + 1, nr_transitions + 1)):
                prepare.append(
                    (len(non_uis_list[order]),
                     collider.choose(nr_transitions,
                                     order), precursor.parent_id, order, -1))

        found = False
        for p in prepare:
            if p == (0, 17.0, 1, 1, -1):
                found = True
        self.assertEqual(found, True)

        self.assertEqual(len(prepare), 905 * par.max_uis)
        final_report = self.get_final_report(par, prepare)
        self.check_final_report_nonswath(final_report)
示例#6
0
  def test_runuis_nonswath_rangetree(self):
    self.assertEqual(len(self.precursors_to_evaluate), 905)
    par = self.par
    cursor = self.db.cursor()

    # If we dont use the DB, we use the rangetree to query and get our list of
    # precursors that are interfering. In SWATH we dont include a +/- q1_window
    # around our range or precursors because the precursor window is fixed to
    # (min_q1,max_q1) and no other precursors are considered.
    self.myprecursors.getFromDB(par, cursor, self.min_q1 - par.q1_window, self.max_q1 + par.q1_window)
    rtree = self.myprecursors.build_rangetree()

    prepare = []

    for precursor in self.precursors_to_evaluate:

      q3_low, q3_high = par.get_q3range_transitions()
      transitions = precursor.calculate_transitions(q3_low, q3_high)
      nr_transitions = len(transitions)

      # Use the rangetree, whether it is swath or not
      collisions_per_peptide = self.myprecursors.get_collisions_per_peptide_from_rangetree(precursor, precursor.q1 - par.q1_window, precursor.q1 + par.q1_window, transitions, par, rtree)
      non_uis_list = collider.get_nonuis_list(collisions_per_peptide, par.max_uis)

      for order in range(1,min(par.max_uis+1, nr_transitions+1)): 
        prepare.append( (len(non_uis_list[order]), collider.choose(nr_transitions, 
          order), precursor.parent_id , order, -1) )

    found = False
    for p in prepare:
        if p == (0, 17.0, 1, 1, -1):
            found = True
    self.assertEqual(found, True)

    self.assertEqual(len(prepare), 905*par.max_uis)
    final_report = self.get_final_report(par, prepare)
    self.check_final_report_nonswath(final_report)
示例#7
0
    elif not use_experimental_height:
        # We dont have experimental height data and cannot use C++ code
        collisions_per_peptide = collider.get_coll_per_peptide(mycollider, 
            transitions, par, peptide_obj, cursor)
        min_needed = mycollider._sub_getMinNeededTransitions(par, transitions, collisions_per_peptide)
        #min_needed = mycollider.getMinNeededTransitions_direct(par, transitions, precursors)
    else:
        # here we consider the case that we have measured a number of
        # transitions experimentally and want to know how many of them are
        # sufficient to establish uniqueness. For this, all we need is
        # that one tuple of transitions establishes uniqueness since we
        # were able to measure it above the background noise.
        collisions_per_peptide = collider.get_coll_per_peptide(mycollider, 
            transitions, par, pep, cursor)
        for order in range(1,nr_transitions+1): 
            mymax = collider.choose(nr_transitions, order)
            if use_cpp: non_uis = c_getnonuis.get_non_uis(collisions_per_peptide, order)
            else: 
                non_uis = set()
                for pepc in collisions_per_peptide.values():
                    get_non_uis(pepc, non_uis, i)
            if len(non_uis) < mymax: break
        if len(non_uis) < mymax: min_needed  = order
        else: min_needed = -1
    spectrum.score = min_needed * nr_transitions
    spectrum.min_needed = min_needed
    if min_needed != -1: spectrum.score = nr_transitions - min_needed
    if not par.quiet: progressm.update(1)
    get_min_tr_time += time.time() - tmp_time; tmp_time = time.time()

示例#8
0
    ###############################################################
    #strike 1: it has to be global UIS

    computed_collisions = myprecursors.get_collisions_per_peptide_from_rangetree(
        precursor, precursor.q1 - par.q1_window, precursor.q1 + par.q1_window,
        transitions, par, rtree)

    collisions_per_peptide = computed_collisions

    # see SRMCollider::Combinatorics::get_non_uis
    non_useable_combinations = c_getnonuis.get_non_uis(collisions_per_peptide,
                                                       myorder)
    srm_ids = [t[1] for t in transitions]
    tuples_strike1 = 0
    if not nr_transitions < myorder:
        tuples_strike1 = collider.choose(
            nr_transitions, myorder) - len(non_useable_combinations)

    ###############################################################
    #strike 2: it has to be locally clean
    if not skip_strike2:
        ssrcalc_low = ssrcalc - par.ssrcalc_window + 0.001
        ssrcalc_high = ssrcalc + par.ssrcalc_window - 0.001
        precursor_ids = tuple(
            c_rangetree.query_tree(q1_low, ssrcalc_low, q1_high, ssrcalc_high))
        precursors = tuple([
            parentid_lookup[myid[0]] for myid in precursor_ids
            #dont select myself
            if parentid_lookup[myid[0]][2] != pep['transition_group']
        ])

        # collisions_per_peptide: dictionary, for each key the set of interfering transitions is stored
示例#9
0
    ###############################################################
    #strike 1: it has to be global UIS

    computed_collisions = myprecursors.get_collisions_per_peptide_from_rangetree(
        precursor, precursor.q1 - par.q1_window, precursor.q1 + par.q1_window, 
        transitions, par, rtree)

    collisions_per_peptide = computed_collisions 

    # see SRMCollider::Combinatorics::get_non_uis
    non_useable_combinations = c_getnonuis.get_non_uis( collisions_per_peptide, myorder)
    srm_ids = [t[1] for t in transitions]
    tuples_strike1 = 0
    if not nr_transitions < myorder:
      tuples_strike1 = collider.choose(nr_transitions, myorder ) - len(non_useable_combinations)

    ###############################################################
    #strike 2: it has to be locally clean
    if not skip_strike2:
      ssrcalc_low = ssrcalc - par.ssrcalc_window + 0.001
      ssrcalc_high = ssrcalc + par.ssrcalc_window - 0.001
      precursor_ids = tuple(c_rangetree.query_tree( q1_low, ssrcalc_low, 
                                                   q1_high,  ssrcalc_high )  )
      precursors = tuple([parentid_lookup[myid[0]] for myid in precursor_ids
                          #dont select myself 
                         if parentid_lookup[myid[0]][2]  != pep['transition_group']])

      # collisions_per_peptide: dictionary, for each key the set of interfering transitions is stored
      collisions_per_peptide = c_getnonuis.calculate_collisions_per_peptide_other_ion_series( 
          transitions, precursors, par, q3_low, q3_high, par.q3_window, par.ppm, forceChargeCheck)
示例#10
0
 def test_choose(self): 
     self.assertEqual(10,  collider.choose( 5,2) )
     self.assertEqual(10,  collider.choose( 5,3) )
     self.assertEqual(45,  collider.choose(10,2) )
     self.assertEqual(120, collider.choose(10,3) )
     self.assertEqual(210, collider.choose(10,4) )
示例#11
0
     # We dont have experimental height data and cannot use C++ code
     collisions_per_peptide = collider.get_coll_per_peptide(
         mycollider, transitions, par, peptide_obj, cursor)
     min_needed = mycollider._sub_getMinNeededTransitions(
         par, transitions, collisions_per_peptide)
     #min_needed = mycollider.getMinNeededTransitions_direct(par, transitions, precursors)
 else:
     # here we consider the case that we have measured a number of
     # transitions experimentally and want to know how many of them are
     # sufficient to establish uniqueness. For this, all we need is
     # that one tuple of transitions establishes uniqueness since we
     # were able to measure it above the background noise.
     collisions_per_peptide = collider.get_coll_per_peptide(
         mycollider, transitions, par, pep, cursor)
     for order in range(1, nr_transitions + 1):
         mymax = collider.choose(nr_transitions, order)
         if use_cpp:
             non_uis = c_getnonuis.get_non_uis(collisions_per_peptide,
                                               order)
         else:
             non_uis = set()
             for pepc in collisions_per_peptide.values():
                 get_non_uis(pepc, non_uis, i)
         if len(non_uis) < mymax: break
     if len(non_uis) < mymax: min_needed = order
     else: min_needed = -1
 spectrum.score = min_needed * nr_transitions
 spectrum.min_needed = min_needed
 if min_needed != -1: spectrum.score = nr_transitions - min_needed
 if not par.quiet: progressm.update(1)
 get_min_tr_time += time.time() - tmp_time
示例#12
0
    ssrcalc_low = precursor.ssrcalc - par.ssrcalc_window + 0.001
    ssrcalc_high = precursor.ssrcalc + par.ssrcalc_window - 0.001
    try:
        result = c_integrated.wrap_all_bitwise(
            transitions, precursor.q1 - par.q1_window, ssrcalc_low,
            precursor.q1 + par.q1_window,
            ssrcalc_high, precursor.transition_group,
            min(par.max_uis, len(transitions)), par.q3_window, par.ppm,
            par.isotopes_up_to, isotope_correction, par, r_tree)
    except ValueError:
        print "Too many transitions for", precursor.modification
        continue

    for order in range(1, min(par.max_uis + 1, len(transitions) + 1)):
        prepare.append(
            (result[order - 1], collider.choose(len(transitions), order),
             precursor.parent_id, order, exp_key))
    #//break;
    progressm.update(1)

for order in range(1, 6):
    sum_all = sum([p[0] * 1.0 / p[1] for p in prepare if p[3] == order])
    nr_peptides = len([p for p in prepare if p[3] == order])
    if not par.quiet and not nr_peptides == 0:
        print "Order %s, Average non useable UIS %s" % (order, sum_all * 1.0 /
                                                        nr_peptides)
    #cursor.execute("insert into hroest.result_completegraph_aggr (sum_nonUIS, nr_peptides, uisorder, experiment) VALUES (%s,%s,%s,'%s')" % (sum_all, nr_peptides, order, exp_key))
"""

create table hroest.result_completegraph (
exp_key          int(11),
示例#13
0
    def test_runuis_swath(self):
        self.assertEqual(len(self.precursors_to_evaluate), 905)
        swath_mode = False
        par = self.par
        R = self.R
        cursor = self.db.cursor()
        prepare = []

        self.min_q1 = 500
        self.max_q1 = 525

        # Get the precursors (now for 500-525 instead of the full range)
        ###########################################################################
        myprecursors = Precursors()
        cursor = self.db.cursor()
        myprecursors.getFromDB(par, cursor, self.min_q1 - par.q1_window,
                               self.max_q1 + par.q1_window)
        rtree = myprecursors.build_rangetree()
        self.precursors_to_evaluate = myprecursors.getPrecursorsToEvaluate(
            self.min_q1, self.max_q1)
        self.assertEqual(len(self.precursors_to_evaluate), 39)

        isotope_correction = par.isotopes_up_to * R.mass_diffC13 / min(
            par.parent_charges)
        temp_precursors = Precursors()
        temp_precursors.getFromDB(par, self.db.cursor(),
                                  self.min_q1 - isotope_correction,
                                  self.max_q1)
        all_swath_precursors = []
        for p in temp_precursors.precursors:
            if (p.included_in_isotopic_range(self.min_q1, self.max_q1, par)):
                all_swath_precursors.append(p)

        for precursor in self.precursors_to_evaluate:

            q3_low, q3_high = par.get_q3range_transitions()
            transitions = precursor.calculate_transitions(q3_low, q3_high)
            nr_transitions = len(transitions)

            if par.ssrcalc_window > 1000:
                precursors_obj = [
                    p for p in all_swath_precursors
                    if p.transition_group != precursor.transition_group
                ]
            else:
                ssrcalc_low = precursor.ssrcalc - par.ssrcalc_window
                ssrcalc_high = precursor.ssrcalc + par.ssrcalc_window
                precursors_obj = [
                    p for p in all_swath_precursors
                    if p.transition_group != precursor.transition_group
                    and p.ssrcalc > ssrcalc_low and p.ssrcalc < ssrcalc_high
                ]
            collisions_per_peptide = collider.get_coll_per_peptide_from_precursors(
                self.acollider, transitions, precursors_obj, par, precursor)

            non_uis_list = collider.get_nonuis_list(collisions_per_peptide,
                                                    par.max_uis)

            for order in range(1, min(par.max_uis + 1, nr_transitions + 1)):
                prepare.append(
                    (len(non_uis_list[order]),
                     collider.choose(nr_transitions,
                                     order), precursor.parent_id, order, -1))

        self.assertEqual(len(prepare), 39 * par.max_uis)

        found = False
        for p in prepare:
            if p == (5, 8.0, 69, 1, -1):
                found = True
        self.assertEqual(found, True)

        final_report = self.get_final_report(par, prepare)
        self.check_final_report_swath(final_report)
示例#14
0
 def test_choose(self):
     self.assertEqual(10, collider.choose(5, 2))
     self.assertEqual(10, collider.choose(5, 3))
     self.assertEqual(45, collider.choose(10, 2))
     self.assertEqual(120, collider.choose(10, 3))
     self.assertEqual(210, collider.choose(10, 4))
示例#15
0
  def test_runuis_swath(self):
    self.assertEqual(len(self.precursors_to_evaluate), 905)
    swath_mode = False
    par = self.par
    R = self.R
    cursor = self.db.cursor()
    prepare = []

    self.min_q1 = 500
    self.max_q1 = 525

    # Get the precursors (now for 500-525 instead of the full range)
    ###########################################################################
    myprecursors = Precursors()
    cursor = self.db.cursor()
    myprecursors.getFromDB(par, cursor, self.min_q1 - par.q1_window, self.max_q1 + par.q1_window)
    rtree = myprecursors.build_rangetree()
    self.precursors_to_evaluate = myprecursors.getPrecursorsToEvaluate(self.min_q1, self.max_q1)
    self.assertEqual(len(self.precursors_to_evaluate), 39)

    isotope_correction = par.isotopes_up_to * R.mass_diffC13 / min(par.parent_charges)
    temp_precursors = Precursors()
    temp_precursors.getFromDB(par, self.db.cursor(), self.min_q1 - isotope_correction, self.max_q1)
    all_swath_precursors = []
    for p in temp_precursors.precursors:
      if(p.included_in_isotopic_range(self.min_q1, self.max_q1, par) ): 
        all_swath_precursors.append(p)

    for precursor in self.precursors_to_evaluate:

      q3_low, q3_high = par.get_q3range_transitions()
      transitions = precursor.calculate_transitions(q3_low, q3_high)
      nr_transitions = len(transitions)


      if par.ssrcalc_window > 1000:
          precursors_obj = [p for p in all_swath_precursors if p.transition_group != precursor.transition_group]
      else:
          ssrcalc_low =  precursor.ssrcalc - par.ssrcalc_window 
          ssrcalc_high = precursor.ssrcalc + par.ssrcalc_window 
          precursors_obj = [p for p in all_swath_precursors if p.transition_group != precursor.transition_group
                       and p.ssrcalc > ssrcalc_low and p.ssrcalc < ssrcalc_high ]
      collisions_per_peptide = collider.get_coll_per_peptide_from_precursors(self.acollider, 
              transitions, precursors_obj, par, precursor)


      non_uis_list = collider.get_nonuis_list(collisions_per_peptide, par.max_uis)

      for order in range(1,min(par.max_uis+1, nr_transitions+1)): 
        prepare.append( (len(non_uis_list[order]), collider.choose(nr_transitions, 
          order), precursor.parent_id , order, -1) )

    self.assertEqual(len(prepare), 39*par.max_uis)

    found = False
    for p in prepare:
        if p == (5, 8.0, 69, 1, -1):
            found = True
    self.assertEqual(found, True)

    final_report = self.get_final_report(par, prepare)
    self.check_final_report_swath(final_report)
示例#16
0
              precursor, precursor.q1 - par.q1_window, precursor.q1 + par.q1_window, 
              transitions, par, rtree)

    non_uis_list = collider.get_nonuis_list(collisions_per_peptide, MAX_UIS)
    ## 
    ## Lets count the number of peptides that interfere
    if count_avg_transitions:
        tr_arr = [0 for i in range(nr_transitions)]
        for v in collisions_per_peptide.values():
            for vv in v:
                tr_arr[vv] += 1
        allintertr.extend( tr_arr )
    ##
    #
    for order in range(1,min(MAX_UIS+1, nr_transitions+1)): 
        prepare.append( (len(non_uis_list[order]), collider.choose(nr_transitions, 
            order), precursor.parent_id , order, exp_key) )
    progressm.update(1)

if count_avg_transitions:
    print "\n"
    print "found %s transitions" % len(allintertr)#
    print "found max of %s interferences" % max(allintertr)
    print "found average of %s interferences" % ( sum(allintertr) * 1.0 / len(allintertr) )

# if any problems with the packet/buffer length occur, try this:
## set global max_allowed_packet=1000000000;
## set global net_buffer_length=1000000;
# cursor.executemany('insert into %s' % restable + ' (non_useable_UIS, total_UIS, \
#                   parent_key, uisorder, exp_key) values (%s,%s,%s,%s,%s)' , prepare)

print "Analyzed %s peptides" % len(precursors_to_evaluate)