q_metrics_test.h
Go to the documentation of this file.
1 
9 #pragma once
13 #include "interop/util/length_of.h"
14 
15 
16 namespace illumina{ namespace interop { namespace unittest
17 {
18 
24  struct q_metric_v4 : metric_test<model::metrics::q_metric, 4>
25  {
31  {
32  metrics = metric_set_t(VERSION);
33 
35  const q_val hist1[] = {q_val(6,21208), q_val(19,8227), q_val(32,73051), q_val(37,2339486)};
36  const q_val hist2[] = {q_val(6,22647), q_val(19,9570), q_val(32,81839), q_val(37,2413227)};
37  const q_val hist3[] = {q_val(6,18878), q_val(19,8168), q_val(32,72634), q_val(37,2342292)};
38 
39  metrics.insert(metric_t(1, 1104, 1, to_vector(hist1)));
40  metrics.insert(metric_t(1, 1106, 1, to_vector(hist2)));
41  metrics.insert(metric_t(1, 1104, 2, to_vector(hist3)));
42  }
47  template<class Collection>
48  static void create_binary_data(Collection& buffer)
49  {
50  const signed char tmp[] =
51  {
52  4
53  ,-50,1,0,80,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
54  ,0,0,0,0,0,0,0,0,0,0,0,-40,82,0,0,0,0,0,0,0
55  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
56  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
57  ,0,0,0,35,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
58  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
59  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,29,1,0,0
60  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-98,-78,35,0,0
61  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
62  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
63  ,0,0,0,0,0,0,0,1,0,82,4,1,0,0,0,0,0,0,0,0
64  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,119,88,0
65  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
66  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
67  ,0,0,0,0,0,0,0,0,0,98,37,0,0,0,0,0,0,0,0,0
68  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
69  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
70  ,0,-81,63,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
71  ,0,-85,-46,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
72  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
73  ,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,80,4,2,0,0
74  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
75  ,0,0,0,-66,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
76  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
77  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-24,31,0,0,0
78  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
79  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
80  ,0,0,0,0,0,0,0,-70,27,1,0,0,0,0,0,0,0,0,0,0
81  ,0,0,0,0,0,0,0,-108,-67,35,0,0,0,0,0,0,0,0,0,0
82  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
83  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
84  };
85  buffer.assign(tmp, tmp+util::length_of(tmp));
86  }
91  {
92  const size_t lane_count = 1;
93  const size_t surface_count = 2;
94  const size_t channel_count = 2;
95  const model::run::read_info reads[]={
96  model::run::read_info(1, 1, 3, false)
97  };
98  const float q30 = 98.803192138671875f;
99  summary.initialize(to_vector(reads), lane_count, surface_count, channel_count);
100  summary[0][0].tile_count(2);
101  summary[0][0].projected_yield_g(0.0098816361278295517);
102  summary[0][0].yield_g(0.0074112270958721638f);
103  summary[0][0].percent_gt_q30(q30);
104  summary[0][0][0].tile_count(2);
105  summary[0][0][0].projected_yield_g(0.0098816361278295517);
106  summary[0][0][0].yield_g(0.0074112270958721638f);
107  summary[0][0][0].percent_gt_q30(q30);
109  summary[0].summary().projected_yield_g(0.0098816361278295517);
110  summary[0].summary().yield_g(0.0074112270958721638f);
111  summary[0].summary().percent_gt_q30(q30);
112  summary.total_summary().percent_gt_q30(q30);
113  summary.total_summary().projected_yield_g(0.0098816361278295517);
114  summary.total_summary().yield_g(0.0074112270958721638f);
115  summary.nonindex_summary().percent_gt_q30(q30);
116  summary.nonindex_summary().projected_yield_g(0.0098816361278295517);
117  summary.nonindex_summary().yield_g(0.0074112270958721638f);
119  }
120  };
121 
127  struct q_metric_v5 : metric_test<model::metrics::q_metric, 5>
128  {
134  {
135  typedef header_t::qscore_bin_vector_type qscore_bin_vector_type;
136  typedef header_t::bin_t bin_t;
137  typedef bin_t::bin_type ushort_t;
138  typedef metric_t::uint_t uint_t;
139  const uint_t bin_count = 7;
140  ushort_t lower[] = {1, 10, 20, 25, 30, 35, 40};
141  ushort_t upper[] = {9, 19, 24, 29, 34, 39, 41};
142  ushort_t value[] = {1, 14, 22, 27, 33, 37, 40};
143  qscore_bin_vector_type headervec;
144  for(uint_t i=0;i<bin_count;i++)
145  headervec.push_back(bin_t(lower[i], upper[i], value[i]));
146  metrics = metric_set_t(header_t(headervec), VERSION);
147  typedef metric_t::uint_t uint_t;
148  typedef sparse_value<uint64_t, 7> q_val;
149 
150  const q_val hist1[] = {q_val(1,45272), q_val(3,33369), q_val(4,1784241)};
151  const q_val hist2[] = {q_val(1,45229), q_val(3,34304), q_val(4,1792186)};
152  const q_val hist3[] = {q_val(1,49152), q_val(3,37440), q_val(4,1806479)};
153 
154  metrics.insert(metric_t(1, 1103, 1, to_vector(hist1)));
155  metrics.insert(metric_t(1, 1104, 1, to_vector(hist2)));
156  metrics.insert(metric_t(1, 1108, 1, to_vector(hist3)));
157  }
162  template<class Collection>
163  static void create_binary_data(Collection& buffer)
164  {
165  const signed char tmp[] =
166  {
167  5
168  ,-50,1,7,1,10,20,25,30,35,40,9,19,24,29,34,39,41,1,14,22
169  ,27,33,37,40,1,0,79,4,1,0,0,0,0,0,0,0,0,0,0,0
170  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
171  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
172  ,0,0,-40,-80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
173  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
174  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,-126,0,0,0,0
175  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-79,57
176  ,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
177  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
178  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
179  ,0,0,0,0,0,0,0,0,0,0,1,0,80,4,1,0,0,0,0,0
180  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
181  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
182  ,0,0,0,0,0,0,0,0,-83,-80,0,0,0,0,0,0,0,0,0,0
183  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
184  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
185  ,0,-122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
186  ,0,0,0,0,-70,88,27,0,0,0,0,0,0,0,0,0,0,0,0,0
187  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
188  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
189  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,84,4
190  ,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
191  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
192  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-64,0,0,0,0
193  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
194  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
195  ,0,0,0,0,0,0,64,-110,0,0,0,0,0,0,0,0,0,0,0,0
196  ,0,0,0,0,0,0,0,0,0,0,-113,-112,27,0,0,0,0,0,0,0
197  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
198  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
199  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
200  ,0,0
201  };
202  buffer.assign(tmp, tmp+util::length_of(tmp));
203  }
208  {
209  const size_t lane_count = 1;
210  const size_t surface_count = 2;
211  const size_t channel_count = 2;
212  const model::run::read_info reads[]={
213  model::run::read_info(1, 1, 2, false)
214  };
215  summary.initialize(to_vector(reads), lane_count, surface_count, channel_count);
216  summary[0][0].tile_count(3);
217  summary[0][0].projected_yield_g(0.0056276721879839897f);
218  summary[0][0].yield_g(0.0056276721879839897f);
219  summary[0][0].percent_gt_q30(95.650672912597656f);
220  summary[0][0][0].tile_count(3);
221  summary[0][0][0].projected_yield_g(0.0056276721879839897f);
222  summary[0][0][0].yield_g(0.0056276721879839897f);
223  summary[0][0][0].percent_gt_q30(95.650672912597656f);
225  summary[0].summary().projected_yield_g(0.0056276721879839897f);
226  summary[0].summary().yield_g(0.0056276721879839897f);
227  summary[0].summary().percent_gt_q30(95.650672912597656f);
228  summary.total_summary().percent_gt_q30(95.650672912597656f);
229  summary.total_summary().projected_yield_g(0.0056276721879839897f);
230  summary.total_summary().yield_g(0.0056276721879839897);
231  summary.nonindex_summary().percent_gt_q30(95.650672912597656f);
232  summary.nonindex_summary().projected_yield_g(0.0056276721879839897f);
233  summary.nonindex_summary().yield_g(0.0056276721879839897);
235  }
236  };
237 
243  struct q_metric_v6 : metric_test<model::metrics::q_metric, 6>
244  {
250  {
251  typedef header_t::qscore_bin_vector_type qscore_bin_vector_type;
252  typedef header_t::bin_t bin_t;
253  typedef bin_t::bin_type ushort_t;
254  typedef metric_t::uint_t uint_t;
255  const uint_t bin_count = 7;
256 
257  const ushort_t lower[] = {2, 10, 20, 25, 30, 35, 40};
258  const ushort_t upper[] = {9, 19, 24, 29, 34, 39, 40};
259  const ushort_t value[] = {2, 14, 21, 27, 32, 36, 40};
260  qscore_bin_vector_type headervec;
261  for(uint_t i=0;i<bin_count;i++)
262  headervec.push_back(bin_t(lower[i], upper[i], value[i]));
263  metrics = metric_set_t(header_t(headervec), VERSION);
264  typedef metric_t::uint_t uint_t;
265 
266  const uint64_t hist_all1[] = {0, 267962, 118703, 4284, 2796110, 0, 0};
267  const uint64_t hist_all2[] = {0,241483, 44960, 1100, 2899568, 0 ,0};
268  const uint64_t hist_all3[] = {0,212144, 53942, 427, 2920598, 0, 0};
269 
270  metrics.insert(metric_t(7, 1114, 1, to_vector(hist_all1)));
271  metrics.insert(metric_t(7, 1114, 2, to_vector(hist_all2)));
272  metrics.insert(metric_t(7, 1114, 3,to_vector(hist_all3)));
273  }
278  template<class Collection>
279  static void create_binary_data(Collection& buffer)
280  {
281  const signed char tmp[] =
282  {
283  6,34,1,7,2,10,20,25,30,35,40,9,19,24,29,34,39,40,2,14,21,27,32,36,40
284  ,7,0,90,4,1,0,0,0,0,0,-70,22,4,0,-81,-49,1,0,-68,16,0,0,78,-86,42,0,0,0,0,0,0,0,0,0
285  ,7,0,90,4,2,0,0,0,0,0,75,-81,3,0,-96,-81,0,0,76,4,0,0,112,62,44,0,0,0,0,0,0,0,0,0
286  ,7,0,90,4,3,0,0,0,0,0,-80,60,3,0,-74,-46,0,0,-85,1,0,0,-106,-112,44,0,0,0,0,0,0,0,0,0
287  };
288  buffer.assign(tmp, tmp+util::length_of(tmp));
289  }
294  {
295  const size_t lane_count = 1;
296  const size_t surface_count = 2;
297  const size_t channel_count = 2;
298  const model::run::read_info reads[]={
299  model::run::read_info(1, 1, 4, false)
300  };
301  summary.initialize(to_vector(reads), lane_count, surface_count, channel_count);
302  summary[0][0].lane(7);
303  summary[0][0].tile_count(1);
304  summary[0][0].projected_yield_g(0.0095612816512584686f);
305  summary[0][0].yield_g(0.009561280719935894f);
306  summary[0][0].percent_gt_q30(90.1163330078125f);
307  summary[0][0][0].tile_count(1);
308  summary[0][0][0].projected_yield_g(0.0095612816512584686f);
309  summary[0][0][0].yield_g(0.009561280719935894f);
310  summary[0][0][0].percent_gt_q30(90.1163330078125f);
312  summary[0].summary().projected_yield_g(0.0095612816512584686f);
313  summary[0].summary().yield_g(0.0095612816512584686f);
314  summary[0].summary().percent_gt_q30(90.1163330078125f);
315  summary.total_summary().percent_gt_q30(90.1163330078125f);
316  summary.total_summary().projected_yield_g(0.0095612816512584686f);
317  summary.total_summary().yield_g(0.0095612816512584686f);
318  summary.nonindex_summary().percent_gt_q30(90.1163330078125f);
319  summary.nonindex_summary().projected_yield_g(0.0095612816512584686f);
320  summary.nonindex_summary().yield_g(0.0095612816512584686f);
322  }
323  };
329  struct q_metric_v6_unbinned : metric_test<model::metrics::q_metric, 6>
330  {
336  {
337  metrics = metric_set_t(VERSION);
338 
339  std::vector<uint64_t> hist_tmp(model::metrics::q_metric::MAX_Q_BINS, 0);
340 
341  metrics.insert(metric_t(1, 1110, 1, hist_tmp));
342  metrics.insert(metric_t(1, 1110, 2, hist_tmp));
343  metrics.insert(metric_t(1, 1110, 3, hist_tmp));
344  }
349  template<class Collection>
350  static void create_binary_data(Collection& buffer)
351  {
352  const signed char tmp[] =
353  {
354  6,-50,0,1,0,86,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
355  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
356  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
357  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
358  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
359  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
360  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
361  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,86,4,2
362  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
363  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
364  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
365  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
366  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
367  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
368  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
369  ,0,0,0,0,0,0,0,0,0,0,0,0,1,0,86,4,3,0,0,0,0,0,0,0,0,0
370  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
371  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
372  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
373  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
374  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
375  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
376  ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
377  ,0,0,0
378  };
379  buffer.assign(tmp, tmp+util::length_of(tmp));
380  }
381  };
382 
469  struct q_metric_requirements : metric_test<model::metrics::q_metric, 6, 'c'>
470  {
476  static void create_expected(metric_set_t& metrics, const model::run::info& run_info)
477  {
478  typedef model::metrics::q_metric::uint_t uint_t;
480  {
482  model::metrics::q_score_bin(10,19,14),
483  model::metrics::q_score_bin(20,24,21),
484  model::metrics::q_score_bin(25,29,27),
485  model::metrics::q_score_bin(30,34,32),
486  model::metrics::q_score_bin(35,39,36),
488  };
489  metrics = model::metrics::q_metric::header_type(util::to_vector(bins));
490 
491  const ::uint32_t kValue1 = static_cast< ::uint32_t>(1e7);
492  const ::uint32_t kValue2 = static_cast< ::uint32_t>(2e7);
493  // >= Q30 -> 50.0
494  const ::uint64_t hist[] = {kValue2, kValue2, kValue1, 0, kValue1, kValue2, kValue2};
495  // >= Q30 -> 42.85 // 3/7
496  const ::uint64_t hist_last_cycle_of_read[] = {kValue2, kValue2, kValue2, kValue1, kValue1, kValue1, kValue1};
497  for(size_t cycle=1;cycle<=run_info.total_cycles();++cycle)
498  {
499  if(run_info.is_last_cycle_of_read(cycle))
500  {
501  metrics.insert(
502  model::metrics::q_metric(1, 1101, static_cast<uint_t>(cycle), util::to_vector(hist_last_cycle_of_read)));
503  metrics.insert( model::metrics::q_metric(1, 1102, static_cast<uint_t>(cycle), util::to_vector(hist_last_cycle_of_read)));
504  }
505  else
506  {
507  metrics.insert( model::metrics::q_metric(1, 1101, static_cast<uint_t>(cycle), util::to_vector(hist)));
508  metrics.insert( model::metrics::q_metric(1, 1102, static_cast<uint_t>(cycle), util::to_vector(hist)));
509  }
510  }
511  }
517  {
518  const size_t tile_count = 2;
519  const size_t lane_count = 1;
520  const size_t lane_number = 1;
521  const size_t surface_count = 2;
522  const size_t channel_count = 2;
523  const size_t cycles_per_read = 6;
524  const float kExpectedPercentGreaterThanOrEqualToQ30 = 50.0f;// 7 bins were half the data >= Q30
525  const float kExpectedReadYield = 1.0f; // 1e9 / 1e9
526 
527 
528  const model::run::read_info reads[]={
529  model::run::read_info(1, 1, cycles_per_read),
530  model::run::read_info(2, cycles_per_read+1, cycles_per_read*2)
531  };
532  const size_t read_count = util::length_of(reads);
533  const size_t total_cycles = cycles_per_read*read_count;
534  summary.initialize(to_vector(reads), lane_count, surface_count, channel_count);
535 
536  for(size_t read_index=0;read_index < read_count;++read_index)
537  {
538  summary[read_index][0].lane(lane_number);
539  summary[read_index][0].tile_count(tile_count);
540  summary[read_index][0][0].tile_count(tile_count);
541  // TODO: Describe?
542  summary[read_index][0].cycle_state().qscored_cycle_range(
543  model::run::cycle_range(cycles_per_read, cycles_per_read));
544  summary[read_index].summary().percent_gt_q30(kExpectedPercentGreaterThanOrEqualToQ30);
545  summary[read_index][0].percent_gt_q30(kExpectedPercentGreaterThanOrEqualToQ30);
546  summary[read_index][0][0].percent_gt_q30(kExpectedPercentGreaterThanOrEqualToQ30);
547  summary[read_index][0].yield_g(kExpectedReadYield);
548  summary[read_index][0][0].yield_g(kExpectedReadYield);
549  summary[read_index].summary().yield_g(kExpectedReadYield);
550  summary[read_index].summary().projected_yield_g(kExpectedReadYield);
551 
552  // TODO: Describe?
553  summary[read_index][0].projected_yield_g(kExpectedReadYield);
554  summary[read_index][0][0].projected_yield_g(kExpectedReadYield);
555  }
556  summary.nonindex_summary().percent_gt_q30(kExpectedPercentGreaterThanOrEqualToQ30);
557  summary.total_summary().percent_gt_q30(kExpectedPercentGreaterThanOrEqualToQ30);
558  summary.nonindex_summary().yield_g(kExpectedReadYield*read_count);
559  summary.total_summary().yield_g(kExpectedReadYield*read_count);
560  summary.total_summary().projected_yield_g(kExpectedReadYield*read_count);
561 
562  summary.nonindex_summary().projected_yield_g(kExpectedReadYield*read_count);
563  // TODO: Describe?
564  summary.cycle_state().qscored_cycle_range(model::run::cycle_range(total_cycles, total_cycles));
565  }
566  };
567 
568 
575  struct q_metric_v7 : metric_test<model::metrics::q_metric, 7>
576  {
582  {
583  typedef header_t::qscore_bin_vector_type qscore_bin_vector_type;
584  typedef header_t::bin_t bin_t;
585  typedef bin_t::bin_type ushort_t;
586  typedef metric_t::uint_t uint_t;
587  const uint_t bin_count = 7;
588 
589  const ushort_t lower[] = {2, 10, 20, 25, 30, 35, 40};
590  const ushort_t upper[] = {9, 19, 24, 29, 34, 39, 40};
591  const ushort_t value[] = {2, 14, 21, 27, 32, 36, 40};
592  qscore_bin_vector_type headervec;
593  for(uint_t i=0;i<bin_count;i++)
594  headervec.push_back(bin_t(lower[i], upper[i], value[i]));
595  metrics = metric_set_t(header_t(headervec), VERSION);
596  typedef metric_t::uint_t uint_t;
597 
598  const uint64_t hist_all1[] = {0, 267962, 118703, 4284, 2796110, 0, 0};
599  const uint64_t hist_all2[] = {0,241483, 44960, 1100, 2899568, 0 ,0};
600  const uint64_t hist_all3[] = {0,212144, 53942, 427, 2920598, 0, 0};
601 
602  metrics.insert(metric_t(7, 111014, 1, to_vector(hist_all1)));
603  metrics.insert(metric_t(7, 111014, 2, to_vector(hist_all2)));
604  metrics.insert(metric_t(7, 111014, 3,to_vector(hist_all3)));
605  }
610  template<class Collection>
611  static void create_binary_data(Collection &buffer)
612  {
613  const signed char tmp[] =
614  {
615  7,36,1,7,2,9,2,10,19,14,20,24,21,25,29,27,30,34,32,35,39,36
616  ,40,40,40,7,0,-90,-79,1,0,1,0,0,0,0,0,-70,22,4,0,-81,-49,1
617  ,0,-68,16,0,0,78,-86,42,0,0,0,0,0,0,0,0,0,7,0,-90,-79,1,0
618  ,2,0,0,0,0,0,75,-81,3,0,-96,-81,0,0,76,4,0,0,112,62,44,0,0
619  ,0,0,0,0,0,0,0,7,0,-90,-79,1,0,3,0,0,0,0,0,-80,60,3,0,-74
620  ,-46,0,0,-85,1,0,0,-106,-112,44,0,0,0,0,0,0,0,0,0
621  };
622  buffer.assign(tmp, tmp+util::length_of(tmp));
623  }
624  };
625 
626 
627 
628 
635  struct q_metric_v8 : metric_test<model::metrics::q_metric, 8>
636  {
642  {
643  typedef header_t::qscore_bin_vector_type qscore_bin_vector_type;
644  typedef header_t::bin_t bin_t;
645  typedef bin_t::bin_type ushort_t;
646  typedef metric_t::uint_t uint_t;
647  const uint_t bin_count = 7;
648 
649  const ushort_t lower[] = {2, 10, 20, 25, 30, 35, 40};
650  const ushort_t upper[] = {9, 19, 24, 29, 34, 39, 40};
651  const ushort_t value[] = {2, 14, 21, 27, 32, 36, 40};
652  qscore_bin_vector_type headervec;
653  for(uint_t i=0;i<bin_count;i++)
654  headervec.push_back(bin_t(lower[i], upper[i], value[i]));
655  metrics = metric_set_t(header_t(headervec), VERSION);
656  typedef metric_t::uint_t uint_t;
657 
658  const uint64_t hist_all1[] = {0, 267962, 118703, 4284, 2796110, 0, 0};
659  const uint64_t hist_all2[] = {0,241483, 44960, 1100, 2899568, 0 ,0};
660  const uint64_t hist_all3[] = {0,212144, 53942, 427, 2920598, 0, 0};
661 
662  metrics.insert(metric_t(7, 111014, 1, to_vector(hist_all1)));
663  metrics.insert(metric_t(7, 111014, 2, to_vector(hist_all2)));
664  metrics.insert(metric_t(7, 111014, 3,to_vector(hist_all3)));
665  }
670  template<class Collection>
671  static void create_binary_data(Collection &buffer)
672  {
673  const signed char tmp[] =
674  {
675  8
676 ,64,1,7,2,9,2,10,19,14,20,24,21,25,29,27,30,34,32,35,39
677 ,36,40,40,40,7,0,-90,-79,1,0,1,0,0,0,0,0,0,0,0,0
678 ,-70,22,4,0,0,0,0,0,-81,-49,1,0,0,0,0,0,-68,16,0,0
679 ,0,0,0,0,78,-86,42,0,0,0,0,0,0,0,0,0,0,0,0,0
680 ,0,0,0,0,0,0,0,0,7,0,-90,-79,1,0,2,0,0,0,0,0
681 ,0,0,0,0,75,-81,3,0,0,0,0,0,-96,-81,0,0,0,0,0,0
682 ,76,4,0,0,0,0,0,0,112,62,44,0,0,0,0,0,0,0,0,0
683 ,0,0,0,0,0,0,0,0,0,0,0,0,7,0,-90,-79,1,0,3,0
684 ,0,0,0,0,0,0,0,0,-80,60,3,0,0,0,0,0,-74,-46,0,0
685 ,0,0,0,0,-85,1,0,0,0,0,0,0,-106,-112,44,0,0,0,0,0
686 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
687  };
688  buffer.assign(tmp, tmp+util::length_of(tmp));
689  }
690  };
691 
692 
693 
694 
701  struct q_metric_v9 : metric_test<model::metrics::q_metric, 9>
702  {
708  {
709  typedef header_t::qscore_bin_vector_type qscore_bin_vector_type;
710  typedef header_t::bin_t bin_t;
711  typedef bin_t::bin_type ushort_t;
712  typedef metric_t::uint_t uint_t;
713  const uint_t bin_count = 7;
714 
715  const ushort_t lower[] = {2, 10, 20, 25, 30, 35, 40};
716  const ushort_t upper[] = {9, 19, 24, 29, 34, 39, 40};
717  const ushort_t value[] = {2, 14, 21, 27, 32, 36, 40};
718  qscore_bin_vector_type headervec;
719  for(uint_t i=0;i<bin_count;i++)
720  headervec.push_back(bin_t(lower[i], upper[i], value[i]));
721  metrics = metric_set_t(header_t(headervec), VERSION);
722  typedef metric_t::uint_t uint_t;
723 
724  const uint64_t hist_all1[] = {0, 267962, 118703, 4284, 2796110, 0, 0};
725  const uint64_t hist_all2[] = {0,241483, 44960, 1100, 2899568, 0 ,0};
726  const uint64_t hist_all3[] = {0,212144, 53942, 427, 2920598, 0, 0};
727 
728  metrics.insert(metric_t(7, 111014, 1, to_vector(hist_all1)));
729  metrics.insert(metric_t(7, 111014, 2, to_vector(hist_all2)));
730  metrics.insert(metric_t(7, 111014, 3,to_vector(hist_all3)));
731  }
736  template<class Collection>
737  static void create_binary_data(Collection &buffer)
738  {
739  const signed char tmp[] =
740  {
741  9
742 ,64,0,1,7,2,9,2,10,19,14,20,24,21,25,29,27,30,34,32,35
743 ,39,36,40,40,40,7,0,-90,-79,1,0,1,0,0,0,0,0,0,0,0
744 ,0,-70,22,4,0,0,0,0,0,-81,-49,1,0,0,0,0,0,-68,16,0
745 ,0,0,0,0,0,78,-86,42,0,0,0,0,0,0,0,0,0,0,0,0
746 ,0,0,0,0,0,0,0,0,0,7,0,-90,-79,1,0,2,0,0,0,0
747 ,0,0,0,0,0,75,-81,3,0,0,0,0,0,-96,-81,0,0,0,0,0
748 ,0,76,4,0,0,0,0,0,0,112,62,44,0,0,0,0,0,0,0,0
749 ,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,-90,-79,1,0,3
750 ,0,0,0,0,0,0,0,0,0,-80,60,3,0,0,0,0,0,-74,-46,0
751 ,0,0,0,0,0,-85,1,0,0,0,0,0,0,-106,-112,44,0,0,0,0
752 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
753  };
754  buffer.assign(tmp, tmp+util::length_of(tmp));
755  }
756  };
757 }}}
758 
static void create_expected(metric_set_t &metrics, const model::run::info &=model::run::info())
Definition: q_metrics_test.h:641
static void create_summary(model::summary::run_summary &summary)
Definition: q_metrics_test.h:516
const metric_summary & total_summary() const
Definition: run_summary.h:314
void insert(const metric_type &metric)
Definition: metric_set.h:267
static void create_binary_data(Collection &buffer)
Definition: q_metrics_test.h:737
static void create_expected(metric_set_t &metrics, const model::run::info &=model::run::info())
Definition: q_metrics_test.h:133
Definition: q_metrics_test.h:701
float percent_gt_q30() const
Definition: metric_summary.h:78
Definition: enum_description.h:15
const run::cycle_range & qscored_cycle_range() const
Definition: cycle_state_summary.h:59
void initialize(const run::info &run_info)
Definition: run_summary.h:99
float projected_yield_g() const
Definition: metric_summary.h:99
Definition: q_metrics_test.h:127
bool is_last_cycle_of_read(const size_t cycle) const
Definition: info.h:268
static void create_binary_data(Collection &buffer)
Definition: q_metrics_test.h:611
static std::vector< T > to_vector(const T(&vals)[N])
Definition: metric_test.h:85
static void create_expected(metric_set_t &metrics, const model::run::info &=model::run::info())
Definition: q_metrics_test.h:581
Definition: cycle_range.h:20
model::metrics::q_metric metric_t
Definition: metric_test.h:57
static void create_summary(model::summary::run_summary &summary)
Definition: q_metrics_test.h:90
q_score_header header_type
Definition: q_metric.h:264
Definition: metric_test.h:41
static void create_expected(metric_set_t &metrics, const model::run::info &=model::run::info())
Definition: q_metrics_test.h:335
model::metric_base::metric_set< model::metrics::q_metric > metric_set_t
Definition: metric_test.h:59
static void create_binary_data(Collection &buffer)
Definition: q_metrics_test.h:163
static void create_expected(metric_set_t &metrics, const model::run::info &=model::run::info())
Definition: q_metrics_test.h:707
Definition: q_metrics_test.h:243
static void create_expected(metric_set_t &metrics, const model::run::info &run_info)
Definition: q_metrics_test.h:476
static void create_binary_data(Collection &buffer)
Definition: q_metrics_test.h:671
::uint32_t uint_t
Definition: base_metric.h:77
static void create_summary(model::summary::run_summary &summary)
Definition: q_metrics_test.h:293
def summary(run_metrics, level='Total', columns=None, dtype='f4', ignore_missing_columns=True, extra)
Definition: core.py:217
const cycle_state_summary & cycle_state() const
Definition: run_summary.h:370
Definition: metric_test.h:22
size_t total_cycles() const
Definition: info.h:334
static void create_binary_data(Collection &buffer)
Definition: q_metrics_test.h:279
Definition: q_metrics_test.h:575
static void create_expected(metric_set_t &metrics, const model::run::info &=model::run::info())
Definition: q_metrics_test.h:30
std::vector< q_score_bin > qscore_bin_vector_type
Definition: q_metric.h:114
static void create_summary(model::summary::run_summary &summary)
Definition: q_metrics_test.h:207
static void create_binary_data(Collection &buffer)
Definition: q_metrics_test.h:350
float yield_g() const
Definition: metric_summary.h:88
static void create_binary_data(Collection &buffer)
Definition: q_metrics_test.h:48
static void create_expected(metric_set_t &metrics, const model::run::info &=model::run::info())
Definition: q_metrics_test.h:249
metric_t::header_type header_t
Definition: metric_test.h:61
size_t length_of(const T &val)
Definition: length_of.h:55
Definition: q_metrics_test.h:635
const metric_summary & nonindex_summary() const
Definition: run_summary.h:342
Definition: q_metrics_test.h:24