Essential dynamics: fixed legend in ED .xvg output file
authorCarsten Kutzner <ckutzne@gwdg.de>
Fri, 8 Mar 2013 16:07:26 +0000 (17:07 +0100)
committerCarsten Kutzner <ckutzne@gwdg.de>
Fri, 8 Mar 2013 16:07:26 +0000 (17:07 +0100)
If one performs flooding only and none of the standard essential dynamics
protocols are turned on, the .xvg output file did still print ED legends.
I moved the bNeedDoEdsam check from init_edi() to write_edo_legend(), so
that already here we can check whether ED or only flooding is performed.

Change-Id: Ic3a784b63b335059c17aed852d1b4a4f3126841a

src/mdlib/edsam.c

index 99e527ccc1689e338884ce7fd16187273882a8c5..75902bf694ae1006798fce1a3a164275a330e745 100644 (file)
@@ -1346,13 +1346,6 @@ static void init_edi(gmx_mtop_t *mtop, t_edpar *edi)
      * The initialized data sets are then transmitted to the
      * other nodes in broadcast_ed_data */
 
-    edi->bNeedDoEdsam = edi->vecs.mon.neig
-        || edi->vecs.linfix.neig
-        || edi->vecs.linacc.neig
-        || edi->vecs.radfix.neig
-        || edi->vecs.radacc.neig
-        || edi->vecs.radcon.neig;
-
     alook = gmx_mtop_atomlookup_init(mtop);
 
     /* evaluate masses (reference structure) */
@@ -2499,6 +2492,15 @@ static void write_edo_legend(gmx_edsam_t ed, int nED, const output_env_t oenv)
 
     for (nr_edi = 1; nr_edi <= nED; nr_edi++)
     {
+        /* Remember for each ED group whether we have to do essential dynamics
+         * constraints or possibly only flooding */
+        edi->bNeedDoEdsam = edi->vecs.mon.neig
+            || edi->vecs.linfix.neig
+            || edi->vecs.linacc.neig
+            || edi->vecs.radfix.neig
+            || edi->vecs.radacc.neig
+            || edi->vecs.radcon.neig;
+
         fprintf(ed->edo, "#\n");
         fprintf(ed->edo, "# Summary of applied con/restraints for the ED group %c\n", get_EDgroupChar(nr_edi, nED));
         fprintf(ed->edo, "# Atoms in average structure: %d\n", edi->sav.nr);
@@ -2616,28 +2618,30 @@ static void write_edo_legend(gmx_edsam_t ed, int nED, const output_env_t oenv)
     edi         = ed->edpar;
     for (nr_edi = 1; nr_edi <= nED; nr_edi++)
     {
-        nice_legend(&setname, &nsets, &LegendStr, "RMSD to ref", "nm", get_EDgroupChar(nr_edi, nED) );
-
-        /* Essential dynamics, projections on eigenvectors */
-        nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.mon, get_EDgroupChar(nr_edi, nED), "MON"   );
-        nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.linfix, get_EDgroupChar(nr_edi, nED), "LINFIX");
-        nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.linacc, get_EDgroupChar(nr_edi, nED), "LINACC");
-        nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.radfix, get_EDgroupChar(nr_edi, nED), "RADFIX");
-        if (edi->vecs.radfix.neig)
-        {
-            nice_legend(&setname, &nsets, &LegendStr, "RADFIX radius", "nm", get_EDgroupChar(nr_edi, nED));
-        }
-        nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.radacc, get_EDgroupChar(nr_edi, nED), "RADACC");
-        if (edi->vecs.radacc.neig)
-        {
-            nice_legend(&setname, &nsets, &LegendStr, "RADACC radius", "nm", get_EDgroupChar(nr_edi, nED));
-        }
-        nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.radcon, get_EDgroupChar(nr_edi, nED), "RADCON");
-        if (edi->vecs.radcon.neig)
+        if (edi->bNeedDoEdsam) /* Only print ED legend if at least one ED option is on */
         {
-            nice_legend(&setname, &nsets, &LegendStr, "RADCON radius", "nm", get_EDgroupChar(nr_edi, nED));
-        }
+            nice_legend(&setname, &nsets, &LegendStr, "RMSD to ref", "nm", get_EDgroupChar(nr_edi, nED) );
 
+            /* Essential dynamics, projections on eigenvectors */
+            nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.mon, get_EDgroupChar(nr_edi, nED), "MON"   );
+            nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.linfix, get_EDgroupChar(nr_edi, nED), "LINFIX");
+            nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.linacc, get_EDgroupChar(nr_edi, nED), "LINACC");
+            nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.radfix, get_EDgroupChar(nr_edi, nED), "RADFIX");
+            if (edi->vecs.radfix.neig)
+            {
+                nice_legend(&setname, &nsets, &LegendStr, "RADFIX radius", "nm", get_EDgroupChar(nr_edi, nED));
+            }
+            nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.radacc, get_EDgroupChar(nr_edi, nED), "RADACC");
+            if (edi->vecs.radacc.neig)
+            {
+                nice_legend(&setname, &nsets, &LegendStr, "RADACC radius", "nm", get_EDgroupChar(nr_edi, nED));
+            }
+            nice_legend_evec(&setname, &nsets, &LegendStr, &edi->vecs.radcon, get_EDgroupChar(nr_edi, nED), "RADCON");
+            if (edi->vecs.radcon.neig)
+            {
+                nice_legend(&setname, &nsets, &LegendStr, "RADCON radius", "nm", get_EDgroupChar(nr_edi, nED));
+            }
+        }
         edi = edi->next_edi;
     } /* end of 'pure' essential dynamics legend entries */
     n_edsam = nsets - n_flood;