Merge "Add histogram output for 'gmx gangle'."
authorDavid van der Spoel <davidvanderspoel@gmail.com>
Fri, 12 Apr 2013 18:34:54 +0000 (20:34 +0200)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Fri, 12 Apr 2013 18:34:54 +0000 (20:34 +0200)
src/gromacs/trajectoryanalysis/modules/angle.cpp
src/gromacs/trajectoryanalysis/modules/angle.h
src/gromacs/trajectoryanalysis/tests/angle.cpp
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesDihedrals.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesPlaneZAxisAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesSimpleAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesVectorPairAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesVectorPlanePairAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesVectorSphereNormalZAxisAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesVectorTimeZeroAngles.xml

index 4e74bfb7bdecbeb831330041ac7c7b704198475c..569a0a0cdff72efb425e558a949e7de37b594d96 100644 (file)
@@ -68,13 +68,16 @@ const char Angle::shortDescription[] =
 
 Angle::Angle()
     : TrajectoryAnalysisModule(name, shortDescription),
-      sel1info_(NULL), sel2info_(NULL), natoms1_(0), natoms2_(0)
+      sel1info_(NULL), sel2info_(NULL), binWidth_(1.0), natoms1_(0), natoms2_(0)
 {
     averageModule_.reset(new AnalysisDataFrameAverageModule());
     angles_.addModule(averageModule_);
+    histogramModule_.reset(new AnalysisDataSimpleHistogramModule());
+    angles_.addModule(histogramModule_);
 
     registerAnalysisDataset(&angles_, "angle");
     registerBasicDataset(averageModule_.get(), "average");
+    registerBasicDataset(&histogramModule_->averager(), "histogram");
 }
 
 
@@ -122,10 +125,12 @@ Angle::initOptions(Options *options, TrajectoryAnalysisSettings * /*settings*/)
         "between the first vectors and the positive Z axis are calculated.[PAR]",
         "With [TT]-g2 t0[tt], [TT]-group2[tt] is not necessary, and angles",
         "are calculated from the vectors as they are in the first frame.[PAR]",
-        "There are two options for output:",
+        "There are three options for output:",
         "[TT]-oav[tt] writes an xvgr file with the time and the average angle",
         "for each frame.",
-        "[TT]-oall[tt] writes all the individual angles."
+        "[TT]-oall[tt] writes all the individual angles.",
+        "[TT]-oh[tt] writes a histogram of the angles. The bin width can be",
+        "set with [TT]-binw[tt]."
         /* TODO: Consider if the dump option is necessary and how to best
          * implement it.
            "[TT]-od[tt] can be used to dump all the individual angles,",
@@ -146,7 +151,9 @@ Angle::initOptions(Options *options, TrajectoryAnalysisSettings * /*settings*/)
     options->addOption(FileNameOption("oall").filetype(eftPlot).outputFile()
                            .store(&fnAll_).defaultBasename("angles")
                            .description("All angles as a function of time"));
-    // TODO: Add histogram output.
+    options->addOption(FileNameOption("oh").filetype(eftPlot).outputFile()
+                           .store(&fnHistogram_).defaultBasename("anghist")
+                           .description("Histogram of the angles"));
 
     options->addOption(StringOption("g1").enumValue(cGroup1TypeEnum)
                            .defaultEnumIndex(0).store(&g1type_)
@@ -154,6 +161,8 @@ Angle::initOptions(Options *options, TrajectoryAnalysisSettings * /*settings*/)
     options->addOption(StringOption("g2").enumValue(cGroup2TypeEnum)
                            .defaultEnumIndex(0).store(&g2type_)
                            .description("Type of second vector group"));
+    options->addOption(DoubleOption("binw").store(&binWidth_)
+                           .description("Binwidth for -oh in degrees"));
 
     // TODO: Allow multiple angles to be computed in one invocation.
     // Most of the code already supports it, but requires a solution for
@@ -266,6 +275,9 @@ Angle::initAnalysis(const TrajectoryAnalysisSettings &settings,
     checkSelections(sel1_, sel2_);
 
     angles_.setColumnCount(sel1_[0].posCount() / natoms1_);
+    double histogramMin = (g1type_ == "dihedral" ? -180.0 : 0);
+    histogramModule_->init(histogramFromRange(histogramMin, 180.0)
+                               .binWidth(binWidth_).includeAll());
 
     if (g2type_ == "t0")
     {
@@ -299,6 +311,18 @@ Angle::initAnalysis(const TrajectoryAnalysisSettings &settings,
         // TODO: Add legends? (there can be a massive amount of columns)
         angles_.addModule(plotm);
     }
+
+    if (!fnHistogram_.empty())
+    {
+        AnalysisDataPlotModulePointer plotm(
+                new AnalysisDataPlotModule(settings.plotSettings()));
+        plotm->setFileName(fnHistogram_);
+        plotm->setTitle("Angle histogram");
+        plotm->setXLabel("Angle (degrees)");
+        plotm->setYLabel("Probability");
+        // TODO: Add legends
+        histogramModule_->averager().addModule(plotm);
+    }
 }
 
 
@@ -496,6 +520,9 @@ Angle::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc,
 void
 Angle::finishAnalysis(int /*nframes*/)
 {
+    AbstractAverageHistogram &averageHistogram = histogramModule_->averager();
+    averageHistogram.normalizeProbability();
+    averageHistogram.done();
 }
 
 
index 2376c375df041809e389a6beb43ca5042042cd44..296f62044109ca6e512887d9ad82511ca169bacb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2011,2012, by the GROMACS development team, led by
+ * Copyright (c) 2011,2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -48,6 +48,7 @@
 #include "../analysismodule.h"
 #include "gromacs/analysisdata/analysisdata.h"
 #include "gromacs/analysisdata/modules/average.h"
+#include "gromacs/analysisdata/modules/histogram.h"
 #include "gromacs/selection/selection.h"
 
 namespace gmx
@@ -84,22 +85,25 @@ class Angle : public TrajectoryAnalysisModule
         void checkSelections(const SelectionList &sel1,
                              const SelectionList &sel2) const;
 
-        SelectionList                         sel1_;
-        SelectionList                         sel2_;
-        SelectionOptionInfo                  *sel1info_;
-        SelectionOptionInfo                  *sel2info_;
-        std::string                           fnAverage_;
-        std::string                           fnAll_;
-
-        std::string                           g1type_;
-        std::string                           g2type_;
-
-        AnalysisData                          angles_;
-        AnalysisDataFrameAverageModulePointer averageModule_;
-        int                                   natoms1_;
-        int                                   natoms2_;
+        SelectionList                            sel1_;
+        SelectionList                            sel2_;
+        SelectionOptionInfo                     *sel1info_;
+        SelectionOptionInfo                     *sel2info_;
+        std::string                              fnAverage_;
+        std::string                              fnAll_;
+        std::string                              fnHistogram_;
+
+        std::string                              g1type_;
+        std::string                              g2type_;
+        double                                   binWidth_;
+
+        AnalysisData                             angles_;
+        AnalysisDataFrameAverageModulePointer    averageModule_;
+        AnalysisDataSimpleHistogramModulePointer histogramModule_;
+        int                                      natoms1_;
+        int                                      natoms2_;
         // TODO: It is not possible to put rvec into a container.
-        std::vector<rvec *>                   vt0_;
+        std::vector<rvec *>                      vt0_;
 
         // Copy and assign disallowed by base.
 };
index 800d00ba39db8bb2f919ccd6ec64fa2bb94f4403..a1c13501e5e240e2f25d57d49a2f863044991d93 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -64,7 +64,8 @@ TEST_F(AngleModuleTest, ComputesSimpleAngles)
 {
     const char *const cmdline[] = {
         "angle",
-        "-g1", "angle", "-group1", "resname RA1 RA2 and name A1 A2 A3"
+        "-g1", "angle", "-group1", "resname RA1 RA2 and name A1 A2 A3",
+        "-binw", "60"
     };
     setTopology("angle.gro");
     runTest(CommandLine::create(cmdline));
@@ -74,7 +75,8 @@ TEST_F(AngleModuleTest, ComputesDihedrals)
 {
     const char *const cmdline[] = {
         "angle",
-        "-g1", "dihedral", "-group1", "resname RD1 RD2 RD3 and name A1 A2 A3 A4"
+        "-g1", "dihedral", "-group1", "resname RD1 RD2 RD3 and name A1 A2 A3 A4",
+        "-binw", "120"
     };
     setTopology("angle.gro");
     runTest(CommandLine::create(cmdline));
@@ -85,7 +87,8 @@ TEST_F(AngleModuleTest, ComputesVectorPairAngles)
     const char *const cmdline[] = {
         "angle",
         "-g1", "vector", "-group1", "resname RV1 RV2 and name A1 A2",
-        "-g2", "vector", "-group2", "resname RV3 RV4 and name A1 A2"
+        "-g2", "vector", "-group2", "resname RV3 RV4 and name A1 A2",
+        "-binw", "60"
     };
     setTopology("angle.gro");
     runTest(CommandLine::create(cmdline));
@@ -96,7 +99,8 @@ TEST_F(AngleModuleTest, ComputesVectorPlanePairAngles)
     const char *const cmdline[] = {
         "angle",
         "-g1", "vector", "-group1", "resname RV1 RV2 and name A1 A2",
-        "-g2", "plane",  "-group2", "resname RP1 RP2 and name A1 A2 A3"
+        "-g2", "plane",  "-group2", "resname RP1 RP2 and name A1 A2 A3",
+        "-binw", "60"
     };
     setTopology("angle.gro");
     runTest(CommandLine::create(cmdline));
@@ -107,7 +111,8 @@ TEST_F(AngleModuleTest, ComputesPlaneZAxisAngles)
     const char *const cmdline[] = {
         "angle",
         "-g1", "plane", "-group1", "resname RP1 RP2 and name A1 A2 A3",
-        "-g2", "z"
+        "-g2", "z",
+        "-binw", "60"
     };
     setTopology("angle.gro");
     runTest(CommandLine::create(cmdline));
@@ -118,7 +123,8 @@ TEST_F(AngleModuleTest, ComputesVectorSphereNormalZAxisAngles)
     const char *const cmdline[] = {
         "angle",
         "-g1", "vector",  "-group1", "resname RV1 RV2 and name A1 A2",
-        "-g2", "sphnorm", "-group2", "cog of resname RS"
+        "-g2", "sphnorm", "-group2", "cog of resname RS",
+        "-binw", "60"
     };
     setTopology("angle.gro");
     runTest(CommandLine::create(cmdline));
@@ -129,7 +135,8 @@ TEST_F(AngleModuleTest, ComputesVectorTimeZeroAngles)
     const char *const cmdline[] = {
         "angle",
         "-g1", "vector", "-group1", "resname RV1 RV2 RV3 RV4 and name A1 A2",
-        "-g2", "t0"
+        "-g2", "t0",
+        "-binw", "60"
     };
     setTopology("angle.gro");
     setTrajectory("angle.gro");
index 98261d2a1118565c859aab988a7d75ada3087ba9..a14807f685a0fddbbd3e44ce8a1d0a4faf769df5 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
 <ReferenceData>
-  <String Name="CommandLine">angle -g1 dihedral -group1 'resname RD1 RD2 RD3 and name A1 A2 A3 A4'</String>
+  <String Name="CommandLine">angle -g1 dihedral -group1 'resname RD1 RD2 RD3 and name A1 A2 A3 A4' -binw 120</String>
   <OutputData Name="Data">
     <AnalysisData Name="angle">
       <DataFrame Name="Frame0">
         </Sequence>
       </DataFrame>
     </AnalysisData>
+    <AnalysisData Name="histogram">
+      <DataFrame Name="Frame0">
+        <Real Name="X">-120.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.002778</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame1">
+        <Real Name="X">0.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.002778</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame2">
+        <Real Name="X">120.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.002778</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+    </AnalysisData>
   </OutputData>
 </ReferenceData>
index 7729162eb4f1b252951e14924bc9e71357953881..b8ac353b4b1c693d2cb825b21fe28e6d5efbb68e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
 <ReferenceData>
-  <String Name="CommandLine">angle -g1 plane -group1 'resname RP1 RP2 and name A1 A2 A3' -g2 z</String>
+  <String Name="CommandLine">angle -g1 plane -group1 'resname RP1 RP2 and name A1 A2 A3' -g2 z -binw 60</String>
   <OutputData Name="Data">
     <AnalysisData Name="angle">
       <DataFrame Name="Frame0">
         </Sequence>
       </DataFrame>
     </AnalysisData>
+    <AnalysisData Name="histogram">
+      <DataFrame Name="Frame0">
+        <Real Name="X">30.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame1">
+        <Real Name="X">90.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame2">
+        <Real Name="X">150.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+    </AnalysisData>
   </OutputData>
 </ReferenceData>
index ef108bf636f128bb0286c9c25468ab1368886a82..edb5458fc90b255787940092d393eff83a6d2ca6 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
 <ReferenceData>
-  <String Name="CommandLine">angle -g1 angle -group1 'resname RA1 RA2 and name A1 A2 A3'</String>
+  <String Name="CommandLine">angle -g1 angle -group1 'resname RA1 RA2 and name A1 A2 A3' -binw 60</String>
   <OutputData Name="Data">
     <AnalysisData Name="angle">
       <DataFrame Name="Frame0">
         </Sequence>
       </DataFrame>
     </AnalysisData>
+    <AnalysisData Name="histogram">
+      <DataFrame Name="Frame0">
+        <Real Name="X">30.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame1">
+        <Real Name="X">90.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame2">
+        <Real Name="X">150.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+    </AnalysisData>
   </OutputData>
 </ReferenceData>
index 1f851750807a2f42e245eaaef00fef3d07cb5d43..aa10e3d70cb22c21572b23054aac014784c0f4c8 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
 <ReferenceData>
-  <String Name="CommandLine">angle -g1 vector -group1 'resname RV1 RV2 and name A1 A2' -g2 vector -group2 'resname RV3 RV4 and name A1 A2'</String>
+  <String Name="CommandLine">angle -g1 vector -group1 'resname RV1 RV2 and name A1 A2' -g2 vector -group2 'resname RV3 RV4 and name A1 A2' -binw 60</String>
   <OutputData Name="Data">
     <AnalysisData Name="angle">
       <DataFrame Name="Frame0">
         </Sequence>
       </DataFrame>
     </AnalysisData>
+    <AnalysisData Name="histogram">
+      <DataFrame Name="Frame0">
+        <Real Name="X">30.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame1">
+        <Real Name="X">90.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame2">
+        <Real Name="X">150.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+    </AnalysisData>
   </OutputData>
 </ReferenceData>
index 2ca17c50e0b74aac4b51c27df5d9d1ecc3c2f8b3..6e684aa8caa7b45d1b4e2aff1ed43e08cbe3301f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
 <ReferenceData>
-  <String Name="CommandLine">angle -g1 vector -group1 'resname RV1 RV2 and name A1 A2' -g2 plane -group2 'resname RP1 RP2 and name A1 A2 A3'</String>
+  <String Name="CommandLine">angle -g1 vector -group1 'resname RV1 RV2 and name A1 A2' -g2 plane -group2 'resname RP1 RP2 and name A1 A2 A3' -binw 60</String>
   <OutputData Name="Data">
     <AnalysisData Name="angle">
       <DataFrame Name="Frame0">
         </Sequence>
       </DataFrame>
     </AnalysisData>
+    <AnalysisData Name="histogram">
+      <DataFrame Name="Frame0">
+        <Real Name="X">30.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame1">
+        <Real Name="X">90.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame2">
+        <Real Name="X">150.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+    </AnalysisData>
   </OutputData>
 </ReferenceData>
index ec17c6c306a6594582f57086f1c6c7dec93ea90b..16888871eb4ce680b6f45c5931d62f0ee145eb78 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
 <ReferenceData>
-  <String Name="CommandLine">angle -g1 vector -group1 'resname RV1 RV2 and name A1 A2' -g2 sphnorm -group2 'cog of resname RS'</String>
+  <String Name="CommandLine">angle -g1 vector -group1 'resname RV1 RV2 and name A1 A2' -g2 sphnorm -group2 'cog of resname RS' -binw 60</String>
   <OutputData Name="Data">
     <AnalysisData Name="angle">
       <DataFrame Name="Frame0">
         </Sequence>
       </DataFrame>
     </AnalysisData>
+    <AnalysisData Name="histogram">
+      <DataFrame Name="Frame0">
+        <Real Name="X">30.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame1">
+        <Real Name="X">90.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.008333</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame2">
+        <Real Name="X">150.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.000000</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+    </AnalysisData>
   </OutputData>
 </ReferenceData>
index cddcb73e2b44c822ddb5969b8a443719b44669ee..b8dc70dd746f0710af239aefeeb3a50f740a71fc 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
 <ReferenceData>
-  <String Name="CommandLine">angle -g1 vector -group1 'resname RV1 RV2 RV3 RV4 and name A1 A2' -g2 t0</String>
+  <String Name="CommandLine">angle -g1 vector -group1 'resname RV1 RV2 RV3 RV4 and name A1 A2' -g2 t0 -binw 60</String>
   <OutputData Name="Data">
     <AnalysisData Name="angle">
       <DataFrame Name="Frame0">
         </Sequence>
       </DataFrame>
     </AnalysisData>
+    <AnalysisData Name="histogram">
+      <DataFrame Name="Frame0">
+        <Real Name="X">30.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.012500</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.004167</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame1">
+        <Real Name="X">90.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.002083</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.002083</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+      <DataFrame Name="Frame2">
+        <Real Name="X">150.000000</Real>
+        <Sequence Name="Y">
+          <Int Name="Length">2</Int>
+          <DataValue>
+            <Real Name="Value">0.002083</Real>
+          </DataValue>
+          <DataValue>
+            <Real Name="Value">0.002083</Real>
+          </DataValue>
+        </Sequence>
+      </DataFrame>
+    </AnalysisData>
   </OutputData>
 </ReferenceData>