// Action_CreateReservoir::DoAction()
Action::RetType Action_CreateReservoir::DoAction(int frameNum, ActionFrame& frm) {
  int bin = -1;
  if (bin_ != 0) bin = (int)bin_->Dval(frm.TrajoutNum());
  if (reservoir_.WriteReservoir(nframes_++, frm.Frm(), ene_->Dval(frm.TrajoutNum()), bin))
    return Action::ERR;
  return Action::OK;
}
Esempio n. 2
0
/** If a dataset was specified for maxmin, check if this structure
  * satisfies the criteria; if so, write. Otherwise just write.
  */
Action::RetType Action_Outtraj::DoAction(int frameNum, ActionFrame& frm) {
  // If dataset defined, check if frame is within max/min
  if (!Dsets_.empty()) {
    for (unsigned int ds = 0; ds < Dsets_.size(); ++ds)
    {
      double dVal = Dsets_[ds]->Dval(frameNum);
      //mprintf("DBG: maxmin[%u]: dVal = %f, min = %f, max = %f\n",ds,dVal,Min_[ds],Max_[ds]);
      // If value from dataset not within min/max, exit now.
      if (dVal < Min_[ds] || dVal > Max_[ds]) return Action::OK;
    }
  }
  if (outtraj_.WriteSingle(frm.TrajoutNum(), frm.Frm())) return Action::ERR;
  return Action::OK;
}
Esempio n. 3
0
// Action_FilterByData::DoAction()
Action::RetType Action_FilterByData::DoAction(int frameNum, ActionFrame& frm)
{
  static int ONE = 1;
  static int ZERO = 0;
  // Check if frame is within max/min
  for (unsigned int ds = 0; ds < Dsets_.size(); ++ds)
  {
    double dVal = Dsets_[ds]->Dval(frm.TrajoutNum());
    //mprintf("DBG: maxmin[%u]: dVal = %f, min = %f, max = %f\n",ds,dVal,Min_[ds],Max_[ds]);
    // If value from dataset not within min/max, exit now.
    if (dVal < Min_[ds] || dVal > Max_[ds]) {
      maxmin_->Add( frameNum, &ZERO );
      return Action::SUPPRESS_COORD_OUTPUT;
    }
  }
  maxmin_->Add( frameNum, &ONE );
  return Action::OK;
}
Esempio n. 4
0
// Action_Matrix::DoAction()
Action::RetType Action_Matrix::DoAction(int frameNum, ActionFrame& frm) {
  // Check if this frame should be processed
  if ( CheckFrameCounter( frm.TrajoutNum() ) ) return Action::OK;
  // Increment number of snapshots
  Mat_->IncrementSnapshots();

  switch (Mat_->Meta().ScalarType()) {
    case MetaData::DIST     : CalcDistanceMatrix(frm.Frm()); break;
    case MetaData::COVAR    :
    case MetaData::MWCOVAR  : CalcCovarianceMatrix(frm.Frm()); break;
    case MetaData::CORREL   : CalcCorrelationMatrix(frm.Frm()); break;
    case MetaData::DIHCOVAR : CalcDihedralCovariance(frameNum); break;
    case MetaData::DISTCOVAR: CalcDistanceCovarianceMatrix(frm.Frm()); break;
    case MetaData::IDEA     : CalcIdeaMatrix(frm.Frm()); break;
    case MetaData::IREDMAT  : CalcIredMatrix(frameNum); break;
    default: return Action::ERR; // Sanity check
  }

  return Action::OK;
}
Esempio n. 5
0
// Action_ReplicateCell::DoAction()
Action::RetType Action_ReplicateCell::DoAction(int frameNum, ActionFrame& frm) {
  int idx, newFrameIdx;
  unsigned int id;
  Vec3 frac, t2;

  frm.Frm().BoxCrd().ToRecip(ucell_, recip_);
  int shift = Mask1_.Nselected() * 3;
# ifdef _OPENMP
# pragma omp parallel private(idx, newFrameIdx, id) firstprivate(frac, t2)
  {
# pragma omp for
# endif
  for (idx = 0; idx < Mask1_.Nselected(); idx++) {
    // Convert to fractional coords
    frac = recip_ * Vec3(frm.Frm().XYZ( Mask1_[idx] ));
    //mprintf("DEBUG: Atom %i frac={ %g %g %g }\n", Mask1_[idx]+1, frac[0], frac[1], frac[2]);
    // replicate in each direction
    newFrameIdx = idx * 3;
    for (id = 0; id != directionArray_.size(); id+=3, newFrameIdx += shift)
    {
       // Convert back to Cartesian coords.
       t2 = ucell_.TransposeMult(frac + Vec3(directionArray_[id  ],
                                             directionArray_[id+1],
                                             directionArray_[id+2]));
       combinedFrame_[newFrameIdx  ] = t2[0];
       combinedFrame_[newFrameIdx+1] = t2[1];
       combinedFrame_[newFrameIdx+2] = t2[2];
    }
  }
# ifdef _OPENMP
  }
# endif
  if (writeTraj_) {
    if (outtraj_.WriteSingle(frm.TrajoutNum(), combinedFrame_) !=0 )
      return Action::ERR;
  }
  if (coords_ != 0)
    coords_->AddFrame( combinedFrame_ );
  
  return Action::OK;
}