orpheus-npcf 0.2.1__cp310-cp310-musllinux_1_2_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
orpheus/covariance.py ADDED
@@ -0,0 +1,153 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ import ctypes as ct
4
+ import numpy as np
5
+ from numpy.ctypeslib import ndpointer
6
+ from pathlib import Path
7
+ import sys
8
+ from .catalog import Catalog, ScalarTracerCatalog
9
+ from .utils import flatlist, gen_thetacombis_fourthorder, gen_n2n3indices_Upsfourth
10
+
11
+
12
+ class GGCovarianceNoTomo:
13
+ """ Computes covariance of second-order shear correlation functions
14
+ """
15
+ def __init__(self,
16
+ bins_xipm,
17
+ method_pairs='analytic', method_triplets='analytic', method_quadruplets='analytic',
18
+ spline_xip=None, spline_xim=None,
19
+ nbar=None, area=None, weights_mean=1., weights_std=0, spl_supression_ww=None,
20
+ pairs=None, triplets=None, quadruplets=None,
21
+ ):
22
+
23
+ ## Pass arguments from init ##
24
+ self.bins_xipm=bins_xipm
25
+
26
+ self.method_pairs = method_pairs
27
+ self.method_triplets = method_triplets
28
+ self.method_quadruplets = method_quadruplets
29
+ self.xip = spline_xip
30
+ self.xim = spline_xim
31
+
32
+ self.nbar=None
33
+ self.area=None
34
+ self.weights_mean = weights_mean
35
+ self.weights_std = weights_std
36
+ self.spl_supression_ww = spl_supression_ww
37
+
38
+ self.pairs = pairs
39
+ self.triplets = triplets
40
+ self.quadruplets = quadruplets
41
+
42
+ # Init different contributions to covariance (cf SKL 2002)
43
+ self.D = None
44
+ self.qpp = None
45
+ self.qmm = None
46
+ self.qpm = None
47
+ self.rp0 = None
48
+ self.rp1 = None
49
+ self.rm0 = None
50
+ self.rm1 = None
51
+ self.rpm = None
52
+ self.cov_pp = None
53
+ self.cov_mm = None
54
+ self.cov_pm = None
55
+
56
+ ## PREPARE ALL DATA RELATED TO MULTIPLET COUNTS ##
57
+ # If required, load the multiplet counts from file or compute
58
+ if self.method_pairs=='discrete' and type(self.pairs) is str:
59
+ self.pairs = self.__loadpairs(self.pairs)
60
+ elif self.method_pairs=='discrete' and self.pairs is None:
61
+ self.pairs = self.computeDiscrete('pairs')
62
+ elif self.method_pairs=='analytic':
63
+ self.pairs = self.pairs_analytic
64
+ else:
65
+ raise ValueError('Incorrect parameters for pair contribution')
66
+ if self.method_triplets=='discrete' and type(self.triplets) is str:
67
+ self.triplets = self.__loadtriplets(self.triplets)
68
+ elif self.method_triplets=='discrete' and self.triplets is None:
69
+ self.triplets = self.computeDiscrete('triplets')
70
+ elif self.method_triplets=='analytic':
71
+ self.triplets = self.triplets_analytic
72
+ else:
73
+ raise ValueError('Incorrect parameters for triplets contribution')
74
+ if self.method_quadruplets=='discrete' and type(self.quadruplets) is str:
75
+ self.triplequadrupletsts = self.__loadquadruplets(self.quadruplets)
76
+ elif self.method_quadruplets=='discrete' and self.quadruplets is None:
77
+ self.quadruplets = self.computeDiscrete('quadruplets')
78
+ elif self.method_quadruplets=='analytic':
79
+ self.quadruplets = self.quadruplets_analytic
80
+ else:
81
+ raise ValueError('Incorrect parameters for quadruplets contribution')
82
+
83
+ ## COMPUTATION OF INDIVIDUAL TERMS ##
84
+ # TODO (MARTINA): IMPLEMENT THIS
85
+ def getD(self):
86
+ if self.method_pairs=='analytic':
87
+ # self.D = ...
88
+ raise NotImplementedError
89
+ if self.method_pairs=='discrete':
90
+ # self.D = ...
91
+ raise NotImplementedError
92
+
93
+ def getNpairs(self):
94
+ raise NotImplementedError
95
+
96
+ def getqpp(self):
97
+ raise NotImplementedError
98
+
99
+ ## HELPERS ##
100
+ # TODO (LUCAS): Link this to orpheus multiplet computatoin
101
+ def computeDiscrete(self, contribution):
102
+ if contribution=='pairs':
103
+ raise NotImplementedError
104
+ if contribution=='triplets':
105
+ raise NotImplementedError
106
+ if contribution=='quadruplets':
107
+ raise NotImplementedError
108
+
109
+ def get_pairs(self):
110
+ ''' Returns all paircounts '''
111
+ if self.method_pairs=='analytic':
112
+ return self.analyticpairs()
113
+ else:
114
+ raise NotImplementedError
115
+
116
+ def get_triplets(self):
117
+ ''' Returns all the triplets '''
118
+ if self.method_triplets=='analytic':
119
+ return self.analytictriplets()
120
+ else:
121
+ raise NotImplementedError
122
+
123
+ # TODO (MARTINA): Make sure the selection is consistent with self.analyticquadruplets
124
+ def get_quadruplets(self):
125
+ ''' Returns selection of quadruplets '''
126
+ if self.method_quadruplets=='analytic':
127
+ return self.analyticquadruplets()
128
+ else:
129
+ raise NotImplementedError
130
+
131
+ # TODO (MARTINA): Add your implementation-- output the full tensor
132
+ def analyticpairs(self):
133
+ raise NotImplementedError
134
+
135
+ # TODO (MARTINA): Add your implementation -- output the full tensor
136
+ def analytictriplets(self):
137
+ raise NotImplementedError
138
+
139
+ # TODO (MARTINA): Add your implementation-- output part of tensor that fits most to your parametrisation
140
+ def analyticquadruplets(self):
141
+ raise NotImplementedError
142
+
143
+ def __loadpairs(self, fname):
144
+ # TODO (LUCAS): Check consistency with class parameters
145
+ raise NotImplementedError
146
+
147
+ def __loadtriplets(self, fname):
148
+ # TODO (LUCAS): Check consistency with class parameters
149
+ raise NotImplementedError
150
+
151
+ def __loadquadruplets(self, fname):
152
+ # TODO (LUCAS): Check consistency with class parameters
153
+ raise NotImplementedError