github.com/biogo/biogo@v1.0.4/align/pals/features.go (about)

     1  // Copyright ©2012 The bíogo Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package pals
     6  
     7  import (
     8  	"github.com/biogo/biogo/feat"
     9  	"github.com/biogo/biogo/seq"
    10  	"github.com/biogo/graph"
    11  
    12  	"fmt"
    13  )
    14  
    15  // A Contig is a base feature type. Other features in the pals package point to this type in
    16  // their location fields.
    17  type Contig string
    18  
    19  // Name returns the value of the receiver as a string.
    20  func (c Contig) Name() string { return string(c) }
    21  
    22  // Description returns the string "contig".
    23  func (c Contig) Description() string { return "contig" }
    24  
    25  // Start returns the value 0.
    26  func (c Contig) Start() int { return 0 }
    27  
    28  // End returns the value 0.
    29  func (c Contig) End() int { return 0 }
    30  
    31  // Len returns the value 0.
    32  func (c Contig) Len() int { return 0 }
    33  
    34  // Location returns a nil feat.Feature.
    35  func (c Contig) Location() feat.Feature { return nil }
    36  
    37  // String returns the value of the receiver as a string.
    38  func (c Contig) String() string { return string(c) }
    39  
    40  // A Feature is a description of a pals feature interval.
    41  type Feature struct {
    42  	ID   string
    43  	From int
    44  	To   int
    45  	Loc  feat.Feature
    46  	Pair *Pair
    47  }
    48  
    49  func (f *Feature) Name() string {
    50  	if f == nil {
    51  		return "<nil>"
    52  	}
    53  	return f.ID
    54  }
    55  
    56  // Description returns the string "pals feature".
    57  func (f *Feature) Description() string    { return "pals feature" }
    58  func (f *Feature) Start() int             { return f.From }
    59  func (f *Feature) End() int               { return f.To }
    60  func (f *Feature) Len() int               { return f.To - f.From }
    61  func (f *Feature) Location() feat.Feature { return f.Loc }
    62  
    63  func (f *Feature) String() string {
    64  	if f == nil {
    65  		return "<nil>"
    66  	}
    67  	return fmt.Sprintf("%s[%d,%d)", f.Loc.Name(), f.From, f.To)
    68  }
    69  
    70  // Mate returns the feature pair mate of the receiver.
    71  func (f *Feature) Mate() *Feature {
    72  	switch f {
    73  	case f.Pair.A:
    74  		return f.Pair.B
    75  	case f.Pair.B:
    76  		return f.Pair.A
    77  	}
    78  	return nil
    79  }
    80  
    81  // A Pile is a collection of features covering a maximal (potentially contiguous, depending on
    82  // the value of overlap used for creation of the Piler) region of copy count > 0.
    83  //
    84  // The graph.Node interface support of Pile is subject to change.
    85  // TODO(kortschak): Replace biogo/graph use with gonum/graph.
    86  type Pile struct {
    87  	From   int
    88  	To     int
    89  	Strand seq.Strand
    90  	Loc    feat.Feature
    91  	Images []*Feature
    92  	graph.Node
    93  }
    94  
    95  func (p *Pile) Name() string {
    96  	if p == nil {
    97  		return "<nil>"
    98  	}
    99  	return fmt.Sprintf("%s[%d,%d)", p.Loc.Name(), p.From, p.To)
   100  }
   101  
   102  // Description returns the string "pile".
   103  func (p *Pile) Description() string    { return "pile" }
   104  func (p *Pile) Start() int             { return p.From }
   105  func (p *Pile) End() int               { return p.To }
   106  func (p *Pile) Len() int               { return p.To - p.From }
   107  func (p *Pile) Location() feat.Feature { return p.Loc }
   108  
   109  func (p *Pile) String() string {
   110  	if p == nil {
   111  		return "<nil>"
   112  	}
   113  	return fmt.Sprintf("{%s[%d,%d): %v}", p.Loc.Name(), p.From, p.To, p.Images)
   114  }