Interested? Contact muehlhaus@bio.uni-kl.de or d_zimmer@rhrk.uni-kl.de
Modern Proteomics relies on the use of mass spectrometry (MS). Since it is not feasible to analyze proteins directly, MS-based shotgun proteomics estimates protein abundances using a proxy: peptides.
While the whole process is complex enough to fill whole textbooks, this project focuses on a very specific puzzle piece:
The alignment of peptide derived MS spectra.
Let us motivate this problem by visual examination of the fragment spectra' of two example peptides with the sequences 'PRTEIINNEE' (blue) and 'PRTEYINNEE' (orange).
': For simplicity we will only consider b-ions at charge 1.
Even though that both peptides show very high sequence similarity and only differ by one amino acid, with 'I' at index 4 being substituted with 'Y',
this small change in the sequence results in a big change on the spectrum level. As one can see, more than half of all peaks do not overlap. This is problematic since many
algorithms that compare spectra aim to maximize matching peaks - This project is designed to tackle this gap by solving the 'Spectral Alignment Problem'.
Before we formulate the problem and discover a strategy to tackle it we change the perspective: The following figure plots the peak positions of
the fragment spectra of the b-ions of 'PRTEIINNEE' versus the one of 'PRTEYINNEE'.
The plot contains every possible pair of peaks (eg. the first peak of spectrum 1 and the second peak of spectrum 2) depicted as grey crosses.
Additionally, we added matching peaks as blue circles and non-matching peaks as orange triangles. You can see, that all matching peaks are placed
on the main diagonal (blue line), while the non-matching peaks are lined up at a constant offset, parallel to the main diagonal.
The pattern which we want to highlight here becomes even more evident if we raise the amount of amino acid mutations by one and plotting the b-ion spectrum of 'PRTEIINNEE' versus the one of 'PRTEYINYEE'.
As one can see, the addition of another mutation has the effect that the 6 non-matching peaks are now lined up at 2 distinct offsets, resulting in three peaks per offset which are placed parallel to the main diagonal. Analyzing the plot carefully, you can derive that the green path is the longest path one can find with at most k=2 shifts from the main diagonal.
In practice this information can be used to identify spectra that are the result of modified or mutated peptides: Your main task will be to solve the following longest path problem and to provide an
efficient implementation:
Spectral Alignment Problem:
Description: Find the k-similarity between two Spectra.
Input: Spectrum \(Sa\) , Spectrum \(Sb\), number of shifts \(k\)
Output: The \(k\) -similarity, \(D(k)\), between \(Sa\) and \(Sb\)
This project is your chance to dive into a topic of great relevance to modern biology: MS-based shotgun proteomics.
By completing this assignment you will understand the basic principles of modern proteomics and gain a deep understanding of peptide identification.
Finally, you will implement an efficient version of spectral alignment to extend the BioFSharp.Mz library.
Fortunately, you can straight away start your journey since many functionalities are already implemented in the BioFSharp and BioFSharp.Mz libaries. The following snippet creates a function that returns
a fragment spectrum consisting of b-ions at intensity 1 based on a string encoded peptide sequence:
let calcBIonFragments pepSequence =
pepSequence
|> BioFSharp.BioList.ofAminoAcidString
|> Fragmentation.Series.bOfBioList BioFSharp.BioItem.monoisoMass
|> List.map (fun x -> x.MainPeak.Mass,1.)
This function can for example be used to recreate the first sample from above:
let PRTEIINNEE' =
"PRTEIINNEE"
|> calcBIonFragments
let PRTEYINNEE' =
"PRTEYINNEE"
|> calcBIonFragments
let specComp' =
[
PRTEIINNEE'
|> Chart.Column
|> Chart.withTraceName "PRTEIINNEE"
PRTEYINNEE'
|> Chart.Column
|> Chart.withTraceName "PRTEYINNEE"
]
|> Chart.combine
specComp'
|> GenericChart.toChartHTML
To allow you a little head start we provide you with a very naive implementation of the spectral alignment problem''.
Disclaimer: You can use this implementation to benchmark against, or just familiarize yourself with the problem. You are by no means obligated to use this implementation as a blue print!
In contrast to this naive implementation, the algorithm provided by you should be more efficient as well as applicable on mass spectra which consist of b and y ions'' at charges up to 4.
Additionally, this naive implementation assumes that masses are measured as integers. Your algorithm should be able to take floating point values as an input.
'': Remember in the examples above we only considered b-ions at charge 1.
type Path = {
K : int
PathIndices: list<int*int>
}
//
let findAllPaths maxK (m:Matrix<float>) =
let extendInAllPossibleDirections (m:Matrix<float>) maxK currentRow (path :Path) =
if path.K >= maxK then
let lastRow,lastCol = path.PathIndices.Head
let colinearCol = currentRow-lastRow+lastCol
if colinearCol > m.NumCols-1 then
[path]
else
let acc' =
let v = m.[currentRow,colinearCol]
if v = 1. then
(currentRow,colinearCol)::path.PathIndices
else
path.PathIndices
[{path with PathIndices = acc'}]
else
let newV =
let _,lastCol = path.PathIndices.Head
[
for j = (lastCol + 1) to m.NumCols-1 do
let v = m.[currentRow,j]
if v = 1. then yield (currentRow,j)
]
match newV with
| [] -> [path]
| _ ->
let newPaths =
newV
|> List.map (fun (currentRow,matchingColumn) -> (currentRow,matchingColumn)::path.PathIndices)
|> List.map (fun acc' ->
let k' =
match acc' with
| [] -> path.K
| x::[] -> path.K
| x::y::t ->
if (fst x - fst y) = (snd x - snd y) then
path.K
else path.K + 1
{K=k';PathIndices=acc'}
)
path::newPaths
let rec loop paths currentRowIdx =
if currentRowIdx > m.NumRows-1 then
paths
else
let expandedPaths =
paths
|> List.collect (extendInAllPossibleDirections m maxK currentRowIdx)
loop expandedPaths (currentRowIdx+1)
loop [{K=0;PathIndices=[0,0]}] 0
//
let calcSimilarityAt_simple k (specA:int[]) (specB:int[]) =
let n :int = System.Math.Max(specA |> Array.max,specB |> Array.max)
let vecA =
let tmp = FSharp.Stats.Vector.create (n+1) 0.
specA
|> Array.iter (fun p -> tmp.[p] <- 1.)
tmp
let vecB =
let tmp = FSharp.Stats.Vector.create (n+1) 0.
specB
|> Array.iter (fun p -> tmp.[p] <- 1.)
tmp
let m = vecA * vecB.Transpose
let longestPath =
findAllPaths k m
|> List.maxBy (fun p -> p.PathIndices.Length)
longestPath.PathIndices.Length - 1
Using this implementation we encourage you to read the paper "Mutation-Tolerant Protein Identification by Mass Spectrometry" (see References),
which takes a deep dive into the topic. In the following code snippet we will apply our naive implementation to examples from the paper - something we also
advise you to do - once you come up with your first implementation.
// Example 1
let sa = [|10; 20; 30; 40; 50; 60; 70; 80; 90; 100|]
let sb = [|10; 20; 30; 40; 50; 55; 65; 75; 85; 95|]
let sc = [|10; 15; 30; 35; 50; 55; 70; 75; 90; 95|]
// should be 10
let D_1_sa_sb = calcSimilarityAt_simple 1 sa sb
// should be 6
let D_1_sa_sc = calcSimilarityAt_simple 1 sa sc
// Example 2
let sd = [|7; 11; 15; 18; 21; 24; 30; 38; 43|]
let se = [|7; 11; 13; 19; 22; 25; 31; 33; 38|]
// the authors claim its 5.
let D_1_sd_se = calcSimilarityAt_simple 1 sd se
// should be 8
let D_2_sd_se = calcSimilarityAt_simple 2 sd se
Mutation-Tolerant Protein Identification by Mass Spectrometry, P. A. Pevzner et al. 2000
Efficiency of Database Search for Identification of Mutated and Modified Proteins via Mass Spectrometry, P. A. Pevzner et al. 2001
-
We strongly advise to work through the paper "Mutation-Tolerant Protein Identification by Mass Spectrometry". It
serves as a very good introduction into the topic and gives you many ideas on how to write an efficient implementation.
namespace FSharpAux
namespace FSharpAux.IO
namespace BioFSharp
namespace BioFSharp.IO
namespace BioFSharp.Mz
Multiple items
namespace FSharp
--------------------
namespace Microsoft.FSharp
namespace FSharp.Stats
namespace Plotly
namespace Plotly.NET
val PRTEIINNEE : (float * float) list
module BioList
from BioFSharp
<summary>
This module contains the BioList type and its according functions. The BioList type is a List of objects using the IBioItem interface
</summary>
val ofAminoAcidString : s:#seq<char> -> BioList.BioList<AminoAcids.AminoAcid>
<summary>
Generates amino acid sequence of one-letter-code raw string
</summary>
module Fragmentation
from BioFSharp.Mz
module Series
from BioFSharp.Mz.Fragmentation
val bOfBioList : massfunction:(IBioItem -> float) -> aal:AminoAcids.AminoAcid list -> PeakFamily<TaggedMass.TaggedMass> list
<summary>
Returns the b series of the given amino acids list. The mass accuracy is determined by the massfunction applied.
</summary>
module BioItem
from BioFSharp
<summary>
Basic functions on IBioItems interface
</summary>
val monoisoMass<'a (requires 'a :> IBioItem)> : (IBioItem -> float) (requires 'a :> IBioItem)
<summary>
Returns the monoisotopic mass of a bio item (without H20)
</summary>
Multiple items
module List
from FSharp.Stats
<summary>
Module to compute common statistical measure on list
</summary>
--------------------
module List
from FSharpAux
--------------------
module List
from Microsoft.FSharp.Collections
<summary>Contains operations for working with values of type <see cref="T:Microsoft.FSharp.Collections.list`1" />.</summary>
<namespacedoc><summary>Operations for collections such as lists, arrays, sets, maps and sequences. See also
<a href="https://docs.microsoft.com/dotnet/fsharp/language-reference/fsharp-collection-types">F# Collection Types</a> in the F# Language Guide.
</summary></namespacedoc>
--------------------
type List<'T> =
| ( [] )
| ( :: ) of Head: 'T * Tail: 'T list
interface IReadOnlyList<'T>
interface IReadOnlyCollection<'T>
interface IEnumerable
interface IEnumerable<'T>
member GetReverseIndex : rank:int * offset:int -> int
member GetSlice : startIndex:int option * endIndex:int option -> 'T list
static member Cons : head:'T * tail:'T list -> 'T list
member Head : 'T
member IsEmpty : bool
member Item : index:int -> 'T with get
...
<summary>The type of immutable singly-linked lists.</summary>
<remarks>Use the constructors <c>[]</c> and <c>::</c> (infix) to create values of this type, or
the notation <c>[1;2;3]</c>. Use the values in the <c>List</c> module to manipulate
values of this type, or pattern match against the values directly.
</remarks>
<exclude />
val map : mapping:('T -> 'U) -> list:'T list -> 'U list
<summary>Builds a new collection whose elements are the results of applying the given function
to each of the elements of the collection.</summary>
<param name="mapping">The function to transform elements from the input list.</param>
<param name="list">The input list.</param>
<returns>The list of transformed elements.</returns>
val x : PeakFamily<TaggedMass.TaggedMass>
PeakFamily.MainPeak: TaggedMass.TaggedMass
property TaggedMass.TaggedMass.Mass: float with get
val PRTEYINNEE : (float * float) list
val specComp : GenericChart.GenericChart
type Chart =
static member AnnotatedHeatmap : zData:seq<#seq<'a1>> * annotationText:seq<#seq<string>> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?X:seq<#IConvertible> * ?XGap:int * ?Y:seq<#IConvertible> * ?YGap:int * ?Text:'a5 * ?MultiText:seq<'a5> * ?ColorBar:ColorBar * ?ColorScale:Colorscale * ?ShowScale:bool * ?ReverseScale:bool * ?ZSmooth:SmoothAlg * ?Transpose:bool * ?UseWebGL:bool * ?ReverseYAxis:bool * ?UseDefaults:bool -> GenericChart (requires 'a1 :> IConvertible and 'a5 :> IConvertible)
static member Area : x:seq<#IConvertible> * y:seq<#IConvertible> * ?Name:string * ?ShowMarkers:bool * ?ShowLegend:bool * ?MarkerSymbol:MarkerSymbol * ?Color:Color * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Dash:DrawingStyle * ?Width:float * ?UseDefaults:bool -> GenericChart + 1 overload
static member Bar : values:seq<#IConvertible> * ?Keys:seq<#IConvertible> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'a2 * ?MultiText:seq<'a2> * ?MarkerColor:Color * ?MarkerColorScale:Colorscale * ?MarkerOutline:Line * ?MarkerPatternShape:PatternShape * ?MultiMarkerPatternShape:seq<PatternShape> * ?MarkerPattern:Pattern * ?Marker:Marker * ?Base:#IConvertible * ?Width:'a4 * ?MultiWidth:seq<'a4> * ?TextPosition:TextPosition * ?MultiTextPosition:seq<TextPosition> * ?UseDefaults:bool -> GenericChart (requires 'a2 :> IConvertible and 'a4 :> IConvertible) + 1 overload
static member BoxPlot : ?x:seq<#IConvertible> * ?y:seq<#IConvertible> * ?Name:string * ?ShowLegend:bool * ?Text:'a2 * ?MultiText:seq<'a2> * ?Fillcolor:Color * ?MarkerColor:Color * ?OutlierColor:Color * ?OutlierWidth:int * ?Opacity:float * ?WhiskerWidth:float * ?BoxPoints:BoxPoints * ?BoxMean:BoxMean * ?Jitter:float * ?PointPos:float * ?Orientation:Orientation * ?Marker:Marker * ?Line:Line * ?AlignmentGroup:string * ?Offsetgroup:string * ?Notched:bool * ?NotchWidth:float * ?QuartileMethod:QuartileMethod * ?UseDefaults:bool -> GenericChart (requires 'a2 :> IConvertible) + 1 overload
static member Bubble : x:seq<#IConvertible> * y:seq<#IConvertible> * sizes:seq<int> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'a2 * ?MultiText:seq<'a2> * ?TextPosition:TextPosition * ?MultiTextPosition:seq<TextPosition> * ?MarkerColor:Color * ?MarkerColorScale:Colorscale * ?MarkerOutline:Line * ?MarkerSymbol:MarkerSymbol * ?MultiMarkerSymbol:seq<MarkerSymbol> * ?Marker:Marker * ?LineColor:Color * ?LineColorScale:Colorscale * ?LineWidth:float * ?LineDash:DrawingStyle * ?Line:Line * ?StackGroup:string * ?Orientation:Orientation * ?GroupNorm:GroupNorm * ?UseWebGL:bool * ?UseDefaults:bool -> GenericChart (requires 'a2 :> IConvertible) + 1 overload
static member Candlestick : open:seq<#IConvertible> * high:seq<#IConvertible> * low:seq<#IConvertible> * close:seq<#IConvertible> * x:seq<#IConvertible> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?Text:'a5 * ?MultiText:seq<'a5> * ?Line:Line * ?IncreasingColor:Color * ?Increasing:FinanceMarker * ?DecreasingColor:Color * ?Decreasing:FinanceMarker * ?WhiskerWidth:float * ?UseDefaults:bool -> GenericChart (requires 'a5 :> IConvertible) + 1 overload
static member Column : values:seq<#IConvertible> * ?Keys:seq<#IConvertible> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'a2 * ?MultiText:seq<'a2> * ?MarkerColor:Color * ?MarkerColorScale:Colorscale * ?MarkerOutline:Line * ?MarkerPatternShape:PatternShape * ?MultiMarkerPatternShape:seq<PatternShape> * ?MarkerPattern:Pattern * ?Marker:Marker * ?Base:#IConvertible * ?Width:'a4 * ?MultiWidth:seq<'a4> * ?TextPosition:TextPosition * ?MultiTextPosition:seq<TextPosition> * ?UseDefaults:bool -> GenericChart (requires 'a2 :> IConvertible and 'a4 :> IConvertible) + 1 overload
static member Contour : zData:seq<#seq<'a1>> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?X:seq<#IConvertible> * ?Y:seq<#IConvertible> * ?Text:'a4 * ?MultiText:seq<'a4> * ?ColorBar:ColorBar * ?ColorScale:Colorscale * ?ShowScale:bool * ?ReverseScale:bool * ?Transpose:bool * ?LineColor:Color * ?LineDash:DrawingStyle * ?Line:Line * ?ContoursColoring:ContourColoring * ?ContoursOperation:ConstraintOperation * ?ContoursType:ContourType * ?ShowContourLabels:bool * ?ContourLabelFont:Font * ?Contours:Contours * ?FillColor:Color * ?NContours:int * ?UseDefaults:bool -> GenericChart (requires 'a1 :> IConvertible and 'a4 :> IConvertible)
static member Funnel : x:seq<#IConvertible> * y:seq<#IConvertible> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?Width:float * ?Offset:float * ?Text:'a2 * ?MultiText:seq<'a2> * ?TextPosition:TextPosition * ?MultiTextPosition:seq<TextPosition> * ?Orientation:Orientation * ?AlignmentGroup:string * ?OffsetGroup:string * ?MarkerColor:Color * ?MarkerOutline:Line * ?Marker:Marker * ?TextInfo:TextInfo * ?ConnectorLineColor:Color * ?ConnectorLineStyle:DrawingStyle * ?ConnectorFillColor:Color * ?ConnectorLine:Line * ?Connector:FunnelConnector * ?InsideTextFont:Font * ?OutsideTextFont:Font * ?UseDefaults:bool -> GenericChart (requires 'a2 :> IConvertible)
static member Heatmap : zData:seq<#seq<'a1>> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?X:seq<#IConvertible> * ?XGap:int * ?Y:seq<#IConvertible> * ?YGap:int * ?Text:'a4 * ?MultiText:seq<'a4> * ?ColorBar:ColorBar * ?ColorScale:Colorscale * ?ShowScale:bool * ?ReverseScale:bool * ?ZSmooth:SmoothAlg * ?Transpose:bool * ?UseWebGL:bool * ?ReverseYAxis:bool * ?UseDefaults:bool -> GenericChart (requires 'a1 :> IConvertible and 'a4 :> IConvertible) + 1 overload
...
static member Chart.Column : keysValues:seq<#System.IConvertible * #System.IConvertible> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'c * ?MultiText:seq<'c> * ?MarkerColor:Color * ?MarkerColorScale:StyleParam.Colorscale * ?MarkerOutline:Line * ?MarkerPatternShape:StyleParam.PatternShape * ?MultiMarkerPatternShape:seq<StyleParam.PatternShape> * ?MarkerPattern:TraceObjects.Pattern * ?Marker:TraceObjects.Marker * ?Base:#System.IConvertible * ?Width:'e * ?MultiWidth:seq<'e> * ?TextPosition:StyleParam.TextPosition * ?MultiTextPosition:seq<StyleParam.TextPosition> * ?UseDefaults:bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible and 'e :> System.IConvertible)
static member Chart.Column : values:seq<#System.IConvertible> * ?Keys:seq<#System.IConvertible> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'a2 * ?MultiText:seq<'a2> * ?MarkerColor:Color * ?MarkerColorScale:StyleParam.Colorscale * ?MarkerOutline:Line * ?MarkerPatternShape:StyleParam.PatternShape * ?MultiMarkerPatternShape:seq<StyleParam.PatternShape> * ?MarkerPattern:TraceObjects.Pattern * ?Marker:TraceObjects.Marker * ?Base:#System.IConvertible * ?Width:'a4 * ?MultiWidth:seq<'a4> * ?TextPosition:StyleParam.TextPosition * ?MultiTextPosition:seq<StyleParam.TextPosition> * ?UseDefaults:bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible and 'a4 :> System.IConvertible)
static member Chart.withTraceName : ?Name:string * ?ShowLegend:bool * ?LegendGroup:string * ?Visible:StyleParam.Visible -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.combine : gCharts:seq<GenericChart.GenericChart> -> GenericChart.GenericChart
module GenericChart
from Plotly.NET
<summary>
Module to represent a GenericChart
</summary>
val toChartHTML : gChart:GenericChart.GenericChart -> string
<summary>
Converts a GenericChart to it HTML representation. The div layer has a default size of 600 if not specified otherwise.
</summary>
val vs : GenericChart.GenericChart
val vs : (float * float) list
val zip : list1:'T1 list -> list2:'T2 list -> ('T1 * 'T2) list
<summary>Combines the two lists into a list of pairs. The two lists must have equal lengths.</summary>
<param name="list1">The first input list.</param>
<param name="list2">The second input list.</param>
<returns>A single list containing pairs of matching elements from the input lists.</returns>
val fst : tuple:('T1 * 'T2) -> 'T1
<summary>Return the first element of a tuple, <c>fst (a,b) = a</c>.</summary>
<param name="tuple">The input tuple.</param>
<returns>The first value.</returns>
val matching : (float * float) list
val filter : predicate:('T -> bool) -> list:'T list -> 'T list
<summary>Returns a new collection containing only the elements of the collection
for which the given predicate returns "true"</summary>
<param name="predicate">The function to test the input elements.</param>
<param name="list">The input list.</param>
<returns>A list containing only the elements that satisfy the predicate.</returns>
val x : float
val y : float
val nonMatching : (float * float) list
val allPossibleMatchups : (float * float) list
val x : float list
val y : float list
val unzip : list:('T1 * 'T2) list -> 'T1 list * 'T2 list
<summary>Splits a list of pairs into two lists.</summary>
<param name="list">The input list.</param>
<returns>Two lists of split elements.</returns>
val i : int
property List.Length: int with get
<summary>Gets the number of items contained in the list</summary>
val j : int
static member Chart.Point : xy:seq<#System.IConvertible * #System.IConvertible> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'c * ?MultiText:seq<'c> * ?TextPosition:StyleParam.TextPosition * ?MultiTextPosition:seq<StyleParam.TextPosition> * ?MarkerColor:Color * ?MarkerColorScale:StyleParam.Colorscale * ?MarkerOutline:Line * ?MarkerSymbol:StyleParam.MarkerSymbol * ?MultiMarkerSymbol:seq<StyleParam.MarkerSymbol> * ?Marker:TraceObjects.Marker * ?StackGroup:string * ?Orientation:StyleParam.Orientation * ?GroupNorm:StyleParam.GroupNorm * ?UseWebGL:bool * ?UseDefaults:bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Point : x:seq<#System.IConvertible> * y:seq<#System.IConvertible> * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'a2 * ?MultiText:seq<'a2> * ?TextPosition:StyleParam.TextPosition * ?MultiTextPosition:seq<StyleParam.TextPosition> * ?MarkerColor:Color * ?MarkerColorScale:StyleParam.Colorscale * ?MarkerOutline:Line * ?MarkerSymbol:StyleParam.MarkerSymbol * ?MultiMarkerSymbol:seq<StyleParam.MarkerSymbol> * ?Marker:TraceObjects.Marker * ?StackGroup:string * ?Orientation:StyleParam.Orientation * ?GroupNorm:StyleParam.GroupNorm * ?UseWebGL:bool * ?UseDefaults:bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible)
static member Chart.withMarkerStyle : ?AutoColorScale:bool * ?CAuto:bool * ?CMax:float * ?CMid:float * ?CMin:float * ?Color:Color * ?Colors:seq<Color> * ?ColorAxis:StyleParam.SubPlotId * ?ColorBar:LayoutObjects.ColorBar * ?Colorscale:StyleParam.Colorscale * ?Gradient:TraceObjects.Gradient * ?Outline:Line * ?Size:int * ?MultiSize:seq<int> * ?Opacity:float * ?MultiOpacity:seq<float> * ?Pattern:TraceObjects.Pattern * ?Symbol:StyleParam.MarkerSymbol * ?MultiSymbols:seq<StyleParam.MarkerSymbol> * ?OutlierColor:Color * ?Maxdisplayed:int * ?ReverseScale:bool * ?ShowScale:bool * ?SizeMin:int * ?SizeMode:StyleParam.MarkerSizeMode * ?SizeRef:int -> (GenericChart.GenericChart -> GenericChart.GenericChart)
module StyleParam
from Plotly.NET
type MarkerSymbol =
| Modified of MarkerSymbol * SymbolStyle
| Circle
| Square
| Diamond
| Cross
| X
| TriangleUp
| TriangleDown
| TriangleLeft
| TriangleRight
...
member Convert : unit -> obj
override ToString : unit -> string
static member convert : (MarkerSymbol -> obj)
static member toInteger : (MarkerSymbol -> int)
union case StyleParam.MarkerSymbol.Cross: StyleParam.MarkerSymbol
Multiple items
module Color
from Plotly.NET
--------------------
type Color =
private new : obj:obj -> Color
override Equals : other:obj -> bool
override GetHashCode : unit -> int
static member fromARGB : a:int -> r:int -> g:int -> b:int -> Color
static member fromColorScaleValues : c:seq<#IConvertible> -> Color
static member fromColors : c:seq<Color> -> Color
static member fromHex : s:string -> Color
static member fromKeyword : c:ColorKeyword -> Color
static member fromRGB : r:int -> g:int -> b:int -> Color
static member fromString : c:string -> Color
...
<summary>
Plotly color can be a single color, a sequence of colors, or a sequence of numeric values referencing the color of the colorscale obj
</summary>
static member Color.fromKeyword : c:ColorKeyword -> Color
union case ColorKeyword.Grey: ColorKeyword
union case StyleParam.MarkerSymbol.Circle: StyleParam.MarkerSymbol
union case ColorKeyword.Blue: ColorKeyword
static member Chart.Line : xy:seq<#System.IConvertible * #System.IConvertible> * ?ShowMarkers:bool * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'c * ?MultiText:seq<'c> * ?TextPosition:StyleParam.TextPosition * ?MultiTextPosition:seq<StyleParam.TextPosition> * ?MarkerColor:Color * ?MarkerColorScale:StyleParam.Colorscale * ?MarkerOutline:Line * ?MarkerSymbol:StyleParam.MarkerSymbol * ?MultiMarkerSymbol:seq<StyleParam.MarkerSymbol> * ?Marker:TraceObjects.Marker * ?LineColor:Color * ?LineColorScale:StyleParam.Colorscale * ?LineWidth:float * ?LineDash:StyleParam.DrawingStyle * ?Line:Line * ?StackGroup:string * ?Orientation:StyleParam.Orientation * ?GroupNorm:StyleParam.GroupNorm * ?UseWebGL:bool * ?UseDefaults:bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Line : x:seq<#System.IConvertible> * y:seq<#System.IConvertible> * ?ShowMarkers:bool * ?Name:string * ?ShowLegend:bool * ?Opacity:float * ?MultiOpacity:seq<float> * ?Text:'a2 * ?MultiText:seq<'a2> * ?TextPosition:StyleParam.TextPosition * ?MultiTextPosition:seq<StyleParam.TextPosition> * ?MarkerColor:Color * ?MarkerColorScale:StyleParam.Colorscale * ?MarkerOutline:Line * ?MarkerSymbol:StyleParam.MarkerSymbol * ?MultiMarkerSymbol:seq<StyleParam.MarkerSymbol> * ?Marker:TraceObjects.Marker * ?LineColor:Color * ?LineColorScale:StyleParam.Colorscale * ?LineWidth:float * ?LineDash:StyleParam.DrawingStyle * ?Line:Line * ?StackGroup:string * ?Orientation:StyleParam.Orientation * ?GroupNorm:StyleParam.GroupNorm * ?UseWebGL:bool * ?UseDefaults:bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible)
static member Chart.withLineStyle : ?Width:float * ?Color:Color * ?Shape:StyleParam.Shape * ?Dash:StyleParam.DrawingStyle * ?Smoothing:float * ?Colorscale:StyleParam.Colorscale * ?OutlierColor:Color * ?OutlierWidth:float -> (GenericChart.GenericChart -> GenericChart.GenericChart)
type DrawingStyle =
| Solid
| Dash
| Dot
| DashDot
| User of int
member Convert : unit -> obj
override ToString : unit -> string
static member convert : (DrawingStyle -> obj)
static member toString : (DrawingStyle -> string)
<summary>
Dash: Sets the drawing style of the lines segments in this trace.
Sets the style of the lines. Set to a dash string type or a dash length in px.
</summary>
union case StyleParam.DrawingStyle.Dash: StyleParam.DrawingStyle
union case ColorKeyword.DarkGreen: ColorKeyword
union case StyleParam.MarkerSymbol.TriangleUp: StyleParam.MarkerSymbol
union case ColorKeyword.Orange: ColorKeyword
static member Chart.withYAxisStyle : title:string * ?TitleFont:Font * ?MinMax:(float * float) * ?ShowGrid:bool * ?ShowLine:bool * ?Side:StyleParam.Side * ?Overlaying:StyleParam.LinearAxisId * ?Id:StyleParam.SubPlotId * ?Domain:(float * float) * ?Position:float * ?ZeroLine:bool * ?Anchor:StyleParam.LinearAxisId -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withXAxisStyle : title:string * ?TitleFont:Font * ?MinMax:(float * float) * ?ShowGrid:bool * ?ShowLine:bool * ?Side:StyleParam.Side * ?Overlaying:StyleParam.LinearAxisId * ?Id:StyleParam.SubPlotId * ?Domain:(float * float) * ?Position:float * ?Zeroline:bool * ?Anchor:StyleParam.LinearAxisId -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withLegend : showlegend:bool -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withLegend : legend:LayoutObjects.Legend -> (GenericChart.GenericChart -> GenericChart.GenericChart)
val PRTEYINYEE : (float * float) list
val vs2 : GenericChart.GenericChart
val calcBIonFragments : pepSequence:seq<char> -> (float * float) list
val pepSequence : seq<char>
val PRTEIINNEE' : (float * float) list
val PRTEYINNEE' : (float * float) list
val specComp' : GenericChart.GenericChart
type Path =
{ K: int
PathIndices: (int * int) list }
Path.K: int
Multiple items
val int : value:'T -> int (requires member op_Explicit)
<summary>Converts the argument to signed 32-bit integer. This is a direct conversion for all
primitive numeric types. For strings, the input is converted using <c>Int32.Parse()</c>
with InvariantCulture settings. Otherwise the operation requires an appropriate
static conversion method on the input type.</summary>
<param name="value">The input value.</param>
<returns>The converted int</returns>
--------------------
[<Struct>]
type int = int32
<summary>An abbreviation for the CLI type <see cref="T:System.Int32" />.</summary>
<category>Basic Types</category>
--------------------
type int<'Measure> =
int
<summary>The type of 32-bit signed integer numbers, annotated with a unit of measure. The unit
of measure is erased in compiled code and when values of this type
are analyzed using reflection. The type is representationally equivalent to
<see cref="T:System.Int32" />.</summary>
<category>Basic Types with Units of Measure</category>
Path.PathIndices: (int * int) list
type 'T list = List<'T>
<summary>The type of immutable singly-linked lists. </summary>
<remarks>See the <see cref="T:Microsoft.FSharp.Collections.ListModule" /> module for further operations related to lists.
Use the constructors <c>[]</c> and <c>::</c> (infix) to create values of this type, or
the notation <c>[1; 2; 3]</c>. Use the values in the <c>List</c> module to manipulate
values of this type, or pattern match against the values directly.
See also <a href="https://docs.microsoft.com/dotnet/fsharp/language-reference/lists">F# Language Guide - Lists</a>.
</remarks>
val findAllPaths : maxK:int -> m:Matrix<float> -> Path list
val maxK : int
val m : Matrix<float>
Multiple items
module Matrix
from FSharp.Stats
--------------------
type Matrix<'T> =
| DenseRepr of DenseMatrix<'T>
| SparseRepr of SparseMatrix<'T>
interface IEnumerable
interface IEnumerable<'T>
interface IStructuralEquatable
interface IStructuralComparable
interface IComparable
override Equals : yobj:obj -> bool
override GetHashCode : unit -> int
member GetSlice : start1:int option * finish1:int option * start2:int option * finish2:int option -> Matrix<'T>
member PermuteColumns : p:permutation -> Matrix<'T>
member PermuteRows : p:permutation -> Matrix<'T>
...
Multiple items
val float : value:'T -> float (requires member op_Explicit)
<summary>Converts the argument to 64-bit float. This is a direct conversion for all
primitive numeric types. For strings, the input is converted using <c>Double.Parse()</c>
with InvariantCulture settings. Otherwise the operation requires an appropriate
static conversion method on the input type.</summary>
<param name="value">The input value.</param>
<returns>The converted float</returns>
--------------------
[<Struct>]
type float = System.Double
<summary>An abbreviation for the CLI type <see cref="T:System.Double" />.</summary>
<category>Basic Types</category>
--------------------
type float<'Measure> =
float
<summary>The type of double-precision floating point numbers, annotated with a unit of measure.
The unit of measure is erased in compiled code and when values of this type
are analyzed using reflection. The type is representationally equivalent to
<see cref="T:System.Double" />.</summary>
<category index="6">Basic Types with Units of Measure</category>
val extendInAllPossibleDirections : (Matrix<float> -> int -> int -> Path -> Path list)
val currentRow : int
val path : Path
val lastRow : int
val lastCol : int
property List.Head: int * int with get
<summary>Gets the first element of the list</summary>
val colinearCol : int
property Matrix.NumCols: int with get
val acc' : (int * int) list
val v : float
val newV : (int * int) list
val newPaths : Path list
val matchingColumn : int
val k' : int
val x : int * int
val y : int * int
val t : (int * int) list
val snd : tuple:('T1 * 'T2) -> 'T2
<summary>Return the second element of a tuple, <c>snd (a,b) = b</c>.</summary>
<param name="tuple">The input tuple.</param>
<returns>The second value.</returns>
val loop : (Path list -> int -> Path list)
val paths : Path list
val currentRowIdx : int
property Matrix.NumRows: int with get
val expandedPaths : Path list
val collect : mapping:('T -> 'U list) -> list:'T list -> 'U list
<summary>For each element of the list, applies the given function. Concatenates all the results and return the combined list.</summary>
<param name="mapping">The function to transform each input element into a sublist to be concatenated.</param>
<param name="list">The input list.</param>
<returns>The concatenation of the transformed sublists.</returns>
val calcSimilarityAt_simple : k:int -> specA:int [] -> specB:int [] -> int
val k : int
val specA : int []
val specB : int []
val n : int
namespace System
type Math =
static member Abs : value: decimal -> decimal + 6 overloads
static member Acos : d: float -> float
static member Acosh : d: float -> float
static member Asin : d: float -> float
static member Asinh : d: float -> float
static member Atan : d: float -> float
static member Atan2 : y: float * x: float -> float
static member Atanh : d: float -> float
static member BigMul : a: int * b: int -> int64 + 2 overloads
static member BitDecrement : x: float -> float
...
<summary>Provides constants and static methods for trigonometric, logarithmic, and other common mathematical functions.</summary>
System.Math.Max(val1: uint64, val2: uint64) : uint64
(+0 other overloads)
System.Math.Max(val1: uint32, val2: uint32) : uint32
(+0 other overloads)
System.Math.Max(val1: uint16, val2: uint16) : uint16
(+0 other overloads)
System.Math.Max(val1: float32, val2: float32) : float32
(+0 other overloads)
System.Math.Max(val1: sbyte, val2: sbyte) : sbyte
(+0 other overloads)
System.Math.Max(val1: int64, val2: int64) : int64
(+0 other overloads)
System.Math.Max(val1: int, val2: int) : int
(+0 other overloads)
System.Math.Max(val1: int16, val2: int16) : int16
(+0 other overloads)
System.Math.Max(val1: float, val2: float) : float
(+0 other overloads)
System.Math.Max(val1: decimal, val2: decimal) : decimal
(+0 other overloads)
Multiple items
module Array
from FSharp.Stats
<summary>
Module to compute common statistical measure on array
</summary>
--------------------
module Array
from FSharpAux
--------------------
module Array
from Microsoft.FSharp.Collections
<summary>Contains operations for working with arrays.</summary>
<remarks>
See also <a href="https://docs.microsoft.com/dotnet/fsharp/language-reference/arrays">F# Language Guide - Arrays</a>.
</remarks>
val max : array:'T [] -> 'T (requires comparison)
<summary>Returns the greatest of all elements of the array, compared via Operators.max on the function result.</summary>
<remarks>Throws ArgumentException for empty arrays.</remarks>
<param name="array">The input array.</param>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
<exception cref="T:System.ArgumentException">Thrown when the input array is empty.</exception>
<returns>The maximum element.</returns>
val vecA : Vector<float>
val tmp : Vector<float>
Multiple items
module Vector
from FSharp.Stats
<summary>
Basic vector operations
</summary>
--------------------
type Vector<'T> =
interface IEnumerable
interface IEnumerable<'T>
interface IStructuralEquatable
interface IStructuralComparable
interface IComparable
new : opsV:INumeric<'T> option * arrV:'T array -> Vector<'T>
override Equals : yobj:obj -> bool
override GetHashCode : unit -> int
member GetSlice : start:int option * finish:int option -> Vector<'T>
member Permute : p:permutation -> Vector<'T>
...
--------------------
new : opsV:INumeric<'T> option * arrV:'T array -> Vector<'T>
val create : count:int -> value:float -> Vector<float>
<summary>
Creates vector of length count and fills it with value
</summary>
val iter : action:('T -> unit) -> array:'T [] -> unit
<summary>Applies the given function to each element of the array.</summary>
<param name="action">The function to apply.</param>
<param name="array">The input array.</param>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
val p : int
val vecB : Vector<float>
property Vector.Transpose: RowVector<float> with get
val longestPath : Path
val maxBy : projection:('T -> 'U) -> list:'T list -> 'T (requires comparison)
<summary>Returns the greatest of all elements of the list, compared via Operators.max on the function result.</summary>
<remarks>Raises <see cref="T:System.ArgumentException" /> if <c>list</c> is empty.</remarks>
<param name="projection">The function to transform the list elements into the type to be compared.</param>
<param name="list">The input list.</param>
<exception cref="T:System.ArgumentException">Thrown when the list is empty.</exception>
<returns>The maximum element.</returns>
val p : Path
val sa : int []
val sb : int []
val sc : int []
val D_1_sa_sb : int
val D_1_sa_sc : int
val sd : int []
val se : int []
val D_1_sd_se : int
val D_2_sd_se : int