File: MiniBatchInfo.hpp

package info (click to toggle)
salmon 0.7.2%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 4,352 kB
  • ctags: 5,243
  • sloc: cpp: 42,341; ansic: 6,252; python: 228; makefile: 207; sh: 190
file content (74 lines) | stat: -rw-r--r-- 2,423 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef  MINIBATCH_INFO
#define  MINIBATCH_INFO

#include <vector>
#include "LibraryFormat.hpp"
#include "ReadPair.hpp"
#include "UnpairedRead.hpp"
#include "AlignmentGroup.hpp"
#include "concurrentqueue.h"

template <typename AlnGroupT>
class MiniBatchInfo {
    public:
        MiniBatchInfo(size_t _batchNum, std::vector<AlnGroupT*>* _alignments, double _logForgettingMass) :
            batchNum(_batchNum), alignments(_alignments), logForgettingMass(_logForgettingMass) {}

        size_t batchNum;
        //AlignmentBatch* alignments;
        //std::vector<size_t>* readGroupBoundaries;
        std::vector<AlnGroupT*>* alignments;
        double logForgettingMass;

        template <typename FragT>
        void release(tbb::concurrent_queue<FragT*>& fragmentQueue,
                     moodycamel::ConcurrentQueue<AlnGroupT*>& alignmentGroupQueue){
                    // tbb::concurrent_bounded_queue<AlnGroupT*>& alignmentGroupQueue){
            size_t ng{0};
            for (auto& alnGroup : *alignments) {
                //fragmentQueue.enqueue_bulk(alnGroup->alignments().begin(), alnGroup->alignments().size());

                for (auto aln : alnGroup->alignments()) {
                   fragmentQueue.push(aln);
                    aln = nullptr;
                }

                alnGroup->alignments().clear();
                //alignmentGroupQueue.push(alnGroup);
                //alnGroup = nullptr;
                ++ng;
            }

            alignmentGroupQueue.enqueue_bulk(std::make_move_iterator(alignments->begin()), alignments->size());
            delete alignments;
            alignments = nullptr;
        }

};

/*
template <>
void MiniBatchInfo<AlignmentGroup<ReadPair>>::release(
        tbb::concurrent_bounded_queue<ReadPair*>& alignmentStructureQueue,
        tbb::concurrent_bounded_queue<AlignmentGroup<ReadPair>*>& alignmentGroupQueue) {
    size_t ng{0};
    for (auto& alnGroup : *alignments) {
        for (auto& aln : alnGroup->alignments()) {

            alignmentStructureQueue.push(aln.read1);
            alignmentStructureQueue.push(aln.read2);
            aln.read1 = nullptr;
            aln.read2 = nullptr;
        }
        alnGroup->alignments().clear();
        alignmentGroupQueue.push(alnGroup);
        //delete alnGroup;
        alnGroup = nullptr;
        ++ng;
    }
    delete alignments;
    alignments = nullptr;
}
*/

#endif // MINIBATCH_INFO