/*! \brief Finds peaks or valleys in a vasp. \param arg argument list \param arg.rep repetition count \param dst destination vasp (NULL for in-place operation) \param inv true for valley operation \return normalized destination vasp */ Vasp *VaspOp::m_peaks(OpParam &p,CVasp &src,CVasp *dst,BL inv) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); if(vecs) { p.peaks.cx = false; ret = DoOp(vecs,inv?d_valleys:d_peaks,p); delete vecs; } return ret; }
Vasp *VaspOp::m_copy(OpParam &p,CVasp &src,CVasp &arg) { Vasp *s = NULL,*d = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,&arg); if(vecs) { d = DoOp(vecs,VecOp::d_copy,p); s = vecs->SrcVasp(); if(d) arg = *d; else { arg.Clear(); delete d; } delete vecs; } return s; }
/*! \brief Does vasp resampling. \param arg argument list \param arg.factor factor for resampling \param arg.center center of resampling \param dst destination vasp (NULL for in-place operation) \param symm true for symmetric operation \param mode interpolation mode \return normalized destination vasp */ Vasp *VaspOp::m_tilt(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL symm) { Vasp *ret = NULL; if(arg.IsList() && arg.GetList().Count() >= 1) { RVecBlock *vecs = GetRVecs(p.opname,src,dst); if(vecs) { p.tilt.factor = flext::GetAFloat(arg.GetList()[0]); p.tilt.center = arg.GetList().Count() >= 2?flext::GetAFloat(arg.GetList()[1]):0; ret = DoOp(vecs,VecOp::d_tilt,p,symm); delete vecs; } } else post("%s - no arguments: no operation",p.opName()); return ret; }
/*! \brief vasp shift or rotation \todo units for shift */ Vasp *VaspOp::m_shift(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL shift,BL symm) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); if(vecs) { if(arg.IsList() && arg.GetList().Count() >= 1 && flext::CanbeFloat(arg.GetList()[0])) { // shift length p.sh.sh = flext::GetAFloat(arg.GetList()[0]); } else { post("%s - invalid argument -> set to 0",p.opname); p.sh.sh = 0; } ret = DoOp(vecs,shift?VecOp::d_shift:VecOp::d_rot,p,symm); delete vecs; } return ret; }