Changeset 36ec71 for src/datacreator.cpp


Ignore:
Timestamp:
Jul 24, 2009, 10:38:32 AM (16 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
d30402
Parents:
042f82 (diff), 51c910 (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.
git-author:
Frederik Heber <heber@…> (07/23/09 14:23:32)
git-committer:
Frederik Heber <heber@…> (07/24/09 10:38:32)
Message:

Merge branch 'master' into ConcaveHull

Conflicts:

molecuilder/src/analyzer.cpp
molecuilder/src/bond.cpp
molecuilder/src/boundary.cpp
molecuilder/src/boundary.hpp
molecuilder/src/builder.cpp
molecuilder/src/config.cpp
molecuilder/src/datacreator.cpp
molecuilder/src/datacreator.hpp
molecuilder/src/defs.hpp
molecuilder/src/ellipsoid.cpp
molecuilder/src/joiner.cpp
molecuilder/src/molecules.cpp
molecuilder/src/molecules.hpp
molecuilder/src/parser.cpp
molecuilder/src/parser.hpp

merges:

compilation fixes:

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/datacreator.cpp

    r042f82 r36ec71  
    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.;
     
    213213            norm += Force.Matrix[Force.MatrixCounter][ j ][l+m]*Force.Matrix[Force.MatrixCounter][ j ][l+m];
    214214          norm = sqrt(norm);
    215         }
     215        }                                                                                                   
    216216//        if (norm < MYEPSILON)
    217217          output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";
     
    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, const char *dir, const char *prefix, const char *msg, const char *datum)
     275{
     276  stringstream filename;
     277  ofstream output;
     278
     279  filename << prefix << ".dat";
     280  if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;
     281  cout << msg << endl;
     282  output << "# " << msg << ", created on " << datum;
     283  output << "# AtomNo\t" << Fragments.Header[Fragments.MatrixCounter] << endl;
     284  Fragments.SetLastMatrix(Hessian.Matrix[Hessian.MatrixCounter], 0);
     285  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     286    //cout << "Current order is " << BondOrder << "." << endl;
     287    Fragments.SumSubHessians(Fragments, KeySet, BondOrder, -1.);
     288    // errors per atom
     289    output << endl << "#Order\t" << BondOrder+1 << endl;
     290    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
     291      output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t";
     292      for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++) {
     293        output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";
     294      }
     295      output << endl;
     296    }
     297    output << endl;
     298  }
     299  output.close();
     300  return true;
     301};
     302
     303/** Plot hessian error vs. vs atom vs. order in the frobenius norm.
     304 * \param &Hessian HessianMatrix containing reference values (in MatrixCounter matrix)
     305 * \param &Fragments HessianMatrix class containing matrix values
     306 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
     307 * \param *prefix prefix in filename (without ending)
     308 * \param *msg message to be place in first line as a comment
     309 * \param *datum current date and time
     310 * \return true if file was written successfully
     311 */
     312bool CreateDataDeltaFrobeniusOrderPerAtom(class HessianMatrix &Hessian, class HessianMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum)
     313{
     314  stringstream filename;
     315  ofstream output;
     316  double norm = 0;
     317  double tmp;
     318
     319  filename << prefix << ".dat";
     320  if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;
     321  cout << msg << endl;
     322  output << "# " << msg << ", created on " << datum;
     323  output << "# AtomNo\t";
     324  Fragments.SetLastMatrix(Hessian.Matrix[Hessian.MatrixCounter], 0);
     325  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     326    output << "Order" << BondOrder+1 << "\t";
     327  }
     328  output << endl;
     329  output << Fragments.RowCounter[ Fragments.MatrixCounter ] << "\t";
     330  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     331    //cout << "Current order is " << BondOrder << "." << endl;
     332    Fragments.SumSubHessians(Fragments, KeySet, BondOrder, -1.);
     333    // frobenius norm of errors per atom
     334    norm = 0.;
     335    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
     336      for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++) {
     337        tmp = Fragments.Matrix[Fragments.MatrixCounter][ j ][l];
     338        norm += tmp*tmp;
     339      }
     340    }
     341    output << scientific << sqrt(norm)/(Fragments.RowCounter[ Fragments.MatrixCounter ]*Fragments.ColumnCounter[ Fragments.MatrixCounter] ) << "\t";
     342  }
     343  output << endl;
     344  output.close();
     345  return true;
     346};
     347
     348/** Plot hessian error vs. vs atom vs. order.
     349 * \param &Fragments HessianMatrix class containing matrix values
     350 * \param KeySet KeySetContainer class holding bond KeySetContainer::Order
     351 * \param *prefix prefix in filename (without ending)
     352 * \param *msg message to be place in first line as a comment
     353 * \param *datum current date and time
     354 * \return true if file was written successfully
     355 */
     356bool CreateDataHessianOrderPerAtom(class HessianMatrix &Fragments, class KeySetsContainer &KeySet, const char *dir, const char *prefix, const char *msg, const char *datum)
     357{
     358  stringstream filename;
     359  ofstream output;
     360
     361  filename << prefix << ".dat";
     362  if (!OpenOutputFile(output, dir, filename.str().c_str())) return false;
     363  cout << msg << endl;
     364  output << "# " << msg << ", created on " << datum;
     365  output << "# AtomNo\t" << Fragments.Header[ Fragments.MatrixCounter ] << endl;
     366  Fragments.SetLastMatrix(0., 0);
     367  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     368    //cout << "Current order is " << BondOrder << "." << endl;
     369    Fragments.SumSubHessians(Fragments, KeySet, BondOrder, 1.);
     370    // errors per atom
     371    output << endl << "#Order\t" << BondOrder+1 << endl;
     372    for(int j=0;j<Fragments.RowCounter[ Fragments.MatrixCounter ];j++) {
     373      output << Fragments.Indices[Fragments.MatrixCounter][j] << "\t";
     374      for (int l=0;l<Fragments.ColumnCounter[ Fragments.MatrixCounter ];l++)
     375        output << scientific << Fragments.Matrix[Fragments.MatrixCounter][ j ][l] << "\t";
     376      output << endl;
     377    }
     378    output << endl;
     379  }
     380  output.close();
     381  return true;
     382};
     383
    264384/** Plot matrix vs. fragment.
    265385 */
     
    273393  cout << msg << endl;
    274394  output << "# " << msg << ", created on " << datum << endl;
    275   output << "#Order\tFrag.No.\t" << Fragment.Header << endl;
     395  output << "#Order\tFrag.No.\t" << Fragment.Header[ Fragment.MatrixCounter ] << endl;
    276396  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
    277397    for(int i=0;i<KeySet.FragmentsPerOrder[BondOrder];i++) {
    278398      output << BondOrder+1 << "\t" << KeySet.OrderSet[BondOrder][i]+1;
    279399      CreateFragment(Fragment, KeySet.OrderSet[BondOrder][i]);
    280       for (int l=0;l<Fragment.ColumnCounter;l++)
     400      for (int l=0;l<Fragment.ColumnCounter[ KeySet.OrderSet[BondOrder][i] ];l++)
    281401        output << scientific << "\t" << Fragment.Matrix[ KeySet.OrderSet[BondOrder][i] ][ Fragment.RowCounter[ KeySet.OrderSet[BondOrder][i] ] ][l];
    282402      output << endl;
     
    297417    for(int i=KeySet.FragmentsPerOrder[BondOrder];i--;) {
    298418      if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) < fabs(Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][1])) {
    299         for (int k=Fragments.ColumnCounter;k--;)
     419        for (int k=Fragments.ColumnCounter[ Fragments.MatrixCounter ];k--;)
    300420          Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k];
    301421      }
     
    314434    int i=0;
    315435    do {  // first get a minimum value unequal to 0
    316       for (int k=Fragments.ColumnCounter;k--;)
     436      for (int k=Fragments.ColumnCounter[ Fragments.MatrixCounter ];k--;)
    317437        Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k];
    318438      i++;
     
    320440    for(;i<KeySet.FragmentsPerOrder[BondOrder];i++) { // then find lowest
    321441      if (fabs(Fragments.Matrix[ Fragments.MatrixCounter ][j][1]) > fabs(Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][1])) {
    322         for (int k=Fragments.ColumnCounter;k--;)
     442        for (int k=Fragments.ColumnCounter[ Fragments.MatrixCounter ];k--;)
    323443          Fragments.Matrix[ Fragments.MatrixCounter ][j][k] = Fragments.Matrix[ KeySet.OrderSet[BondOrder][i] ][j][k];
    324444      }
     
    338458  cout << msg << endl;
    339459  output << "# " << msg << ", created on " << datum;
    340   output << "#Order\tFrag.No.\t" << Fragment.Header << endl;
     460  output << "#Order\tFrag.No.\t" << Fragment.Header[ Fragment.MatrixCounter ] << endl;
    341461  // max
    342462  for (int BondOrder=0;BondOrder<KeySet.Order;BondOrder++) {
     
    344464    CreateFragmentOrder(Fragment, KeySet, BondOrder);
    345465    output << BondOrder+1 << "\t" << KeySet.FragmentsPerOrder[BondOrder];
    346     for (int l=0;l<Fragment.ColumnCounter;l++)
     466    for (int l=0;l<Fragment.ColumnCounter[ Fragment.MatrixCounter ];l++)
    347467      output << scientific << "\t" << Fragment.Matrix[ Fragment.MatrixCounter ][ Fragment.RowCounter[ Fragment.MatrixCounter ]-1 ][l];
    348468    output << endl;
     
    358478void CreateEnergy(class MatrixContainer &Energy, int MatrixNumber)
    359479{
    360   for(int k=0;k<Energy.ColumnCounter;k++)
     480  for(int k=0;k<Energy.ColumnCounter[MatrixNumber];k++)
    361481    Energy.Matrix[MatrixNumber][ Energy.RowCounter[MatrixNumber] ] [k] =  Energy.Matrix[MatrixNumber][ Energy.RowCounter[MatrixNumber]-1 ] [k];
    362482};
     
    369489void CreateMinimumForce(class MatrixContainer &Force, int MatrixNumber)
    370490{
    371   for (int l=Force.ColumnCounter;l--;)
     491  for (int l=Force.ColumnCounter[MatrixNumber];l--;)
    372492    Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.;
    373   for (int l=5;l<Force.ColumnCounter;l+=3) {
     493  for (int l=5;l<Force.ColumnCounter[MatrixNumber];l+=3) {
    374494    double stored = 0;
    375495    int k=0;
     
    404524{
    405525  int divisor = 0;
    406   for (int l=Force.ColumnCounter;l--;)
     526  for (int l=Force.ColumnCounter[MatrixNumber];l--;)
    407527    Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.;
    408   for (int l=5;l<Force.ColumnCounter;l+=3) {
     528  for (int l=5;l<Force.ColumnCounter[MatrixNumber];l+=3) {
    409529    double tmp = 0;
    410530    for (int k=Force.RowCounter[MatrixNumber];k--;) {
     
    428548void CreateMaximumForce(class MatrixContainer &Force, int MatrixNumber)
    429549{
    430   for (int l=5;l<Force.ColumnCounter;l+=3) {
     550  for (int l=5;l<Force.ColumnCounter[MatrixNumber];l+=3) {
    431551    double stored = 0;
    432552    for (int k=Force.RowCounter[MatrixNumber];k--;) {
     
    460580void CreateVectorSumForce(class MatrixContainer &Force, int MatrixNumber)
    461581{
    462   for (int l=Force.ColumnCounter;l--;)
     582  for (int l=Force.ColumnCounter[MatrixNumber];l--;)
    463583    Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] = 0.;
    464   for (int l=0;l<Force.ColumnCounter;l++) {
     584  for (int l=0;l<Force.ColumnCounter[MatrixNumber];l++) {
    465585    for (int k=Force.RowCounter[MatrixNumber];k--;)
    466586      Force.Matrix[MatrixNumber][ Force.RowCounter[MatrixNumber] ][l] += Force.Matrix[MatrixNumber][k][l];
     
    538658void AbsEnergyPlotLine(ofstream &output, class MatrixContainer &Energy, const char *prefix, const char *xargument, const char *uses)
    539659{
    540   stringstream line(Energy.Header);
     660  stringstream line(Energy.Header[ Energy.MatrixCounter ]);
    541661  string token;
    542662
    543663  getline(line, token, '\t');
    544   for (int i=2; i<= Energy.ColumnCounter;i++) {
     664  for (int i=2; i<= Energy.ColumnCounter[Energy.MatrixCounter];i++) {
    545665    getline(line, token, '\t');
    546666    while (token[0] == ' ') // remove leading white spaces
    547667      token.erase(0,1);
    548668    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(abs($" << i+2 << ")) " << uses;
    549     if (i != (Energy.ColumnCounter))
     669    if (i != (Energy.ColumnCounter[Energy.MatrixCounter]))
    550670      output << ", \\";
    551671    output << endl;
     
    562682void EnergyPlotLine(ofstream &output, class MatrixContainer &Energy, const char *prefix, const char *xargument, const char *uses)
    563683{
    564   stringstream line(Energy.Header);
     684  stringstream line(Energy.Header[Energy.MatrixCounter]);
    565685  string token;
    566686
    567687  getline(line, token, '\t');
    568   for (int i=1; i<= Energy.ColumnCounter;i++) {
     688  for (int i=1; i<= Energy.ColumnCounter[Energy.MatrixCounter];i++) {
    569689    getline(line, token, '\t');
    570690    while (token[0] == ' ') // remove leading white spaces
    571691      token.erase(0,1);
    572692    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":" << i+2 << " " << uses;
    573     if (i != (Energy.ColumnCounter))
     693    if (i != (Energy.ColumnCounter[Energy.MatrixCounter]))
    574694      output << ", \\";
    575695    output << endl;
     
    586706void ForceMagnitudePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    587707{
    588   stringstream line(Force.Header);
     708  stringstream line(Force.Header[Force.MatrixCounter]);
    589709  string token;
    590710
     
    594714  getline(line, token, '\t');
    595715  getline(line, token, '\t');
    596   for (int i=7; i< Force.ColumnCounter;i+=NDIM) {
     716  for (int i=7; i< Force.ColumnCounter[Force.MatrixCounter];i+=NDIM) {
    597717    getline(line, token, '\t');
    598718    while (token[0] == ' ') // remove leading white spaces
     
    600720    token.erase(token.length(), 1);  // kill residual index char (the '0')
    601721    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))
     722    if (i != (Force.ColumnCounter[Force.MatrixCounter]-1))
    603723      output << ", \\";
    604724    output << endl;
     
    617737void AbsFirstForceValuePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    618738{
    619   stringstream line(Force.Header);
     739  stringstream line(Force.Header[Force.MatrixCounter]);
    620740  string token;
    621741
     
    625745  getline(line, token, '\t');
    626746  getline(line, token, '\t');
    627   for (int i=7; i< Force.ColumnCounter;i+=NDIM) {
     747  for (int i=7; i< Force.ColumnCounter[Force.MatrixCounter];i+=NDIM) {
    628748    getline(line, token, '\t');
    629749    while (token[0] == ' ') // remove leading white spaces
     
    631751    token.erase(token.length(), 1);  // kill residual index char (the '0')
    632752    output << "'" << prefix << ".dat' title '" << token << "' using " << xargument << ":(abs($" << i+1 << ")) " << uses;
    633     if (i != (Force.ColumnCounter-1))
     753    if (i != (Force.ColumnCounter[Force.MatrixCounter]-1))
    634754      output << ", \\";
    635755    output << endl;
     
    648768void BoxesForcePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    649769{
    650   stringstream line(Force.Header);
    651   const char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
     770  stringstream line(Force.Header[Force.MatrixCounter]);
     771  char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
    652772  string token;
    653773
     
    657777  getline(line, token, '\t');
    658778  getline(line, token, '\t');
    659   for (int i=7; i< Force.ColumnCounter;i+=NDIM) {
     779  for (int i=7; i< Force.ColumnCounter[Force.MatrixCounter];i+=NDIM) {
    660780    getline(line, token, '\t');
    661781    while (token[0] == ' ') // remove leading white spaces
     
    663783    token.erase(token.length(), 1);  // kill residual index char (the '0')
    664784    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))
     785    if (i != (Force.ColumnCounter[Force.MatrixCounter]-1))
    666786      output << ", \\";
    667787    output << endl;
     
    680800void BoxesFirstForceValuePlotLine(ofstream &output, class MatrixContainer &Force, const char *prefix, const char *xargument, const char *uses)
    681801{
    682   stringstream line(Force.Header);
    683   const char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
     802  stringstream line(Force.Header[Force.MatrixCounter]);
     803  char *fillcolor[5] = {"black", "red", "blue", "green", "cyan"};
    684804  string token;
    685805
     
    689809  getline(line, token, '\t');
    690810  getline(line, token, '\t');
    691   for (int i=7; i< Force.ColumnCounter;i+=NDIM) {
     811  for (int i=7; i< Force.ColumnCounter[Force.MatrixCounter];i+=NDIM) {
    692812    getline(line, token, '\t');
    693813    while (token[0] == ' ') // remove leading white spaces
     
    695815    token.erase(token.length(), 1);  // kill residual index char (the '0')
    696816    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))
     817    if (i != (Force.ColumnCounter[Force.MatrixCounter]-1))
    698818      output << ", \\";
    699819    output << endl;
Note: See TracChangeset for help on using the changeset viewer.