Beispiel #1
0
// Action_Esander::DoAction()
Action::RetType Action_Esander::DoAction(int frameNum, ActionFrame& frm) {
  if (refFrame_.empty()) {
    refFrame_ = frm.Frm();
    if ( InitForRef() ) return Action::ERR;
  }
  if (save_forces_) {
    newFrame_.SetCoordAndBox( frm.Frm() );
    SANDER_.CalcEnergyForces( newFrame_ );
    frm.SetFrame( &newFrame_ );
  } else
    // FIXME: Passing in ModifyFrm() to give CalcEnergy access to non-const pointers
    SANDER_.CalcEnergy( frm.ModifyFrm() );

  for (int ie = 0; ie != (int)Energy_Sander::N_ENERGYTYPES; ie++) {
    if (Esets_[ie] != 0)
      Esets_[ie]->Add(frameNum, SANDER_.Eptr((Energy_Sander::Etype)ie));
  }

  return ret_;
}
Beispiel #2
0
/** Modify the current frame based on the atom map.
  */
Action::RetType Action_AtomMap::DoAction(int frameNum, ActionFrame& frm) {
    if (maponly_) return Action::OK;

    // Perform RMS fit on mapped atoms only
    if (rmsfit_) {
        // Set target frame up according to atom map.
        rmsTgtFrame_.ModifyByMap(frm.Frm(), AMap_);
        Matrix_3x3 Rot;
        Vec3 Trans, refTrans;
        double R = rmsTgtFrame_.RMSD(rmsRefFrame_, Rot, Trans, refTrans, false);
        frm.ModifyFrm().Trans_Rot_Trans(Trans, Rot, refTrans);
        if (rmsdata_!=0)
            rmsdata_->Add(frameNum, &R);
        return Action::OK;
    }

    // Modify the current frame
    // TODO: Fix this since its probably busted for unmapped atoms
    newFrame_->SetCoordinatesByMap(frm.Frm(), AMap_);
    frm.SetFrame( newFrame_ );
    return Action::MODIFY_COORDS;
}
// Action_SymmetricRmsd::DoAction()
Action::RetType Action_SymmetricRmsd::DoAction(int frameNum, ActionFrame& frm) {
  // Perform any needed reference actions
  REF_.ActionRef( frm.Frm(), SRMSD_.Fit(), SRMSD_.UseMass() );
  // Calculate symmetric RMSD
  selectedTgt_.SetCoordinates( frm.Frm(), tgtMask_ );
  double rmsdval = SRMSD_.SymmRMSD_CenteredRef( selectedTgt_, REF_.SelectedRef() );
  rmsd_->Add(frameNum, &rmsdval);
  if (remap_) {
    // Now re-map the target frame
    for (int atom = 0; atom < (int)targetMap_.size(); atom++)
      targetMap_[atom] = atom;
    SymmetricRmsdCalc::Iarray const& AMap = SRMSD_.AMap();
    for (unsigned int ref = 0; ref < AMap.size(); ++ref)
      targetMap_[ tgtMask_[ref] ] = tgtMask_[AMap[ref]];
    remapFrame_.SetCoordinatesByMap( frm.Frm(), targetMap_ );
    frm.SetFrame( &remapFrame_ );
  }
  if ( SRMSD_.Fit() )
    frm.ModifyFrm().Trans_Rot_Trans( SRMSD_.TgtTrans(), SRMSD_.RotMatrix(), REF_.RefTrans() );

  return action_return_;
}