FibreWriter.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "FibreWriter.hpp"
00037 #include "Version.hpp"
00038
00039 template<unsigned DIM>
00040 FibreWriter<DIM>::FibreWriter(const std::string& rDirectory,
00041 const std::string& rBaseName,
00042 const bool clearOutputDir)
00043 : mBaseName(rBaseName),
00044 mFileIsBinary(false)
00045 {
00046 mpOutputFileHandler = new OutputFileHandler(rDirectory, clearOutputDir);
00047 }
00048
00049 template<unsigned DIM>
00050 FibreWriter<DIM>::~FibreWriter()
00051 {
00052 delete mpOutputFileHandler;
00053 }
00054
00055 template<unsigned DIM>
00056 void FibreWriter<DIM>::WriteAllAxi(const std::vector< c_vector<double, DIM> >& fibres)
00057 {
00058
00059 out_stream p_axi_file = OpenFileAndWriteHeader(this->mBaseName + ".axi", fibres.size());
00060
00061
00062 for (unsigned i=0; i<fibres.size();i++ )
00063 {
00064 if (this->mFileIsBinary)
00065 {
00066 p_axi_file->write((char*)&fibres[i][0], DIM*sizeof(double));
00067 }
00068 else
00069 {
00070 for(unsigned j=0; j<DIM; j++)
00071 {
00072 *p_axi_file << fibres[i][j] << "\t";
00073 }
00074 *p_axi_file <<"\n";
00075 }
00076 }
00077 *p_axi_file << "#\n# " << ChasteBuildInfo::GetProvenanceString();
00078 p_axi_file->close();
00079 }
00080
00081 template<unsigned DIM>
00082 void FibreWriter<DIM>::WriteAllOrtho(const std::vector< c_vector<double, DIM> >& fibres,
00083 const std::vector< c_vector<double, DIM> >& second,
00084 const std::vector< c_vector<double, DIM> >& third)
00085 {
00086 assert(fibres.size() == second.size());
00087 assert(second.size() == third.size());
00088
00089 out_stream p_file = OpenFileAndWriteHeader(this->mBaseName + ".ortho", fibres.size());
00090
00091
00092 for (unsigned i=0; i<fibres.size();i++ )
00093 {
00094 if (this->mFileIsBinary)
00095 {
00096
00097 p_file->write((char*)&fibres[i][0], DIM*sizeof(double));
00098 p_file->write((char*)&second[i][0], DIM*sizeof(double));
00099 p_file->write((char*)&third[i][0], DIM*sizeof(double));
00100 }
00101 else
00102 {
00103
00104 for(unsigned j=0; j<DIM; j++)
00105 {
00106 *p_file << fibres[i][j] << "\t";
00107 }
00108 for(unsigned j=0; j<DIM; j++)
00109 {
00110 *p_file << second[i][j] << "\t";
00111 }
00112 for(unsigned j=0; j<DIM; j++)
00113 {
00114 *p_file << third[i][j] << "\t";
00115 }
00116 *p_file <<"\n";
00117 }
00118 }
00119 *p_file << "#\n# " << ChasteBuildInfo::GetProvenanceString();
00120 p_file->close();
00121 }
00122
00123 template<unsigned DIM>
00124 out_stream FibreWriter<DIM>::OpenFileAndWriteHeader(const std::string& rFileName, unsigned numItems)
00125 {
00126 out_stream p_fibre_file = this->mpOutputFileHandler->OpenOutputFile(rFileName);
00127
00128
00129 *p_fibre_file << numItems;
00130
00131 if (this->mFileIsBinary)
00132 {
00133 *p_fibre_file << "\tBIN\n";
00134 }
00135 else
00136 {
00137 *p_fibre_file << "\n";
00138 }
00139 return p_fibre_file;
00140 }
00141
00142
00143 template<unsigned DIM>
00144 void FibreWriter<DIM>::SetWriteFileAsBinary()
00145 {
00146 mFileIsBinary = true;
00147 }
00148
00149 template class FibreWriter<1>;
00150 template class FibreWriter<2>;
00151 template class FibreWriter<3>;
00152
00153
00154
00155
00156