package obingslibrary import ( "git.metabarcoding.org/lecasofts/go/obitools/pkg/obiapat" "git.metabarcoding.org/lecasofts/go/obitools/pkg/obiseq" ) type PrimerPair struct { Forward string Reverse string } type TagPair struct { Forward string Reverse string } type PCR struct { Experiment string Sample string Partial bool Annotations obiseq.Annotation } type Marker struct { forward obiapat.ApatPattern cforward obiapat.ApatPattern reverse obiapat.ApatPattern creverse obiapat.ApatPattern taglength int samples map[TagPair]*PCR } type NGSLibrary map[PrimerPair]*Marker func MakeNGSLibrary() NGSLibrary { return make(NGSLibrary, 10) } func (library *NGSLibrary) GetMarker(forward, reverse string) (*Marker, bool) { pair := PrimerPair{forward, reverse} marker, ok := (*library)[pair] if ok { return marker, true } m := Marker{samples: make(map[TagPair]*PCR, 1000)} (*library)[pair] = &m return &m, false } func (marker *Marker) GetPCR(forward, reverse string) (*PCR, bool) { pair := TagPair{forward, reverse} pcr, ok := marker.samples[pair] if ok { return pcr, ok } ipcr := PCR{} marker.samples[pair] = &ipcr return &ipcr, false }