From 18205331813ea7eb274bf9581d4eae3e63e5ff91 Mon Sep 17 00:00:00 2001
From: Gareth Tribello <gareth.tribello@gmail.com>
Date: Fri, 3 Jul 2015 22:48:05 +0100
Subject: [PATCH] Changed the way data is passed to reference configurations in
 analysis

The data is now passed via a pdb object.  This means we can now use
the same infractructure for setting up the ReferenceConfiguration as
we use in setting up the ReferenceConfigurations in paths and so on.
Projections meanwhile are attached to the ReferenceConfigurations
when they are required for printing.  So now a reference configuration
can be the pair of objects - i.e. the projections and the high dimensional
configuration.
---
 .../dimred/rt-mds/analysis.0.embed.reference  | 204 ++++++++--------
 .../rt-mds/analysis.0.list_embed.reference    |   2 +-
 regtest/dimred/rt-mds/embed.reference         | 220 +++++++++---------
 regtest/dimred/rt-mds/list_embed.reference    |   4 +-
 regtest/dimred/rt-mds/plumed.dat              |   2 +-
 src/analysis/AnalysisBase.h                   |   6 +-
 src/analysis/AnalysisWithDataCollection.cpp   |  81 ++++---
 src/analysis/AnalysisWithDataCollection.h     |   8 +-
 src/analysis/EuclideanDissimilarityMatrix.cpp |   3 +-
 src/analysis/LandmarkSelectionBase.h          |   6 +-
 src/analysis/OutputColvarFile.cpp             |  22 +-
 src/analysis/OutputPDBFile.cpp                |  12 +-
 src/analysis/ReadDissimilarityMatrix.cpp      |   4 +-
 src/dimred/DimensionalityReductionBase.cpp    |  21 +-
 src/dimred/DimensionalityReductionBase.h      |   6 +-
 src/dimred/ProjectNonLandmarkPoints.cpp       |  45 ++--
 src/mapping/Mapping.cpp                       |  42 ++--
 src/mapping/Mapping.h                         |   2 +-
 src/mapping/PCAVars.cpp                       |   2 -
 src/reference/MultiDomainRMSD.cpp             |   3 +-
 src/reference/MultiReferenceBase.cpp          |  28 +--
 src/reference/MultiReferenceBase.h            |   2 +-
 src/reference/ReferenceArguments.cpp          |  20 +-
 src/reference/ReferenceArguments.h            |   4 +-
 src/reference/ReferenceAtoms.cpp              |  12 +-
 src/reference/ReferenceAtoms.h                |  31 +--
 src/reference/ReferenceConfiguration.cpp      | 105 +++------
 src/reference/ReferenceConfiguration.h        |  67 +++---
 src/tools/PDB.cpp                             |  32 +++
 src/tools/PDB.h                               |  10 +
 30 files changed, 470 insertions(+), 536 deletions(-)

diff --git a/regtest/dimred/rt-mds/analysis.0.embed.reference b/regtest/dimred/rt-mds/analysis.0.embed.reference
index bfcd2c1e8..3ebfef2be 100644
--- a/regtest/dimred/rt-mds/analysis.0.embed.reference
+++ b/regtest/dimred/rt-mds/analysis.0.embed.reference
@@ -1,698 +1,698 @@
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=650626174834469268094976.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0873   mds.2=0.0013   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7551   c1.moment-3=1.3322   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=3443064697932843889721344.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0535   mds.2=0.0044   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7434   c1.moment-3=1.3003   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=4334990767809816147525632.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0150   mds.2=0.0044   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7333   c1.moment-3=1.2632   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1642551053927491148185600.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0136  mds.2=0.0019   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7283   c1.moment-3=1.2349   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=565077236443374117978112.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0308  mds.2=-0.0012  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7268   c1.moment-3=1.2175   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=506902826865531421720576.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0355  mds.2=-0.0018  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7262   c1.moment-3=1.2128   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=3497441683667193365004288.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0090  mds.2=-0.0015  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7327   c1.moment-3=1.2385   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=5816989471131786348068864.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0145   mds.2=0.0004   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7371   c1.moment-3=1.2616   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=5197629206541778607407104.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0191   mds.2=0.0022   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7366   c1.moment-3=1.2666   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=22568578815140474208124928.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0278   mds.2=0.0015   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7394   c1.moment-3=1.2748   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=8891751619370481308663808.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0091   mds.2=-0.0004  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7365   c1.moment-3=1.2562   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=145469732262582499147776.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0359  mds.2=-0.0012  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7255   c1.moment-3=1.2126   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=67243488566443176361984.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0540  mds.2=0.0004   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7193   c1.moment-3=1.1955   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=991674944473569693794304.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0322  mds.2=-0.0034  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7286   c1.moment-3=1.2156   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=433704577708501378269184.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0205  mds.2=-0.0150  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7429   c1.moment-3=1.2239   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=58924815689464923815936.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0282  mds.2=-0.0289  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7542   c1.moment-3=1.2128   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=28876419368888716754944.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0530  mds.2=-0.0358  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7544   c1.moment-3=1.1871   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=29493206461009996283904.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0769  mds.2=-0.0312  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7438   c1.moment-3=1.1652   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=15523379316519734345728.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0893  mds.2=-0.0259  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7355   c1.moment-3=1.1546   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=6036949107489532542976.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0697  mds.2=-0.0246  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7393   c1.moment-3=1.1739   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=6805982676529049501696.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
-REMARK mds.1=-0.0301  mds.2=-0.0196  
+REMARK mds.1=-0.0302  mds.2=-0.0196  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7448   c1.moment-3=1.2133   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=224283114659648425164800.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0093   mds.2=-0.0072  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7430   c1.moment-3=1.2547   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1937631236154971427700736.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0274   mds.2=0.0009   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7400   c1.moment-3=1.2742   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=8943884514170369755578368.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0301   mds.2=0.0016   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7400   c1.moment-3=1.2770   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1818542782073875176882176.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0265   mds.2=-0.0033  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7438   c1.moment-3=1.2723   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=356284804122361993363456.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0433   mds.2=-0.0053  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7501   c1.moment-3=1.2879   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=740928158795493248335872.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0514   mds.2=-0.0019  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7489   c1.moment-3=1.2967   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=3971376819483128291655680.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0222   mds.2=0.0031   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7365   c1.moment-3=1.2698   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=3616045831357711704391680.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0129  mds.2=0.0061   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7245   c1.moment-3=1.2366   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=866118050097568367509504.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0322  mds.2=0.0084   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7172   c1.moment-3=1.2186   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=473876430918082860417024.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0355  mds.2=0.0080   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7168   c1.moment-3=1.2153   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=549108949631639043964928.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0337  mds.2=0.0067   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7185   c1.moment-3=1.2168   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=714866179522068016529408.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0308  mds.2=0.0047   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7211   c1.moment-3=1.2191   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1514315762407424940572672.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0253  mds.2=0.0016   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7255   c1.moment-3=1.2235   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1741401785128748918505472.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0132  mds.2=-0.0021  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7323   c1.moment-3=1.2343   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=3707685932716769910194176.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0040   mds.2=-0.0031  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7377   c1.moment-3=1.2506   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=5279612145243834875379712.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0107   mds.2=0.0011   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7354   c1.moment-3=1.2582   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=14648991633879816569094144.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0299   mds.2=0.0060   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7357   c1.moment-3=1.2780   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=101745406227893881592086528.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0540   mds.2=0.0070   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7410   c1.moment-3=1.3015   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=77977698769596315733065728.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0650   mds.2=0.0039   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7468   c1.moment-3=1.3114   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=5438198764112726743580672.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0415   mds.2=0.0025   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7421   c1.moment-3=1.2882   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1122421932113435130068992.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0074   mds.2=0.0033   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7325   c1.moment-3=1.2555   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1623375579255821794541568.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0185  mds.2=0.0059   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7232   c1.moment-3=1.2312   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=824284132438079344476160.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0413  mds.2=0.0073   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7158   c1.moment-3=1.2096   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=418023780265421327826944.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0548  mds.2=0.0074   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7123   c1.moment-3=1.1966   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=524201540254286764572672.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0385  mds.2=0.0041   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7197   c1.moment-3=1.2114   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=255645304728742904463360.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0383  mds.2=-0.0006  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7243   c1.moment-3=1.2104   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=80831060875928311693312.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0584  mds.2=-0.0008  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7192   c1.moment-3=1.1910   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=410072896508362208837632.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0584  mds.2=0.0023   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7162   c1.moment-3=1.1918   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=473315368593257205334016.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0553  mds.2=0.0090   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7105   c1.moment-3=1.1965   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=49342818148888732499968.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0772  mds.2=0.0146   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6995   c1.moment-3=1.1768   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=71439214621479799881728.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0757  mds.2=0.0157   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6988   c1.moment-3=1.1785   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=372382770456105985245184.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0644  mds.2=0.0144   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7030   c1.moment-3=1.1891   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=396750501333421147553792.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0816  mds.2=0.0141   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6988   c1.moment-3=1.1724   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=194367523462455551328256.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1045  mds.2=0.0148   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6922   c1.moment-3=1.1504   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=265390023546441746612224.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0867  mds.2=0.0111   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7004   c1.moment-3=1.1667   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=417842650383208029356032.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0365  mds.2=0.0014   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7228   c1.moment-3=1.2126   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=130034479906962406375424.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0113   mds.2=-0.0067  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7431   c1.moment-3=1.2567   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=453748863537616517070848.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0272   mds.2=-0.0074  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7479   c1.moment-3=1.2718   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=2549987501327281773608960.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0381   mds.2=-0.0012  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7448   c1.moment-3=1.2840   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=3357671899518696282914816.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0548   mds.2=0.0021   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7459   c1.moment-3=1.3010   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=2973694890310422329556992.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0470   mds.2=0.0012   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7447   c1.moment-3=1.2933   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=288602953154320790454272.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0227   mds.2=-0.0019  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7414   c1.moment-3=1.2690   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1760887739729704734687232.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0132   mds.2=-0.0022  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7392   c1.moment-3=1.2597   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1526973208100442807992320.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0040   mds.2=0.0004   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7343   c1.moment-3=1.2515   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=375263178685270183641088.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0045  mds.2=0.0008   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7317   c1.moment-3=1.2434   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=232661556808622295482368.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0145  mds.2=0.0006   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7293   c1.moment-3=1.2337   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=507064184978749788258304.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0116  mds.2=0.0025   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7282   c1.moment-3=1.2370   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1128952088522002253479936.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0031  mds.2=0.0044   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7286   c1.moment-3=1.2457   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1197960641606570746052608.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0148  mds.2=0.0086   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7216   c1.moment-3=1.2355   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=625774095016588059082752.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0318  mds.2=0.0109   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7149   c1.moment-3=1.2196   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=364912544013506169536512.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0166  mds.2=0.0078   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7218   c1.moment-3=1.2336   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1649391353916835862937600.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0154   mds.2=0.0036   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7342   c1.moment-3=1.2633   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=11346816644974575838298112.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0451   mds.2=0.0018   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7437   c1.moment-3=1.2915   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=20791509453694539808112640.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0364   mds.2=0.0021   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7411   c1.moment-3=1.2832   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1867515982473692874539008.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0125   mds.2=0.0036   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7335   c1.moment-3=1.2606   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=11344083134102028704284672.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0330   mds.2=0.0045   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7379   c1.moment-3=1.2806   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=120911330589421810499977216.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0605   mds.2=0.0048   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7448   c1.moment-3=1.3072   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=40351160276202809800523776.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0417   mds.2=0.0041   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7406   c1.moment-3=1.2889   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=9235968903630373689229312.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0115   mds.2=0.0011   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7356   c1.moment-3=1.2590   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=15198595282354971818852352.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0257   mds.2=-0.0018  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7421   c1.moment-3=1.2719   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=14695620601365390340128768.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0451   mds.2=-0.0029  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7483   c1.moment-3=1.2904   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=3504618985646781185916928.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0387   mds.2=-0.0032  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7469   c1.moment-3=1.2841   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1958037545372794977517568.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0254   mds.2=-0.0017  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7420   c1.moment-3=1.2716   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=7729740074168141073088512.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0311   mds.2=-0.0001  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7418   c1.moment-3=1.2775   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=26429041345273132897796096.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0448   mds.2=0.0006   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7448   c1.moment-3=1.2909   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=37403428414373558822633472.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0499   mds.2=0.0020   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7448   c1.moment-3=1.2962   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=69071824065210548899282944.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0543   mds.2=0.0037   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7443   c1.moment-3=1.3009   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=28746486049325375245254656.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0486   mds.2=0.0054   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7412   c1.moment-3=1.2959   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=5138199027537960106983424.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0459   mds.2=0.0051   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7407   c1.moment-3=1.2932   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=20730130763570579884736512.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0715   mds.2=-0.0001  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7524   c1.moment-3=1.3166   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=10053248420830524810985472.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0764   mds.2=-0.0063  
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.7596   c1.moment-3=1.3196   
+REMARK c1.moment-2=0.7597   c1.moment-3=1.3196   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=2341097486254890020765696.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0603   mds.2=-0.0119  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7609   c1.moment-3=1.3027   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1801241546807460694589440.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0378   mds.2=-0.0153  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7583   c1.moment-3=1.2800   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=2623886374903733202976768.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0214   mds.2=-0.0124  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7512   c1.moment-3=1.2649   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1540127025264497029808128.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0063   mds.2=-0.0091  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7441   c1.moment-3=1.2513   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=761250478060893041065984.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0095  mds.2=-0.0016  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7327   c1.moment-3=1.2380   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=815550859201229044580352.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0259  mds.2=0.0036   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7234   c1.moment-3=1.2235   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=1031052805964853080489984.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0234  mds.2=0.0061   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7217   c1.moment-3=1.2265   
 END
 DESCRIPTION: analysis data from calculation done at time 5.000000 
-REMARK WEIGHT=828970472636431535702016.0000
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0012   mds.2=0.0060   
 REMARK ARG=c1.moment-2,c1.moment-3
diff --git a/regtest/dimred/rt-mds/analysis.0.list_embed.reference b/regtest/dimred/rt-mds/analysis.0.list_embed.reference
index ce29c25f6..185b19ed5 100644
--- a/regtest/dimred/rt-mds/analysis.0.list_embed.reference
+++ b/regtest/dimred/rt-mds/analysis.0.list_embed.reference
@@ -19,7 +19,7 @@
  -0.0769  -0.0312 
  -0.0893  -0.0259 
  -0.0697  -0.0246 
- -0.0301  -0.0196 
+ -0.0302  -0.0196 
   0.0093  -0.0072 
   0.0274   0.0009 
   0.0301   0.0016 
diff --git a/regtest/dimred/rt-mds/embed.reference b/regtest/dimred/rt-mds/embed.reference
index 8ecbcfdae..336cec6f8 100644
--- a/regtest/dimred/rt-mds/embed.reference
+++ b/regtest/dimred/rt-mds/embed.reference
@@ -1,698 +1,698 @@
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0008  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0594   mds.2=0.0053   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7340   c1.moment-3=1.2672   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0012  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0683   mds.2=0.0034   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7371   c1.moment-3=1.2758   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0004  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0705   mds.2=0.0006   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7401   c1.moment-3=1.2777   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0010  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0729   mds.2=-0.0019  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7428   c1.moment-3=1.2796   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0022  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0874   mds.2=-0.0069  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7497   c1.moment-3=1.2934   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0019  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0961   mds.2=-0.0095  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7533   c1.moment-3=1.3018   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0023  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0867   mds.2=-0.0062  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7489   c1.moment-3=1.2928   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0030  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0719   mds.2=-0.0008  
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.7417   c1.moment-3=1.2788   
+REMARK c1.moment-2=0.7417   c1.moment-3=1.2789   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0118  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0575   mds.2=0.0031   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7360   c1.moment-3=1.2651   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0063  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0552   mds.2=0.0034   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7354   c1.moment-3=1.2628   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0022  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0682   mds.2=-0.0002  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7405   c1.moment-3=1.2753   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0029  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0781   mds.2=-0.0024  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7440   c1.moment-3=1.2847   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0010  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0785   mds.2=-0.0025  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7441   c1.moment-3=1.2852   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0004  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0763   mds.2=-0.0027  
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.7441   c1.moment-3=1.2829   
+REMARK c1.moment-2=0.7441   c1.moment-3=1.2830   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0013  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0755   mds.2=-0.0041  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7454   c1.moment-3=1.2820   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0069  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0792   mds.2=-0.0069  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7486   c1.moment-3=1.2853   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0096  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0778   mds.2=-0.0062  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7477   c1.moment-3=1.2840   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0076  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0727   mds.2=-0.0025  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7434   c1.moment-3=1.2795   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0143  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0726   mds.2=0.0014   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7396   c1.moment-3=1.2798   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0302  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0756   mds.2=0.0030   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7384   c1.moment-3=1.2830   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0171  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0821   mds.2=0.0017   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7405   c1.moment-3=1.2893   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0013  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0816   mds.2=0.0001   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7420   c1.moment-3=1.2886   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0167  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0774   mds.2=0.0008   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7407   c1.moment-3=1.2845   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0234  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0766   mds.2=0.0008   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7407   c1.moment-3=1.2837   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0171  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0838   mds.2=-0.0005  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7429   c1.moment-3=1.2906   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0265  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0931   mds.2=-0.0016  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7452   c1.moment-3=1.2997   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0521  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0936   mds.2=-0.0010  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7446   c1.moment-3=1.3004   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0504  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0923   mds.2=-0.0009  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7443   c1.moment-3=1.2990   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0443  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0906   mds.2=-0.0008  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7440   c1.moment-3=1.2974   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0270  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0706   mds.2=0.0025   
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.7382   c1.moment-3=1.2780   
+REMARK c1.moment-2=0.7382   c1.moment-3=1.2779   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0120  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0664   mds.2=0.0050   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7352   c1.moment-3=1.2741   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0517  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0901   mds.2=0.0019   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7412   c1.moment-3=1.2972   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0821  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.1059   mds.2=-0.0015  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7467   c1.moment-3=1.3125   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0206  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0917   mds.2=0.0006   
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.7428   c1.moment-3=1.2986   
+REMARK c1.moment-2=0.7428   c1.moment-3=1.2987   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0206  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0876   mds.2=0.0021   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7407   c1.moment-3=1.2948   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0207  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.1008   mds.2=-0.0001  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7446   c1.moment-3=1.3076   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0270  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0955   mds.2=-0.0014  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7452   c1.moment-3=1.3022   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0171  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0858   mds.2=-0.0018  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7444   c1.moment-3=1.2925   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0345  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0894   mds.2=-0.0005  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7436   c1.moment-3=1.2963   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0819  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0922   mds.2=0.0014   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7420   c1.moment-3=1.2992   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.1159  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0917   mds.2=0.0010   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7423   c1.moment-3=1.2987   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0266  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0925   mds.2=-0.0043  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7477   c1.moment-3=1.2989   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0072  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0967   mds.2=-0.0102  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7541   c1.moment-3=1.3023   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0358  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.1073   mds.2=-0.0096  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7548   c1.moment-3=1.3129   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0264  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.1065   mds.2=-0.0047  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7499   c1.moment-3=1.3126   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0087  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0935   mds.2=-0.0003  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7439   c1.moment-3=1.3003   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0055  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0668   mds.2=0.0049   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7353   c1.moment-3=1.2745   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0047  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
-REMARK mds.1=0.0411   mds.2=0.0087   
+REMARK mds.1=0.0410   mds.2=0.0086   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7284   c1.moment-3=1.2494   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0049  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0264   mds.2=0.0110   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7242   c1.moment-3=1.2352   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0014  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0254   mds.2=0.0125   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7226   c1.moment-3=1.2344   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0015  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0503   mds.2=0.0085   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7297   c1.moment-3=1.2586   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0025  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0855   mds.2=0.0007   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7419   c1.moment-3=1.2925   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0045  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0975   mds.2=-0.0028  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7469   c1.moment-3=1.3039   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0336  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0983   mds.2=-0.0035  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7477   c1.moment-3=1.3047   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0570  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0997   mds.2=-0.0044  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7487   c1.moment-3=1.3059   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0021  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0877   mds.2=-0.0021  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7449   c1.moment-3=1.2944   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0002  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0501   mds.2=0.0053   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7328   c1.moment-3=1.2580   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0004  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0104   mds.2=0.0140   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7192   c1.moment-3=1.2197   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0009  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0199  mds.2=0.0221   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7074   c1.moment-3=1.1907   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0004  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0416  mds.2=0.0277   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6990   c1.moment-3=1.1698   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0688  mds.2=0.0338   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6895   c1.moment-3=1.1436   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0858  mds.2=0.0354   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6858   c1.moment-3=1.1269   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0897  mds.2=0.0313   
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.6894   c1.moment-3=1.1226   
+REMARK c1.moment-2=0.6894   c1.moment-3=1.1225   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0920  mds.2=0.0254   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6950   c1.moment-3=1.1195   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1168  mds.2=0.0227   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6945   c1.moment-3=1.0946   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0001  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1447  mds.2=0.0227   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6910   c1.moment-3=1.0669   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0004  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1636  mds.2=0.0221   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6892   c1.moment-3=1.0481   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0011  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1461  mds.2=0.0182   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6953   c1.moment-3=1.0650   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0004  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1212  mds.2=0.0139   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7027   c1.moment-3=1.0891   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0005  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0775  mds.2=0.0056   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7164   c1.moment-3=1.1314   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0004  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0008  mds.2=-0.0041  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7358   c1.moment-3=1.2063   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0007  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0469   mds.2=-0.0038  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7415   c1.moment-3=1.2537   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0074  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0771   mds.2=-0.0004  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7419   c1.moment-3=1.2840   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0384  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0917   mds.2=0.0005   
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.7428   c1.moment-3=1.2986   
+REMARK c1.moment-2=0.7428   c1.moment-3=1.2987   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0153  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0656   mds.2=0.0042   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7359   c1.moment-3=1.2732   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0016  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0034  mds.2=0.0115   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7200   c1.moment-3=1.2057   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0006  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0901  mds.2=0.0141   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7064   c1.moment-3=1.1200   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0005  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1784  mds.2=0.0069   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7024   c1.moment-3=1.0315   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0002  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.2253  mds.2=-0.0077  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7109   c1.moment-3=0.9832   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0001  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.2372  mds.2=-0.0248  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7264   c1.moment-3=0.9692   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.2415  mds.2=-0.0448  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7456   c1.moment-3=0.9624   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.2562  mds.2=-0.0539  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7529   c1.moment-3=0.9466   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.2901  mds.2=-0.0433  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7381   c1.moment-3=0.9144   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.3173  mds.2=-0.0215  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7130   c1.moment-3=0.8902   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.3117  mds.2=0.0096   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6829   c1.moment-3=0.8996   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.2787  mds.2=0.0317   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6651   c1.moment-3=0.9352   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.2319  mds.2=0.0372   
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.6656   c1.moment-3=0.9823   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1897  mds.2=0.0305   
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.6776   c1.moment-3=1.0233   
+REMARK c1.moment-2=0.6775   c1.moment-3=1.0233   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0001  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.1592  mds.2=0.0142   
 REMARK ARG=c1.moment-2,c1.moment-3
-REMARK c1.moment-2=0.6975   c1.moment-3=1.0515   
+REMARK c1.moment-2=0.6975   c1.moment-3=1.0514   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
-REMARK mds.1=-0.1211  mds.2=-0.0049  
+REMARK mds.1=-0.1212  mds.2=-0.0049  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7213   c1.moment-3=1.0868   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0960  mds.2=-0.0150  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7345   c1.moment-3=1.1105   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0001  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0842  mds.2=-0.0162  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7372   c1.moment-3=1.1221   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0001  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0813  mds.2=-0.0187  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7401   c1.moment-3=1.1246   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0823  mds.2=-0.0193  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7406   c1.moment-3=1.1235   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0773  mds.2=-0.0179  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7398   c1.moment-3=1.1287   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0621  mds.2=-0.0202  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7440   c1.moment-3=1.1435   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0449  mds.2=-0.0215  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7475   c1.moment-3=1.1604   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0269  mds.2=-0.0307  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7589   c1.moment-3=1.1770   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0000  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=-0.0075  mds.2=-0.0368  
 REMARK ARG=c1.moment-2,c1.moment-3
 REMARK c1.moment-2=0.7673   c1.moment-3=1.1955   
 END
 DESCRIPTION: analysis data from calculation done at time 10.000000 
-REMARK WEIGHT=0.0002  
+REMARK WEIGHT=1.0000  
 REMARK PROPERTIES=mds.1,mds.2
 REMARK mds.1=0.0266   mds.2=-0.0342  
 REMARK ARG=c1.moment-2,c1.moment-3
diff --git a/regtest/dimred/rt-mds/list_embed.reference b/regtest/dimred/rt-mds/list_embed.reference
index 2f4fb6096..b24c465df 100644
--- a/regtest/dimred/rt-mds/list_embed.reference
+++ b/regtest/dimred/rt-mds/list_embed.reference
@@ -46,7 +46,7 @@
   0.1065  -0.0047 
   0.0935  -0.0003 
   0.0668   0.0049 
-  0.0411   0.0087 
+  0.0410   0.0086 
   0.0264   0.0110 
   0.0254   0.0125 
   0.0503   0.0085 
@@ -88,7 +88,7 @@
  -0.2319   0.0372 
  -0.1897   0.0305 
  -0.1592   0.0142 
- -0.1211  -0.0049 
+ -0.1212  -0.0049 
  -0.0960  -0.0150 
  -0.0842  -0.0162 
  -0.0813  -0.0187 
diff --git a/regtest/dimred/rt-mds/plumed.dat b/regtest/dimred/rt-mds/plumed.dat
index 1c63ced77..e74a95494 100755
--- a/regtest/dimred/rt-mds/plumed.dat
+++ b/regtest/dimred/rt-mds/plumed.dat
@@ -17,7 +17,7 @@ UPPER_WALLS ARG=d7 AT=2.0 KAPPA=100.
 
 COORDINATIONNUMBER SPECIES=1-7 MOMENTS=2-3 SWITCH={RATIONAL R_0=1.5 NN=8 MM=16} LABEL=c1
 
-oo: EUCLIDEAN_DISSIMILARITIES ARG=c1.moment-2,c1.moment-3 STRIDE=10 RUN=1000 REWEIGHT_TEMP=0.1 TEMP=0.2
+oo: EUCLIDEAN_DISSIMILARITIES ARG=c1.moment-2,c1.moment-3 STRIDE=10 RUN=1000 
 
 CLASSICAL_MDS ... 
   USE_OUTPUT_DATA_FROM=oo
diff --git a/src/analysis/AnalysisBase.h b/src/analysis/AnalysisBase.h
index 2717ce387..7893e9782 100644
--- a/src/analysis/AnalysisBase.h
+++ b/src/analysis/AnalysisBase.h
@@ -82,7 +82,7 @@ public:
 /// Get the ith data point
   virtual void getDataPoint( const unsigned& idata, std::vector<double>& point, double& weight ) const ;
 /// Get a reference configuration (in dimensionality reduction this returns the projection)
-  virtual ReferenceConfiguration* getReferenceConfiguration( const unsigned& idata, bool& isprojection );
+  virtual ReferenceConfiguration* getReferenceConfiguration( const unsigned& idata  );
 /// Get the input configuration (in dimensionality reduction this returns the high dimensional configuration)
   virtual ReferenceConfiguration* getInputReferenceConfiguration( const unsigned& idata );
 /// This actually performs the analysis
@@ -159,8 +159,8 @@ void AnalysisBase::getDataPoint( const unsigned& idata, std::vector<double>& poi
 }
 
 inline
-ReferenceConfiguration* AnalysisBase::getReferenceConfiguration( const unsigned& idata, bool& isprojection ){
-  return mydata->getReferenceConfiguration( idata, isprojection );
+ReferenceConfiguration* AnalysisBase::getReferenceConfiguration( const unsigned& idata ){
+  return mydata->getReferenceConfiguration( idata );
 }
 
 inline
diff --git a/src/analysis/AnalysisWithDataCollection.cpp b/src/analysis/AnalysisWithDataCollection.cpp
index 61ddf9edd..1d3586edc 100644
--- a/src/analysis/AnalysisWithDataCollection.cpp
+++ b/src/analysis/AnalysisWithDataCollection.cpp
@@ -36,7 +36,10 @@ void AnalysisWithDataCollection::registerKeywords( Keywords& keys ){
   AnalysisBase::registerKeywords( keys );
   keys.use("ARG"); keys.reset_style("ARG","atoms-1");
   keys.add("atoms-1","ATOMS","the atoms whose positions we are tracking for the purpose of analysing the data");
-  keys.add("hidden","METRIC","how are we measuring the distances between configurations. If you have only arguments this will by default be the euclidean metric. You must specify a metric if you are analysing atoms");
+  keys.add("hidden","METRIC","how are we measuring the distances between configurations. If you have only arguments this will by default be the euclidean "
+                             "metric. You must specify a metric if you are analysing atoms.  You can choose any of the metrics described in the part of the "
+                             "manual on \\ref dists.  If your metric involves multiple different blocks of atoms then you can use repeated ATOMS keywords "
+                             "i.e. ATOMS1, ATOMS2 etc.  You can also add additional information on your metric in this command.");
   keys.add("atoms-1","STRIDE","the frequency with which data should be stored for analysis.  By default data is collected on every step");
   keys.add("atoms-1","RUN","the frequency with which to run the analysis algorithms.");
   keys.addFlag("USE_ALL_DATA",false,"just analyse all the data in the trajectory.  This option should be used in tandem with ATOMS/ARG + STRIDE");
@@ -75,21 +78,38 @@ old_norm(0.0)
       // we must collect data from the trajectory
       } else {
          // Get information on numbers of atoms and argument names
-         std::vector<AtomNumber> atom_numbers; std::vector<std::string> argument_names( getNumberOfArguments() );
+         std::vector<std::string> argument_names( getNumberOfArguments() );
          for(unsigned i=0;i<getNumberOfArguments();++i) argument_names[i]=getPntrToArgument(i)->getName();
-
+         if( getNumberOfArguments()>0 ) mypdb.addArgumentNames( argument_names );
          // Read in information on the metric that is being used in this analysis object
-         parse("METRIC",metricname);
-         if( metricname.length()==0 ) metricname="EUCLIDEAN";
+         std::string metrictmp; parse("METRIC",metrictmp); 
+         if( metrictmp.length()==0 ){
+             metricname="EUCLIDEAN";
+         } else {
+             std::vector<std::string> metricwords = Tools::getWords( metrictmp );
+             metricname=metricwords[0]; metricwords.erase(metricwords.begin()); 
+             mypdb.addRemark( metricwords );
+         }
          ReferenceConfiguration* checkref=metricRegister().create<ReferenceConfiguration>( metricname );
          // Check if we should read atoms
          ReferenceAtoms* hasatoms=dynamic_cast<ReferenceAtoms*>( checkref );
          if( hasatoms ){
-             parseAtomList("ATOMS",atom_numbers); requestAtoms(atom_numbers);
-             if( atom_numbers.size()==0 ) error("no atom positions have been specified in input");
-             log.printf("  monitoring positions of atoms ");
-             for(unsigned i=0;i<atom_numbers.size();++i) log.printf("%d ",atom_numbers[i].serial() );
-             log.printf("\n");
+             std::vector<AtomNumber> atom_numbers; parseAtomList("ATOMS",atom_numbers); 
+             if( atom_numbers.size()>0 ){ 
+                log.printf("  monitoring positions of atoms ");
+                for(unsigned i=0;i<atom_numbers.size();++i) log.printf("%d ",atom_numbers[i].serial() );
+                log.printf("\n"); mypdb.addBlockEnd( atom_numbers.size() );
+             } else {
+                std::vector<AtomNumber> tmpatoms; mypdb.addBlockEnd(0);
+                for(unsigned i=1;;++i){
+                    parseAtomList("ATOMS",i,tmpatoms);
+                    if( i==1 && tmpatoms.size()==0 ) error("no atom positions have been specified in input");
+                    else if( tmpatoms.size()==0 ) break;
+                    for(unsigned j=0;j<tmpatoms.size();++j) atom_numbers.push_back( tmpatoms[j] );
+                    mypdb.addBlockEnd( atom_numbers.size() );
+                }
+             }
+             requestAtoms(atom_numbers); mypdb.setAtomNumbers( atom_numbers );
          }
          // Check if we should read arguments
          ReferenceArguments* hasargs=dynamic_cast<ReferenceArguments*>( checkref );
@@ -107,10 +127,7 @@ old_norm(0.0)
              // Setup everything given the ammount of data that we will have in each analysis 
              if( freq%getStride()!= 0 ) error("Frequncy of running is not a multiple of the stride");
              unsigned ndata=freq/getStride(); data.resize(ndata); logweights.resize( ndata );
-             for(unsigned i=0;i<ndata;++i){
-                data[i]=metricRegister().create<ReferenceConfiguration>( metricname );
-                data[i]->setNamesAndAtomNumbers( atom_numbers, argument_names );
-             }
+             for(unsigned i=0;i<ndata;++i) data[i]=metricRegister().create<ReferenceConfiguration>( metricname );
              log.printf("  running analysis every %u steps\n",freq);
              // Check if we are doing block averaging
              parseFlag("NOMEMORY",nomemory);
@@ -189,10 +206,10 @@ void AnalysisWithDataCollection::readCheckPointFile( const std::string& filename
   if(fp!=NULL){
      bool do_read=true, first=true;
      while (do_read) {
-        PDB mypdb;
-        do_read=mypdb.readFromFilepointer(fp,plumed.getAtoms().usingNaturalUnits(),0.1/atoms.getUnits().getLength());
+        PDB tpdb;
+        do_read=tpdb.readFromFilepointer(fp,plumed.getAtoms().usingNaturalUnits(),0.1/atoms.getUnits().getLength());
         if(do_read){
-           data[idata]->set( mypdb );
+           data[idata]->set( tpdb );
            data[idata]->parse("TIME",tstep);
            if( !first && ((tstep-oldtstep) - getStride()*plumed.getAtoms().getTimeStep())>plumed.getAtoms().getTimeStep() ){
               error("frequency of data storage in " + filename + " is not equal to frequency of data storage plumed.dat file");
@@ -229,9 +246,9 @@ void AnalysisWithDataCollection::getDataPoint( const unsigned& idat, std::vector
   }
 }
 
-ReferenceConfiguration* AnalysisWithDataCollection::getReferenceConfiguration( const unsigned& idat, bool& isprojection ){
-  if( !mydata ){ plumed_dbg_assert( idat<data.size() ); isprojection=false; return data[idat]; }
-  return AnalysisBase::getReferenceConfiguration( idat, isprojection );
+ReferenceConfiguration* AnalysisWithDataCollection::getReferenceConfiguration( const unsigned& idat ){
+  if( !mydata ){ plumed_dbg_assert( idat<data.size() ); return data[idat]; }
+  return AnalysisBase::getReferenceConfiguration( idat );
 }
 
 ReferenceConfiguration* AnalysisWithDataCollection::getInputReferenceConfiguration( const unsigned& idat ){
@@ -259,24 +276,22 @@ void AnalysisWithDataCollection::update(){
       // Reweighting because of biases
       if( !biases.empty() ) ww += bias/simtemp;
 
-      // Get the arguments ready to transfer to reference configuration
-      std::vector<double> current_args( getNumberOfArguments() );
-      for(unsigned i=0;i<getNumberOfArguments();++i) current_args[i]=getArgument(i);
-      // Could add stuff for fancy metrics here eventually but for now unecessary
-      std::vector<double> mymetric( getNumberOfArguments(), 1.0 );
-
+      // Pass the atom positions to the pdb
+      mypdb.setAtomPositions( getPositions() );
+      // Pass the argument values to the pdb
+      for(unsigned i=0;i<getNumberOfArguments();++i){
+         mypdb.setArgumentValue( getPntrToArgument(i)->getName(), getArgument(i) ); 
+      }
+      // Could add stuff for mahalanobis distance etc here eventually but for now unecessary
+ 
       if(use_all_data){
          data.push_back( metricRegister().create<ReferenceConfiguration>( metricname ) );
          plumed_dbg_assert( data.size()==idata+1 ); 
-         std::vector<std::string> argument_names( getNumberOfArguments() );
-         for(unsigned i=0;i<getNumberOfArguments();++i) argument_names[i] = getPntrToArgument(i)->getName();
-         data[idata]->setNamesAndAtomNumbers( getAbsoluteIndexes(), argument_names );
-         data[idata]->setReferenceConfig( getPositions(), current_args, mymetric );
-         logweights.push_back(ww);
+         data[idata]->set( mypdb ); logweights.push_back(ww);
       } else {
          // Get the arguments and store them in a vector of vectors
-         data[idata]->setReferenceConfig( getPositions(), current_args, mymetric );
-         logweights[idata] = ww;
+         // We have to clear all properties from previous analyses prior to setting the data
+         data[idata]->clearAllProperties(); data[idata]->set( mypdb ); logweights[idata] = ww;
       }
 
       // Write data to checkpoint file
diff --git a/src/analysis/AnalysisWithDataCollection.h b/src/analysis/AnalysisWithDataCollection.h
index 2a54464db..97ec59d8e 100644
--- a/src/analysis/AnalysisWithDataCollection.h
+++ b/src/analysis/AnalysisWithDataCollection.h
@@ -23,6 +23,7 @@
 #define __PLUMED_analysis_AnalysisWithDataCollection_h
 
 #include "AnalysisBase.h"
+#include "tools/PDB.h"
 
 namespace PLMD {
 
@@ -52,8 +53,9 @@ private:
   bool firstAnalysisDone;
 /// The value of the old normalization constant
   double norm, old_norm;
-/// List of argument names 
-  std::vector<std::string> argument_names;
+/// Data is collected from the trajectory by passing it to this pdb.  These pdb
+/// files are then read by the ReferenceConfigurations in data
+  PDB mypdb;
 /// The type of metric we are using to measure distances
   std::string metricname;
 /// The checkpoint file --- really I would like to get rid of this and have some universal mechanism and a single file GT
@@ -88,7 +90,7 @@ public:
 /// Get the ith data point
   virtual void getDataPoint( const unsigned& idata, std::vector<double>& point, double& weight ) const ;
 /// Get a reference configuration (in dimensionality reduction this returns the projection)
-  virtual ReferenceConfiguration* getReferenceConfiguration( const unsigned& idat, bool& isprojection );
+  virtual ReferenceConfiguration* getReferenceConfiguration( const unsigned& idat );
 /// Get the underlying reference configuration (in dimensionality reduction this return the high dimensional point)
   ReferenceConfiguration* getInputReferenceConfiguration( const unsigned& idat );
 /// This ensures that the energy is stored if we are reweighting
diff --git a/src/analysis/EuclideanDissimilarityMatrix.cpp b/src/analysis/EuclideanDissimilarityMatrix.cpp
index 2e5cd733e..d8d8ac568 100644
--- a/src/analysis/EuclideanDissimilarityMatrix.cpp
+++ b/src/analysis/EuclideanDissimilarityMatrix.cpp
@@ -73,8 +73,7 @@ double EuclideanDissimilarityMatrix::getDissimilarity( const unsigned& iframe, c
   plumed_dbg_assert( iframe<dissimilarities.nrows() && jframe<dissimilarities.ncols() );
   if( dissimilarities(iframe,jframe)>0. ){ return dissimilarities(iframe,jframe); }
   if( iframe!=jframe ){ 
-     bool ignore;
-     dissimilarities(iframe,jframe) = dissimilarities(jframe,iframe) = distance( getPbc(), getArguments(), getReferenceConfiguration(iframe,ignore), getReferenceConfiguration(jframe,ignore), true ); 
+     dissimilarities(iframe,jframe) = dissimilarities(jframe,iframe) = distance( getPbc(), getArguments(), getReferenceConfiguration(iframe), getReferenceConfiguration(jframe), true ); 
      return dissimilarities(iframe,jframe);
   }
   return 0.0;
diff --git a/src/analysis/LandmarkSelectionBase.h b/src/analysis/LandmarkSelectionBase.h
index 5a91ffe6f..09d565545 100644
--- a/src/analysis/LandmarkSelectionBase.h
+++ b/src/analysis/LandmarkSelectionBase.h
@@ -54,7 +54,7 @@ public:
 /// Get the ith data point
   void getDataPoint( const unsigned& idata, std::vector<double>& point, double& weight ) const ;
 /// Get a reference configuration
-  ReferenceConfiguration* getReferenceConfiguration( const unsigned& idat, bool& isprojection );
+  ReferenceConfiguration* getReferenceConfiguration( const unsigned& idat );
 /// Select landmark configurations
   void performAnalysis();
   virtual void selectLandmarks()=0;
@@ -85,8 +85,8 @@ void LandmarkSelectionBase::getDataPoint( const unsigned& idata, std::vector<dou
 }
 
 inline
-ReferenceConfiguration* LandmarkSelectionBase::getReferenceConfiguration( const unsigned& idat, bool& isprojection ){
-  return AnalysisWithDataCollection::getReferenceConfiguration( landmark_indices[idat], isprojection );
+ReferenceConfiguration* LandmarkSelectionBase::getReferenceConfiguration( const unsigned& idat ){
+  return AnalysisWithDataCollection::getReferenceConfiguration( landmark_indices[idat] );
 }
 
 inline
diff --git a/src/analysis/OutputColvarFile.cpp b/src/analysis/OutputColvarFile.cpp
index df589e265..fe56fc3d0 100644
--- a/src/analysis/OutputColvarFile.cpp
+++ b/src/analysis/OutputColvarFile.cpp
@@ -88,17 +88,21 @@ void OutputColvarFile::performAnalysis(){
   gfile.fmtField(fmt+" ");
   gfile.open( filename.c_str() );
 
-  // Can't print out all landmark data if we have reference atom positions
-  bool ignore;
-  ReferenceAtoms* myat=dynamic_cast<ReferenceAtoms*>( getReferenceConfiguration(0,ignore) );
-  plumed_assert( !myat );
-  
+  ReferenceConfiguration* myp = getReferenceConfiguration(0);
+  if( myp->getNumberOfProperties()==0 ) plumed_assert( !dynamic_cast<ReferenceAtoms*>( myp ) );
+
   // Print embedding coordinates
   for(unsigned i=0;i<getNumberOfDataPoints();++i){
-      ReferenceArguments* myref=dynamic_cast<ReferenceArguments*>( getReferenceConfiguration(i,ignore) );
-      plumed_assert( myref );
-      for(unsigned j=0;j<myref->getReferenceArguments().size();++j){
-          gfile.printField( myref->getArgumentNames()[j], myref->getReferenceArgument(j) );
+      ReferenceConfiguration* mypoint=getReferenceConfiguration(i);
+      for(unsigned j=0;j<mypoint->getNumberOfProperties();++j){
+          gfile.printField( mypoint->getPropertyName(j), mypoint->getPropertyValue(j) );
+      }
+      if( mypoint->getNumberOfProperties()==0 ){
+          ReferenceArguments* myref=dynamic_cast<ReferenceArguments*>( mypoint );
+          plumed_assert( myref );
+          for(unsigned j=0;j<myref->getReferenceArguments().size();++j){
+              gfile.printField( myref->getArgumentNames()[j], myref->getReferenceArgument(j) );
+          }
       }
       gfile.printField();
   }  
diff --git a/src/analysis/OutputPDBFile.cpp b/src/analysis/OutputPDBFile.cpp
index 6112115e1..ae0fa1db6 100644
--- a/src/analysis/OutputPDBFile.cpp
+++ b/src/analysis/OutputPDBFile.cpp
@@ -77,18 +77,12 @@ fmt("%f")
 void OutputPDBFile::performAnalysis(){
   // Output the embedding in plumed pdb format
   OFile afile; afile.link(*this); afile.setBackupString("analysis"); std::size_t psign=fmt.find("%");
-  afile.open( filename.c_str() ); bool isprojection; std::string descr="REMARK WEIGHT=%-" + fmt.substr(psign+1) + "\n";
+  afile.open( filename.c_str() ); std::string descr="REMARK WEIGHT=%-" + fmt.substr(psign+1) + "\n";
   for(unsigned j=0;j<getNumberOfDataPoints();++j){
       afile.printf("DESCRIPTION: analysis data from calculation done at time %f \n",getLabel().c_str(),getTime() );
       afile.printf(descr.c_str(),getWeight(j) ); 
-      ReferenceConfiguration* myref = getReferenceConfiguration(j,isprojection);
-      if( plumed.getAtoms().usingNaturalUnits() ) myref->print( 1.0, afile, fmt, isprojection );
-      else myref->print( plumed.getAtoms().getUnits().getLength()/0.1, afile, fmt, isprojection );
-      // This ensures the high dimensional position is projected if we are working with dimensionality reduction 
-      if( isprojection ){ 
-          if( plumed.getAtoms().usingNaturalUnits() ) getInputReferenceConfiguration(j)->print( 1.0, afile, fmt, false );
-          else getInputReferenceConfiguration(j)->print( plumed.getAtoms().getUnits().getLength()/0.1, afile, fmt, false );
-      }
+      if( plumed.getAtoms().usingNaturalUnits() ) getReferenceConfiguration(j)->print( 1.0, afile, fmt );
+      else getReferenceConfiguration(j)->print( plumed.getAtoms().getUnits().getLength()/0.1, afile, fmt );
   }
   afile.close();
 }
diff --git a/src/analysis/ReadDissimilarityMatrix.cpp b/src/analysis/ReadDissimilarityMatrix.cpp
index 03df61abb..7dec6c1dd 100644
--- a/src/analysis/ReadDissimilarityMatrix.cpp
+++ b/src/analysis/ReadDissimilarityMatrix.cpp
@@ -48,7 +48,7 @@ public:
   ReadDissimilarityMatrix( const ActionOptions& ao );
   unsigned getNumberOfDataPoints() const { return nnodes; }
 /// This gives an error as if we read in the matrix we dont have the coordinates
-  ReferenceConfiguration* getReferenceConfiguration( const unsigned& idata, bool& isprojection );
+  ReferenceConfiguration* getReferenceConfiguration( const unsigned& idata );
   ReferenceConfiguration* getInputReferenceConfiguration( const unsigned& idata );
 /// This gives an error as if we read in the matrix we dont have the coordinates
   void getDataPoint( const unsigned& idata, std::vector<double>& point, double& weight ) const ;
@@ -124,7 +124,7 @@ double ReadDissimilarityMatrix::getDissimilarity( const unsigned& iframe, const
   return dissimilarities( iframe, jframe );
 }
 
-ReferenceConfiguration* ReadDissimilarityMatrix::getReferenceConfiguration( const unsigned& idata, bool& isprojection ){
+ReferenceConfiguration* ReadDissimilarityMatrix::getReferenceConfiguration( const unsigned& idata ){
   plumed_merror("cannot get reference configurations from read in dissimilarity matrix");
   return NULL;
 }
diff --git a/src/dimred/DimensionalityReductionBase.cpp b/src/dimred/DimensionalityReductionBase.cpp
index 505bbe4bb..364695734 100644
--- a/src/dimred/DimensionalityReductionBase.cpp
+++ b/src/dimred/DimensionalityReductionBase.cpp
@@ -21,7 +21,6 @@
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
 #include "DimensionalityReductionBase.h"
 #include "reference/ReferenceConfiguration.h"
-#include "reference/MetricRegister.h"
 #include "core/PlumedMain.h"
 #include "core/Atoms.h"
 
@@ -36,7 +35,6 @@ void DimensionalityReductionBase::registerKeywords( Keywords& keys ){
 DimensionalityReductionBase::DimensionalityReductionBase( const ActionOptions& ao ):
 Action(ao),
 analysis::AnalysisBase(ao),
-myref(NULL),
 dimredbase(NULL)
 {
   // Check that some dissimilarity information is available
@@ -52,23 +50,12 @@ dimredbase(NULL)
       if( nlow<1 ) error("dimensionality of low dimensional space must be at least one");
   }
   log.printf("  projecting in %d dimensional space \n",nlow);
-
-  ReferenceConfigurationOptions("EUCLIDEAN");
-  myref=metricRegister().create<ReferenceConfiguration>("EUCLIDEAN");
-  std::vector<std::string> dimnames(nlow); std::string num;
-  for(unsigned i=0;i<nlow;++i){ Tools::convert(i+1,num); dimnames[i] = getLabel() + "." + num; }
-  myref->setNamesAndAtomNumbers( std::vector<AtomNumber>(), dimnames );
-}
-
-DimensionalityReductionBase::~DimensionalityReductionBase(){
-  delete myref;
 }
 
-ReferenceConfiguration* DimensionalityReductionBase::getReferenceConfiguration( const unsigned& idat, bool& isprojection ){
-  std::vector<double> pp(nlow); for(unsigned i=0;i<nlow;++i) pp[i]=projections(idat,i);
-  std::vector<double> empty( pp.size() ); isprojection=true;
-  myref->setReferenceConfig( std::vector<Vector>(), pp, empty );
-  return myref;
+ReferenceConfiguration* DimensionalityReductionBase::getReferenceConfiguration( const unsigned& idat ){
+  ReferenceConfiguration* myref = mydata->getInputReferenceConfiguration( idat ); std::string num; myref->clearAllProperties();
+  for(unsigned i=0;i<nlow;++i){ Tools::convert(i+1,num); myref->attachProperty( getLabel() + "." + num, projections(idat,i) ); }
+  return myref; 
 }
 
 ReferenceConfiguration* DimensionalityReductionBase::getInputReferenceConfiguration( const unsigned& idat ){
diff --git a/src/dimred/DimensionalityReductionBase.h b/src/dimred/DimensionalityReductionBase.h
index 66725aa80..e06be9d81 100644
--- a/src/dimred/DimensionalityReductionBase.h
+++ b/src/dimred/DimensionalityReductionBase.h
@@ -34,9 +34,6 @@ private:
 /// This are the target distances for a single point. 
 /// This is used when we do out of sample or pointwise global optimization
   std::vector<double> dtargets;
-/// We create a reference configuration here so that we can pass projection data
-/// quickly
-  ReferenceConfiguration* myref;
 /// The projections that were generated by the dimensionality reduction algorithm
   Matrix<double> projections;
 protected:
@@ -47,11 +44,10 @@ protected:
 public:
   static void registerKeywords( Keywords& keys );
   DimensionalityReductionBase( const ActionOptions& );
-  ~DimensionalityReductionBase();
 /// Get the ith data point (this returns the projection)
   void getDataPoint( const unsigned& idata, std::vector<double>& point, double& weight ) const ;
 /// Get a reference configuration (this returns the projection)
-  ReferenceConfiguration* getReferenceConfiguration( const unsigned& idata, bool& isprojection ); 
+  ReferenceConfiguration* getReferenceConfiguration( const unsigned& idata ); 
   ReferenceConfiguration* getInputReferenceConfiguration( const unsigned& idata );
 /// Actually perform the analysis
   void performAnalysis();
diff --git a/src/dimred/ProjectNonLandmarkPoints.cpp b/src/dimred/ProjectNonLandmarkPoints.cpp
index a606ffb31..0dc28f101 100644
--- a/src/dimred/ProjectNonLandmarkPoints.cpp
+++ b/src/dimred/ProjectNonLandmarkPoints.cpp
@@ -23,9 +23,9 @@
 #include "core/PlumedMain.h"
 #include "core/ActionSet.h"
 #include "tools/Random.h"
-#include "reference/MetricRegister.h"
 #include "tools/ConjugateGradient.h"
 #include "analysis/AnalysisBase.h"
+#include "reference/ReferenceConfiguration.h"
 #include "DimensionalityReductionBase.h"
 
 //+PLUMEDOC DIMRED PROJECT_ALL_ANALYSIS_DATA
@@ -46,22 +46,18 @@ private:
   double cgtol;
 /// Number of diemsions in low dimensional space
   unsigned nlow;
-/// We create a reference configuration here so that we can pass projection data
-/// quickly
-  ReferenceConfiguration* myref; 
 /// The class that calcualtes the projection of the data that is required
   DimensionalityReductionBase* mybase;
 /// Generate a projection of the ith data point - this is called in two routine
-  void generateProjection( const unsigned& idata, std::vector<double>& point );
+  void generateProjection( const unsigned& idat, std::vector<double>& point );
 public:
   static void registerKeywords( Keywords& keys );
   ProjectNonLandmarkPoints( const ActionOptions& ao );
-  ~ProjectNonLandmarkPoints();
 /// Get the ith data point (this returns the projection)
-  void getDataPoint( const unsigned& idata, std::vector<double>& point );
+  void getDataPoint( const unsigned& idat, std::vector<double>& point );
 /// Get a reference configuration (this returns the projection)
-  ReferenceConfiguration* getReferenceConfiguration( const unsigned& idata, bool& isprojection );
-  ReferenceConfiguration* getInputReferenceConfiguration( const unsigned& idata );
+  ReferenceConfiguration* getReferenceConfiguration( const unsigned& idat );
+  ReferenceConfiguration* getInputReferenceConfiguration( const unsigned& idat );
 /// This does nothing -- projections are calculated when getDataPoint and getReferenceConfiguration are called
   void performAnalysis(){}
 /// This just calls calculate stress in the underlying projection object
@@ -92,24 +88,14 @@ mybase(NULL)
 
   log.printf("  generating out-of-sample projections using projection with label %s \n",myproj.c_str() );
   parse("CGTOL",cgtol);
-
-  ReferenceConfigurationOptions("EUCLIDEAN");
-  myref=metricRegister().create<ReferenceConfiguration>("EUCLIDEAN");
-  std::vector<std::string> dimnames(nlow); std::string num;
-  for(unsigned i=0;i<nlow;++i){ Tools::convert(i+1,num); dimnames[i] = getLabel() + "." + num; }
-  myref->setNamesAndAtomNumbers( std::vector<AtomNumber>(), dimnames );
-}
-
-ProjectNonLandmarkPoints::~ProjectNonLandmarkPoints(){
-  delete myref;
 }
 
-void ProjectNonLandmarkPoints::generateProjection( const unsigned& idata, std::vector<double>& point ){
+void ProjectNonLandmarkPoints::generateProjection( const unsigned& idat, std::vector<double>& point ){
   ConjugateGradient<ProjectNonLandmarkPoints> myminimiser( this );
-  unsigned closest=0; double mindist = sqrt( getDissimilarity( idata, mybase->getDataPointIndexInBase(0) ) );
+  unsigned closest=0; double mindist = sqrt( getDissimilarity( idat, mybase->getDataPointIndexInBase(0) ) );
   mybase->setTargetDistance( 0, mindist );
   for(unsigned i=1;i<mybase->getNumberOfDataPoints();++i){
-      double dist = sqrt( getDissimilarity( idata, mybase->getDataPointIndexInBase(i) ) );
+      double dist = sqrt( getDissimilarity( idat, mybase->getDataPointIndexInBase(i) ) );
       mybase->setTargetDistance( i, dist );
       if( dist<mindist ){ mindist=dist; closest=i; }
   }
@@ -119,19 +105,20 @@ void ProjectNonLandmarkPoints::generateProjection( const unsigned& idata, std::v
   myminimiser.minimise( cgtol, point, &ProjectNonLandmarkPoints::calculateStress );
 }
 
-ReferenceConfiguration* ProjectNonLandmarkPoints::getReferenceConfiguration( const unsigned& idata, bool& isprojection ){
-  std::vector<double> pp(nlow); std::vector<double> empty( pp.size() ); generateProjection( idata, pp );
-  myref->setReferenceConfig( std::vector<Vector>(), pp, empty ); isprojection=true;
+ReferenceConfiguration* ProjectNonLandmarkPoints::getReferenceConfiguration( const unsigned& idat ){
+  std::vector<double> pp(nlow); generateProjection( idat, pp ); std::string num;
+  ReferenceConfiguration* myref = mydata->getInputReferenceConfiguration( idat ); myref->clearAllProperties();
+  for(unsigned i=0;i<nlow;++i){ Tools::convert(i+1,num); myref->attachProperty( getLabel() + "." + num, pp[i] ); }
   return myref;
 }
 
-ReferenceConfiguration* ProjectNonLandmarkPoints::getInputReferenceConfiguration( const unsigned& idata ){
-  return mydata->getInputReferenceConfiguration( idata );
+ReferenceConfiguration* ProjectNonLandmarkPoints::getInputReferenceConfiguration( const unsigned& idat ){
+  return mydata->getInputReferenceConfiguration( idat );
 }
 
-void ProjectNonLandmarkPoints::getDataPoint( const unsigned& idata, std::vector<double>& point ){
+void ProjectNonLandmarkPoints::getDataPoint( const unsigned& idat, std::vector<double>& point ){
   if( point.size()!=nlow ) point.resize( nlow );
-  generateProjection( idata, point );
+  generateProjection( idat, point );
 }
 
 double ProjectNonLandmarkPoints::calculateStress( const std::vector<double>& pp, std::vector<double>& der ){
diff --git a/src/mapping/Mapping.cpp b/src/mapping/Mapping.cpp
index b3ba5d58d..2a8fcaed3 100644
--- a/src/mapping/Mapping.cpp
+++ b/src/mapping/Mapping.cpp
@@ -106,9 +106,9 @@ ActionWithVessel(ao)
   requestAtoms( atoms ); std::vector<Value*> req_args;
   interpretArgumentList( args, req_args ); requestArguments( req_args );
   // Duplicate all frames (duplicates are used by sketch-map)
-  mymap->duplicateFrameList(); 
+  // mymap->duplicateFrameList(); 
   // fframes.resize( 2*nfram, 0.0 ); dfframes.resize( 2*nfram, 0.0 );
-  plumed_assert( !mymap->mappingNeedsSetup() );
+  // plumed_assert( !mymap->mappingNeedsSetup() );
   // Resize all derivative arrays
   // mymap->setNumberOfAtomsAndArguments( atoms.size(), args.size() );
   // Resize forces array
@@ -128,25 +128,25 @@ Mapping::~Mapping(){
   delete mymap;
 }
 
-void Mapping::prepare(){
-  if( mymap->mappingNeedsSetup() ){
-      // Get the arguments and atoms that are required
-      std::vector<AtomNumber> atoms; std::vector<std::string> args;
-      mymap->getAtomAndArgumentRequirements( atoms, args );
-      requestAtoms( atoms ); std::vector<Value*> req_args; 
-      interpretArgumentList( args, req_args ); requestArguments( req_args );
-      // Duplicate all frames (duplicates are used by sketch-map)
-      mymap->duplicateFrameList();
-      // Get the number of frames in the path
-      unsigned nfram=getNumberOfReferencePoints();
-      // fframes.resize( 2*nfram, 0.0 ); dfframes.resize( 2*nfram, 0.0 ); 
-      plumed_assert( !mymap->mappingNeedsSetup() );
-      // Resize all derivative arrays
-      // mymap->setNumberOfAtomsAndArguments( atoms.size(), args.size() );
-      // Resize forces array
-      forcesToApply.resize( 3*getNumberOfAtoms() + 9 + getNumberOfArguments() );
-  }
-}
+// void Mapping::prepare(){
+//   if( mymap->mappingNeedsSetup() ){
+//       // Get the arguments and atoms that are required
+//       std::vector<AtomNumber> atoms; std::vector<std::string> args;
+//       mymap->getAtomAndArgumentRequirements( atoms, args );
+//       requestAtoms( atoms ); std::vector<Value*> req_args; 
+//       interpretArgumentList( args, req_args ); requestArguments( req_args );
+//       // Duplicate all frames (duplicates are used by sketch-map)
+//       // mymap->duplicateFrameList();
+//       // Get the number of frames in the path
+//       unsigned nfram=getNumberOfReferencePoints();
+//       // fframes.resize( 2*nfram, 0.0 ); dfframes.resize( 2*nfram, 0.0 ); 
+//       plumed_assert( !mymap->mappingNeedsSetup() );
+//       // Resize all derivative arrays
+//       // mymap->setNumberOfAtomsAndArguments( atoms.size(), args.size() );
+//       // Resize forces array
+//       forcesToApply.resize( 3*getNumberOfAtoms() + 9 + getNumberOfArguments() );
+//   }
+// }
 
 unsigned Mapping::getPropertyIndex( const std::string& name ) const {
   return mymap->getPropertyIndex( name );
diff --git a/src/mapping/Mapping.h b/src/mapping/Mapping.h
index 855f91576..4fb4ea056 100644
--- a/src/mapping/Mapping.h
+++ b/src/mapping/Mapping.h
@@ -91,7 +91,7 @@ public:
 /// Get the value of the ith property for the current frame
   double getPropertyValue( const unsigned& current, const unsigned& iprop ) const ;
 /// Stuff to do before we do the calculation
-  void prepare();
+//   void prepare();
 /// Apply the forces 
   void apply();
 };
diff --git a/src/mapping/PCAVars.cpp b/src/mapping/PCAVars.cpp
index aaf1ad0d1..928b1fbf6 100644
--- a/src/mapping/PCAVars.cpp
+++ b/src/mapping/PCAVars.cpp
@@ -274,8 +274,6 @@ mypack(0,0,myvals)
   /// This sets up all the storage data required by PCA in the pack
   myframes.getFrame(0)->setupPCAStorage( mypack );
 
-  // Retrieve the position of the first frame, as we use this for alignment
-  myref->setNamesAndAtomNumbers( atoms, args );
   // Check there are no periodic arguments
   for(unsigned i=0;i<getNumberOfArguments();++i){
       if( getPntrToArgument(i)->isPeriodic() ) error("cannot use periodic variables in pca projections");
diff --git a/src/reference/MultiDomainRMSD.cpp b/src/reference/MultiDomainRMSD.cpp
index c87317502..b9e1eca5b 100644
--- a/src/reference/MultiDomainRMSD.cpp
+++ b/src/reference/MultiDomainRMSD.cpp
@@ -79,7 +79,8 @@ void MultiDomainRMSD::read( const PDB& pdb ){
        else weights.push_back( ww );
    }   
    // And set the atom numbers for this object
-   setAtomNumbers( pdb.getAtomNumbers() );
+   for(unsigned i=0;i<pdb.size();++i){ indices.push_back( pdb.getAtomNumbers()[i] ); der_index.push_back(i); }
+   // setAtomNumbers( pdb.getAtomNumbers() );
 }
 
 void MultiDomainRMSD::setReferenceAtoms( const std::vector<Vector>& conf, const std::vector<double>& align_in, const std::vector<double>& displace_in ){
diff --git a/src/reference/MultiReferenceBase.cpp b/src/reference/MultiReferenceBase.cpp
index fcfdd2337..cd2ed45d0 100644
--- a/src/reference/MultiReferenceBase.cpp
+++ b/src/reference/MultiReferenceBase.cpp
@@ -70,20 +70,20 @@ void MultiReferenceBase::getAtomAndArgumentRequirements( std::vector<AtomNumber>
 //   }
 // }
 
-void MultiReferenceBase::copyFrame( ReferenceConfiguration* frameToCopy ){
-  // Create a reference configuration of the appropriate type
-  ReferenceConfiguration* mymsd=metricRegister().create<ReferenceConfiguration>( frameToCopy->getName() );
-  // Copy names of arguments and and indexes
-  mymsd->setNamesAndAtomNumbers( frameToCopy->getAbsoluteIndexes(), frameToCopy->getArgumentNames() );
-  // Copy reference positions, reference arguments and reference metric
-  mymsd->setReferenceConfig( frameToCopy->getReferencePositions(), frameToCopy->getReferenceArguments(), frameToCopy->getReferenceMetric() );
-  // Copy weight
-  mymsd->setWeight( frameToCopy->getWeight() );
-  // Easy bit - copy the frame
-  frames.push_back( mymsd ); 
-  // This resizes the low dim array
-  resizeRestOfFrame();
-}
+// void MultiReferenceBase::copyFrame( ReferenceConfiguration* frameToCopy ){
+//   // Create a reference configuration of the appropriate type
+//   ReferenceConfiguration* mymsd=metricRegister().create<ReferenceConfiguration>( frameToCopy->getName() );
+//   // Copy names of arguments and and indexes
+//   mymsd->setNamesAndAtomNumbers( frameToCopy->getAbsoluteIndexes(), frameToCopy->getArgumentNames() );
+//   // Copy reference positions, reference arguments and reference metric
+//   mymsd->setReferenceConfig( frameToCopy->getReferencePositions(), frameToCopy->getReferenceArguments(), frameToCopy->getReferenceMetric() );
+//   // Copy weight
+//   mymsd->setWeight( frameToCopy->getWeight() );
+//   // Easy bit - copy the frame
+//   frames.push_back( mymsd ); 
+//   // This resizes the low dim array
+//   resizeRestOfFrame();
+// }
 
 void MultiReferenceBase::setWeights( const std::vector<double>& weights ){
    plumed_assert( weights.size()==frames.size() );
diff --git a/src/reference/MultiReferenceBase.h b/src/reference/MultiReferenceBase.h
index fddb71530..0d2827133 100644
--- a/src/reference/MultiReferenceBase.h
+++ b/src/reference/MultiReferenceBase.h
@@ -66,7 +66,7 @@ public:
 /// Return the ith reference frame
   ReferenceConfiguration* getFrame( const unsigned& iframe );
 /// Copy a reference configuration into the multi reference object
-  void copyFrame( ReferenceConfiguration* frameToCopy ); 
+//  void copyFrame( ReferenceConfiguration* frameToCopy ); 
 /// Set the weight of the ith frame
   void setWeights( const std::vector<double>& ww );
 /// Retrieve the weight of one of the frames
diff --git a/src/reference/ReferenceArguments.cpp b/src/reference/ReferenceArguments.cpp
index 50cb45786..a9bc45727 100644
--- a/src/reference/ReferenceArguments.cpp
+++ b/src/reference/ReferenceArguments.cpp
@@ -38,8 +38,8 @@ void ReferenceArguments::readArgumentsFromPDB( const PDB& pdb ){
   if( !aref ) parseVector( "ARG", arg_names );
   else parseVector( "ARG", arg_names, true );
 
-  reference_args.resize( arg_names.size() );
-  for(unsigned i=0;i<arg_names.size();++i) parse( arg_names[i], reference_args[i] );
+  reference_args.resize( arg_names.size() ); der_index.resize( arg_names.size() );
+  for(unsigned i=0;i<arg_names.size();++i){ parse( arg_names[i], reference_args[i] ); der_index[i]=i; }
 
   if( hasweights ){
       plumed_massert( !hasmetric, "should not have weights if we are using metric");
@@ -62,17 +62,6 @@ void ReferenceArguments::readArgumentsFromPDB( const PDB& pdb ){
   }
 }
 
-void ReferenceArguments::setArgumentNames( const std::vector<std::string>& arg_vals ){
-  reference_args.resize( arg_vals.size() ); 
-  arg_names.resize( arg_vals.size() ); 
-  der_index.resize( arg_vals.size() );
-  for(unsigned i=0;i<arg_vals.size();++i){
-     arg_names[i]=arg_vals[i]; der_index[i]=i; 
-  }
-  if( hasmetric ) metric.resize( arg_vals.size(), arg_vals.size() );
-  else weights.resize( arg_vals.size() );
-}
-
 void ReferenceArguments::setReferenceArguments( const std::vector<double>& arg_vals, const std::vector<double>& sigma ){
   plumed_dbg_assert( reference_args.size()==arg_vals.size() );
   for(unsigned i=0;i<arg_vals.size();++i) reference_args[i]=arg_vals[i];
@@ -120,9 +109,8 @@ void ReferenceArguments::getArgumentRequests( std::vector<std::string>& argout,
   }
 }
 
-void ReferenceArguments::printArguments( OFile& ofile, const std::string& fmt, const bool& isproperty ) const {
-  if( isproperty ) ofile.printf("REMARK PROPERTIES=%s", arg_names[0].c_str() );
-  else ofile.printf("REMARK ARG=%s", arg_names[0].c_str() );
+void ReferenceArguments::printArguments( OFile& ofile, const std::string& fmt ) const {
+  ofile.printf("REMARK ARG=%s", arg_names[0].c_str() );
   for(unsigned i=1;i<arg_names.size();++i) ofile.printf(",%s", arg_names[i].c_str() );
   ofile.printf("\n");
   ofile.printf("REMARK ");
diff --git a/src/reference/ReferenceArguments.h b/src/reference/ReferenceArguments.h
index d1fc4db14..0663aa44b 100644
--- a/src/reference/ReferenceArguments.h
+++ b/src/reference/ReferenceArguments.h
@@ -73,14 +73,12 @@ public:
   unsigned getNumberOfReferenceArguments() const ;
 /// Get the arguments required 
   void getArgumentRequests( std::vector<std::string>&, bool disable_checks=false );
-/// Set the names of the arguments
-  void setArgumentNames( const std::vector<std::string>& arg_vals );
 /// Set the positions of the refernce arguments
   void setReferenceArguments( const std::vector<double>& arg_vals, const std::vector<double>& sigma );
 /// Get the value of the ith reference argument
   double getReferenceArgument( const unsigned& i ) const ;
 /// Print the arguments out
-  void printArguments( OFile& ofile, const std::string& fmt, const bool& isproperty ) const ;
+  void printArguments( OFile& ofile, const std::string& fmt ) const ;
 /// Return all the reference arguments
   const std::vector<double>& getReferenceArguments();
   const std::vector<double>& getReferenceMetric();
diff --git a/src/reference/ReferenceAtoms.cpp b/src/reference/ReferenceAtoms.cpp
index c28dc682e..b97f2d4cb 100644
--- a/src/reference/ReferenceAtoms.cpp
+++ b/src/reference/ReferenceAtoms.cpp
@@ -36,17 +36,7 @@ void ReferenceAtoms::readAtomsFromPDB( const PDB& pdb ){
 
   for(unsigned i=0;i<pdb.size();++i){
      indices.push_back( pdb.getAtomNumbers()[i] ); reference_atoms.push_back( pdb.getPositions()[i] );
-     align.push_back( pdb.getOccupancy()[i] ); displace.push_back( pdb.getBeta()[i] );
-  }
-  der_index.resize( reference_atoms.size() );
-}
-
-void ReferenceAtoms::setAtomNumbers( const std::vector<AtomNumber>& numbers ){
-  reference_atoms.resize( numbers.size() ); align.resize( numbers.size() );
-  displace.resize( numbers.size() ); der_index.resize( numbers.size() );
-  indices.resize( numbers.size() );
-  for(unsigned i=0;i<numbers.size();++i){
-     indices[i]=numbers[i]; der_index[i]=i; 
+     align.push_back( pdb.getOccupancy()[i] ); displace.push_back( pdb.getBeta()[i] ); der_index.push_back(i);
   }
 }
 
diff --git a/src/reference/ReferenceAtoms.h b/src/reference/ReferenceAtoms.h
index 5e7e0c12e..6fc17ced1 100644
--- a/src/reference/ReferenceAtoms.h
+++ b/src/reference/ReferenceAtoms.h
@@ -45,6 +45,7 @@ class ReferenceAtoms :
   virtual public ReferenceConfiguration
 {
 friend class SingleDomainRMSD;
+friend class MultiDomainRMSD;
 private:
 /// This flag tells us if the user has disabled checking of the input in order to
 /// do fancy paths with weird inputs
@@ -64,8 +65,6 @@ private:
 protected:
 /// Read in the atoms from the pdb file
   void readAtomsFromPDB( const PDB& );
-/// Add atom indices to list
-  void setAtomIndices( const std::vector<AtomNumber>& atomnumbers );
 /// Read a list of atoms from the pdb input file
   bool parseAtomList( const std::string& , std::vector<unsigned>& );
 /// Get the vector of alignment weights
@@ -76,12 +75,6 @@ protected:
   Vector getReferencePosition( const unsigned& iatom ) const ;  
 /// Get the reference positions
   const std::vector<Vector> & getReferencePositions() const ; 
-/// Add derivatives to iatom th atom in list
-//  void addAtomicDerivatives( const unsigned& , const Vector& );
-/// Get the atomic derivatives on the ith atom in the list
-//  Vector retrieveAtomicDerivatives( const unsigned& ) const ;
-/// Add derivatives to the viral
-//  void addBoxDerivatives( const Tensor& );
 /// This does the checks that are always required
   void singleDomainRequests( std::vector<AtomNumber>&, bool disable_checks );
 public:
@@ -92,8 +85,6 @@ public:
   unsigned getAtomIndex( const unsigned& ) const ;
 /// Get the atoms required (additional checks are required when we have multiple domains)
   virtual void getAtomRequests( std::vector<AtomNumber>&, bool disable_checks=false );
-/// Set the indices of the reference atoms
-  void setAtomNumbers( const std::vector<AtomNumber>& numbers );
 /// Set the positions of the reference atoms
   virtual void setReferenceAtoms( const std::vector<Vector>& conf, const std::vector<double>& align_in, const std::vector<double>& displace_in )=0;
 /// Print the atomic positions
@@ -116,13 +107,12 @@ const std::vector<double> & ReferenceAtoms::getDisplace() const {
 
 inline
 unsigned ReferenceAtoms::getNumberOfReferencePositions() const {
-  plumed_dbg_assert( der_index.size()==reference_atoms.size() );
-  return reference_atoms.size();
+  return der_index.size(); // reference_atoms.size();
 }
 
 inline
 unsigned ReferenceAtoms::getNumberOfAtoms() const {
-  return reference_atoms.size();
+  return der_index.size(); // reference_atoms.size();
 }
 
 inline
@@ -143,21 +133,6 @@ const std::vector<Vector> & ReferenceAtoms::getReferencePositions() const {
   return reference_atoms;
 }
 
-// inline
-// void ReferenceAtoms::addAtomicDerivatives( const unsigned& iatom, const Vector& der ){
-//   atom_ders[ getAtomIndex(iatom) ]+=der;
-// }
-
-// inline
-// Vector ReferenceAtoms::retrieveAtomicDerivatives( const unsigned& iatom ) const {
-//   return atom_ders[ getAtomIndex(iatom) ];
-// }
-
-// inline
-// void ReferenceAtoms::addBoxDerivatives( const Tensor& vir ){
-//   virialWasSet=true; virial+=vir;
-// }
-
 inline
 const std::vector<AtomNumber>& ReferenceAtoms::getAbsoluteIndexes(){
   return indices;
diff --git a/src/reference/ReferenceConfiguration.cpp b/src/reference/ReferenceConfiguration.cpp
index b20e9b9bc..8e0949995 100644
--- a/src/reference/ReferenceConfiguration.cpp
+++ b/src/reference/ReferenceConfiguration.cpp
@@ -45,8 +45,6 @@ std::string ReferenceConfigurationOptions::getMultiRMSDType() const {
 
 ReferenceConfiguration::ReferenceConfiguration( const ReferenceConfigurationOptions& ro ):
 name(ro.tt)
-// arg_ders(0),
-// atom_ders(0)
 {
   weight=0.0;
 }
@@ -66,22 +64,14 @@ void ReferenceConfiguration::set( const PDB& pdb ){
       if(ignore!=name) error("mismatch for name");
   }
   if( !parse("WEIGHT",weight,true) ) weight=1.0;
+  // Read in properties
+  parseVector( "PROPERTIES", property_names, true );
+  property_values.resize( property_names.size() );
+  for(unsigned i=0;i<property_names.size();++i) parse( property_names[i], property_values[i] );
+  // And read in rest of pdb
   read( pdb );
 }
 
-// void ReferenceConfiguration::setNumberOfArguments( const unsigned& n ){
-//   arg_ders.resize(n); tmparg.resize(n);
-// }
-
-// void ReferenceConfiguration::setNumberOfAtoms( const unsigned& n ){
-//   atom_ders.resize(n);
-// }
-
-// bool ReferenceConfiguration::getVirial( Tensor& virout ) const {
-//   if(virialWasSet) virout=virial;
-//   return virialWasSet;
-// }
-
 void ReferenceConfiguration::parseFlag( const std::string&key, bool&t ){
   Tools::parseFlag(line,key,t);
 }
@@ -90,45 +80,6 @@ void ReferenceConfiguration::error(const std::string& msg){
   plumed_merror("error reading reference configuration of type " + name + " : " + msg );
 }
 
-void ReferenceConfiguration::setNamesAndAtomNumbers( const std::vector<AtomNumber>& numbers, const std::vector<std::string>& arg ){
-   ReferenceAtoms* atoms=dynamic_cast<ReferenceAtoms*>( this );
-  if(!atoms){
-     plumed_massert( numbers.size()==0, "expecting no atomic positions");
-     //setNumberOfAtoms( 0 );
-  } else { 
-     atoms->setAtomNumbers( numbers );
-     // setNumberOfAtoms( numbers.size() );
-  }
-  // Copy the arguments to the reference
-  ReferenceArguments* args=dynamic_cast<ReferenceArguments*>( this );
-  if(!args){
-     plumed_massert( arg.size()==0, "expecting no arguments");
-     // setNumberOfArguments(0);
-  } else {
-     args->setArgumentNames( arg );
-     // setNumberOfArguments( arg.size() );
-  }
-}
-
-void ReferenceConfiguration::setReferenceConfig( const std::vector<Vector>& pos, const std::vector<double>& arg, const std::vector<double>& metric ){
-//  plumed_dbg_assert( pos.size()==atom_ders.size() && arg.size()==arg_ders.size() );
-  // Copy the atomic positions to the reference
-  ReferenceAtoms* atoms=dynamic_cast<ReferenceAtoms*>( this );
-  if(!atoms){
-     plumed_massert( pos.size()==0, "expecting no atomic positions");
-  } else { 
-     std::vector<double> align_in( pos.size(), 1.0 ), displace_in( pos.size(), 1.0 );
-     atoms->setReferenceAtoms( pos, align_in, displace_in );
-  }
-  // Copy the arguments to the reference
-  ReferenceArguments* args=dynamic_cast<ReferenceArguments*>( this );
-  if(!args){
-     plumed_massert( arg.size()==0 && metric.size()==0, "expecting no arguments");
-  } else {
-     args->setReferenceArguments( arg, metric );
-  }
-}
-
 void ReferenceConfiguration::checkRead(){
   if(!line.empty()){
     std::string msg="cannot understand the following words from the input line : ";
@@ -143,31 +94,50 @@ bool ReferenceConfiguration::isDirection() const {
 
 double ReferenceConfiguration::calculate( const std::vector<Vector>& pos, const Pbc& pbc, const std::vector<Value*>& vals, 
                                           ReferenceValuePack& myder, const bool& squared ) const {
-  // clearDerivatives();
   std::vector<double> tmparg( vals.size() );
   for(unsigned i=0;i<vals.size();++i) tmparg[i]=vals[i]->get();
   return calc( pos, pbc, vals, tmparg, myder, squared );
 }
 
-// void ReferenceConfiguration::copyDerivatives( const ReferenceConfiguration* ref ){
-//   plumed_dbg_assert( ref->atom_ders.size()==atom_ders.size() && ref->arg_ders.size()==arg_ders.size() );
-//   for(unsigned i=0;i<atom_ders.size();++i) atom_ders[i]=ref->atom_ders[i];
-//   for(unsigned i=0;i<arg_ders.size();++i) arg_ders[i]=ref->arg_ders[i];
-//   virialWasSet=ref->virialWasSet; virial=ref->virial;
-// }
-
 void ReferenceConfiguration::print( const double& lunits, OFile& ofile, const double& time, const double& weight, const double& old_norm ){
   ofile.printf("REMARK TIME=%f LOG_WEIGHT=%f OLD_NORM=%f\n",time, weight, old_norm );
-  print( lunits, ofile, "%f", false );  // HARD CODED FORMAT HERE AS THIS IS FOR CHECKPOINT FILE
+  print( lunits, ofile, "%f" );  // HARD CODED FORMAT HERE AS THIS IS FOR CHECKPOINT FILE
 }
 
-void ReferenceConfiguration::print( const double& lunits, OFile& ofile, const std::string& fmt, const bool& isproperty ){
+void ReferenceConfiguration::print( const double& lunits, OFile& ofile, const std::string& fmt ){
   ReferenceArguments* args=dynamic_cast<ReferenceArguments*>(this);
-  if(args) args->printArguments( ofile, fmt, isproperty );
+  if( property_names.size()>0 ){
+      ofile.printf("REMARK PROPERTIES=%s", property_names[0].c_str() ); 
+      for(unsigned i=1;i<property_names.size();++i) ofile.printf(",%s", property_names[i].c_str() );
+      ofile.printf("\nREMARK "); std::string descr2;
+      if(fmt.find("-")!=std::string::npos){
+         descr2="%s=" + fmt + " ";
+      } else {
+         // This ensures numbers are left justified (i.e. next to the equals sign
+         std::size_t psign=fmt.find("%");
+         plumed_assert( psign!=std::string::npos );
+         descr2="%s=%-" + fmt.substr(psign+1) + " ";
+      }
+      for(unsigned i=0;i<property_names.size();++i) ofile.printf( descr2.c_str(),property_names[i].c_str(), property_values[i] );
+      ofile.printf("\n");
+  }
+  if(args) args->printArguments( ofile, fmt );
   ReferenceAtoms* atoms=dynamic_cast<ReferenceAtoms*>(this);
-  if( atoms && isproperty ) plumed_merror("a set of atoms is not a list of properties");
   if(atoms) atoms->printAtoms( lunits, ofile );
-  if( !isproperty ) ofile.printf("END\n");
+  ofile.printf("END\n");
+}
+
+void ReferenceConfiguration::clearAllProperties(){
+  property_names.resize(0); property_values.resize(0);
+}
+
+void ReferenceConfiguration::attachProperty( const std::string& name, const double& val ){
+  bool found=false;
+  for(unsigned i=0;i<property_names.size();++i){
+      if( property_names[i]==name ){ found=false; property_values[i]=val; break; }
+  }
+  plumed_dbg_assert( property_names.size()==property_values.size() );
+  if( !found ){ property_names.push_back( name ); property_values.push_back( val ); }
 }
 
 double distance( const Pbc& pbc, const std::vector<Value*> & vals, ReferenceConfiguration* ref1, ReferenceConfiguration* ref2, const bool& squared ){
@@ -185,4 +155,5 @@ double distance( const Pbc& pbc, const std::vector<Value*> & vals, ReferenceConf
   return dist1;
 }
 
+
 }
diff --git a/src/reference/ReferenceConfiguration.h b/src/reference/ReferenceConfiguration.h
index a94a010df..0dd4ce0f9 100644
--- a/src/reference/ReferenceConfiguration.h
+++ b/src/reference/ReferenceConfiguration.h
@@ -66,8 +66,6 @@ private:
   double weight;
 /// A vector containing all the remarks from the pdb input
   std::vector<std::string> line;
-/// This is used to store the values of arguments
-//  std::vector<double> tmparg;
 /// These are used to do fake things when we copy frames
   std::vector<AtomNumber> fake_atom_numbers;
   std::vector<std::string> fake_arg_names;
@@ -75,18 +73,12 @@ private:
   std::vector<Vector> fake_refatoms;
   std::vector<double> fake_refargs;
   std::vector<double> fake_metric;
+/// Property values are basically the projections of points
+  std::vector<std::string> property_names;
+  std::vector<double> property_values;
 protected:
-/// Derivatives wrt to the arguments
-//  std::vector<double> arg_ders;
-/// The virial contribution has to be stored 
-//  bool virialWasSet;
-//  Tensor virial;
-/// Derivatives wrt to the atoms
-//  std::vector<Vector> atom_ders;
 /// Crash with an error
   void error(const std::string& msg);
-/// Clear the derivatives 
-//  void clearDerivatives();
 public:
   ReferenceConfiguration( const ReferenceConfigurationOptions& ro );
 /// Destructor
@@ -100,10 +92,6 @@ public:
   virtual void getAtomRequests( std::vector<AtomNumber>&, bool disable_checks=false ){}
 /// Retrieve the arguments that are required for this guy
   virtual void getArgumentRequests( std::vector<std::string>&, bool disable_checks=false ){}
-/// Set the final number of arguments
-//  virtual void setNumberOfArguments( const unsigned& );
-/// Set the final number of atoms
-//  virtual void setNumberOfAtoms( const unsigned& );
 /// Set the reference configuration using a PDB 
   virtual void set( const PDB& );
 /// Do all local business for setting the configuration 
@@ -117,14 +105,6 @@ public:
 /// Calculate the distance from the reference configuration
   virtual double calc( const std::vector<Vector>& pos, const Pbc& pbc, const std::vector<Value*>& vals, const std::vector<double>& args, 
                        ReferenceValuePack& myder, const bool& squared ) const=0;
-// /// Return the derivative wrt to the ith atom
-//   Vector getAtomDerivative( const unsigned& ) const ;
-// /// Return the derivative wrt to the ith argument
-//   double getArgumentDerivative( const unsigned& ) const ;
-/// Return the derivatives of the distance wrt the cell vectors.  This returns false
-/// for everything other than DRMSD as these sort of calculations have to be done 
-/// separately when you use RMSD 
-//   bool getVirial( Tensor& virout ) const ;    
 /// Parse something from the pdb remarks
   template<class T>
   bool parse( const std::string&key, T&t, bool ignore_missing=false );
@@ -137,13 +117,9 @@ public:
   void checkRead();
 /// Copy derivatives from one frame to this frame
   void copyDerivatives( const ReferenceConfiguration* );
-/// Set the atom numbers and the argument names
-  void setNamesAndAtomNumbers( const std::vector<AtomNumber>& numbers, const std::vector<std::string>& arg );
-/// Set the reference structure (perhaps should also pass the pbc and align and displace )
-  void setReferenceConfig( const std::vector<Vector>& pos, const std::vector<double>& arg, const std::vector<double>& metric );
 /// Print a pdb file containing the reference configuration
   void print( const double& lunits, OFile& ofile, const double& time, const double& weight, const double& old_norm );
-  void print( const double& lunits, OFile& ofile, const std::string& fmt, const bool& isproperty );
+  void print( const double& lunits, OFile& ofile, const std::string& fmt );
 /// Get one of the referene arguments
   virtual double getReferenceArgument( const unsigned& i ) const { plumed_error(); return 0.0; }
 /// These are overwritten in ReferenceArguments and ReferenceAtoms but are required here 
@@ -163,20 +139,18 @@ public:
   bool isDirection() const ;
 /// Stuff to setup pca
   virtual void setupPCAStorage( ReferenceValuePack& mypack ){ plumed_error(); }
+/// This clears the set of properties that have been attached to the file
+  void clearAllProperties();
+/// Attach a property to this reference configuration
+  void attachProperty( const std::string& name, const double& val );
+/// Get the number of properties that are stored in this object
+  unsigned getNumberOfProperties() const ;
+/// Get the inum th property value
+  double getPropertyValue( const unsigned& inum ) const ;
+/// Get the name of the inum th property value
+  std::string getPropertyName( const unsigned& inum ) const ;
 };
 
-// inline
-// Vector ReferenceConfiguration::getAtomDerivative( const unsigned& ider ) const {
-//   plumed_dbg_assert( ider<atom_ders.size() );
-//   return atom_ders[ider];
-// }
-
-// inline
-// double ReferenceConfiguration::getArgumentDerivative( const unsigned& ider ) const {
-//   plumed_dbg_assert( ider<arg_ders.size() );
-//   return arg_ders[ider];
-// }
-
 inline
 void ReferenceConfiguration::setWeight( const double& ww ){
   weight=ww;
@@ -236,7 +210,20 @@ unsigned ReferenceConfiguration::getNumberOfReferenceArguments() const {
   return 0;
 }
 
+inline
+unsigned ReferenceConfiguration::getNumberOfProperties() const {
+  return property_values.size();
+}
 
+inline
+double ReferenceConfiguration::getPropertyValue( const unsigned& inum ) const {
+  plumed_dbg_assert( inum<property_values.size() ); return property_values[inum];
+}
+
+inline
+std::string ReferenceConfiguration::getPropertyName( const unsigned& inum ) const {
+  plumed_dbg_assert( inum<property_names.size() ); return property_names[inum];
+}
 
 }
 #endif
diff --git a/src/tools/PDB.cpp b/src/tools/PDB.cpp
index f24146ed8..6f75869da 100644
--- a/src/tools/PDB.cpp
+++ b/src/tools/PDB.cpp
@@ -28,6 +28,38 @@ using namespace std;
 
 namespace PLMD{
 
+void PDB::setAtomNumbers( const std::vector<AtomNumber>& atoms ){
+  positions.resize( atoms.size() ); occupancy.resize( atoms.size() ); 
+  beta.resize( atoms.size() ); numbers.resize( atoms.size() );
+  for(unsigned i=0;i<atoms.size();++i){ numbers[i]=atoms[i]; beta[i]=1.0; occupancy[i]=1.0; }
+}
+
+void PDB::addArgumentNames( const std::vector<std::string>& argument_names ){
+  std::string newrem = "ARG="+argument_names[0];
+  for(unsigned i=1;i<argument_names.size();++i) newrem+="," + argument_names[i];
+  remark.push_back( newrem );
+  for(unsigned i=0;i<argument_names.size();++i) remark.push_back( argument_names[i] + "=0" );
+}
+
+void PDB::setAtomPositions( const std::vector<Vector>& pos ){
+  plumed_dbg_assert( pos.size()==positions.size() );
+  for(unsigned i=0;i<positions.size();++i) positions[i]=pos[i];
+}
+
+void PDB::setArgumentValue( const std::string& argname, const double& val ){
+  bool replaced=false; std::string num; Tools::convert( val, num );
+  for(unsigned i=0;i<remark.size();++i){
+      if( remark[i].find(argname+"=")!=std::string::npos){
+          remark[i]=argname + "=" + num; replaced=true;
+      }
+  }
+  plumed_assert( replaced ); 
+}
+
+void PDB::addBlockEnd( const unsigned& end ){
+  block_ends.push_back( end );
+}
+
 unsigned PDB::getNumberOfAtomBlocks()const{
   return block_ends.size();
 }
diff --git a/src/tools/PDB.h b/src/tools/PDB.h
index ef4589560..7c242fee9 100644
--- a/src/tools/PDB.h
+++ b/src/tools/PDB.h
@@ -98,6 +98,16 @@ public:
 /// Return the atom named aname from residue number resnum and chain.
 /// Chain=="*" matches any chain and makes it equivalent to getNamedAtomFromResidue.
   AtomNumber getNamedAtomFromResidueAndChain( const std::string& aname, const unsigned& resnum, const std::string& chain ) const;
+/// This is used in PLMD::analysis::AnalysisWithDataCollection to add the sizes of the domains for PLMD::MultiRMSD
+  void addBlockEnd( const unsigned& end );
+/// This is used in PLMD::analysis::AnalysisWithDataCollection to add the names of the arguments 
+  void addArgumentNames( const std::vector<std::string>& argument_names );
+/// This is used in PLMD::analysis::AnalysisWithDataCollection to add the numbers of the atoms
+  void setAtomNumbers( const std::vector<AtomNumber>& atoms );
+/// This is used in PLMD::analysis::AnalysisWithDataCollection to set the atom positions
+  void setAtomPositions( const std::vector<Vector>& pos );
+/// This is used in PLMD::analysis::AnalysisWithDataCollection to set the argument values 
+  void setArgumentValue( const std::string& argname, const double& val );
 /// Get the extents of the blocks containing the atoms
   const std::vector<unsigned> & getAtomBlockEnds() const ;
 /// Get the number of blocks of atoms in the pdb
-- 
GitLab