Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/datacreator.cpp

    rf66195 r042f82  
    88
    99#include "datacreator.hpp"
    10 #include "helpers.hpp"
    11 #include "parser.hpp"
    1210
    1311//=========================== FUNCTIONS============================
     
    5149/** Plots an energy vs. order.
    5250 * \param &Fragments EnergyMatrix class containing matrix values
    53  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
     51 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
    5452 * \param *prefix prefix in filename (without ending)
    5553 * \param *msg message to be place in first line as a comment
    5654 * \return true if file was written successfully
    5755 */
    58 bool CreateDataEnergyOrder(class EnergyMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum)
     56bool CreateDataEnergyOrder(class EnergyMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum)
    5957{
    6058  stringstream filename;
     
    6563  cout << msg << endl;
    6664  output << "# " << msg << ", created on " << datum;
    67   output << "#Order\tFrag.No.\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
    68   for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {
    69     for(int i=KeySets.FragmentsPerOrder[BondOrder];i--;) {
    70       for(int j=Fragments.RowCounter[ KeySets.OrderSet[BondOrder][i] ];j--;)
    71         for(int k=Fragments.ColumnCounter[ KeySets.OrderSet[BondOrder][i] ];k--;)
    72           Fragments.Matrix[Fragments.MatrixCounter][j][k] += Fragments.Matrix[ KeySets.OrderSet[BondOrder][i] ][j][k];
    73     }
    74     output << BondOrder+1 << "\t" << KeySets.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++)
    7674      output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter]-1 ][l];
    7775    output << endl;
     
    8482 * \param &Energy EnergyMatrix class containing reference values (in MatrixCounter matrix)
    8583 * \param &Fragments EnergyMatrix class containing matrix values
    86  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
     84 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
    8785 * \param *prefix prefix in filename (without ending)
    8886 * \param *msg message to be place in first line as a comment
    8987 * \return true if file was written successfully
    9088 */
    91 bool CreateDataDeltaEnergyOrder(class EnergyMatrix &Energy, class EnergyMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum)
     89bool CreateDataDeltaEnergyOrder(class EnergyMatrix &Energy, class EnergyMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum)
    9290{
    9391  stringstream filename;
     
    9896  cout << msg << endl;
    9997  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;
    10199  Fragments.SetLastMatrix(Energy.Matrix[Energy.MatrixCounter],0);
    102   for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {
    103     for(int i=KeySets.FragmentsPerOrder[BondOrder];i--;) {
    104       for(int j=Fragments.RowCounter[ KeySets.OrderSet[BondOrder][i] ];j--;)
    105         for(int k=Fragments.ColumnCounter[ KeySets.OrderSet[BondOrder][i] ];k--;)
    106           Fragments.Matrix[Fragments.MatrixCounter][j][k] -= Fragments.Matrix[ KeySets.OrderSet[BondOrder][i] ][j][k];
    107     }
    108     output << BondOrder+1 << "\t" << KeySets.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++)
    110108      if (fabs(Energy.Matrix[Energy.MatrixCounter][ Energy.RowCounter[Energy.MatrixCounter]-1 ][l]) < MYEPSILON)
    111109        output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter]-1 ][l];
     
    120118/** Plot forces vs. order.
    121119 * \param &Fragments ForceMatrix class containing matrix values
    122  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
     120 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
    123121 * \param *prefix prefix in filename (without ending)
    124122 * \param *msg message to be place in first line as a comment
     
    126124 * \return true if file was written successfully
    127125 */
    128 bool CreateDataForcesOrder(class ForceMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix,const  char *msg, const char *datum, void (*CreateForce)(class MatrixContainer &, int))
     126bool CreateDataForcesOrder(class ForceMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix,const  char *msg, const char *datum, void (*CreateForce)(class MatrixContainer &, int))
    129127{
    130128  stringstream filename;
     
    135133  cout << msg << endl;
    136134  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;
    138136  Fragments.SetLastMatrix(0.,0);
    139   for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {
    140     Fragments.SumSubForces(Fragments, KeySets, BondOrder, 1.);
    141     output << BondOrder+1 << "\t" << KeySets.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];
    142140    CreateForce(Fragments, Fragments.MatrixCounter);
    143     for (int l=0;l<Fragments.ColumnCounter[Fragments.MatrixCounter];l++)
     141    for (int l=0;l<Fragments.ColumnCounter;l++)
    144142       output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter] ][l];
    145143    output << endl;
     
    152150 * \param &Force ForceMatrix containing reference values (in MatrixCounter matrix)
    153151 * \param &Fragments ForceMatrix class containing matrix values
    154  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
     152 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
    155153 * \param *prefix prefix in filename (without ending)
    156154 * \param *msg message to be place in first line as a comment
     
    158156 * \return true if file was written successfully
    159157 */
    160 bool CreateDataDeltaForcesOrder(class ForceMatrix &Force, class ForceMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateForce)(class MatrixContainer &, int))
     158bool 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))
    161159{
    162160  stringstream filename;
     
    167165  cout << msg << endl;
    168166  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;
    170168  Fragments.SetLastMatrix(Force.Matrix[Force.MatrixCounter],0);
    171   for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {
    172     Fragments.SumSubForces(Fragments, KeySets, BondOrder, -1.);
    173     output << BondOrder+1 << "\t" << KeySets.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];
    174172    CreateForce(Fragments, Fragments.MatrixCounter);
    175     for (int l=0;l<Fragments.ColumnCounter[Fragments.MatrixCounter];l++)
     173    for (int l=0;l<Fragments.ColumnCounter;l++)
    176174       output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter] ][l];
    177175    output << endl;
     
    184182 * \param &Force ForceMatrix containing reference values (in MatrixCounter matrix)
    185183 * \param &Fragments ForceMatrix class containing matrix values
    186  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
     184 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
    187185 * \param *prefix prefix in filename (without ending)
    188186 * \param *msg message to be place in first line as a comment
     
    190188 * \return true if file was written successfully
    191189 */
    192 bool CreateDataDeltaForcesOrderPerAtom(class ForceMatrix &Force, class ForceMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum)
     190bool CreateDataDeltaForcesOrderPerAtom(class ForceMatrix &Force, class ForceMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum)
    193191{
    194192  stringstream filename;
     
    200198  cout << msg << endl;
    201199  output << "# " << msg << ", created on " << datum;
    202   output << "# AtomNo\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
     200  output << "# AtomNo\t" << Fragments.Header << endl;
    203201  Fragments.SetLastMatrix(Force.Matrix[Force.MatrixCounter], 0);
    204   for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {
     202  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
    205203    //cout << "Current order is " << BondOrder << "." << endl;
    206     Fragments.SumSubForces(Fragments, KeySets, BondOrder, -1.);
     204    Fragments.SumSubForces(Fragments, KeySet, BondOrder, -1.);
    207205    // errors per atom
    208206    output << endl << "#Order\t" << BondOrder+1 << endl;
    209207    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
    210208      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++) {
    212210        if (((l+1) % 3) == 0) {
    213211          norm = 0.;
     
    215213            norm += Force.Matrix[Force.MatrixCounter][ j ][l+m]*Force.Matrix[Force.MatrixCounter][ j ][l+m];
    216214          norm = sqrt(norm);
    217         }                                                                                                   
     215        }
    218216//        if (norm < MYEPSILON)
    219217          output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";
     
    231229/** Plot forces error vs. vs atom vs. order.
    232230 * \param &Fragments ForceMatrix class containing matrix values
    233  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
     231 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
    234232 * \param *prefix prefix in filename (without ending)
    235233 * \param *msg message to be place in first line as a comment
     
    237235 * \return true if file was written successfully
    238236 */
    239 bool CreateDataForcesOrderPerAtom(class ForceMatrix &Fragments, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum)
     237bool CreateDataForcesOrderPerAtom(class ForceMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum)
    240238{
    241239  stringstream filename;
     
    246244  cout << msg << endl;
    247245  output << "# " << msg << ", created on " << datum;
    248   output << "# AtomNo\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
    249   for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {
     246  output << "# AtomNo\t" << Fragments.Header << endl;
     247  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
    250248    //cout << "Current order is " << BondOrder << "." << endl;
    251     Fragments.SumSubForces(Fragments, KeySets, BondOrder, 1.);
     249    Fragments.SumSubForces(Fragments, KeySet, BondOrder, 1.);
    252250    // errors per atom
    253251    output << endl << "#Order\t" << BondOrder+1 << endl;
    254252    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
    255253      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++)
    257255        output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";
    258256      output << endl;
     
    264262};
    265263
    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 values
    270  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
    271  * \param *prefix prefix in filename (without ending)
    272  * \param *msg message to be place in first line as a comment
    273  * \param *datum current date and time
    274  * \return true if file was written successfully
    275  */
    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 atom
    291     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 values
    308  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
    309  * \param *prefix prefix in filename (without ending)
    310  * \param *msg message to be place in first line as a comment
    311  * \param *datum current date and time
    312  * \return true if file was written successfully
    313  */
    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 atom
    336     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 values
    352  * \param KeySets KeySetContainer class holding bond KeySetContainer::Order
    353  * \param *prefix prefix in filename (without ending)
    354  * \param *msg message to be place in first line as a comment
    355  * \param *datum current date and time
    356  * \return true if file was written successfully
    357  */
    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 atom
    373     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 
    386264/** Plot matrix vs. fragment.
    387265 */
    388 bool CreateDataFragment(class MatrixContainer &Fragment, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateFragment)(class MatrixContainer &, int))
     266bool CreateDataFragment(class MatrixContainer &Fragment, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateFragment)(class MatrixContainer &, int))
    389267{
    390268  stringstream filename;
     
    395273  cout << msg << endl;
    396274  output << "# " << msg << ", created on " << datum << endl;
    397   output << "#Order\tFrag.No.\t" << Fragment.Header[ Fragment.MatrixCounter ] << endl;
    398   for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {
    399     for(int i=0;i<KeySets.FragmentsPerOrder[BondOrder];i++) {
    400       output << BondOrder+1 << "\t" << KeySets.OrderSet[BondOrder][i]+1;
    401       CreateFragment(Fragment, KeySets.OrderSet[BondOrder][i]);
    402       for (int l=0;l<Fragment.ColumnCounter[ KeySets.OrderSet[BondOrder][i] ];l++)
    403         output << scientific << "\t" << Fragment.Matrix[ KeySets.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];
    404282      output << endl;
    405283    }
     
    411289/** Copies fragment energy values into last matrix of \a Matrix with greatest total energy.
    412290 * \param &Matrix MatrixContainer with all fragment energy values
    413  * \param &KeySets KeySetsContainer with associations of each fragment to a bond order
     291 * \param &KeySet KeySetsContainer with associations of each fragment to a bond order
    414292 * \param BondOrder current bond order
    415293 */
    416 void CreateMaxFragmentOrder(class MatrixContainer &Fragments, class KeySetsContainer &KeySets, int BondOrder)
     294void CreateMaxFragmentOrder(class MatrixContainer &Fragments, class KeySetsContainer &KeySet, int BondOrder)
    417295{
    418296  for(int j=Fragments.RowCounter[ Fragments.MatrixCounter ];j--;) {
    419     for(int i=KeySets.FragmentsPerOrder[BondOrder];i--;) {
    420       if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) < fabs(Fragments.Matrix[ KeySets.OrderSet[BondOrder][i] ][j][1])) {
    421         for (int k=Fragments.ColumnCounter[ Fragments.MatrixCounter ];k--;)
    422           Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySets.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];
    423301      }
    424302    }
     
    428306/** Copies fragment energy values into last matrix of \a Matrix with smallest total energy.
    429307 * \param &Matrix MatrixContainer with all fragment energy values
    430  * \param &KeySets KeySetsContainer with associations of each fragment to a bond order
     308 * \param &KeySet KeySetsContainer with associations of each fragment to a bond order
    431309 * \param BondOrder current bond order
    432310 */
    433 void CreateMinFragmentOrder(class MatrixContainer &Fragments, class KeySetsContainer &KeySets, int BondOrder)
     311void CreateMinFragmentOrder(class MatrixContainer &Fragments, class KeySetsContainer &KeySet, int BondOrder)
    434312{
    435313  for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
    436314    int i=0;
    437315    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[ KeySets.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];
    440318      i++;
    441     } while ((fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) < MYEPSILON) && (i<KeySets.FragmentsPerOrder[BondOrder]));
    442     for(;i<KeySets.FragmentsPerOrder[BondOrder];i++) { // then find lowest
    443       if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) > fabs(Fragments.Matrix[ KeySets.OrderSet[BondOrder][i] ][j][1])) {
    444         for (int k=Fragments.ColumnCounter[ Fragments.MatrixCounter ];k--;)
    445           Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySets.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];
    446324      }
    447325    }
     
    451329/** Plot matrix vs. fragment.
    452330 */
    453 bool CreateDataFragmentOrder(class MatrixContainer &Fragment, class KeySetsContainer &KeySets, const char *dir, const char *prefix, const char *msg, const char *datum, void (*CreateFragmentOrder)(class MatrixContainer &, class KeySetsContainer &, int))
     331bool 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))
    454332{
    455333  stringstream filename;
     
    460338  cout << msg << endl;
    461339  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;
    463341  // max
    464   for (int BondOrder=0;BondOrder<KeySets.Order;BondOrder++) {
     342  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
    465343    Fragment.SetLastMatrix(0.,0);
    466     CreateFragmentOrder(Fragment, KeySets, BondOrder);
    467     output << BondOrder+1 << "\t" << KeySets.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++)
    469347      output << scientific << "\t" << Fragment.Matrix[ Fragment.MatrixCounter ][ Fragment.RowCounter[ Fragment.MatrixCounter ]-1 ][l];
    470348    output << endl;
     
    480358void CreateEnergy(class MatrixContainer &Energy, int MatrixNumber)
    481359{
    482   for(int k=0;k<Energy.ColumnCounter[MatrixNumber];k++)
     360  for(int k=0;k<Energy.ColumnCounter;k++)
    483361    Energy.Matrix[MatrixNumber][ Energy.RowCounter[MatrixNumber] ] [k] =  Energy.Matrix[MatrixNumber][ Energy.RowCounter[MatrixNumber]-1 ] [k];
    484362};
     
    491369void CreateMinimumForce(class MatrixContainer &Force, int MatrixNumber)
    492370{
    493   for (int l=Force.ColumnCounter[MatrixNumber];l--;)
     371  for (int l=Force.ColumnCounter;l--;)
    494372    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) {
    496374    double stored = 0;
    497375    int k=0;
     
    526404{
    527405  int divisor = 0;
    528   for (int l=Force.ColumnCounter[MatrixNumber];l--;)
     406  for (int l=Force.ColumnCounter;l--;)
    529407    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) {
    531409    double tmp = 0;
    532410    for (int k=Force.RowCounter[MatrixNumber];k--;) {
     
    550428void CreateMaximumForce(class MatrixContainer &Force, int MatrixNumber)
    551429{
    552   for (int l=5;l<Force.ColumnCounter[MatrixNumber];l+=3) {
     430  for (int l=5;l<Force.ColumnCounter;l+=3) {
    553431    double stored = 0;
    554432    for (int k=Force.RowCounter[MatrixNumber];k--;) {
     
    582460void CreateVectorSumForce(class MatrixContainer &Force, int MatrixNumber)
    583461{
    584   for (int l=Force.ColumnCounter[MatrixNumber];l--;)
     462  for (int l=Force.ColumnCounter;l--;)
    585463    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++) {
    587465    for (int k=Force.RowCounter[MatrixNumber];k--;)
    588466      Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] += Force.Matrix[MatrixNumber][k][l];
     
    620498/** Creates the pyxplotfile for energy data.
    621499 * \param Matrix MatrixContainer with matrix values
    622  * \param KeySets contains bond order
     500 * \param KeySet contains bond order
    623501 * \param *dir directory
    624502 * \param *prefix prefix for all filenames (without ending)
     
    637515 * \return true if file was written successfully
    638516 */
    639 bool CreatePlotOrder(class MatrixContainer &Matrix, const class KeySetsContainer &KeySets, 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 *))
     517bool 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 *))
    640518{
    641519  stringstream filename;
     
    660538void AbsEnergyPlotLine(ofstream &output, class MatrixContainer &Energy, const char *prefix, const char *xargument, const char *uses)
    661539{
    662   stringstream line(Energy.Header[ Energy.MatrixCounter ]);
     540  stringstream line(Energy.Header);
    663541  string token;
    664542
    665543  getline(line, token, '\t');
    666   for (int i=2; i<= Energy.ColumnCounter[Energy.MatrixCounter];i++) {
     544  for (int i=2; i<= Energy.ColumnCounter;i++) {
    667545    getline(line, token, '\t');
    668546    while (token[0] == ' ') // remove leading white spaces
    669547      token.erase(0,1);
    670548    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(abs($" << i+2 << ")) " << uses;
    671     if (i != (Energy.ColumnCounter[Energy.MatrixCounter]))
     549    if (i != (Energy.ColumnCounter))
    672550      output << ", \\";
    673551    output << endl;
     
    684562void EnergyPlotLine(ofstream &output, class MatrixContainer &Energy, const char *prefix, const char *xargument, const char *uses)
    685563{
    686   stringstream line(Energy.Header[Energy.MatrixCounter]);
     564  stringstream line(Energy.Header);
    687565  string token;
    688566
    689567  getline(line, token, '\t');
    690   for (int i=1; i<= Energy.ColumnCounter[Energy.MatrixCounter];i++) {
     568  for (int i=1; i<= Energy.ColumnCounter;i++) {
    691569    getline(line, token, '\t');
    692570    while (token[0] == ' ') // remove leading white spaces
    693571      token.erase(0,1);
    694572    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":" << i+2 << " " << uses;
    695     if (i != (Energy.ColumnCounter[Energy.MatrixCounter]))
     573    if (i != (Energy.ColumnCounter))
    696574      output << ", \\";
    697575    output << endl;
     
    708586void ForceMagnitudePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    709587{
    710   stringstream line(Force.Header[Force.MatrixCounter]);
     588  stringstream line(Force.Header);
    711589  string token;
    712590
     
    716594  getline(line, token, '\t');
    717595  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) {
    719597    getline(line, token, '\t');
    720598    while (token[0] == ' ') // remove leading white spaces
     
    722600    token.erase(token.length(), 1);  // kill residual index char (the '0')
    723601    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))
    725603      output << ", \\";
    726604    output << endl;
     
    739617void AbsFirstForceValuePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    740618{
    741   stringstream line(Force.Header[Force.MatrixCounter]);
     619  stringstream line(Force.Header);
    742620  string token;
    743621
     
    747625  getline(line, token, '\t');
    748626  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) {
    750628    getline(line, token, '\t');
    751629    while (token[0] == ' ') // remove leading white spaces
     
    753631    token.erase(token.length(), 1);  // kill residual index char (the '0')
    754632    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))
    756634      output << ", \\";
    757635    output << endl;
     
    770648void BoxesForcePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    771649{
    772   stringstream line(Force.Header[Force.MatrixCounter]);
    773   char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
     650  stringstream line(Force.Header);
     651  const char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
    774652  string token;
    775653
     
    779657  getline(line, token, '\t');
    780658  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) {
    782660    getline(line, token, '\t');
    783661    while (token[0] == ' ') // remove leading white spaces
     
    785663    token.erase(token.length(), 1);  // kill residual index char (the '0')
    786664    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))
    788666      output << ", \\";
    789667    output << endl;
     
    802680void BoxesFirstForceValuePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    803681{
    804   stringstream line(Force.Header[Force.MatrixCounter]);
    805   char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
     682  stringstream line(Force.Header);
     683  const char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
    806684  string token;
    807685
     
    811689  getline(line, token, '\t');
    812690  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) {
    814692    getline(line, token, '\t');
    815693    while (token[0] == ' ') // remove leading white spaces
     
    817695    token.erase(token.length(), 1);  // kill residual index char (the '0')
    818696    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))
    820698      output << ", \\";
    821699    output << endl;
Note: See TracChangeset for help on using the changeset viewer.