Beispiel #1
0
Sample& Sample::cut() {

    int newLength = fxIStart + length - fxIEnd;
    setBufferMinLength(newLength);

    copyToBuffer(*this, 0, 0, fxIStart);
    copyToBuffer(*this, fxIEnd, fxIStart, length - fxIEnd);

    length = newLength;
    dataL = new double[length];
    dataR = new double[length];

    copyFromBuffer(*this, 0, 0, length);

    fxRangeReset();

    return *this;
}
Beispiel #2
0
bool MultiChain::read(hid_t grp){

  hid_t hgrp = H5Gopen(grp,"MultiChain");

  int m_version=1;
  HDFAttribIO<int> v(m_version);
  v.read(hgrp,"Version");

  int nc(0);
  HDFAttribIO<int> c(nc);
  c.read(hgrp,"NumberOfBeads");
  if(nc != Beads.size()) {
    WARNMSG("The number of chains is different. Previous = "  << nc << " Current = " << Beads.size())
  }

  typedef Bead::RealType PosType;
  typedef Bead::Buffer_t Buffer_t;

  Buffer_t chain_buffer,bead_buffer;
  (*(this->begin()))->registerData(bead_buffer);

  HDFAttribIO<int> c2(nc);
  c2.read(hgrp,"BufferSize");
  if(nc != bead_buffer.size()) {
    ERRORMSG("The buffer size is different. Ignore restart data")
        H5Gclose(hgrp);
    return false;
  }

  chain_buffer.rewind();
  copyToBuffer(chain_buffer);

  HDFAttribIO<Buffer_t> mcin(chain_buffer);
  mcin.read(hgrp,"state");
  chain_buffer.rewind();
  copyFromBuffer(chain_buffer);

  std::deque<Bead*>::iterator bead_it(this->begin());
  std::deque<Bead*>::iterator bead_end(this->end());
  //create the group and increment counter
  char GrpName[128];
  int ibead=0;
  while(bead_it != bead_end) {
    sprintf(GrpName,"bead%04d",ibead);
    hid_t bead_id = H5Gopen(hgrp,GrpName);

    Bead& bead(**bead_it);

    HDFAttribIO<Buffer_t> bout(bead_buffer);
    bout.read(bead_id,"state");

    bead_buffer.rewind();
    bead.copyFromBuffer(bead_buffer);

    H5Gclose(bead_id);
    ++bead_it;
    ++ibead;
  }

  H5Gclose(hgrp);

  return true;
}