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; }
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; }