Hmmm, that would have been useful.  Numpy 1.6.2 has the percentile
function too, oh well.  Maybe the best would be to add a new function
to lib.statistics?  Something like the scipy function:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.scoreatpercentile.html#scipy.stats.scoreatpercentile

or:

http://code.activestate.com/recipes/511478-finding-the-percentile-of-the-values/

Licencing prevents us copying such code.  Or maybe a simple algorithm
could be created:

- Create a sorted list of chi2.
- The 90% value would be the value at the index int(0.9 * N).
- The 50% value would be the value at the index int(0.5 * N).
- The 20% value would be the value at the index int(0.2 * N).
- The 10% value would be the value at the index int(0.1 * N).

There are not really percentiles, but for this OpenDX map it might be
good enough.

Regards,

Edward

On 9 May 2014 18:35, Troels Emtekær Linnet <[email protected]> wrote:
> Hm.
>
> You need numpy 1.9
> http://docs.scipy.org/doc/numpy-dev/release.html
>
> I have 1.4
>
> 2014-05-09 18:21 GMT+02:00 Edward d'Auvergne <[email protected]>:
>> Here is a demo:
>>
>> """
>> from numpy import array, float64, percentile
>>
>> a = array(range(100001), float64)
>> print(percentile(a, 90))
>> print(percentile(a, 50))
>> print(percentile(a, 20))
>> print(percentile(a, 10))
>> """
>>
>> Regards,
>>
>> Edward
>>
>>
>>
>> On 9 May 2014 18:14, Edward d'Auvergne <[email protected]> wrote:
>>> You may also want to try this logic:
>>>
>>> """
>>> from numpy import percentile
>>>
>>> all_chi2 = array(all_chi2, float64)
>>> self.contour_levels = []
>>> self.contour_levels.append(percentile(all_chi2, 90))
>>> self.contour_levels.append(percentile(all_chi2, 50))
>>> self.contour_levels.append(percentile(all_chi2, 20))
>>> self.contour_levels.append(percentile(all_chi2, 10))
>>> """
>>>
>>> This might work better with OpenDX.
>>>
>>> Regards,
>>>
>>> Edward
>>>
>>>
>>>
>>>
>>> On 9 May 2014 18:08, Edward d'Auvergne <[email protected]> wrote:
>>>> Hi Troels,
>>>>
>>>> A better way to handle this would be to pass in an array of 4 values
>>>> for the isosurface levels into write_program().  Then you can change
>>>> these values as needed in pipe_control.opendx and not have to worry
>>>> about what happens in lib.software.opendx ever again.  It would
>>>> decouple the logic and be much more flexible.
>>>>
>>>> Regards,
>>>>
>>>> Edward
>>>>
>>>> On 9 May 2014 17:33,  <[email protected]> wrote:
>>>>> Author: tlinnet
>>>>> Date: Fri May  9 17:33:05 2014
>>>>> New Revision: 23132
>>>>>
>>>>> URL: http://svn.gna.org/viewcvs/relax?rev=23132&view=rev
>>>>> Log:
>>>>> Made collecting of min, max and median value of chi2, when creating the 
>>>>> chi2 map.
>>>>>
>>>>> task #7792: (https://gna.org/task/?7792) Make the dx.map write suggest 
>>>>> chi surface values.
>>>>>
>>>>> Modified:
>>>>>     trunk/pipe_control/opendx.py
>>>>>
>>>>> Modified: trunk/pipe_control/opendx.py
>>>>> URL: 
>>>>> http://svn.gna.org/viewcvs/relax/trunk/pipe_control/opendx.py?rev=23132&r1=23131&r2=23132&view=diff
>>>>> ==============================================================================
>>>>> --- trunk/pipe_control/opendx.py        (original)
>>>>> +++ trunk/pipe_control/opendx.py        Fri May  9 17:33:05 2014
>>>>> @@ -24,7 +24,7 @@
>>>>>
>>>>>
>>>>>  # Python module imports.
>>>>> -from numpy import float64, array, zeros
>>>>> +from numpy import float64, array, median, zeros
>>>>>  from time import asctime, localtime
>>>>>
>>>>>  # relax module imports.
>>>>> @@ -164,8 +164,11 @@
>>>>>          # Create the strings associated with the map axes.
>>>>>          self.map_axes()
>>>>>
>>>>> +        # Generate the map.
>>>>> +        self.create_map()
>>>>> +
>>>>>          # Create the OpenDX .net program file.
>>>>> -        write_program(file_prefix=self.file_prefix, 
>>>>> point_file=self.point_file, dir=self.dir, inc=self.inc, N=self.n, 
>>>>> num_points=self.num_points, labels=self.labels, 
>>>>> tick_locations=self.tick_locations, tick_values=self.tick_values, 
>>>>> date=self.date)
>>>>> +        write_program(file_prefix=self.file_prefix, 
>>>>> point_file=self.point_file, dir=self.dir, inc=self.inc, N=self.n, 
>>>>> num_points=self.num_points, labels=self.labels, 
>>>>> tick_locations=self.tick_locations, tick_values=self.tick_values, 
>>>>> date=self.date, min_chi2=self.min_chi2, max_chi2=self.max_chi2, 
>>>>> median_chi2=self.median_chi2)
>>>>>
>>>>>          # Create the OpenDX .cfg program configuration file.
>>>>>          write_config(file_prefix=self.file_prefix, dir=self.dir, 
>>>>> date=self.date)
>>>>> @@ -176,9 +179,6 @@
>>>>>          # Create the OpenDX .general and data files for the given point.
>>>>>          if self.num_points > 1:
>>>>>              write_point(file_prefix=self.point_file, dir=self.dir, 
>>>>> inc=self.inc, point=self.point, num_points=self.num_points, 
>>>>> bounds=self.bounds, N=self.n)
>>>>> -
>>>>> -        # Generate the map.
>>>>> -        self.create_map()
>>>>>
>>>>>
>>>>>      def create_map(self):
>>>>> @@ -211,6 +211,11 @@
>>>>>          percent = 0.0
>>>>>          percent_inc = 100.0 / (self.inc + 1.0)**(self.n - 1.0)
>>>>>          print("%-10s%8.3f%-1s" % ("Progress:", percent, "%"))
>>>>> +
>>>>> +        # Define min/max chi2 values.
>>>>> +        min_chi2 = 1e20
>>>>> +        max_chi2 = 1.
>>>>> +        all_chi = []
>>>>>
>>>>>          # Fix the diffusion tensor.
>>>>>          unfix = False
>>>>> @@ -257,6 +262,14 @@
>>>>>                      else:
>>>>>                          map_file.write("%30f\n" % chi2)
>>>>>
>>>>> +                        # Save min and max values of chi2.
>>>>> +                        all_chi.append(chi2)
>>>>> +                        if chi2 < min_chi2:
>>>>> +                            min_chi2 = chi2
>>>>> +
>>>>> +                        if chi2 > max_chi2:
>>>>> +                            max_chi2 = chi2
>>>>> +
>>>>>                      # Increment the value of the third parameter.
>>>>>                      values[2] = values[2] + self.step_size[2]
>>>>>
>>>>> @@ -274,6 +287,11 @@
>>>>>          if unfix:
>>>>>              cdp.diff_tensor.fixed = False
>>>>>
>>>>> +        # Save the min/max chi2 values.
>>>>> +        self.min_chi2 = min_chi2
>>>>> +        self.max_chi2 = max_chi2
>>>>> +        # Save the median chi2 value.
>>>>> +        self.median_chi2 = median(array(all_chi))
>>>>>
>>>>>      def map_axes(self):
>>>>>          """Function for creating labels, tick locations, and tick values 
>>>>> for an OpenDX map."""
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> relax (http://www.nmr-relax.com)
>>>>>
>>>>> This is the relax-commits mailing list
>>>>> [email protected]
>>>>>
>>>>> 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
>> [email protected]
>>
>> 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

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

This is the relax-devel mailing list
[email protected]

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

Reply via email to