mailRe: r24006 - /branches/disp_spin_speed/target_functions/relax_disp.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Edward d'Auvergne on June 17, 2014 - 11:37:
Actually, if you deindent the lines after the self.r2eff_ns_mmq[ei]()
function call, the bug goes away!!!  So, here is the fix which applies
to the 'MMQ CR72' model as well:

"""
Index: target_functions/relax_disp.py
===================================================================
--- target_functions/relax_disp.py      (revision 24016)
+++ target_functions/relax_disp.py      (working copy)
@@ -1309,22 +1309,19 @@
             # Back calculate the R2eff values.
             r2eff_mmq_cr72(r20=r20, pA=pA, pB=pB, dw=aliased_dw,
dwH=aliased_dwH, kex=kex, k_AB=k_AB, k_BA=k_BA,
cpmg_frqs=self.cpmg_frqs[ei], inv_tcpmg=self.inv_relax_times[ei],
tcp=self.tau_cpmg[ei], back_calc=self.back_calc[ei])

-            # Clean the data for all values, which is left over at
the end of arrays.
-            self.back_calc[ei] = self.back_calc[ei]*self.disp_struct[ei]
+        # Clean the data for all values, which is left over at the
end of arrays.
+        self.back_calc = self.back_calc*self.disp_struct

-            # For all missing data points, set the back-calculated
value to the measured values so that it has no effect on the
chi-squared value.
-            if self.has_missing:
-                # Replace with values.
-                mask_replace_blank_ei = masked_equal(self.missing[ei], 1.0)
-                self.back_calc[ei][mask_replace_blank_ei.mask] =
self.values[ei][mask_replace_blank_ei.mask]
+        # For all missing data points, set the back-calculated value
to the measured values so that it has no effect on the chi-squared
value.
+        if self.has_missing:
+            # Replace with values.
+            mask_replace_blank = masked_equal(self.missing, 1.0)
+            self.back_calc[mask_replace_blank.mask] =
self.values[mask_replace_blank.mask]

-            # Calculate and return the chi-squared value.
-            chi2_sum += chi2_rankN(self.values[ei],
self.back_calc[ei], self.errors[ei])
+        # Calculate and return the chi-squared value.
+        return chi2_rankN(self.values, self.back_calc, self.errors)

-        # Return the total chi-squared value.
-        return chi2_sum

-
     def func_NOREX(self, params):
         """Target function for no exchange.

@@ -1560,22 +1557,19 @@
             # Back calculate the R2eff values for each experiment type.
             self.r2eff_ns_mmq[ei](M0=self.M0, m1=self.m1, m2=self.m2,
R20A=r20, R20B=r20, pA=pA, pB=pB, dw=aliased_dw, dwH=aliased_dwH,
k_AB=k_AB, k_BA=k_BA, inv_tcpmg=self.inv_relax_times[ei],
tcp=self.tau_cpmg[ei], back_calc=self.back_calc[ei],
num_points=self.num_disp_points[ei], power=self.power[ei])

-            # Clean the data for all values, which is left over at
the end of arrays.
-            self.back_calc[ei] = self.back_calc[ei]*self.disp_struct[ei]
+        # Clean the data for all values, which is left over at the
end of arrays.
+        self.back_calc = self.back_calc*self.disp_struct

-            # For all missing data points, set the back-calculated
value to the measured values so that it has no effect on the
chi-squared value.
-            if self.has_missing:
-                # Replace with values.
-                mask_replace_blank_ei = masked_equal(self.missing[ei], 1.0)
-                self.back_calc[ei][mask_replace_blank_ei.mask] =
self.values[ei][mask_replace_blank_ei.mask]
+        # For all missing data points, set the back-calculated value
to the measured values so that it has no effect on the chi-squared
value.
+        if self.has_missing:
+            # Replace with values.
+            mask_replace_blank = masked_equal(self.missing, 1.0)
+            self.back_calc[mask_replace_blank.mask] =
self.values[mask_replace_blank.mask]

-            # Calculate and return the chi-squared value.
-            chi2_sum += chi2_rankN(self.values[ei],
self.back_calc[ei], self.errors[ei])
+        # Calculate and return the chi-squared value.
+        return chi2_rankN(self.values, self.back_calc, self.errors)

-        # Return the total chi-squared value.
-        return chi2_sum

-
     def func_ns_mmq_3site(self, params):
         """Target function for the combined SQ, ZQ, DQ and MQ 3-site
MMQ CPMG numeric solution.
"""

You could just manually fix this rather than trying to use this patch.

Regards,

Edward


On 17 June 2014 11:31, Edward d'Auvergne <edward@xxxxxxxxxxxxx> wrote:
Because this is real measured and published data :)

On 17 June 2014 11:26, Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx> wrote:
This is easier:

                        # Loop over dispersion points.
                        for di in range(num_disp_points):
                            if missing[ei][si][mi][oi][di]:
                                self.has_missing = True
                                self.missing[ei][si][mi][oi][di] = 1.0
                                print "ei, si, mi, oi, di", ei, si, mi, oi,
di

ei, si, mi, oi, di 1 0 0 0 8
ei, si, mi, oi, di 1 0 1 0 8
ei, si, mi, oi, di 1 0 1 0 11
ei, si, mi, oi, di 1 0 1 0 13
ei, si, mi, oi, di 2 0 0 0 12
ei, si, mi, oi, di 2 0 1 0 12
ei, si, mi, oi, di 3 0 0 0 12
ei, si, mi, oi, di 3 0 1 0 12

The question is now, how can there be missing data points?



2014-06-17 11:10 GMT+02:00 Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx>:

                    if self.has_missing:
                        itemindex = where(self.missing==1.0)
                        #print self.missing
                        print "ei,si,mi", ei,si,mi, "index", itemindex[ei]

gives

ei,si,mi 0 0 0 index [1 1 1 1 2 2 3 3]
ei,si,mi 0 0 1 index [1 1 1 1 2 2 3 3]
ei,si,mi 0 0 2 index [1 1 1 1 2 2 3 3]
ei,si,mi 1 0 0 index [0 0 0 0 0 0 0 0]
ei,si,mi 1 0 1 index [0 0 0 0 0 0 0 0]
ei,si,mi 1 0 2 index [0 0 0 0 0 0 0 0]
ei,si,mi 2 0 0 index [0 1 1 1 0 1 0 1]
ei,si,mi 2 0 1 index [0 1 1 1 0 1 0 1]
ei,si,mi 2 0 2 index [0 1 1 1 0 1 0 1]
ei,si,mi 3 0 0 index [0 0 0 0 0 0 0 0]
ei,si,mi 3 0 1 index [0 0 0 0 0 0 0 0]
ei,si,mi 3 0 2 index [0 0 0 0 0 0 0 0]
ei,si,mi 4 0 0 index [ 8  8 11 13 12 12 12 12]
ei,si,mi 4 0 1 index [ 8  8 11 13 12 12 12 12]
ei,si,mi 4 0 2 index [ 8  8 11 13 12 12 12 12]
ei,si,mi 5 0 0 indexE



2014-06-17 11:03 GMT+02:00 Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx>:

The missing flag is on.

So, it is probably something with this.



2014-06-17 11:01 GMT+02:00 Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx>:

Yeah.

It is weird.

I am working at a earlier state, and trying to figure it out.
Right now I am looking at the missing flag.




2014-06-17 10:49 GMT+02:00 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:

This is very strange.  It only affects that single spin.r2[r20_key3]
parameter and the chi-squared value.  Hmmmm, what is happening?

Regards,

Edward



On 16 June 2014 23:29, Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx>
wrote:
This is weird.

It has found a lower chi2 value?

        # Checks for residue :9.
        self.assertAlmostEqual(spin.r2[r20_key1],  6.67288025927458,
4)
        self.assertAlmostEqual(spin.r2[r20_key2],  6.98951408255098,
4)
        self.assertAlmostEqual(spin.r2[r20_key3],  5.52959273852704,
4)
        self.assertAlmostEqual(spin.r2[r20_key4],  8.39471048876782,
4)
        self.assertAlmostEqual(spin.r2[r20_key5],  8.89290699178799,
4)
        self.assertAlmostEqual(spin.r2[r20_key6],  10.4077068723693,
4)
        self.assertAlmostEqual(spin.r2[r20_key7],  5.93611174376373,
4)
        self.assertAlmostEqual(spin.r2[r20_key8],  6.71735669582514,
4)
        self.assertAlmostEqual(spin.r2[r20_key9],  6.83835225518265,
4)
        self.assertAlmostEqual(spin.r2[r20_key10], 8.59615074668922,
4)
        self.assertAlmostEqual(spin.r2[r20_key11], 10.6512137889291,
4)
        self.assertAlmostEqual(spin.r2[r20_key12], 12.5710822919109,
4)
        self.assertAlmostEqual(spin.r2[r20_key13], 7.85956711501608,
4)
        self.assertAlmostEqual(spin.r2[r20_key14], 8.41891642907918,
4)
        self.assertAlmostEqual(spin.r2[r20_key15], 11.2362089223038,
4)
        self.assertAlmostEqual(spin.r2[r20_key16], 9.1965486378935,
4)
        self.assertAlmostEqual(spin.r2[r20_key17], 9.86031627358462,
4)
        self.assertAlmostEqual(spin.r2[r20_key18], 11.9752375592575,
4)
        self.assertAlmostEqual(spin.pA, 0.943129019477673, 4)
        self.assertAlmostEqual(spin.dw, 4.42209952545181, 4)
        self.assertAlmostEqual(spin.dwH, -0.27258970590969, 4)
        self.assertAlmostEqual(spin.kex/1000, 360.516132791038/1000,
4)
        self.assertAlmostEqual(spin.chi2/1000, 162.511988511609/1000,
3)



2014-06-16 22:42 GMT+02:00 Troels Emtekær Linnet
<tlinnet@xxxxxxxxxxxxx>:

Correction:

test_korzhnev_2005_all_data


2014-06-16 22:40 GMT+02:00 Troels Emtekær Linnet
<tlinnet@xxxxxxxxxxxxx>:

Following system test fails:
test_korzhnev_2005_15n_zq_data

This is a little weird.

Parameter            Value (:9)
R2 (1H SQ - 500 MHz)     6.67288025927458
R2 (1H SQ - 600 MHz)     6.98951408255098
R2 (1H SQ - 800 MHz)     5.80607237545339
R2 (SQ - 500 MHz)        8.39471048876782
R2 (SQ - 600 MHz)        8.89290699178799
R2 (SQ - 800 MHz)        10.4077068723693
R2 (ZQ - 500 MHz)        5.93611174376373
R2 (ZQ - 600 MHz)        6.71735669582514
R2 (ZQ - 800 MHz)        6.83835225518265
R2 (DQ - 500 MHz)        8.59615074668922
R2 (DQ - 600 MHz)        10.6512137889291
R2 (DQ - 800 MHz)        12.5710822919109
R2 (1H MQ - 500 MHz)     7.85956711501608
R2 (1H MQ - 600 MHz)     8.41891642907918
R2 (1H MQ - 800 MHz)     11.2362089223038
R2 (MQ - 500 MHz)         9.1965486378935
R2 (MQ - 600 MHz)        9.86031627358462
R2 (MQ - 800 MHz)        11.9752375592575
pA                      0.943129019477673
dw                       4.42209952545181
dwH                     -0.27258970590969
kex                      360.516132791038
chi2                     74.7104450897413

Traceback (most recent call last):
  File

"/Users/tlinnet/software/disp_spin_speed/test_suite/system_tests/relax_disp.py",
line 3474, in test_korzhnev_2005_all_data
    self.assertAlmostEqual(spin.r2[r20_key3],  5.52959273852704, 4)
AssertionError: 5.8060723754533914 != 5.52959273852704 within 4
places

---------- Forwarded message ----------
From: <tlinnet@xxxxxxxxxxxxx>
Date: 2014-06-16 22:11 GMT+02:00
Subject: r24006 -
/branches/disp_spin_speed/target_functions/relax_disp.py
To: relax-commits@xxxxxxx


Author: tlinnet
Date: Mon Jun 16 22:11:49 2014
New Revision: 24006

URL: http://svn.gna.org/viewcvs/relax?rev=24006&view=rev
Log:
Changed the reshaping of dw and dwH, since it is not dependent on
experiment.

Task #7807 (https://gna.org/task/index.php?7807): Speed-up of
dispersion
models for Clustered analysis.

Modified:
    branches/disp_spin_speed/target_functions/relax_disp.py

Modified: branches/disp_spin_speed/target_functions/relax_disp.py
URL:

http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/target_functions/relax_disp.py?rev=24006&r1=24005&r2=24006&view=diff


==============================================================================
--- branches/disp_spin_speed/target_functions/relax_disp.py
(original)
+++ branches/disp_spin_speed/target_functions/relax_disp.py     Mon
Jun
16 22:11:49 2014
@@ -496,7 +496,7 @@
         """

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20A and R20B to per experiment, spin and
frequency.
         self.r20a_struct[:] = multiply.outer(
R20A.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -535,7 +535,7 @@
         """

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20A and R20B to per experiment, spin and
frequency.
         self.r20a_struct[:] = multiply.outer(
R20A.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -574,7 +574,7 @@
         """

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20A and R20B to per experiment, spin and
frequency.
         self.r20a_struct[:] = multiply.outer(
R20A.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -613,7 +613,7 @@
         """

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20A and R20B to per experiment, spin and
frequency.
         self.r20a_struct[:] = multiply.outer(
R20A.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -974,7 +974,7 @@
         kex = params[self.end_index[1]]

         # Convert phi_ex from ppm^2 to (rad/s)^2. Use the out
argument,
to pass directly to structure.
-        multiply( multiply.outer( phi_ex.reshape(self.NE,
self.NS),
self.nm_no_nd_ones ), self.frqs_squared, out=self.phi_ex_struct )
+        multiply( multiply.outer( phi_ex.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs_squared, out=self.phi_ex_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1014,7 +1014,7 @@
         tex = params[self.end_index[2]]

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1108,7 +1108,7 @@
         kex = params[self.end_index[1]]

         # Convert phi_ex from ppm^2 to (rad/s)^2. Use the out
argument,
to pass directly to structure.
-        multiply( multiply.outer( phi_ex.reshape(self.NE,
self.NS),
self.nm_no_nd_ones ), self.frqs_squared, out=self.phi_ex_struct )
+        multiply( multiply.outer( phi_ex.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs_squared, out=self.phi_ex_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1147,7 +1147,7 @@
         kex = params[self.end_index[1]]

         # Convert phi_ex from ppm^2 to (rad/s)^2. Use the out
argument,
to pass directly to structure.
-        multiply( multiply.outer( phi_ex.reshape(self.NE,
self.NS),
self.nm_no_nd_ones ), self.frqs_squared, out=self.phi_ex_struct )
+        multiply( multiply.outer( phi_ex.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs_squared, out=self.phi_ex_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1187,7 +1187,7 @@
         kex = params[self.end_index[1]+1]

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1227,7 +1227,7 @@
         kex = params[self.end_index[1]+1]

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1273,8 +1273,8 @@
         k_AB = pB * kex

         # Convert dw and dwH from ppm to rad/s. Use the out
argument, to
pass directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
-        multiply( multiply.outer( dwH.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs_H, out=self.dwH_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dwH.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs_H, out=self.dwH_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1418,7 +1418,7 @@
         kex = params[self.end_index[1]+1]

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20A and R20B to per experiment, spin and
frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1514,9 +1514,8 @@
         k_BA = pA * kex
         k_AB = pB * kex

-        # Convert dw and dwH from ppm to rad/s. Use the out
argument, to
pass directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
-        multiply( multiply.outer( dwH.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs_H, out=self.dwH_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dwH.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs_H, out=self.dwH_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1752,7 +1751,7 @@
         kex = params[self.end_index[1]+1]

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1792,7 +1791,7 @@
         kex = params[self.end_index[1]+1]

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20 to per experiment, spin and frequency.
         self.r20_struct[:] = multiply.outer( R20.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )
@@ -1832,7 +1831,7 @@
         k_AB = params[self.end_index[1]]

         # Convert dw from ppm to rad/s. Use the out argument, to
pass
directly to structure.
-        multiply( multiply.outer( dw.reshape(self.NE, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )
+        multiply( multiply.outer( dw.reshape(1, self.NS),
self.nm_no_nd_ones ), self.frqs, out=self.dw_struct )

         # Reshape R20A and R20B to per experiment, spin and
frequency.
         self.r20a_struct[:] = multiply.outer(
R20A.reshape(self.NE,
self.NS, self.NM), self.no_nd_ones )


_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-commits mailing list
relax-commits@xxxxxxx

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-commits



_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
relax-devel@xxxxxxx

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel








Related Messages


Powered by MHonArc, Updated Tue Jun 17 11:40:18 2014