This file is indexed.

/usr/include/pbseq/alignment/datastructures/alignment/FilterCriteria.hpp is in libblasr-dev 0~20161219-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#ifndef _BLASR_FILTER_CRITERIA_HPP_
#define _BLASR_FILTER_CRITERIA_HPP_
#include <string>
#include <iostream>
#include <vector>
#include <algorithm> // transform
#include <ctype.h>   // toupper
#include "AlignmentCandidate.hpp"


/// POSITIVE - larger score value is better.
/// NEGATIVE - smaller score value is better.
enum class ScoreSign {NEGATIVE=-1, POSITIVE=1};
static const std::string AS = "AS";

class Score {
public:
    Score(const float & value, const ScoreSign & sign);
    Score(const Score & another);
    ~Score();

    /// \returns float score value in [0, 100]
    float Value() const;

    /// \returns score sign, NEGATIVE or POSITIVE
    ScoreSign Sign() const;

    bool operator == (const Score & another) const;

    /// \returns true if this score value is better than another's.
    bool BetterThan(const Score & another) const;

    /// \returns true if this score value is better than or equal to another's.
    bool BetterThanOrEqual(const Score & another) const; 

    /// \returns true if this score value is worse than another's.
    bool WorseThan(const Score & another) const;

private:
    float _value;
    ScoreSign _sign;
    static constexpr float errorunit = 1e-6;
};

class HitPolicy {
    /// \name Hit Policy
    /// \{
public:

    /// \note Constructor
    HitPolicy(const std::string & hitPolicyStr, const ScoreSign & sign);
    ~HitPolicy(void);

    const std::string ToString() const;
    std::ostream & operator << (std::ostream & os);

    /// \returns score sign, NEGATIVE or POSITIVE
    ScoreSign Sign() const;

    /// \returns a help string describing hit policies.
    const std::string Help(const std::string & pad = "") const;

    /// \returns true if HitPolicy is RANDOM.
    bool IsRandom() const;

    /// \returns true if HitPolicy is RANDOMBEST.
    bool IsRandombest() const;

    /// \returns true if HitPolicy is ALL.
    bool IsAll() const;

    /// \returns true if HitPolicy is ALLBEST.
    bool IsAllbest() const;

    /// \returns true if HitPolicy is LEFTMOST.
    bool IsLeftmost() const;

    /// Apply hit policy on a list of AlignmentCandidate pointers.
    /// \returns apply hit policy and return alignment candidate pointers.
    /// \params createRand, call rand() to generate a random number 
    ///         or use the random number passed from caller.
    /// \params passedRand, random int passed from caller
    std::vector<T_AlignmentCandidate*> 
    Apply(const std::vector<T_AlignmentCandidate*> alnPtrs, 
          const bool & createRand = true,
          const int  & passedRand = 0) const;

    //std::vector<AlignmentCandidate<>> & 
    //Apply(std::vector<AlignmentCandidate<>> & records) const;

#ifdef USE_PBBAM
    /// Compare aligned bamRecords by query names, scores and target positions.
    bool compareByQNameScoreTStart(const PacBio::BAM::BamRecord & a, 
                                   const PacBio::BAM::BamRecord & b) const;

    /// Compare aligned bamRecords by scores and target positions.
    /// \note BamRecords must share the same query name.
    bool compareByScoreTStart(const PacBio::BAM::BamRecord & a, 
                              const PacBio::BAM::BamRecord & b) const;

    std::vector<PacBio::BAM::BamRecord> 
    Apply(const std::vector<PacBio::BAM::BamRecord> & records,
          const bool & createRand = true,
          const int  & passedRand = 0) const;
#endif

private:
    enum class HitPolicyEnum{RANDOM, ALL, ALLBEST, RANDOMBEST, LEFTMOST};
    HitPolicyEnum _hit;
    ScoreSign _sign;
    /// \}
};

class FilterCriteria {
    /// \name FilterCriteria
    /// \{
public:
    FilterCriteria(const DNALength & minAlnLength,
                   const float & minPctSimilarity,
                   const float & minPctAccuracy,
                   const bool & useScore,
                   const Score & score); 
    ~FilterCriteria(void);
    bool MakeSane(std::string & errMsg) const;
    void Verbose(bool verbose);

    template<typename T_TSequence, typename T_QSequence>
    bool Satisfy(AlignmentCandidate<T_TSequence, T_QSequence> * a) const;

#ifdef USE_PBBAM
    bool Satisfy(const PacBio::BAM::BamRecord & record) const;
#endif

public:
    /// \retuns a string describing criteria for filtering alignments.
    // const std::string Help(const std::string & pad = "");
    const std::string MinAlnLengthHelp();
    const std::string MinPctSimilarityHelp();
    const std::string MinPctAccuracyHelp();
    const std::string ScoreSignHelp();
    const std::string ScoreCutoffHelp();

private:
    DNALength _minAlnLength;
    float _minPctSimilarity;
    float _minPctAccuracy;
    bool _useScore;
    Score _scoreCutoff;
    bool _verbose;

    bool Satisfy(const DNALength & alnLength, 
                 const float & pctSimilarity, 
                 const float & pctAccuracy,
                 const Score & score) const;
    /// \}
};

template<typename T_TSequence, typename T_QSequence>
bool FilterCriteria::Satisfy(AlignmentCandidate<T_TSequence, T_QSequence> * a) const {
    float pctAccuracy = 100 * a->nMatch / static_cast<float>(a->nMismatch
            + a->nMatch + a->nIns + a->nDel);
    Score s(a->score, _scoreCutoff.Sign());
    // use Alignment Length which is sum of Matches, Mismatches,Insertions and Deletions for minAlignLength filter
    return Satisfy(a->nMatch + a->nMismatch + a->nIns + a->nDel, a->pctSimilarity, pctAccuracy, s);
}
#endif //_BLASR_FILTER_CRITERIA_HPP_