Changes in src/datacreator.cpp [f66195:042f82]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/datacreator.cpp
rf66195 r042f82 8 8 9 9 #include "datacreator.hpp" 10 #include "helpers.hpp"11 #include "parser.hpp"12 10 13 11 //=========================== FUNCTIONS============================ … … 51 49 /** Plots an energy vs. order. 52 50 * \param &Fragments EnergyMatrix class containing matrix values 53 * \param KeySet sKeySetContainer class holding bond KeySetContainer::Order51 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order 54 52 * \param *prefix prefix in filename (without ending) 55 53 * \param *msg message to be place in first line as a comment 56 54 * \return true if file was written successfully 57 55 */ 58 bool CreateDataEnergyOrder(class EnergyMatrix &Fragments, class KeySetsContainer &KeySet s, const char *dir, const char *prefix, const char *msg, const char *datum)56 bool CreateDataEnergyOrder(class EnergyMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum) 59 57 { 60 58 stringstream filename; … … 65 63 cout << msg << endl; 66 64 output << "# " << msg << ", created on " << datum; 67 output << "#Order\tFrag.No.\t" << Fragments.Header [Fragments.MatrixCounter]<< endl;68 for (int BondOrder=0;BondOrder<KeySet s.Order;BondOrder++) {69 for(int i=KeySet s.FragmentsPerOrder[BondOrder];i--;) {70 for(int j=Fragments.RowCounter[ KeySet s.OrderSet[BondOrder][i] ];j--;)71 for(int k=Fragments.ColumnCounter [ KeySets.OrderSet[BondOrder][i] ];k--;)72 Fragments.Matrix[Fragments.MatrixCounter][j][k] += Fragments.Matrix[ KeySet s.OrderSet[BondOrder][i] ][j][k];73 } 74 output << BondOrder+1 << "\t" << KeySet s.FragmentsPerOrder[BondOrder];75 for (int l=0;l<Fragments.ColumnCounter [Fragments.MatrixCounter];l++)65 output << "#Order\tFrag.No.\t" << Fragments.Header << endl; 66 for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) { 67 for(int i=KeySet.FragmentsPerOrder[BondOrder];i--;) { 68 for(int j=Fragments.RowCounter[ KeySet.OrderSet[BondOrder][i] ];j--;) 69 for(int k=Fragments.ColumnCounter;k--;) 70 Fragments.Matrix[Fragments.MatrixCounter][j][k] += Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k]; 71 } 72 output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder]; 73 for (int l=0;l<Fragments.ColumnCounter;l++) 76 74 output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter]-1 ][l]; 77 75 output << endl; … … 84 82 * \param &Energy EnergyMatrix class containing reference values (in MatrixCounter matrix) 85 83 * \param &Fragments EnergyMatrix class containing matrix values 86 * \param KeySet sKeySetContainer class holding bond KeySetContainer::Order84 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order 87 85 * \param *prefix prefix in filename (without ending) 88 86 * \param *msg message to be place in first line as a comment 89 87 * \return true if file was written successfully 90 88 */ 91 bool CreateDataDeltaEnergyOrder(class EnergyMatrix &Energy, class EnergyMatrix &Fragments, class KeySetsContainer &KeySet s, const char *dir, const char *prefix, const char *msg, const char *datum)89 bool CreateDataDeltaEnergyOrder(class EnergyMatrix &Energy, class EnergyMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum) 92 90 { 93 91 stringstream filename; … … 98 96 cout << msg << endl; 99 97 output << "# " << msg << ", created on " << datum; 100 output << "#Order\tFrag.No.\t" << Fragments.Header [Fragments.MatrixCounter]<< endl;98 output << "#Order\tFrag.No.\t" << Fragments.Header << endl; 101 99 Fragments.SetLastMatrix(Energy.Matrix[Energy.MatrixCounter],0); 102 for (int BondOrder=0;BondOrder<KeySet s.Order;BondOrder++) {103 for(int i=KeySet s.FragmentsPerOrder[BondOrder];i--;) {104 for(int j=Fragments.RowCounter[ KeySet s.OrderSet[BondOrder][i] ];j--;)105 for(int k=Fragments.ColumnCounter [ KeySets.OrderSet[BondOrder][i] ];k--;)106 Fragments.Matrix[Fragments.MatrixCounter][j][k] -= Fragments.Matrix[ KeySet s.OrderSet[BondOrder][i] ][j][k];107 } 108 output << BondOrder+1 << "\t" << KeySet s.FragmentsPerOrder[BondOrder];109 for (int l=0;l<Fragments.ColumnCounter [Energy.MatrixCounter];l++)100 for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) { 101 for(int i=KeySet.FragmentsPerOrder[BondOrder];i--;) { 102 for(int j=Fragments.RowCounter[ KeySet.OrderSet[BondOrder][i] ];j--;) 103 for(int k=Fragments.ColumnCounter;k--;) 104 Fragments.Matrix[Fragments.MatrixCounter][j][k] -= Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k]; 105 } 106 output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder]; 107 for (int l=0;l<Fragments.ColumnCounter;l++) 110 108 if (fabs(Energy.Matrix[Energy.MatrixCounter][ Energy.RowCounter[Energy.MatrixCounter]-1 ][l]) < MYEPSILON) 111 109 output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter]-1 ][l]; … … 120 118 /** Plot forces vs. order. 121 119 * \param &Fragments ForceMatrix class containing matrix values 122 * \param KeySet sKeySetContainer class holding bond KeySetContainer::Order120 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order 123 121 * \param *prefix prefix in filename (without ending) 124 122 * \param *msg message to be place in first line as a comment … … 126 124 * \return true if file was written successfully 127 125 */ 128 bool CreateDataForcesOrder(class ForceMatrix &Fragments, class KeySetsContainer &KeySet s, const char *dir, const char *prefix,const char *msg, const char *datum, void (*CreateForce)(class MatrixContainer &, int))126 bool CreateDataForcesOrder(class ForceMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix,const char *msg, const char *datum, void (*CreateForce)(class MatrixContainer &, int)) 129 127 { 130 128 stringstream filename; … … 135 133 cout << msg << endl; 136 134 output << "# " << msg << ", created on " << datum; 137 output << "# Order\tFrag.No.\t" << Fragments.Header [Fragments.MatrixCounter]<< endl;135 output << "# Order\tFrag.No.\t" << Fragments.Header << endl; 138 136 Fragments.SetLastMatrix(0.,0); 139 for (int BondOrder=0;BondOrder<KeySet s.Order;BondOrder++) {140 Fragments.SumSubForces(Fragments, KeySet s, BondOrder, 1.);141 output << BondOrder+1 << "\t" << KeySet s.FragmentsPerOrder[BondOrder];137 for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) { 138 Fragments.SumSubForces(Fragments, KeySet, BondOrder, 1.); 139 output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder]; 142 140 CreateForce(Fragments, Fragments.MatrixCounter); 143 for (int l=0;l<Fragments.ColumnCounter [Fragments.MatrixCounter];l++)141 for (int l=0;l<Fragments.ColumnCounter;l++) 144 142 output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter] ][l]; 145 143 output << endl; … … 152 150 * \param &Force ForceMatrix containing reference values (in MatrixCounter matrix) 153 151 * \param &Fragments ForceMatrix class containing matrix values 154 * \param KeySet sKeySetContainer class holding bond KeySetContainer::Order152 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order 155 153 * \param *prefix prefix in filename (without ending) 156 154 * \param *msg message to be place in first line as a comment … … 158 156 * \return true if file was written successfully 159 157 */ 160 bool CreateDataDeltaForcesOrder(class ForceMatrix &Force, class ForceMatrix &Fragments, class KeySetsContainer &KeySet s, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateForce)(class MatrixContainer &, int))158 bool CreateDataDeltaForcesOrder(class ForceMatrix &Force, class ForceMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateForce)(class MatrixContainer &, int)) 161 159 { 162 160 stringstream filename; … … 167 165 cout << msg << endl; 168 166 output << "# " << msg << ", created on " << datum; 169 output << "# Order\tFrag.No.\t" << Fragments.Header [Fragments.MatrixCounter]<< endl;167 output << "# Order\tFrag.No.\t" << Fragments.Header << endl; 170 168 Fragments.SetLastMatrix(Force.Matrix[Force.MatrixCounter],0); 171 for (int BondOrder=0;BondOrder<KeySet s.Order;BondOrder++) {172 Fragments.SumSubForces(Fragments, KeySet s, BondOrder, -1.);173 output << BondOrder+1 << "\t" << KeySet s.FragmentsPerOrder[BondOrder];169 for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) { 170 Fragments.SumSubForces(Fragments, KeySet, BondOrder, -1.); 171 output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder]; 174 172 CreateForce(Fragments, Fragments.MatrixCounter); 175 for (int l=0;l<Fragments.ColumnCounter [Fragments.MatrixCounter];l++)173 for (int l=0;l<Fragments.ColumnCounter;l++) 176 174 output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter] ][l]; 177 175 output << endl; … … 184 182 * \param &Force ForceMatrix containing reference values (in MatrixCounter matrix) 185 183 * \param &Fragments ForceMatrix class containing matrix values 186 * \param KeySet sKeySetContainer class holding bond KeySetContainer::Order184 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order 187 185 * \param *prefix prefix in filename (without ending) 188 186 * \param *msg message to be place in first line as a comment … … 190 188 * \return true if file was written successfully 191 189 */ 192 bool CreateDataDeltaForcesOrderPerAtom(class ForceMatrix &Force, class ForceMatrix &Fragments, class KeySetsContainer &KeySet s, const char *dir, const char *prefix, const char *msg, const char *datum)190 bool CreateDataDeltaForcesOrderPerAtom(class ForceMatrix &Force, class ForceMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum) 193 191 { 194 192 stringstream filename; … … 200 198 cout << msg << endl; 201 199 output << "# " << msg << ", created on " << datum; 202 output << "# AtomNo\t" << Fragments.Header [Fragments.MatrixCounter]<< endl;200 output << "# AtomNo\t" << Fragments.Header << endl; 203 201 Fragments.SetLastMatrix(Force.Matrix[Force.MatrixCounter], 0); 204 for (int BondOrder=0;BondOrder<KeySet s.Order;BondOrder++) {202 for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) { 205 203 //cout << "Current order is " << BondOrder << "." << endl; 206 Fragments.SumSubForces(Fragments, KeySet s, BondOrder, -1.);204 Fragments.SumSubForces(Fragments, KeySet, BondOrder, -1.); 207 205 // errors per atom 208 206 output << endl << "#Order\t" << BondOrder+1 << endl; 209 207 for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) { 210 208 output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t"; 211 for (int l=0;l<Fragments.ColumnCounter [ Fragments.MatrixCounter ];l++) {209 for (int l=0;l<Fragments.ColumnCounter;l++) { 212 210 if (((l+1) % 3) == 0) { 213 211 norm = 0.; … … 215 213 norm += Force.Matrix[Force.MatrixCounter][ j ][l+m]*Force.Matrix[Force.MatrixCounter][ j ][l+m]; 216 214 norm = sqrt(norm); 217 } 215 } 218 216 // if (norm < MYEPSILON) 219 217 output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t"; … … 231 229 /** Plot forces error vs. vs atom vs. order. 232 230 * \param &Fragments ForceMatrix class containing matrix values 233 * \param KeySet sKeySetContainer class holding bond KeySetContainer::Order231 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order 234 232 * \param *prefix prefix in filename (without ending) 235 233 * \param *msg message to be place in first line as a comment … … 237 235 * \return true if file was written successfully 238 236 */ 239 bool CreateDataForcesOrderPerAtom(class ForceMatrix &Fragments, class KeySetsContainer &KeySet s, const char *dir, const char *prefix, const char *msg, const char *datum)237 bool CreateDataForcesOrderPerAtom(class ForceMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum) 240 238 { 241 239 stringstream filename; … … 246 244 cout << msg << endl; 247 245 output << "# " << msg << ", created on " << datum; 248 output << "# AtomNo\t" << Fragments.Header [Fragments.MatrixCounter]<< endl;249 for (int BondOrder=0;BondOrder<KeySet s.Order;BondOrder++) {246 output << "# AtomNo\t" << Fragments.Header << endl; 247 for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) { 250 248 //cout << "Current order is " << BondOrder << "." << endl; 251 Fragments.SumSubForces(Fragments, KeySet s, BondOrder, 1.);249 Fragments.SumSubForces(Fragments, KeySet, BondOrder, 1.); 252 250 // errors per atom 253 251 output << endl << "#Order\t" << BondOrder+1 << endl; 254 252 for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) { 255 253 output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t"; 256 for (int l=0;l<Fragments.ColumnCounter [ Fragments.MatrixCounter ];l++)254 for (int l=0;l<Fragments.ColumnCounter;l++) 257 255 output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t"; 258 256 output << endl; … … 264 262 }; 265 263 266 267 /** Plot hessian error vs. vs atom vs. order.268 * \param &Hessian HessianMatrix containing reference values (in MatrixCounter matrix)269 * \param &Fragments HessianMatrix class containing matrix values270 * \param KeySets KeySetContainer class holding bond KeySetContainer::Order271 * \param *prefix prefix in filename (without ending)272 * \param *msg message to be place in first line as a comment273 * \param *datum current date and time274 * \return true if file was written successfully275 */276 bool CreateDataDeltaHessianOrderPerAtom(class HessianMatrix &Hessian, class HessianMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum)277 {278 stringstream filename;279 ofstream output;280 281 filename << prefix << ".dat";282 if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;283 cout << msg << endl;284 output << "# " << msg << ", created on " << datum;285 output << "# AtomNo\t" << Fragments.Header[Fragments.MatrixCounter] << endl;286 Fragments.SetLastMatrix(Hessian.Matrix[Hessian.MatrixCounter], 0);287 for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {288 //cout << "Current order is " << BondOrder << "." << endl;289 Fragments.SumSubHessians(Fragments, KeySets, BondOrder, -1.);290 // errors per atom291 output << endl << "#Order\t" << BondOrder+1 << endl;292 for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {293 output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t";294 for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++) {295 output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";296 }297 output << endl;298 }299 output << endl;300 }301 output.close();302 return true;303 };304 305 /** Plot hessian error vs. vs atom vs. order in the frobenius norm.306 * \param &Hessian HessianMatrix containing reference values (in MatrixCounter matrix)307 * \param &Fragments HessianMatrix class containing matrix values308 * \param KeySets KeySetContainer class holding bond KeySetContainer::Order309 * \param *prefix prefix in filename (without ending)310 * \param *msg message to be place in first line as a comment311 * \param *datum current date and time312 * \return true if file was written successfully313 */314 bool CreateDataDeltaFrobeniusOrderPerAtom(class HessianMatrix &Hessian, class HessianMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum)315 {316 stringstream filename;317 ofstream output;318 double norm = 0;319 double tmp;320 321 filename << prefix << ".dat";322 if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;323 cout << msg << endl;324 output << "# " << msg << ", created on " << datum;325 output << "# AtomNo\t";326 Fragments.SetLastMatrix(Hessian.Matrix[Hessian.MatrixCounter], 0);327 for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {328 output << "Order" << BondOrder+1 << "\t";329 }330 output << endl;331 output << Fragments.RowCounter[ Fragments.MatrixCounter ] << "\t";332 for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {333 //cout << "Current order is " << BondOrder << "." << endl;334 Fragments.SumSubHessians(Fragments, KeySets, BondOrder, -1.);335 // frobenius norm of errors per atom336 norm = 0.;337 for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {338 for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++) {339 tmp = Fragments.Matrix[Fragments.MatrixCounter][ j ][l];340 norm += tmp*tmp;341 }342 }343 output << scientific << sqrt(norm)/(Fragments.RowCounter[ Fragments.MatrixCounter ]*Fragments.ColumnCounter[ Fragments.MatrixCounter] ) << "\t";344 }345 output << endl;346 output.close();347 return true;348 };349 350 /** Plot hessian error vs. vs atom vs. order.351 * \param &Fragments HessianMatrix class containing matrix values352 * \param KeySets KeySetContainer class holding bond KeySetContainer::Order353 * \param *prefix prefix in filename (without ending)354 * \param *msg message to be place in first line as a comment355 * \param *datum current date and time356 * \return true if file was written successfully357 */358 bool CreateDataHessianOrderPerAtom(class HessianMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum)359 {360 stringstream filename;361 ofstream output;362 363 filename << prefix << ".dat";364 if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;365 cout << msg << endl;366 output << "# " << msg << ", created on " << datum;367 output << "# AtomNo\t" << Fragments.Header[ Fragments.MatrixCounter ] << endl;368 Fragments.SetLastMatrix(0., 0);369 for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {370 //cout << "Current order is " << BondOrder << "." << endl;371 Fragments.SumSubHessians(Fragments, KeySets, BondOrder, 1.);372 // errors per atom373 output << endl << "#Order\t" << BondOrder+1 << endl;374 for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {375 output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t";376 for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++)377 output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";378 output << endl;379 }380 output << endl;381 }382 output.close();383 return true;384 };385 386 264 /** Plot matrix vs. fragment. 387 265 */ 388 bool CreateDataFragment(class MatrixContainer &Fragment, class KeySetsContainer &KeySet s, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateFragment)(class MatrixContainer &, int))266 bool CreateDataFragment(class MatrixContainer &Fragment, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateFragment)(class MatrixContainer &, int)) 389 267 { 390 268 stringstream filename; … … 395 273 cout << msg << endl; 396 274 output << "# " << msg << ", created on " << datum << endl; 397 output << "#Order\tFrag.No.\t" << Fragment.Header [ Fragment.MatrixCounter ]<< endl;398 for (int BondOrder=0;BondOrder<KeySet s.Order;BondOrder++) {399 for(int i=0;i<KeySet s.FragmentsPerOrder[BondOrder];i++) {400 output << BondOrder+1 << "\t" << KeySet s.OrderSet[BondOrder][i]+1;401 CreateFragment(Fragment, KeySet s.OrderSet[BondOrder][i]);402 for (int l=0;l<Fragment.ColumnCounter [ KeySets.OrderSet[BondOrder][i] ];l++)403 output << scientific << "\t" << Fragment.Matrix[ KeySet s.OrderSet[BondOrder][i] ][ Fragment.RowCounter[ KeySets.OrderSet[BondOrder][i] ] ][l];275 output << "#Order\tFrag.No.\t" << Fragment.Header << endl; 276 for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) { 277 for(int i=0;i<KeySet.FragmentsPerOrder[BondOrder];i++) { 278 output << BondOrder+1 << "\t" << KeySet.OrderSet[BondOrder][i]+1; 279 CreateFragment(Fragment, KeySet.OrderSet[BondOrder][i]); 280 for (int l=0;l<Fragment.ColumnCounter;l++) 281 output << scientific << "\t" << Fragment.Matrix[ KeySet.OrderSet[BondOrder][i] ][ Fragment.RowCounter[ KeySet.OrderSet[BondOrder][i] ] ][l]; 404 282 output << endl; 405 283 } … … 411 289 /** Copies fragment energy values into last matrix of \a Matrix with greatest total energy. 412 290 * \param &Matrix MatrixContainer with all fragment energy values 413 * \param &KeySet sKeySetsContainer with associations of each fragment to a bond order291 * \param &KeySet KeySetsContainer with associations of each fragment to a bond order 414 292 * \param BondOrder current bond order 415 293 */ 416 void CreateMaxFragmentOrder(class MatrixContainer &Fragments, class KeySetsContainer &KeySet s, int BondOrder)294 void CreateMaxFragmentOrder(class MatrixContainer &Fragments, class KeySetsContainer &KeySet, int BondOrder) 417 295 { 418 296 for(int j=Fragments.RowCounter[ Fragments.MatrixCounter ];j--;) { 419 for(int i=KeySet s.FragmentsPerOrder[BondOrder];i--;) {420 if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) < fabs(Fragments.Matrix[ KeySet s.OrderSet[BondOrder][i] ][j][1])) {421 for (int k=Fragments.ColumnCounter [ Fragments.MatrixCounter ];k--;)422 Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet s.OrderSet[BondOrder][i] ][j][k];297 for(int i=KeySet.FragmentsPerOrder[BondOrder];i--;) { 298 if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) < fabs(Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][1])) { 299 for (int k=Fragments.ColumnCounter;k--;) 300 Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k]; 423 301 } 424 302 } … … 428 306 /** Copies fragment energy values into last matrix of \a Matrix with smallest total energy. 429 307 * \param &Matrix MatrixContainer with all fragment energy values 430 * \param &KeySet sKeySetsContainer with associations of each fragment to a bond order308 * \param &KeySet KeySetsContainer with associations of each fragment to a bond order 431 309 * \param BondOrder current bond order 432 310 */ 433 void CreateMinFragmentOrder(class MatrixContainer &Fragments, class KeySetsContainer &KeySet s, int BondOrder)311 void CreateMinFragmentOrder(class MatrixContainer &Fragments, class KeySetsContainer &KeySet, int BondOrder) 434 312 { 435 313 for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) { 436 314 int i=0; 437 315 do { // first get a minimum value unequal to 0 438 for (int k=Fragments.ColumnCounter [ Fragments.MatrixCounter ];k--;)439 Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet s.OrderSet[BondOrder][i] ][j][k];316 for (int k=Fragments.ColumnCounter;k--;) 317 Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k]; 440 318 i++; 441 } while ((fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) < MYEPSILON) && (i<KeySet s.FragmentsPerOrder[BondOrder]));442 for(;i<KeySet s.FragmentsPerOrder[BondOrder];i++) { // then find lowest443 if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) > fabs(Fragments.Matrix[ KeySet s.OrderSet[BondOrder][i] ][j][1])) {444 for (int k=Fragments.ColumnCounter [ Fragments.MatrixCounter ];k--;)445 Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet s.OrderSet[BondOrder][i] ][j][k];319 } while ((fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) < MYEPSILON) && (i<KeySet.FragmentsPerOrder[BondOrder])); 320 for(;i<KeySet.FragmentsPerOrder[BondOrder];i++) { // then find lowest 321 if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) > fabs(Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][1])) { 322 for (int k=Fragments.ColumnCounter;k--;) 323 Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k]; 446 324 } 447 325 } … … 451 329 /** Plot matrix vs. fragment. 452 330 */ 453 bool CreateDataFragmentOrder(class MatrixContainer &Fragment, class KeySetsContainer &KeySet s, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateFragmentOrder)(class MatrixContainer &, class KeySetsContainer &, int))331 bool CreateDataFragmentOrder(class MatrixContainer &Fragment, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateFragmentOrder)(class MatrixContainer &, class KeySetsContainer &, int)) 454 332 { 455 333 stringstream filename; … … 460 338 cout << msg << endl; 461 339 output << "# " << msg << ", created on " << datum; 462 output << "#Order\tFrag.No.\t" << Fragment.Header [ Fragment.MatrixCounter ]<< endl;340 output << "#Order\tFrag.No.\t" << Fragment.Header << endl; 463 341 // max 464 for (int BondOrder=0;BondOrder<KeySet s.Order;BondOrder++) {342 for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) { 465 343 Fragment.SetLastMatrix(0.,0); 466 CreateFragmentOrder(Fragment, KeySet s, BondOrder);467 output << BondOrder+1 << "\t" << KeySet s.FragmentsPerOrder[BondOrder];468 for (int l=0;l<Fragment.ColumnCounter [ Fragment.MatrixCounter ];l++)344 CreateFragmentOrder(Fragment, KeySet, BondOrder); 345 output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder]; 346 for (int l=0;l<Fragment.ColumnCounter;l++) 469 347 output << scientific << "\t" << Fragment.Matrix[ Fragment.MatrixCounter ][ Fragment.RowCounter[ Fragment.MatrixCounter ]-1 ][l]; 470 348 output << endl; … … 480 358 void CreateEnergy(class MatrixContainer &Energy, int MatrixNumber) 481 359 { 482 for(int k=0;k<Energy.ColumnCounter [MatrixNumber];k++)360 for(int k=0;k<Energy.ColumnCounter;k++) 483 361 Energy.Matrix[MatrixNumber][ Energy.RowCounter[MatrixNumber] ] [k] = Energy.Matrix[MatrixNumber][ Energy.RowCounter[MatrixNumber]-1 ] [k]; 484 362 }; … … 491 369 void CreateMinimumForce(class MatrixContainer &Force, int MatrixNumber) 492 370 { 493 for (int l=Force.ColumnCounter [MatrixNumber];l--;)371 for (int l=Force.ColumnCounter;l--;) 494 372 Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.; 495 for (int l=5;l<Force.ColumnCounter [MatrixNumber];l+=3) {373 for (int l=5;l<Force.ColumnCounter;l+=3) { 496 374 double stored = 0; 497 375 int k=0; … … 526 404 { 527 405 int divisor = 0; 528 for (int l=Force.ColumnCounter [MatrixNumber];l--;)406 for (int l=Force.ColumnCounter;l--;) 529 407 Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.; 530 for (int l=5;l<Force.ColumnCounter [MatrixNumber];l+=3) {408 for (int l=5;l<Force.ColumnCounter;l+=3) { 531 409 double tmp = 0; 532 410 for (int k=Force.RowCounter[MatrixNumber];k--;) { … … 550 428 void CreateMaximumForce(class MatrixContainer &Force, int MatrixNumber) 551 429 { 552 for (int l=5;l<Force.ColumnCounter [MatrixNumber];l+=3) {430 for (int l=5;l<Force.ColumnCounter;l+=3) { 553 431 double stored = 0; 554 432 for (int k=Force.RowCounter[MatrixNumber];k--;) { … … 582 460 void CreateVectorSumForce(class MatrixContainer &Force, int MatrixNumber) 583 461 { 584 for (int l=Force.ColumnCounter [MatrixNumber];l--;)462 for (int l=Force.ColumnCounter;l--;) 585 463 Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.; 586 for (int l=0;l<Force.ColumnCounter [MatrixNumber];l++) {464 for (int l=0;l<Force.ColumnCounter;l++) { 587 465 for (int k=Force.RowCounter[MatrixNumber];k--;) 588 466 Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] += Force.Matrix[MatrixNumber][k][l]; … … 620 498 /** Creates the pyxplotfile for energy data. 621 499 * \param Matrix MatrixContainer with matrix values 622 * \param KeySet scontains bond order500 * \param KeySet contains bond order 623 501 * \param *dir directory 624 502 * \param *prefix prefix for all filenames (without ending) … … 637 515 * \return true if file was written successfully 638 516 */ 639 bool CreatePlotOrder(class MatrixContainer &Matrix, const class KeySetsContainer &KeySet s, const char *dir, const char *prefix, const int keycolumns, const char *key, const char *logscale, const char *extraline, const int mxtics, const int xtics, const char *xlabel, const char *ylabel, const char *xrange, const char *yrange, const char *xargument, const char *uses, void (*CreatePlotLines)(ofstream &, class MatrixContainer &, const char *, const char *, const char *))517 bool CreatePlotOrder(class MatrixContainer &Matrix, const class KeySetsContainer &KeySet, const char *dir, const char *prefix, const int keycolumns, const char *key, const char *logscale, const char *extraline, const int mxtics, const int xtics, const char *xlabel, const char *ylabel, const char *xrange, const char *yrange, const char *xargument, const char *uses, void (*CreatePlotLines)(ofstream &, class MatrixContainer &, const char *, const char *, const char *)) 640 518 { 641 519 stringstream filename; … … 660 538 void AbsEnergyPlotLine(ofstream &output, class MatrixContainer &Energy, const char *prefix, const char *xargument, const char *uses) 661 539 { 662 stringstream line(Energy.Header [ Energy.MatrixCounter ]);540 stringstream line(Energy.Header); 663 541 string token; 664 542 665 543 getline(line, token, '\t'); 666 for (int i=2; i<= Energy.ColumnCounter [Energy.MatrixCounter];i++) {544 for (int i=2; i<= Energy.ColumnCounter;i++) { 667 545 getline(line, token, '\t'); 668 546 while (token[0] == ' ') // remove leading white spaces 669 547 token.erase(0,1); 670 548 output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(abs($" << i+2 << ")) " << uses; 671 if (i != (Energy.ColumnCounter [Energy.MatrixCounter]))549 if (i != (Energy.ColumnCounter)) 672 550 output << ", \\"; 673 551 output << endl; … … 684 562 void EnergyPlotLine(ofstream &output, class MatrixContainer &Energy, const char *prefix, const char *xargument, const char *uses) 685 563 { 686 stringstream line(Energy.Header [Energy.MatrixCounter]);564 stringstream line(Energy.Header); 687 565 string token; 688 566 689 567 getline(line, token, '\t'); 690 for (int i=1; i<= Energy.ColumnCounter [Energy.MatrixCounter];i++) {568 for (int i=1; i<= Energy.ColumnCounter;i++) { 691 569 getline(line, token, '\t'); 692 570 while (token[0] == ' ') // remove leading white spaces 693 571 token.erase(0,1); 694 572 output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":" << i+2 << " " << uses; 695 if (i != (Energy.ColumnCounter [Energy.MatrixCounter]))573 if (i != (Energy.ColumnCounter)) 696 574 output << ", \\"; 697 575 output << endl; … … 708 586 void ForceMagnitudePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses) 709 587 { 710 stringstream line(Force.Header [Force.MatrixCounter]);588 stringstream line(Force.Header); 711 589 string token; 712 590 … … 716 594 getline(line, token, '\t'); 717 595 getline(line, token, '\t'); 718 for (int i=7; i< Force.ColumnCounter [Force.MatrixCounter];i+=NDIM) {596 for (int i=7; i< Force.ColumnCounter;i+=NDIM) { 719 597 getline(line, token, '\t'); 720 598 while (token[0] == ' ') // remove leading white spaces … … 722 600 token.erase(token.length(), 1); // kill residual index char (the '0') 723 601 output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(sqrt($" << i+1 << "*$" << i+1 << "+$" << i+2 << "*$" << i+2 << "+$" << i+3 << "*$" << i+3 << ")) " << uses; 724 if (i != (Force.ColumnCounter [Force.MatrixCounter]-1))602 if (i != (Force.ColumnCounter-1)) 725 603 output << ", \\"; 726 604 output << endl; … … 739 617 void AbsFirstForceValuePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses) 740 618 { 741 stringstream line(Force.Header [Force.MatrixCounter]);619 stringstream line(Force.Header); 742 620 string token; 743 621 … … 747 625 getline(line, token, '\t'); 748 626 getline(line, token, '\t'); 749 for (int i=7; i< Force.ColumnCounter [Force.MatrixCounter];i+=NDIM) {627 for (int i=7; i< Force.ColumnCounter;i+=NDIM) { 750 628 getline(line, token, '\t'); 751 629 while (token[0] == ' ') // remove leading white spaces … … 753 631 token.erase(token.length(), 1); // kill residual index char (the '0') 754 632 output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(abs($" << i+1 << ")) " << uses; 755 if (i != (Force.ColumnCounter [Force.MatrixCounter]-1))633 if (i != (Force.ColumnCounter-1)) 756 634 output << ", \\"; 757 635 output << endl; … … 770 648 void BoxesForcePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses) 771 649 { 772 stringstream line(Force.Header [Force.MatrixCounter]);773 c har *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};650 stringstream line(Force.Header); 651 const char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"}; 774 652 string token; 775 653 … … 779 657 getline(line, token, '\t'); 780 658 getline(line, token, '\t'); 781 for (int i=7; i< Force.ColumnCounter [Force.MatrixCounter];i+=NDIM) {659 for (int i=7; i< Force.ColumnCounter;i+=NDIM) { 782 660 getline(line, token, '\t'); 783 661 while (token[0] == ' ') // remove leading white spaces … … 785 663 token.erase(token.length(), 1); // kill residual index char (the '0') 786 664 output << "'" << prefix << ".dat' title '" << token << "' using ($" << xargument << "+" << fixed << setprecision(1) << (double)((i-7)/3)*0.2 << "):(sqrt($" << i+1 << "*$" << i+1 << "+$" << i+2 << "*$" << i+2 << "+$" << i+3 << "*$" << i+3 << ")) " << uses << " " << fillcolor[(i-7)/3]; 787 if (i != (Force.ColumnCounter [Force.MatrixCounter]-1))665 if (i != (Force.ColumnCounter-1)) 788 666 output << ", \\"; 789 667 output << endl; … … 802 680 void BoxesFirstForceValuePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses) 803 681 { 804 stringstream line(Force.Header [Force.MatrixCounter]);805 c har *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};682 stringstream line(Force.Header); 683 const char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"}; 806 684 string token; 807 685 … … 811 689 getline(line, token, '\t'); 812 690 getline(line, token, '\t'); 813 for (int i=7; i< Force.ColumnCounter [Force.MatrixCounter];i+=NDIM) {691 for (int i=7; i< Force.ColumnCounter;i+=NDIM) { 814 692 getline(line, token, '\t'); 815 693 while (token[0] == ' ') // remove leading white spaces … … 817 695 token.erase(token.length(), 1); // kill residual index char (the '0') 818 696 output << "'" << prefix << ".dat' title '" << token << "' using ($" << xargument << "+" << fixed << setprecision(1) << (double)((i-7)/3)*0.2 << "):" << i+1 << " " << uses << " " << fillcolor[(i-7)/3]; 819 if (i != (Force.ColumnCounter [Force.MatrixCounter]-1))697 if (i != (Force.ColumnCounter-1)) 820 698 output << ", \\"; 821 699 output << endl;
Note:
See TracChangeset
for help on using the changeset viewer.