Skip to content

Commit

Permalink
Fix detection of NAMD-style unit cell parameters for NAMD DCD (#1081)
Browse files Browse the repository at this point in the history
* Ensure box coords are properly reordered to what Cpptraj Box expects during NAMD dcd unit cell setup

* Start making X-align/symmetric warnings less verbose unless the debug
level demands it

* Print warnings for ensemble output

* Use new warnings

* Add check for if 'namdcell' keyword should be used. Only reorder box
elements if NAMD cell was actually detected.

* Hide debug info, improve warning messages. If unit cell has not been
user specified and strange box orthogonal skeww is detected, assume this
might be a DCD from NAMD with a non-orthogonal cell

* 6.26.0. Fix handling of NAMD DCD trajectories with non-orthogonal unit
cell information.

* Add some debug
  • Loading branch information
drroe authored May 19, 2024
1 parent 00e32c7 commit a8a6841
Show file tree
Hide file tree
Showing 15 changed files with 130 additions and 16 deletions.
3 changes: 3 additions & 0 deletions src/EnsembleOut_Multi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,15 @@ int EnsembleOut_Multi::InitEnsembleWrite(std::string const& tnameIn,
void EnsembleOut_Multi::EndEnsemble() {
//if (TrajIsOpen()) {
for (IOarrayType::const_iterator tio = ioarray_.begin(); tio != ioarray_.end(); ++tio)
{
# ifdef MPI
if (trajComm_.Size() > 1)
(*tio)->parallelCloseTraj();
else
# endif
(*tio)->closeTraj();
(*tio)->PrintWarnings( fileNames_[tio-ioarray_.begin()] );
}
// SetTrajIsOpen( false );
//}
}
Expand Down
6 changes: 5 additions & 1 deletion src/EnsembleOut_Single.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ int EnsembleOut_Single::InitEnsembleWrite(std::string const& tnameIn,
mprinterr("Internal Error: InitTrajWrite: No filename given.\n");
return 1;
}
fname_ = tnameIn;
// Require that ensemble size is set.
ensembleSize_ = ensembleSizeIn;
if (ensembleSize_ < 1) {
Expand Down Expand Up @@ -74,7 +75,10 @@ int EnsembleOut_Single::InitEnsembleWrite(std::string const& tnameIn,
// EnsembleOut_Single::EndEnsemble()
void EnsembleOut_Single::EndEnsemble() {
//if (TrajIsOpen()) {
if (eio_ != 0) eio_->closeTraj(); // Handle no init case
if (eio_ != 0) {
eio_->closeTraj(); // Handle no init case
eio_->PrintWarnings(fname_);
}
// SetTrajIsOpen(false);
//}
}
Expand Down
1 change: 1 addition & 0 deletions src/EnsembleOut_Single.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class EnsembleOut_Single : public EnsembleOut {
private:
TrajectoryIO* eio_; // TODO Make EnsembleIO
int ensembleSize_;
std::string fname_;
};
#endif
#endif
2 changes: 1 addition & 1 deletion src/Traj_AmberCoord.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ int Traj_AmberCoord::writeFrame(int set, Frame const& frameOut) {

if (numBoxCoords_ != 0) {
if (!frameOut.BoxCrd().Is_X_Aligned())
mprintf("Warning: Set %i; unit cell is not X-aligned. Box cannot be properly stored as Amber ASCII trajectory.\n", set+1);
incrementXalignWarnCount(set, "Amber ASCII trajectory");
file_.DoubleToBuffer(frameOut.BoxCrd().XyzPtr(), numBoxCoords_, outfmt_);
}

Expand Down
2 changes: 1 addition & 1 deletion src/Traj_AmberNetcdf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -447,7 +447,7 @@ int Traj_AmberNetcdf::writeFrame(int set, Frame const& frameOut) {
// Write box
if (cellLengthVID_ != -1) {
if (!frameOut.BoxCrd().Is_X_Aligned())
mprintf("Warning: Set %i; unit cell is not X-aligned. Box cannot be properly stored as Amber NetCDF trajectory.\n", set+1);
incrementXalignWarnCount(set, "Amber NetCDF trajectory");
count_[1] = 3;
count_[2] = 0;
if (NC::CheckErr(nc_put_vara_double(ncid_, cellLengthVID_, start_, count_,
Expand Down
2 changes: 1 addition & 1 deletion src/Traj_AmberRestart.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ int Traj_AmberRestart::writeFrame(int set, Frame const& frameOut) {
// Write box to buffer
if (numBoxCoords_!=0) {
if (!frameOut.BoxCrd().Is_X_Aligned())
mprintf("Warning: Set %i; unit cell is not X-aligned. Box cannot be properly stored as Amber ASCII restart.\n", set+1);
incrementXalignWarnCount(set, "Amber ASCII restart");
file_.DoubleToBuffer(frameOut.BoxCrd().XyzPtr(), numBoxCoords_, "%12.7f");
}

Expand Down
2 changes: 1 addition & 1 deletion src/Traj_AmberRestartNC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ int Traj_AmberRestartNC::writeFrame(int set, Frame const& frameOut) {
// write box
if (cellLengthVID_ != -1) {
if (!frameOut.BoxCrd().Is_X_Aligned())
mprintf("Warning: Set %i; unit cell is not X-aligned. Box cannot be properly stored as Amber NetCDF restart.\n", set+1);
incrementXalignWarnCount(set, "Amber NetCDF restart");
count_[0] = 3;
count_[1] = 0;
if (NC::CheckErr(nc_put_vara_double(ncid_,cellLengthVID_,start_,count_,frameOut.BoxCrd().XyzPtr())))
Expand Down
58 changes: 53 additions & 5 deletions src/Traj_CharmmDcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -375,8 +375,7 @@ int Traj_CharmmDcd::readDcdHeader() {
if (charmmCellType_ != UNKNOWN) {
// Box info type was specified by option.
if (buffer.i[19] >= 22 && charmmCellType_ != SHAPE)
mprintf("Warning: CHARMM version is >= 22 but 'shape' not specified.\n"
"Warning: Assuming box info is stored as unit cell and not shape matrix.\n");
mprintf("Warning: CHARMM version is >= 22 but an option other than 'shape' was specified.\n");
}
} else
boxBytes_ = 0;
Expand Down Expand Up @@ -470,6 +469,7 @@ int Traj_CharmmDcd::setupBox(double* boxtmp) {
file_.Read(boxtmp, sizeof(double)*6);
if (isBigEndian_) endian_swap8(boxtmp,6);
if ( ReadBlock(-1) < 0) return 1;
if (debug_ > 0) mprintf("DEBUG: Raw box values: %g %g %g %g %g %g\n", boxtmp[0], boxtmp[1], boxtmp[2], boxtmp[3], boxtmp[4], boxtmp[5]);
// Test shape matrix
if (charmmCellType_ == UNKNOWN || charmmCellType_ == SHAPE) {
int nIssues = 0;
Expand All @@ -478,6 +478,31 @@ int Traj_CharmmDcd::setupBox(double* boxtmp) {
for (int i = 0; i < 6; i++) shape[i] = 0;
Box::CheckType check;
testBox.SetupFromShapeMatrix( boxtmp, check );
// NAMD stores a pseudo-shape matrix that fails for non-orthogonal cells.
// Check if a non-orthogonal cell has angles close to but not quite 90 deg.
Box::CellShapeType boxShape = testBox.CellShape();
if (boxShape != Box::CUBIC && boxShape != Box::TETRAGONAL && boxShape != Box::ORTHORHOMBIC) {
if (debug_ > 0) testBox.PrintDebug("DCD Shape Matrix Check"); // DEBUG
double deltaA = fabs( 90.0 - testBox.Param(Box::ALPHA) );
double deltaB = fabs( 90.0 - testBox.Param(Box::BETA) );
double deltaG = fabs( 90.0 - testBox.Param(Box::GAMMA) );
if ( deltaA > Constants::SMALL && deltaA < 1.0 &&
deltaB > Constants::SMALL && deltaB < 1.0 &&
deltaG > Constants::SMALL && deltaG < 1.0 )
{
if (charmmCellType_ != UNKNOWN) {
mprintf("Warning: Cell is non-orthogonal but all angles from the symmetric shape\n"
"Warning: matrix are close to 90 deg (%g %g %g).\n",
testBox.Param(Box::ALPHA), testBox.Param(Box::BETA), testBox.Param(Box::GAMMA));
mprintf("Warning: If this trajectory is from NAMD with a non-orthogonal cell\n"
"Warning: the 'namdcell' option must be used since NAMD does not store\n"
"Warning: the actual symmetric shape matrix.\n");
} else {
// User has not specified box; this is likely a NAMD DCD with non-orthogonal cell
check = Box::BOX_IS_SKEWED;
}
}
}
if (check != Box::BOX_OK) {
nIssues = 1;
} else {
Expand Down Expand Up @@ -513,6 +538,14 @@ int Traj_CharmmDcd::setupBox(double* boxtmp) {
}
// Test NAMD unit cell
if (charmmCellType_ == UNKNOWN || charmmCellType_ == NAMD) {
//mprintf("DEBUG: NAMD unit cell test, celltype %i\n", (int)charmmCellType_);
// Expect that values are stored as X, gamma, Y, beta, alpha, Z
// 0 1 2 3 4 5
// Will need to resort them as expected by Box (X Y Z alpha beta gamma)
double newbox[6];
newbox[0] = boxtmp[0];
newbox[1] = boxtmp[2];
newbox[2] = boxtmp[5];
// Since NAMD stores the box angles as cos(angle), determine if the angle values are bounded between -1 and 1.
if ( boxtmp[4] >= -1 && boxtmp[4] <= 1 &&
boxtmp[3] >= -1 && boxtmp[3] <= 1 &&
Expand All @@ -521,9 +554,23 @@ int Traj_CharmmDcd::setupBox(double* boxtmp) {
if (charmmCellType_ == UNKNOWN)
mprintf("\tNAMD unit cell detected.\n");
charmmCellType_ = NAMD;
// Convert the angles back to degrees
newbox[3] = CosRadToDeg( boxtmp[4] );
newbox[4] = CosRadToDeg( boxtmp[3] );
newbox[5] = CosRadToDeg( boxtmp[1] );
if (debug_ > 0) mprintf("DEBUG: angles in degrees: %g %g %g\n", newbox[3], newbox[4], newbox[5]);
} else if (charmmCellType_ == NAMD) {
mprintf("Warning: NAMD unit cell specified but cos(angle) values not bounded by -1, 1\n",
"Warning: Values: %g %g %g\n", boxtmp[4], boxtmp[3], boxtmp[1]);
// Assume the angles are already in degrees
newbox[3] = boxtmp[4];
newbox[4] = boxtmp[3];
newbox[5] = boxtmp[1];
}
if (charmmCellType_ == NAMD) {
// Set with re-ordered (and possibly converted) values
for (int i = 0; i < 6; i++)
boxtmp[i] = newbox[i];
}
}
// Test CHARMM unit cell
Expand All @@ -539,7 +586,7 @@ int Traj_CharmmDcd::setupBox(double* boxtmp) {
charmmCellType_ = CHARMM;
} else if (charmmCellType_ == CHARMM) {
mprintf("Warning: CHARMM unit cell specified but bad box values detected.\n"
"Warning: Box values : %g %g %g %g %g %g\n",
"Warning: Box values (XYZ, ABG) : %g %g %g Ang., %g %g %g deg.\n",
boxtmp[0], boxtmp[1], boxtmp[2], boxtmp[3], boxtmp[4], boxtmp[5]);
}
}
Expand All @@ -565,6 +612,7 @@ int Traj_CharmmDcd::ReadBox(double* boxtmp) {
if (isBigEndian_) endian_swap8(boxtmp,6);
if ( ReadBlock(-1) < 0) return 1;
if (charmmCellType_ == NAMD) {
// Expect that values are stored as X, gamma, Y, beta, alpha, Z
// Box lengths
double box[6];
box[0] = boxtmp[0];
Expand Down Expand Up @@ -870,7 +918,7 @@ int Traj_CharmmDcd::writeFrame(int set, Frame const& frameOut) {
double boxtmp[6];
if (charmmCellType_ == SHAPE) {
if (!frameOut.BoxCrd().Is_Symmetric())
mprintf("Warning: Set %i; unit cell is not symmetric. Box cannot be properly stored as Charmm DCD.\n", set+1);
incrementSymmetricWarnCount(set, "Charmm DCD");
//frameOut.BoxCrd().GetSymmetricShapeMatrix( boxtmp );
Matrix_3x3 const& ucell = frameOut.BoxCrd().UnitCell();
boxtmp[0] = ucell[0]; // XX
Expand All @@ -881,7 +929,7 @@ int Traj_CharmmDcd::writeFrame(int set, Frame const& frameOut) {
boxtmp[5] = ucell[8]; // ZZ
} else {
if (!frameOut.BoxCrd().Is_X_Aligned())
mprintf("Warning: Set %i; unit cell is not X-aligned. Box cannot be properly stored as Charmm DCD.\n", set+1);
incrementXalignWarnCount(set, "Charmm DCD");
if (charmmCellType_ == NAMD) {
/* The format for the 'box' array used in cpptraj is not the same as the
* one used for NAMD dcd files. Refer to the reading routine above
Expand Down
2 changes: 1 addition & 1 deletion src/Traj_NcEnsemble.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ int Traj_NcEnsemble::writeArray(int set, FramePtrArray const& Farray) {
// Write box
if (cellLengthVID_ != -1) {
if (!frm->BoxCrd().Is_X_Aligned())
mprintf("Warning: Set %i; unit cell is not X-aligned. Box cannot be properly stored as Amber NetCDF ensemble.\n", set+1);
incrementXalignWarnCount(set,"Amber NetCDF ensemble");
count_[2] = 3;
# ifdef HAS_PNETCDF
if (ncmpi_put_vara_double_all(ncid_,cellLengthVID_,start_,count_,frm->BoxCrd().XyzPtr()))
Expand Down
2 changes: 1 addition & 1 deletion src/Traj_PDBfile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -837,7 +837,7 @@ void Traj_PDBfile::WriteBonds() {
void Traj_PDBfile::writeBox(int set, Box const& box) {
if (write_cryst1_) {
if (!box.Is_X_Aligned())
mprintf("Warning: Set %i; unit cell is not X-aligned. Box cannot be properly stored in PDB CRYST1.\n", set+1);
incrementXalignWarnCount(set, "PDB CRYST1");
file_.WriteCRYST1( box.XyzPtr(), space_group_.c_str() );
}
}
Expand Down
45 changes: 45 additions & 0 deletions src/TrajectoryIO.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,49 @@
#include "TrajectoryIO.h"
#include "CpptrajStdio.h"

/** CONSTRUCTOR */
TrajectoryIO::TrajectoryIO() :
debug_(0),
nwarn_cell_not_xaligned_(0),
nwarn_cell_not_symmetric_(0)
{}

/** Increment count of frames where it is an issue that the
* unit cell is not X-aligned. Print a warning only the
* first time.
*/
void TrajectoryIO::incrementXalignWarnCount(int set, const char* desc) {
if (nwarn_cell_not_xaligned_ == 0 || debug_ > 0)
mprintf("Warning: Set %i; unit cell is not X-aligned. Box cannot be properly stored as %s.\n", set+1, desc);
nwarn_cell_not_xaligned_++;
}

/** Increment count of frames where it is an issue that the
* unit cell is not symmetric. Print a warning only the
* first time.
*/
void TrajectoryIO::incrementSymmetricWarnCount(int set, const char* desc) {
if (nwarn_cell_not_symmetric_ == 0 || debug_ > 0)
mprintf("Warning: Set %i; unit cell is not symmetric. Box cannot be properly stored as %s.\n", set+1, desc);
nwarn_cell_not_symmetric_++;
}

/** Print any warnings. Ideally called just before or just after closeTraj() */
void TrajectoryIO::PrintWarnings(std::string const& fname) {
if (nwarn_cell_not_xaligned_ > 0) {
mprintf("Warning: %s: unit cell was not X-aligned for %u frames.\n", fname.c_str(), nwarn_cell_not_xaligned_);
mprintf("Warning: This trajectory format expects unit cells to be X-aligned,\n"
"Warning: so the unit cell orientation may not be correct.\n");
}
if (nwarn_cell_not_symmetric_ > 0) {
mprintf("Warning: %s: unit cell axes were not symmetric for %u frames.\n", fname.c_str(), nwarn_cell_not_symmetric_);
mprintf("Warning: This trajectory format expects unit cell info to be symmetric,\n"
"Warning: so the unit cell orientation may not be correct.\n");
}
nwarn_cell_not_xaligned_ = 0;
nwarn_cell_not_symmetric_ = 0;
}

#ifdef MPI
/** Broadcast trajectory IO info from master. */
int TrajectoryIO::BroadcastTrajIO(Parallel::Comm const& commIn) {
Expand Down
16 changes: 14 additions & 2 deletions src/TrajectoryIO.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ class FrameArray;
*/
class TrajectoryIO : public BaseIOtype {
public:
TrajectoryIO() : debug_(0) {}
virtual ~TrajectoryIO() {} // virtual since this class is inherited.
/// CONSTRUCTOR
TrajectoryIO();
/// DESTRUCTOR - virtual since this class is inherited.
virtual ~TrajectoryIO() {}
// -----------===== Inherited functions =====-----------
/// \return true if file format matches trajectory type.
virtual bool ID_TrajFormat(CpptrajFile&) = 0;
Expand Down Expand Up @@ -105,13 +107,21 @@ class TrajectoryIO : public BaseIOtype {
virtual void parallelCloseTraj() { return ; }
# endif
// -----------------------------------------------------
/// Print any warnings. Resets warning counts.
void PrintWarnings(std::string const&);

CoordinateInfo const& CoordInfo() const { return coordInfo_; }
std::string const& Title() const { return title_; }

void SetDebug(int dIn) { debug_ = dIn; }
void SetTitle(std::string const& tIn) { title_ = tIn; }
protected:
void SetCoordInfo(CoordinateInfo const& cIn) { coordInfo_ = cIn; }
/// Increment X-align warn count
void incrementXalignWarnCount(int, const char*);
/// Increment symmetric warn count
void incrementSymmetricWarnCount(int, const char*);

int debug_; ///< Trajectory debug level.
# ifdef MPI
/// Broadcast coordinate info etc. to non-master processes
Expand All @@ -120,5 +130,7 @@ class TrajectoryIO : public BaseIOtype {
private:
CoordinateInfo coordInfo_; ///< Metadata associated with coordinate Frame
std::string title_; ///< Set to trajectory title.
unsigned int nwarn_cell_not_xaligned_; ///< Count of frames where unit cell is not X-aligned
unsigned int nwarn_cell_not_symmetric_; ///< Count of frames where unit cell is not symmetric
};
#endif
1 change: 1 addition & 0 deletions src/Trajout_Single.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ void Trajout_Single::EndTraj() {
else
# endif
trajio_->closeTraj();
trajio_->PrintWarnings(traj_.Filename().Base());
}
// SetTrajIsOpen(false);
//}
Expand Down
2 changes: 1 addition & 1 deletion src/Version.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* Whenever a number that precedes <revision> is incremented, all subsequent
* numbers should be reset to 0.
*/
#define CPPTRAJ_INTERNAL_VERSION "V6.25.3"
#define CPPTRAJ_INTERNAL_VERSION "V6.26.0"
/// PYTRAJ relies on this
#define CPPTRAJ_VERSION_STRING CPPTRAJ_INTERNAL_VERSION
#endif
2 changes: 1 addition & 1 deletion src/cpptrajdepend
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,7 @@ Traj_SQM.o : Traj_SQM.cpp ArgList.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Bo
Traj_Tinker.o : Traj_Tinker.cpp Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h BufferedLine.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h Frame.h FramePtrArray.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h TinkerFile.h Topology.h Traj_Tinker.h TrajectoryIO.h TypeNameHolder.h Unit.h Vec3.h
Traj_XYZ.o : Traj_XYZ.cpp ArgList.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h BufferedLine.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h Frame.h FramePtrArray.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Topology.h Traj_XYZ.h TrajectoryIO.h TypeNameHolder.h Unit.h Vec3.h
TrajectoryFile.o : TrajectoryFile.cpp Atom.h BaseIOtype.h Box.h BufferedFrame.h BufferedLine.h CIFfile.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h FileIO.h FileName.h FileTypes.h FramePtrArray.h Matrix_3x3.h Mol2File.h NC_Routines.h NameType.h NetcdfFile.h PDBfile.h Parallel.h ReplicaDimArray.h Residue.h SDFfile.h SymbolExporting.h TextFormat.h TinkerFile.h Traj_AmberCoord.h Traj_AmberNetcdf.h Traj_AmberRestart.h Traj_AmberRestartNC.h Traj_Binpos.h Traj_CIF.h Traj_CharmmCor.h Traj_CharmmDcd.h Traj_CharmmRestart.h Traj_Conflib.h Traj_DTR.h Traj_GmxDump.h Traj_GmxTng.h Traj_GmxTrX.h Traj_GmxXtc.h Traj_Gro.h Traj_H5.h Traj_H5MD.h Traj_Mol2File.h Traj_NcEnsemble.h Traj_PDBfile.h Traj_SDF.h Traj_SQM.h Traj_Tinker.h Traj_XYZ.h TrajectoryFile.h TrajectoryIO.h Vec3.h
TrajectoryIO.o : TrajectoryIO.cpp BaseIOtype.h Box.h CoordinateInfo.h FramePtrArray.h Matrix_3x3.h Parallel.h ReplicaDimArray.h TrajectoryIO.h Vec3.h
TrajectoryIO.o : TrajectoryIO.cpp BaseIOtype.h Box.h CoordinateInfo.h CpptrajStdio.h FramePtrArray.h Matrix_3x3.h Parallel.h ReplicaDimArray.h TrajectoryIO.h Vec3.h
TrajinList.o : TrajinList.cpp ArgList.h AssociatedData.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajFile.h CpptrajStdio.h DataSet.h DataSet_RemLog.h Dimension.h EnsembleIn.h EnsembleIn_Multi.h EnsembleIn_Single.h FileIO.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h MetaData.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h TextFormat.h Timer.h Topology.h TrajFrameCounter.h TrajIOarray.h TrajectoryFile.h TrajectoryIO.h Trajin.h TrajinList.h Trajin_Multi.h Trajin_Single.h TypeNameHolder.h Unit.h Vec3.h
Trajin_Multi.o : Trajin_Multi.cpp ArgList.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h ReplicaInfo.h Residue.h Segment.h StringRoutines.h SymbolExporting.h Topology.h TrajFrameCounter.h TrajIOarray.h TrajectoryIO.h Trajin.h Trajin_Multi.h TypeNameHolder.h Unit.h Vec3.h
Trajin_Single.o : Trajin_Single.cpp ArgList.h Atom.h AtomMask.h AtomType.h BaseIOtype.h Box.h Constants.h CoordinateInfo.h CpptrajStdio.h FileName.h FileTypes.h Frame.h FramePtrArray.h InputTrajCommon.h MaskToken.h Matrix_3x3.h Molecule.h NameType.h Parallel.h ParameterHolders.h ParameterSet.h ParameterTypes.h Range.h ReplicaDimArray.h Residue.h Segment.h SymbolExporting.h Topology.h TrajFrameCounter.h TrajectoryFile.h TrajectoryIO.h Trajin.h Trajin_Single.h TypeNameHolder.h Unit.h Vec3.h
Expand Down

0 comments on commit a8a6841

Please sign in to comment.