func (pl *Prjns) SendNameTry(sender string) (Prjn, error) {
	for _, pj := range *pl {
		if pj.SendLay().Name() == sender {
			return pj, nil
		}
	}
	return nil, fmt.Errorf("sending layer: %v not found in list of projections", sender)
}
SendNameTry finds the projection with given send layer name.
returns error message if not found
package emer
import (
	"fmt"
	"io"
	"github.com/emer/emergent/params"
	"github.com/emer/emergent/prjn"
	"github.com/emer/emergent/weights"
	"github.com/goki/ki/kit"
)
type Prjn interface {
	params.Styler  
	Init(prjn Prjn)
	SendLay() Layer
	RecvLay() Layer
	Pattern() prjn.Pattern
	SetPattern(pat prjn.Pattern) Prjn
	Type() PrjnType
	SetType(typ PrjnType) Prjn
	PrjnTypeName() string
	Connect(send, recv Layer, pat prjn.Pattern, typ PrjnType)
	SetClass(cls string) Prjn
	Label() string
	IsOff() bool
	SetOff(off bool)
	SynVarNames() []string
	SynVarProps() map[string]string
	SynIdx(sidx, ridx int) int
	SynVarIdx(varNm string) (int, error)
	SynVarNum() int
	SynVal1D(varIdx int, synIdx int) float32
	SynVals(vals *[]float32, varNm string) error
	SynVal(varNm string, sidx, ridx int) float32
	SetSynVal(varNm string, sidx, ridx int, val float32) error
	Defaults()
	UpdateParams()
	ApplyParams(pars *params.Sheet, setMsg bool) (bool, error)
	NonDefaultParams() string
	AllParams() string
	WriteWtsJSON(w io.Writer, depth int)
	ReadWtsJSON(r io.Reader) error
	SetWts(pw *weights.Prjn) error
	Build() error
}
type Prjns []Prjn
func (pl *Prjns) ElemLabel(idx int) string {
	if len(*pl) == 0 {
		return "(empty)"
	}
	if idx < 0 || idx >= len(*pl) {
		return ""
	}
	pj := (*pl)[idx]
	if kit.IfaceIsNil(pj) {
		return "nil"
	}
	return pj.Name()
}
func (pl *Prjns) Add(p Prjn) {
	(*pl) = append(*pl, p)
}
func (pl *Prjns) Send(send Layer) (Prjn, bool) {
	for _, pj := range *pl {
		if pj.SendLay() == send {
			return pj, true
		}
	}
	return nil, false
}
func (pl *Prjns) Recv(recv Layer) (Prjn, bool) {
	for _, pj := range *pl {
		if pj.RecvLay() == recv {
			return pj, true
		}
	}
	return nil, false
}
func (pl *Prjns) SendName(sender string) Prjn {
	pj, _ := pl.SendNameTry(sender)
	return pj
}
func (pl *Prjns) RecvName(recv string) Prjn {
	pj, _ := pl.RecvNameTry(recv)
	return pj
}