Ignore:
Timestamp:
Jul 23, 2009, 9:14:18 AM (16 years ago)
Author:
Frederik Heber <heber@…>
Children:
3b470f
Parents:
2218dca (diff), 6ce722 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'HessianMatrix'

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/datacreator.cpp

    r2218dca r09f4dc  
    6363  cout << msg << endl;
    6464  output << "# " << msg << ", created on " << datum;
    65   output << "#Order\tFrag.No.\t" << Fragments.Header << endl;
     65  output << "#Order\tFrag.No.\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
    6666  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
    6767    for(int i=KeySet.FragmentsPerOrder[BondOrder];i--;) {
    6868      for(int j=Fragments.RowCounter[ KeySet.OrderSet[BondOrder][i] ];j--;)
    69         for(int k=Fragments.ColumnCounter;k--;)
     69        for(int k=Fragments.ColumnCounter[ KeySet.OrderSet[BondOrder][i] ];k--;)
    7070          Fragments.Matrix[Fragments.MatrixCounter][j][k] += Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k];
    7171    }
    7272    output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder];
    73     for (int l=0;l<Fragments.ColumnCounter;l++)
     73    for (int l=0;l<Fragments.ColumnCounter[Fragments.MatrixCounter];l++)
    7474      output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter]-1 ][l];
    7575    output << endl;
     
    9696  cout << msg << endl;
    9797  output << "# " << msg << ", created on " << datum;
    98   output << "#Order\tFrag.No.\t" << Fragments.Header << endl;
     98  output << "#Order\tFrag.No.\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
    9999  Fragments.SetLastMatrix(Energy.Matrix[Energy.MatrixCounter],0);
    100100  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
    101101    for(int i=KeySet.FragmentsPerOrder[BondOrder];i--;) {
    102102      for(int j=Fragments.RowCounter[ KeySet.OrderSet[BondOrder][i] ];j--;)
    103         for(int k=Fragments.ColumnCounter;k--;)
     103        for(int k=Fragments.ColumnCounter[ KeySet.OrderSet[BondOrder][i] ];k--;)
    104104          Fragments.Matrix[Fragments.MatrixCounter][j][k] -= Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k];
    105105    }
    106106    output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder];
    107     for (int l=0;l<Fragments.ColumnCounter;l++)
     107    for (int l=0;l<Fragments.ColumnCounter[Energy.MatrixCounter];l++)
    108108      if (fabs(Energy.Matrix[Energy.MatrixCounter][ Energy.RowCounter[Energy.MatrixCounter]-1 ][l]) < MYEPSILON)
    109109        output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter]-1 ][l];
     
    133133  cout << msg << endl;
    134134  output << "# " << msg << ", created on " << datum;
    135   output << "# Order\tFrag.No.\t" << Fragments.Header << endl;
     135  output << "# Order\tFrag.No.\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
    136136  Fragments.SetLastMatrix(0.,0);
    137137  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     
    139139    output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder];
    140140    CreateForce(Fragments, Fragments.MatrixCounter);
    141     for (int l=0;l<Fragments.ColumnCounter;l++)
     141    for (int l=0;l<Fragments.ColumnCounter[Fragments.MatrixCounter];l++)
    142142       output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter] ][l];
    143143    output << endl;
     
    165165  cout << msg << endl;
    166166  output << "# " << msg << ", created on " << datum;
    167   output << "# Order\tFrag.No.\t" << Fragments.Header << endl;
     167  output << "# Order\tFrag.No.\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
    168168  Fragments.SetLastMatrix(Force.Matrix[Force.MatrixCounter],0);
    169169  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     
    171171    output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder];
    172172    CreateForce(Fragments, Fragments.MatrixCounter);
    173     for (int l=0;l<Fragments.ColumnCounter;l++)
     173    for (int l=0;l<Fragments.ColumnCounter[Fragments.MatrixCounter];l++)
    174174       output << scientific << "\t" << Fragments.Matrix[Fragments.MatrixCounter][ Fragments.RowCounter[Fragments.MatrixCounter] ][l];
    175175    output << endl;
     
    198198  cout << msg << endl;
    199199  output << "# " << msg << ", created on " << datum;
    200   output << "# AtomNo\t" << Fragments.Header << endl;
     200  output << "# AtomNo\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
    201201  Fragments.SetLastMatrix(Force.Matrix[Force.MatrixCounter], 0);
    202202  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     
    207207    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
    208208      output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t";
    209       for (int l=0;l<Fragments.ColumnCounter;l++) {
     209      for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++) {
    210210        if (((l+1) % 3) == 0) {
    211211          norm = 0.;
     
    244244  cout << msg << endl;
    245245  output << "# " << msg << ", created on " << datum;
    246   output << "# AtomNo\t" << Fragments.Header << endl;
     246  output << "# AtomNo\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
    247247  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
    248248    //cout << "Current order is " << BondOrder << "." << endl;
     
    252252    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
    253253      output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t";
    254       for (int l=0;l<Fragments.ColumnCounter;l++)
     254      for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++)
    255255        output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";
    256256      output << endl;
     
    262262};
    263263
     264
     265/** Plot hessian error vs. vs atom vs. order.
     266 * \param &Hessian HessianMatrix containing reference values (in MatrixCounter matrix)
     267 * \param &Fragments HessianMatrix class containing matrix values
     268 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
     269 * \param *prefix prefix in filename (without ending)
     270 * \param *msg message to be place in first line as a comment
     271 * \param *datum current date and time
     272 * \return true if file was written successfully
     273 */
     274bool CreateDataDeltaHessianOrderPerAtom(class HessianMatrix &Hessian, class HessianMatrix &Fragments, class KeySetsContainer &KeySet, char *dir, char *prefix, char *msg, char *datum)
     275{
     276  stringstream filename;
     277  ofstream output;
     278  double norm = 0.;
     279
     280  filename << prefix << ".dat";
     281  if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;
     282  cout << msg << endl;
     283  output << "# " << msg << ", created on " << datum;
     284  output << "# AtomNo\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
     285  Fragments.SetLastMatrix(Hessian.Matrix[Hessian.MatrixCounter], 0);
     286  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     287    //cout << "Current order is " << BondOrder << "." << endl;
     288    Fragments.SumSubHessians(Fragments, KeySet, BondOrder, -1.);
     289    // errors per atom
     290    output << endl << "#Order\t" << BondOrder+1 << endl;
     291    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
     292      output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t";
     293      for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++) {
     294        output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";
     295      }
     296      output << endl;
     297    }
     298    output << endl;
     299  }
     300  output.close();
     301  return true;
     302};
     303
     304/** Plot hessian error vs. vs atom vs. order in the frobenius norm.
     305 * \param &Hessian HessianMatrix containing reference values (in MatrixCounter matrix)
     306 * \param &Fragments HessianMatrix class containing matrix values
     307 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
     308 * \param *prefix prefix in filename (without ending)
     309 * \param *msg message to be place in first line as a comment
     310 * \param *datum current date and time
     311 * \return true if file was written successfully
     312 */
     313bool CreateDataDeltaFrobeniusOrderPerAtom(class HessianMatrix &Hessian, class HessianMatrix &Fragments, class KeySetsContainer &KeySet, char *dir, char *prefix, char *msg, char *datum)
     314{
     315  stringstream filename;
     316  ofstream output;
     317  double norm = 0;
     318  double tmp;
     319
     320  filename << prefix << ".dat";
     321  if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;
     322  cout << msg << endl;
     323  output << "# " << msg << ", created on " << datum;
     324  output << "# AtomNo\t";
     325  Fragments.SetLastMatrix(Hessian.Matrix[Hessian.MatrixCounter], 0);
     326  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     327    output << "Order" << BondOrder+1 << "\t";
     328  }
     329  output << endl;
     330  output << Fragments.RowCounter[ Fragments.MatrixCounter ] << "\t";
     331  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     332    //cout << "Current order is " << BondOrder << "." << endl;
     333    Fragments.SumSubHessians(Fragments, KeySet, BondOrder, -1.);
     334    // frobenius norm of errors per atom
     335    norm = 0.;
     336    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
     337      for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++) {
     338        tmp = Fragments.Matrix[Fragments.MatrixCounter][ j ][l];
     339        norm += tmp*tmp;
     340      }
     341    }
     342    output << scientific << sqrt(norm)/(Fragments.RowCounter[ Fragments.MatrixCounter ]*Fragments.ColumnCounter[ Fragments.MatrixCounter] ) << "\t";
     343  }
     344  output << endl;
     345  output.close();
     346  return true;
     347};
     348
     349/** Plot hessian error vs. vs atom vs. order.
     350 * \param &Fragments HessianMatrix class containing matrix values
     351 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
     352 * \param *prefix prefix in filename (without ending)
     353 * \param *msg message to be place in first line as a comment
     354 * \param *datum current date and time
     355 * \return true if file was written successfully
     356 */
     357bool CreateDataHessianOrderPerAtom(class HessianMatrix &Fragments, class KeySetsContainer &KeySet, char *dir, char *prefix, char *msg, char *datum)
     358{
     359  stringstream filename;
     360  ofstream output;
     361
     362  filename << prefix << ".dat";
     363  if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;
     364  cout << msg << endl;
     365  output << "# " << msg << ", created on " << datum;
     366  output << "# AtomNo\t" << Fragments.Header[ Fragments.MatrixCounter ] << endl;
     367  Fragments.SetLastMatrix(0., 0);
     368  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     369    //cout << "Current order is " << BondOrder << "." << endl;
     370    Fragments.SumSubHessians(Fragments, KeySet, BondOrder, 1.);
     371    // errors per atom
     372    output << endl << "#Order\t" << BondOrder+1 << endl;
     373    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
     374      output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t";
     375      for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++)
     376        output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";
     377      output << endl;
     378    }
     379    output << endl;
     380  }
     381  output.close();
     382  return true;
     383};
     384
    264385/** Plot matrix vs. fragment.
    265386 */
     
    273394  cout << msg << endl;
    274395  output << "# " << msg << ", created on " << datum << endl;
    275   output << "#Order\tFrag.No.\t" << Fragment.Header << endl;
     396  output << "#Order\tFrag.No.\t" << Fragment.Header[ Fragment.MatrixCounter ] << endl;
    276397  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
    277398    for(int i=0;i<KeySet.FragmentsPerOrder[BondOrder];i++) {
    278399      output << BondOrder+1 << "\t" << KeySet.OrderSet[BondOrder][i]+1;
    279400      CreateFragment(Fragment, KeySet.OrderSet[BondOrder][i]);
    280       for (int l=0;l<Fragment.ColumnCounter;l++)
     401      for (int l=0;l<Fragment.ColumnCounter[ KeySet.OrderSet[BondOrder][i] ];l++)
    281402        output << scientific << "\t" << Fragment.Matrix[ KeySet.OrderSet[BondOrder][i] ][ Fragment.RowCounter[ KeySet.OrderSet[BondOrder][i] ] ][l];
    282403      output << endl;
     
    297418    for(int i=KeySet.FragmentsPerOrder[BondOrder];i--;) {
    298419      if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) < fabs(Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][1])) {
    299         for (int k=Fragments.ColumnCounter;k--;)
     420        for (int k=Fragments.ColumnCounter[ Fragments.MatrixCounter ];k--;)
    300421          Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k];
    301422      }
     
    314435    int i=0;
    315436    do {  // first get a minimum value unequal to 0
    316       for (int k=Fragments.ColumnCounter;k--;)
     437      for (int k=Fragments.ColumnCounter[ Fragments.MatrixCounter ];k--;)
    317438        Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k];
    318439      i++;
     
    320441    for(;i<KeySet.FragmentsPerOrder[BondOrder];i++) { // then find lowest
    321442      if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) > fabs(Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][1])) {
    322         for (int k=Fragments.ColumnCounter;k--;)
     443        for (int k=Fragments.ColumnCounter[ Fragments.MatrixCounter ];k--;)
    323444          Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k];
    324445      }
     
    338459  cout << msg << endl;
    339460  output << "# " << msg << ", created on " << datum;
    340   output << "#Order\tFrag.No.\t" << Fragment.Header << endl;
     461  output << "#Order\tFrag.No.\t" << Fragment.Header[ Fragment.MatrixCounter ] << endl;
    341462  // max
    342463  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     
    344465    CreateFragmentOrder(Fragment, KeySet, BondOrder);
    345466    output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder];
    346     for (int l=0;l<Fragment.ColumnCounter;l++)
     467    for (int l=0;l<Fragment.ColumnCounter[ Fragment.MatrixCounter ];l++)
    347468      output << scientific << "\t" << Fragment.Matrix[ Fragment.MatrixCounter ][ Fragment.RowCounter[ Fragment.MatrixCounter ]-1 ][l];
    348469    output << endl;
     
    358479void CreateEnergy(class MatrixContainer &Energy, int MatrixNumber)
    359480{
    360   for(int k=0;k<Energy.ColumnCounter;k++)
     481  for(int k=0;k<Energy.ColumnCounter[MatrixNumber];k++)
    361482    Energy.Matrix[MatrixNumber][ Energy.RowCounter[MatrixNumber] ] [k] =  Energy.Matrix[MatrixNumber][ Energy.RowCounter[MatrixNumber]-1 ] [k];
    362483};
     
    369490void CreateMinimumForce(class MatrixContainer &Force, int MatrixNumber)
    370491{
    371   for (int l=Force.ColumnCounter;l--;)
     492  for (int l=Force.ColumnCounter[MatrixNumber];l--;)
    372493    Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.;
    373   for (int l=5;l<Force.ColumnCounter;l+=3) {
     494  for (int l=5;l<Force.ColumnCounter[MatrixNumber];l+=3) {
    374495    double stored = 0;
    375496    int k=0;
     
    404525{
    405526  int divisor = 0;
    406   for (int l=Force.ColumnCounter;l--;)
     527  for (int l=Force.ColumnCounter[MatrixNumber];l--;)
    407528    Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.;
    408   for (int l=5;l<Force.ColumnCounter;l+=3) {
     529  for (int l=5;l<Force.ColumnCounter[MatrixNumber];l+=3) {
    409530    double tmp = 0;
    410531    for (int k=Force.RowCounter[MatrixNumber];k--;) {
     
    428549void CreateMaximumForce(class MatrixContainer &Force, int MatrixNumber)
    429550{
    430   for (int l=5;l<Force.ColumnCounter;l+=3) {
     551  for (int l=5;l<Force.ColumnCounter[MatrixNumber];l+=3) {
    431552    double stored = 0;
    432553    for (int k=Force.RowCounter[MatrixNumber];k--;) {
     
    460581void CreateVectorSumForce(class MatrixContainer &Force, int MatrixNumber)
    461582{
    462   for (int l=Force.ColumnCounter;l--;)
     583  for (int l=Force.ColumnCounter[MatrixNumber];l--;)
    463584    Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.;
    464   for (int l=0;l<Force.ColumnCounter;l++) {
     585  for (int l=0;l<Force.ColumnCounter[MatrixNumber];l++) {
    465586    for (int k=Force.RowCounter[MatrixNumber];k--;)
    466587      Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] += Force.Matrix[MatrixNumber][k][l];
     
    538659void AbsEnergyPlotLine(ofstream &output, class MatrixContainer &Energy, const char *prefix, const char *xargument, const char *uses)
    539660{
    540   stringstream line(Energy.Header);
     661  stringstream line(Energy.Header[ Energy.MatrixCounter ]);
    541662  string token;
    542663
    543664  getline(line, token, '\t');
    544   for (int i=2; i<= Energy.ColumnCounter;i++) {
     665  for (int i=2; i<= Energy.ColumnCounter[Energy.MatrixCounter];i++) {
    545666    getline(line, token, '\t');
    546667    while (token[0] == ' ') // remove leading white spaces
    547668      token.erase(0,1);
    548669    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(abs($" << i+2 << ")) " << uses;
    549     if (i != (Energy.ColumnCounter))
     670    if (i != (Energy.ColumnCounter[Energy.MatrixCounter]))
    550671      output << ", \\";
    551672    output << endl;
     
    562683void EnergyPlotLine(ofstream &output, class MatrixContainer &Energy, const char *prefix, const char *xargument, const char *uses)
    563684{
    564   stringstream line(Energy.Header);
     685  stringstream line(Energy.Header[Energy.MatrixCounter]);
    565686  string token;
    566687
    567688  getline(line, token, '\t');
    568   for (int i=1; i<= Energy.ColumnCounter;i++) {
     689  for (int i=1; i<= Energy.ColumnCounter[Energy.MatrixCounter];i++) {
    569690    getline(line, token, '\t');
    570691    while (token[0] == ' ') // remove leading white spaces
    571692      token.erase(0,1);
    572693    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":" << i+2 << " " << uses;
    573     if (i != (Energy.ColumnCounter))
     694    if (i != (Energy.ColumnCounter[Energy.MatrixCounter]))
    574695      output << ", \\";
    575696    output << endl;
     
    586707void ForceMagnitudePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    587708{
    588   stringstream line(Force.Header);
     709  stringstream line(Force.Header[Force.MatrixCounter]);
    589710  string token;
    590711
     
    594715  getline(line, token, '\t');
    595716  getline(line, token, '\t');
    596   for (int i=7; i< Force.ColumnCounter;i+=NDIM) {
     717  for (int i=7; i< Force.ColumnCounter[Force.MatrixCounter];i+=NDIM) {
    597718    getline(line, token, '\t');
    598719    while (token[0] == ' ') // remove leading white spaces
     
    600721    token.erase(token.length(), 1);  // kill residual index char (the '0')
    601722    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(sqrt($" << i+1 << "*$" << i+1 << "+$" << i+2 << "*$" << i+2 << "+$" << i+3 << "*$" << i+3 << ")) " << uses;
    602     if (i != (Force.ColumnCounter-1))
     723    if (i != (Force.ColumnCounter[Force.MatrixCounter]-1))
    603724      output << ", \\";
    604725    output << endl;
     
    617738void AbsFirstForceValuePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    618739{
    619   stringstream line(Force.Header);
     740  stringstream line(Force.Header[Force.MatrixCounter]);
    620741  string token;
    621742
     
    625746  getline(line, token, '\t');
    626747  getline(line, token, '\t');
    627   for (int i=7; i< Force.ColumnCounter;i+=NDIM) {
     748  for (int i=7; i< Force.ColumnCounter[Force.MatrixCounter];i+=NDIM) {
    628749    getline(line, token, '\t');
    629750    while (token[0] == ' ') // remove leading white spaces
     
    631752    token.erase(token.length(), 1);  // kill residual index char (the '0')
    632753    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(abs($" << i+1 << ")) " << uses;
    633     if (i != (Force.ColumnCounter-1))
     754    if (i != (Force.ColumnCounter[Force.MatrixCounter]-1))
    634755      output << ", \\";
    635756    output << endl;
     
    648769void BoxesForcePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    649770{
    650   stringstream line(Force.Header);
     771  stringstream line(Force.Header[Force.MatrixCounter]);
    651772  char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
    652773  string token;
     
    657778  getline(line, token, '\t');
    658779  getline(line, token, '\t');
    659   for (int i=7; i< Force.ColumnCounter;i+=NDIM) {
     780  for (int i=7; i< Force.ColumnCounter[Force.MatrixCounter];i+=NDIM) {
    660781    getline(line, token, '\t');
    661782    while (token[0] == ' ') // remove leading white spaces
     
    663784    token.erase(token.length(), 1);  // kill residual index char (the '0')
    664785    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];
    665     if (i != (Force.ColumnCounter-1))
     786    if (i != (Force.ColumnCounter[Force.MatrixCounter]-1))
    666787      output << ", \\";
    667788    output << endl;
     
    680801void BoxesFirstForceValuePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    681802{
    682   stringstream line(Force.Header);
     803  stringstream line(Force.Header[Force.MatrixCounter]);
    683804  char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
    684805  string token;
     
    689810  getline(line, token, '\t');
    690811  getline(line, token, '\t');
    691   for (int i=7; i< Force.ColumnCounter;i+=NDIM) {
     812  for (int i=7; i< Force.ColumnCounter[Force.MatrixCounter];i+=NDIM) {
    692813    getline(line, token, '\t');
    693814    while (token[0] == ' ') // remove leading white spaces
     
    695816    token.erase(token.length(), 1);  // kill residual index char (the '0')
    696817    output << "'" << prefix << ".dat' title '" << token << "' using ($" << xargument << "+" << fixed << setprecision(1) << (double)((i-7)/3)*0.2 << "):" << i+1 << " " << uses << " " << fillcolor[(i-7)/3];
    697     if (i != (Force.ColumnCounter-1))
     818    if (i != (Force.ColumnCounter[Force.MatrixCounter]-1))
    698819      output << ", \\";
    699820    output << endl;
Note: See TracChangeset for help on using the changeset viewer.