File: HDFAlnInfoGroup.cpp

package info (click to toggle)
pbseqlib 5.3.5%2Bdfsg-11
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,152 kB
  • sloc: cpp: 77,259; python: 331; sh: 103; makefile: 41
file content (110 lines) | stat: -rw-r--r-- 3,677 bytes parent folder | download | duplicates (5)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <hdf/HDFAlnInfoGroup.hpp>

int HDFAlnInfoGroup::InitializeNumPasses()
{
    numPasses.Initialize(alnInfoGroup, "NumPasses");
    return 1;
}

void HDFAlnInfoGroup::InitializeDefaultColumnNames(std::vector<std::string> &defaultColumnNames)
{
    defaultColumnNames.push_back("AlnID");
    defaultColumnNames.push_back("AlnGroupID");
    defaultColumnNames.push_back("MovieID");
    defaultColumnNames.push_back("RefGroupID");
    defaultColumnNames.push_back("tStart");
    defaultColumnNames.push_back("tEnd");
    defaultColumnNames.push_back("RCRefStrand");
    defaultColumnNames.push_back("HoleNumber");
    defaultColumnNames.push_back("SetNumber");
    defaultColumnNames.push_back("StrobeNumber");
    defaultColumnNames.push_back("MoleculeID");
    defaultColumnNames.push_back("rStart");
    defaultColumnNames.push_back("rEnd");
    defaultColumnNames.push_back("MapQV");
    defaultColumnNames.push_back("nM");
    defaultColumnNames.push_back("nMM");
    defaultColumnNames.push_back("nIns");
    defaultColumnNames.push_back("nDel");
    defaultColumnNames.push_back("Offset_begin");
    defaultColumnNames.push_back("Offset_end");
    defaultColumnNames.push_back("nBackRead");
    defaultColumnNames.push_back("nReadOverlap");
}

bool HDFAlnInfoGroup::Create(HDFGroup &parent)
{
    parent.AddGroup("AlnInfo");
    // Make sure it was created, and intialize this group to reference the newly created one.
    if (alnInfoGroup.Initialize(parent.group, "AlnInfo") == 0) {
        return 0;
    }
    std::vector<std::string> defaultColumnNames;
    InitializeDefaultColumnNames(defaultColumnNames);
    columnNames.Create(alnInfoGroup.group, "ColumnNames", defaultColumnNames);

    alnIndexArray.Create(&alnInfoGroup.group, "AlnIndex", defaultColumnNames.size());
    return true;
}

int HDFAlnInfoGroup::Initialize(HDFGroup &rootGroup)
{
    if (alnInfoGroup.Initialize(rootGroup.group, "AlnInfo") == 0) {
        return 0;
    }
    if (alnIndexArray.Initialize(alnInfoGroup, "AlnIndex") == 0) {
        return 0;
    }
    /*
     * This functionality should go into the python.
     if (!alnIndexArray.ContainsAttribute("ColumnNames")) {
     try {
     std::vector<std::string> defaultColumnNames;
     InitializeDefaultColumnNames(defaultColumnNames);
     columnNames.Create(alnIndexArray.dataset, "ColumnNames", defaultColumnNames);
     }
     catch(Execption e) {
    //
    // If the dataset is not writable
    }
    }
    */
    return 1;
}

HDFAlnInfoGroup::~HDFAlnInfoGroup() { alnInfoGroup.Close(); }

// Return size of /AlnInfo/AlnIndex in KB
UInt HDFAlnInfoGroup::GetAlnIndexSize()
{
    return alnIndexArray.GetNRows() / 1024 * sizeof(unsigned int) * NCols;
}

void HDFAlnInfoGroup::Read(AlnInfo &alnInfo)
{

    UInt nAlignments = alnIndexArray.GetNRows();
    alnInfo.alignments.resize(nAlignments);
    UInt alignmentIndex;
    UInt alignmentRow[NCols];
    for (alignmentIndex = 0; alignmentIndex < nAlignments; alignmentIndex++) {
        // Input the values.
        alnIndexArray.Read(alignmentIndex, alignmentIndex + 1, alignmentRow);
        alnInfo.alignments[alignmentIndex].StoreAlignmentIndex(alignmentRow, NCols);
    }
}

int HDFAlnInfoGroup::GetNAlignments() { return alnIndexArray.GetNRows(); }

unsigned int HDFAlnInfoGroup::WriteAlnIndex(std::vector<unsigned int> &aln)
{
    alnIndexArray.WriteRow(&aln[0], aln.size());
    return alnIndexArray.GetNRows();
}

void HDFAlnInfoGroup::ReadCmpAlignment(UInt alignmentIndex, CmpAlignment &cmpAlignment)
{
    UInt alignmentRow[NCols];
    alnIndexArray.Read(alignmentIndex, alignmentIndex + 1, alignmentRow);
    cmpAlignment.StoreAlignmentIndex(alignmentRow, NCols);
}