NVBIO
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
output_batch.h
Go to the documentation of this file.
1 /*
2  * nvbio
3  * Copyright (c) 2011-2014, NVIDIA CORPORATION. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the NVIDIA CORPORATION nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #pragma once
29 
33 
34 #include <thrust/host_vector.h>
35 #include <thrust/device_vector.h>
36 
39 
40 #include <stdio.h>
41 
42 namespace nvbio {
43 namespace io {
44 
48 {
49 public:
51 
52  thrust::device_vector<io::Alignment>& alignments;
55  thrust::device_vector<uint8>& mapq;
56  thrust::device_vector<uint32>* read_ids;
57 
59  thrust::device_vector<io::Alignment>& _alignments,
60  DeviceCigarArray _cigar,
62  thrust::device_vector<uint8>& _mapq,
63  thrust::device_vector<uint32>* _read_ids = NULL)
64  : count(_count),
65  alignments(_alignments),
66  cigar(_cigar),
67  mds(_mds),
68  mapq(_mapq),
69  read_ids(_read_ids)
70  {}
71 
72  // copy best score data into host memory
73  void readback_scores(thrust::host_vector<io::Alignment>& host_alignments) const;
74  // copy cigars into host memory
75  void readback_cigars(HostCigarArray& host_cigars) const;
76  // copy md strings into host memory
77  void readback_mds(nvbio::HostVectorArray<uint8>& host_mds) const;
78  // copy mapq into host memory
79  void readback_mapq(thrust::host_vector<uint8>& host_mapq) const;
80  // copy ids into host memory
81  void readback_ids(thrust::host_vector<uint32>& host_ids) const;
82 };
83 
87 {
88 public:
90 
91  // we have two alignments, cigar and MDS arrays, one for each mate
92  thrust::host_vector<io::Alignment> alignments;
95  thrust::host_vector<uint8> mapq;
96  thrust::host_vector<uint32> read_ids;
97 
98  // pointer to the host-side read data for each mate
100 
101  void readback(const DeviceOutputBatchSE);
102 
103 public:
107 };
108 
112 {
113 public:
115 
116  // we have two alignments, cigar and MDS arrays, one for each mate
117  thrust::host_vector<io::Alignment> alignments[2];
120  thrust::host_vector<uint8> mapq[2];
121  thrust::host_vector<uint32> read_ids;
122 
123  // pointer to the host-side read data for each mate
125 
126  void readback(const DeviceOutputBatchSE, const AlignmentMate mate);
127 
128 public:
132 };
133 
134 } // namespace io
135 } // namespace nvbio