func mkStructure(c *command) { c.assertNArg(2) brkFile := c.flags.Arg(0) saveto := c.flags.Arg(1) util.AssertOverwritable(saveto, flagOverwrite) brkContents, err := ioutil.ReadAll(util.OpenFile(c.flags.Arg(0))) util.Assert(err) pdbFragments := bytes.Split(brkContents, []byte("TER")) fragments := make([][]structure.Coords, 0) for i, pdbFrag := range pdbFragments { pdbFrag = bytes.TrimSpace(pdbFrag) if len(pdbFrag) == 0 { continue } fragments = append(fragments, coords(i, pdbFrag)) } libName := stripExt(path.Base(brkFile)) lib, err := fragbag.NewStructureAtoms(libName, fragments) util.Assert(err) fragbag.Save(util.CreateFile(saveto), lib) }
func mkPaired(c *command) { c.assertNArg(2) in := util.Library(c.flags.Arg(0)) outPath := c.flags.Arg(1) util.AssertOverwritable(outPath, flagOverwrite) if _, ok := in.(fragbag.WeightedLibrary); ok { util.Fatalf("%s is a weighted library (not allowed)", in.Name()) } name := fmt.Sprintf("paired-%s", in.Name()) if fragbag.IsStructure(in) { var pairs [][]structure.Coords lib := in.(fragbag.StructureLibrary) nfrags := lib.Size() for i := 0; i < nfrags; i++ { for j := 0; j < nfrags; j++ { if i == j { continue } f1, f2 := lib.Atoms(i), lib.Atoms(j) pairs = append(pairs, append(f1, f2...)) } } pairLib, err := fragbag.NewStructureAtoms(name, pairs) util.Assert(err) fragbag.Save(util.CreateFile(outPath), pairLib) } else if strings.Contains(in.Tag(), "hmm") { var pairs []*seq.HMM lib := in.(fragbag.SequenceLibrary) nfrags := lib.Size() for i := 0; i < nfrags; i++ { for j := 0; j < nfrags; j++ { if i == j { continue } f1, f2 := lib.Fragment(i).(*seq.HMM), lib.Fragment(j).(*seq.HMM) pairs = append(pairs, seq.HMMCat(f1, f2)) } } pairLib, err := fragbag.NewSequenceHMM(name, pairs) util.Assert(err) fragbag.Save(util.CreateFile(outPath), pairLib) } else if strings.Contains(in.Tag(), "profile") { util.Fatalf("Sequence profiles not implemented.") } else { util.Fatalf("Unrecognized fragment library: %s", in.Tag()) } }