diff --git a/CLClusterBinning.png b/CLClusterBinning.png deleted file mode 100644 index 3f8f6227c..000000000 Binary files a/CLClusterBinning.png and /dev/null differ diff --git a/CLClusterEnsemble.png b/CLClusterEnsemble.png deleted file mode 100644 index 3cd9bc501..000000000 Binary files a/CLClusterEnsemble.png and /dev/null differ diff --git a/CL_pipeline.png b/CL_pipeline.png deleted file mode 100644 index 5a0ada3f8..000000000 Binary files a/CL_pipeline.png and /dev/null differ diff --git a/data/DESY1-R-model.hdf5 b/data/DESY1-R-model.hdf5 new file mode 100644 index 000000000..42db1e99e Binary files /dev/null and b/data/DESY1-R-model.hdf5 differ diff --git a/examples/clmm/config.yml b/examples/clmm/config.yml deleted file mode 100755 index 5ccd63288..000000000 --- a/examples/clmm/config.yml +++ /dev/null @@ -1,71 +0,0 @@ -global: - chunk_rows: 1000000 - -PZPrepareEstimatorSource: - name: PZPrepareEstimatorSource - classname: BPZliteInformer - zmin: 0.0 - zmax: 3.0 - nzbins: 301 - columns_file: ./data/bpz_riz.columns - data_path: ./data/example/rail-bpz-inputs - spectra_file: SED/CWWSB4.list - prior_band: i - # Not sure about this - prior_file: hdfn_gen - p_min: 0.005 - gauss_kernel: 0.0 - mag_err_min: 0.005 - inform_options: {save_train: false, load_model: false, modelfile: BPZpriormodel.out} - madau_reddening: no - bands: riz - zp_errors: [0.01, 0.01, 0.01] - hdf5_groupname: photometry - -PZEstimatorSource: - name: PZEstimatorSource - classname: BPZliteEstimator - zmin: 0.0 - zmax: 3.0 - dz: 0.01 - nzbins: 301 - data_path: ./data/example/rail-bpz-inputs - band_names: [mag_r, mag_i, mag_z] - band_err_names: [mag_err_r, mag_err_i, mag_err_z] - hdf5_groupname: shear/00 - nondetect_val: .inf - columns_file: ./data/bpz_riz.columns - spectra_file: SED/CWWSB4.list - prior_band: mag_i - prior_file: hdfn_gen - p_min: 0.005 - gauss_kernel: 0.0 - zp_errors: [0.01, 0.01, 0.01] - mag_err_min: 0.005 - madau_reddening: false - mag_limits: - mag_r: 29.06 - mag_i: 28.62 - mag_z: 27.98 - - - -TXSourceSelectorMetadetect: - # change to False to use realistic selection based on riz - true_z: true - bands: riz # used for selection - T_cut: 0.5 - s2n_cut: 10.0 - max_rows: 1000 - delta_gamma: 0.02 - source_zbin_edges: [0.1, 3.0] - shear_prefix: '' - - -# No options here -CLIngestRedmapper: - cat_name: cosmoDC2_v1.1.4_redmapper_v0.8.1 - -CLClusterShearCatalogs: - max_radius: 5.0 # Mpc - redshift_criterion: mean diff --git a/examples/clmm/cosmodc2.yml b/examples/clmm/cosmodc2.yml deleted file mode 100755 index 93130dac5..000000000 --- a/examples/clmm/cosmodc2.yml +++ /dev/null @@ -1,43 +0,0 @@ -launcher: - name: mini - interval: 1.0 - - -site: - name: cori-interactive - image: joezuntz/txpipe - -modules: txpipe rail - -python_paths: - - submodules/RAIL - - -stages: - - name: BPZ_lite # Run BPZ to get photo-z PDFs - nodes: 1 - nprocess: 32 - processes_per_node: 32 - threads_per_process: 1 - - name: TXSourceSelectorMetadetect # Select a source sample - - name: CLIngestRedmapper # Ingest redmapper catalog from GCR - - name: CLClusterShearCatalogs # Find shear catalogs around each cluster - - -output_dir: data/clmm/outputs -config: examples/clmm/config.yml - -inputs: - shear_catalog: /global/cfs/cdirs/lsst/groups/WL/users/zuntz/data/cosmoDC2-1.1.4_oneyear/metadetect_shear_catalog.hdf5 - # Could also use this for DC2 but we know the shears are wrong: - # shear_catalog: /global/cfs/cdirs/lsst/groups/WL/users/zuntz/data/2.2i_dr6/shear_catalog.hdf5 - fiducial_cosmology: data/fiducial_cosmology.yml - source_photoz_model: /global/cfs/cdirs/lsst/groups/WL/users/zuntz/data/clmm-testing/source_photoz_model.pkl - # Need to replace this! It's old. - calibration_table: data/example/inputs/sample_cosmodc2_w10year_errors.dat - - -resume: true -log_dir: data/clmm/logs -pipeline_log: data/clmm/log.txt - diff --git a/examples/clmm/pipeline.yml b/examples/clmm/pipeline.yml deleted file mode 100755 index fabee077a..000000000 --- a/examples/clmm/pipeline.yml +++ /dev/null @@ -1,47 +0,0 @@ -# How to run the pipeline: mini, parsl, or cwl -launcher: - name: mini - interval: 1.0 - -# Where to run the pipeline: cori-interactive, cori-batch, or local -site: - name: local - max_threads: 2 - -modules: txpipe rail.stages - -python_paths: - - submodules/RAIL - - -stages: - - name: PZPrepareEstimatorSource # Prepare the p(z) estimator - classname: BPZliteInformer - aliases: - input: spectroscopic_catalog - model: source_photoz_model - - name: PZEstimatorSource # Measure lens galaxy PDFs - classname: BPZliteEstimator - threads_per_process: 1 - aliases: - model: source_photoz_model - input: shear_catalog - output: source_photoz_pdfs - - name: TXSourceSelectorMetadetect # Select a source sample - - name: CLClusterShearCatalogs # Find shear catalogs around each cluster - - -output_dir: data/clmm/outputs -config: examples/clmm/config.yml - -inputs: - cluster_catalog: data/example/inputs/cluster_catalog.hdf5 - shear_catalog: data/example/inputs/metadetect_shear_catalog.hdf5 - fiducial_cosmology: data/fiducial_cosmology.yml - calibration_table: data/example/inputs/sample_cosmodc2_w10year_errors.dat - spectroscopic_catalog: data/example/inputs/mock_spectroscopic_catalog.hdf5 - -resume: true -log_dir: data/clmm/logs -pipeline_log: data/clmm/log.txt - diff --git a/examples/cluster_mag/cluster_mag_pipeline.png b/examples/cluster_mag/cluster_mag_pipeline.png deleted file mode 100755 index 500a1b547..000000000 Binary files a/examples/cluster_mag/cluster_mag_pipeline.png and /dev/null differ diff --git a/examples/cluster_mag/dc2.sub b/examples/cluster_mag/dc2.sub deleted file mode 100755 index 110b7385f..000000000 --- a/examples/cluster_mag/dc2.sub +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/bash -#$ -l h_rt=01:30:00 -#$ -l s_rss=1G -#$ -N cluster-mag-dc2 -#$ -P P_lsst -#$ -j y -#$ -o $HOME/TXPipe/log-dc2.txt -#$ -q pa_medium -#$ -pe openmpi 32 - -cd $SGE_O_WORKDIR -source /pbs/software/centos-7-x86_64/mpich2/ccenv.sh 3.2 -ceci examples/cluster_mag/dc2.yml diff --git a/examples/cluster_mag/dc2.yml b/examples/cluster_mag/dc2.yml deleted file mode 100755 index f0bc455ac..000000000 --- a/examples/cluster_mag/dc2.yml +++ /dev/null @@ -1,40 +0,0 @@ -launcher: - name: mini - interval: 1.0 - -# These site options tell the launcher to use shifter -site: - name: cc-parallel - image: txpipe_latest.sif - volume: ${PWD}:/opt/TXPipe,/pbs/throng/lsst/ - -modules: txpipe - - -stages: -# - name: CMIngestHalosCosmoDC2 - - name: CMSelectHalos - - name: CMSelectBackground - - name: CMRandoms - nprocess: 16 - nodes: 1 - - name: TXJackknifeCenters - - name: CMCorrelations - nprocess: 2 - threads_per_process: 16 - - name: CMCorrelationsPlot - - -output_dir: data/cluster_mag/dc2/outputs -config: examples/cluster_mag/dc2_config.yml - -inputs: - photometry_catalog: /pbs/throng/lsst/users/jzuntz/cluster_mag/dc2/photometry_catalog.hdf5 - cluster_mag_halo_catalog: /pbs/throng/lsst/users/jzuntz/cluster_mag/dc2/cluster_mag_halo_catalog.hdf5 - - - -resume: True -log_dir: data/cluster_mag/dc2/logs -pipeline_log: data/cluster_mag/dc2/log.txt - diff --git a/examples/cluster_mag/dc2_config.yml b/examples/cluster_mag/dc2_config.yml deleted file mode 100755 index 2f500f0c2..000000000 --- a/examples/cluster_mag/dc2_config.yml +++ /dev/null @@ -1,34 +0,0 @@ -CMIngestHalosCosmoDC2: - cat_name: cosmoDC2_v1.1.4_image - halo_mass_min: 0.5e+13 - initial_size: 100_000 - - -CMBackgroundSelector: - ra_range: [50.0, 73.1] - dec_range: [-45.0, -27.0] - mag_cut: 26.0 - zmin: 1.5 - nside: 2048 - initial_size: 100_000 - - -CMRandoms: - density: 1. - - -TXJackknifeCenters: - npatch : 32 - every_nth: 100 - - -CMCorrelations: - min_sep: 0.5 - max_sep: 300. - nbins: 9 - bin_slop: 0.1 - sep_units: arcmin - verbose: 1 - var_method': jackknife - -CMCorrelationsPlot: {} \ No newline at end of file diff --git a/examples/cluster_mag/readme.md b/examples/cluster_mag/readme.md deleted file mode 100755 index 034cfcd00..000000000 --- a/examples/cluster_mag/readme.md +++ /dev/null @@ -1,107 +0,0 @@ -# Running the Cluster Magnification Code - -This pipeline is a transcription of Marina's notebooks into TXPipe form. - -It can run SkySim5000-sized data. - -## Getting the code - -The code needs to be run at NERSC on the command line for access to the data. -Note the perhaps unfamiliar `--recurse-submodules` flag! - - cd $SCRATCH - git clone --recurse-submodules https://github.com/LSSTDESC/TXPipe - -and checkout the branch for this work: - - cd TXPipe - git checkout ricci-clusters - - -## Setting up environment on CC-IN2P3 - -Most of the dependencies for this code are included in the txpipe singularity image. -We only need a very minimal environment here: - - # you may get an error from this first one. It's not a problem - module load anaconda 3.8 - python -m venv env - source env/bin/activate - pip install numpy scipy parallel_statistics - # temporary until I complete this version - pip install https://github.com/LSSTDESC/ceci@in2p3 - -**You now need to request access to the parallel queues. Ask Dominique on #in2p3** - - - -## Setting up environment on NERSC - -Most of the dependencies for this code are included in the txpipe shifter image. -We only need a very minimal environment here: - - - # you may get an error from this first one. It's not a problem - source examples/nersc/setup - python -m venv env - source env/bin/activate - pip install ceci numpy scipy parallel_statistics - - # This NERSC-specific command makes a directory which - # is split ("striped") across multiple discs for faster I/O - mkdir -p data/cluster_mag/outputs - stripe_large data/cluster_mag/outputs - - -## Looking at the pipline - -Have a look at [the pipeline file we are going run](cluster_mag_skysim.yml) which specifies what code will be run and where its inputs and outputs go. - -Also see the [the configuration file for that pipeline](cluster_mag_skysim_config.yml) which makes choices about various configurable parameters in the different parts of the pipeline. - -A flow chart of the pipeline is below. Red ellipses are pipeline stages. Blue rectangles are files generaed by the pipeline. The yellow rectangle is an overall input to the pipeline. -![Pipeline flow chart](cluster_mag_pipeline.png) - -We generated this image using the `bin/flow_chart.py` script; it includes the ingestion stage that is commented out. - -## Running the pipeline at NERSC - -Log into NERSC, and go to the TXPipe directory that you cloned above. - -We will run this on interactive nodes, since it's usually fastest to get access. - - - salloc -N 16 -C haswell -t 3:00:00 -q interactive -A m1727 - source env/bin/activate - - -You can see what commands the pipeline will run using the dry-run flag: - - ceci --dry-run examples/cluster_mag/cluster_mag_skysim.yml - - -You can either run the commands it prints out manually, or you can -have the pipeline run them all for you like this: - - ceci examples/cluster_mag/cluster_mag_skysim.yml - -If you do the latter, the logs from the pipeline will be put into files, instead of printed to screen (because multiple commands may be run at once). You can look at those files while the pipeline is running by opening a new terminal and logging into NERSC from that. - -## Running the pipeline at CC-IN2P3 - - - - -## Results - -Results will be put into the directory `data/cluster_mag_skysim/outputs`. The final results plots are the `png` files. - - -If you want to make your own plots the results are all stored in the file `cluster_mag_correlations.sacc`. You can read that file using the `sacc` library, which is available in `pip`. See the [sacc instructions](https://sacc.readthedocs.io/en/latest/intro.html#reading-sacc-objects). - - -## The code - -The different pipeline stages are python class in [this directory](../../txpipe/extensions/cluster_mag). The code machinery configures and runs these files based on the configuration files. - -Note that the redshift stage currently does nothing! diff --git a/examples/cluster_mag/skysim.yml b/examples/cluster_mag/skysim.yml deleted file mode 100755 index d06e1ca9c..000000000 --- a/examples/cluster_mag/skysim.yml +++ /dev/null @@ -1,62 +0,0 @@ -# These are the different pipeline stages that the pipeline will run. Each -# is a python class in one of the files in the txpipe/cluster_mag directory. - -stages: -## I have commented this first one out because it is pretty slow (it uses GCR) -## and I've run it already. If you want to change the minimum halo mass or -## restrict to a subset of of the area then you it can re-run separately. -## Delete it from the list of inputs below as well in that case. -# - name: CMIngestHalosCosmoDC2 - - name: CMSelectHalos - - name: CMSelectBackground - - name: CMRandoms - nprocess: 16 - nodes: 1 - threads_per_process: 1 - - name: TXJackknifeCenters - - name: CMRedshifts - - name: CMCorrelations - threads_per_process: 16 - - name: CMCorrelationsPlot - -# This file contains the configuration for the stages above: -config: examples/cluster_mag/skysim_config.yml - -# where to put ouput files -output_dir: /pbs/home/m/mricci/throng_mricci/desc/TXPipe/tests/ -#$THRONG_DIR/users/jzuntz/cluster_mag/skysim/outputs - -# overall inputs to the pipeline. The photometry catalog is one I extracted from SkySim 5000. -# The halo catalog was generated with the commented-out stage above -inputs: - photometry_catalog: $THRONG_DIR/users/jzuntz/cluster_mag/skysim/photometry_catalog.hdf5 - cluster_mag_halo_catalog: $THRONG_DIR/users/jzuntz/cluster_mag/skysim/cluster_mag_halo_catalog.hdf5 - - -# this is which python modules to import -# to search for stages -modules: txpipe - -# If you interrupt the pipeline in the middle this setting -# makes it start again from where it left off -resume: True - -# Where log files go -log_dir: /pbs/home/m/mricci/throng_mricci/desc/TXPipe/tests/logs -#$THRONG_DIR/users/jzuntz/cluster_mag/skysim/log -pipeline_log: /pbs/home/m/mricci/throng_mricci/desc/TXPipe/tests/log.txt -#$THRONG_DIR/users/jzuntz/cluster_mag/skysim/log.txt - -# This tells the launcher how to run the code -# you shouldn't need to modify it -launcher: - name: mini - interval: 1.0 - -# These site options tell the launcher to use shifter, -# a docker-based system that we use here to supply all -# the dependencies of the code. You should not need -# to modify this either. -site: - name: cc-parallel - diff --git a/examples/cluster_mag/skysim_config.yml b/examples/cluster_mag/skysim_config.yml deleted file mode 100755 index d53befd7a..000000000 --- a/examples/cluster_mag/skysim_config.yml +++ /dev/null @@ -1,45 +0,0 @@ -CMIngestHalosCosmoDC2: - cat_name: skysim5000_v1.1.1 - halo_mass_min: 0.5e+13 - initial_size: 1_000_000 - chunk_rows: 10_000_000 - ra_range: [-1000, 1000.] - dec_range: [-1000.0, 1000.0] - -CMSelectBackground: - ra_range: [-1000., 1000.0] - dec_range: [-1000.0, 1000.0] - mag_cut: 26.0 - zmin: 1.5 - nside: 2048 - initial_size: 1_000_000 - chunk_rows: 10_000_000 - -CMSelectHalos: - zedge: [0.2, 0.4, 0.6, 0.8, 1.0, 1.2] - medge: [1.00000000e+13 1.99526231e+13 3.98107171e+13 7.94328235e+13, 1.58489319e+14 3.16227766e+14] - initial_size: 100_000 - chunk_rows: 10_000_000 - -CMRandoms: - density: 1. - - -TXJackKnife: - npatch : 64 - every_nth: 100 - - -CMCorrelations: - min_sep: 0.5 - max_sep: 300. - nbins: 9 - bin_slop: 0.1 - sep_units: arcmin - verbose: 1 - var_method: jackknife - patch_dir: /pbs/home/m/mricci/throng_mricci/desc/TXPipe/tests - #/pbs/throng/lsst/users/jzuntz/cluster_mag/cache - -# no options for this one -CMCorrelationsPlot: {} diff --git a/examples/cosmodc2/Cluster_pipelines/CLClusterShearCat-20deg2-CL.yml b/examples/cosmodc2/Cluster_pipelines/CLClusterShearCat-20deg2-CL.yml index 53ad65c7a..6a85a9e5d 100644 --- a/examples/cosmodc2/Cluster_pipelines/CLClusterShearCat-20deg2-CL.yml +++ b/examples/cosmodc2/Cluster_pipelines/CLClusterShearCat-20deg2-CL.yml @@ -44,7 +44,7 @@ inputs: # See README for paths to download these files shear_catalog: ./data/cosmodc2/20deg2/shear_catalog.hdf5 cluster_catalog: ./data/cosmodc2/20deg2/cluster_catalog.hdf5 - shear_tomography_catalog: ./data/example/outputs_metadetect shear_tomography_catalog.hdf5 + shear_tomography_catalog: ./data/example/outputs_metadetect/shear_tomography_catalog.hdf5 source_photoz_pdfs: ./data/example/inputs/photoz_pdfs.hdf5 fiducial_cosmology: ./data/fiducial_cosmology.yml diff --git a/examples/cosmodc2/Cluster_pipelines/config-20deg2-CL.yml b/examples/cosmodc2/Cluster_pipelines/config-20deg2-CL.yml index 80f624a2b..9257dc1de 100644 --- a/examples/cosmodc2/Cluster_pipelines/config-20deg2-CL.yml +++ b/examples/cosmodc2/Cluster_pipelines/config-20deg2-CL.yml @@ -64,24 +64,28 @@ CLClusterShearCatalogs: chunk_rows: 100_000 # rows to read at once from source cat max_radius: 5 # Mpc delta_z: 0.2 # redshift buffer - redshift_cut_criterion: pdf - redshift_weight_criterion: pdf + redshift_cut_criterion: zmode + redshift_weight_criterion: zmode redshift_cut_criterion_pdf_fraction: 0.9 - subtract_mean_shear: true + subtract_mean_shear: false + coordinate_system: celestial #euclidean or celestial + use_true_shear: true CLClusterEnsembleProfiles: #radial bin definition r_min: 0.2 #in Mpc - r_max: 3.0 #in Mpc - nbins: 4 # number of bins + r_max: 5.0 #in Mpc + nbins: 10 # number of bins #type of profile delta_sigma_profile: true shear_profile: false magnification_profile: false + coordinate_system: celestial #euclidean or celestial - - +CLClusterSACC: + survey_name: 'cosmodc2-20deg2-CL' + area: 440.0 diff --git a/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-in2p3.yml b/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-in2p3.yml index 825a1a024..7040556cd 100644 --- a/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-in2p3.yml +++ b/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-in2p3.yml @@ -37,9 +37,13 @@ stages: - name: CLClusterBinningRedshiftRichness nprocess: 1 - name: CLClusterShearCatalogs - nprocess: 1 #>1 does not work with mpi + nprocess: 30 #>1 does not work with mpi - name: CLClusterEnsembleProfiles + nprocess: 10 + - name: CLClusterSACC nprocess: 1 + aliases: + cluster_profiles: cluster_profiles # - name: CLClusterDataVector # nprocess: 1 diff --git a/examples/cosmodc2/pipeline-20deg2-CL-in2p3.yml b/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-laptop.yml similarity index 72% rename from examples/cosmodc2/pipeline-20deg2-CL-in2p3.yml rename to examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-laptop.yml index e60033e00..906896c51 100644 --- a/examples/cosmodc2/pipeline-20deg2-CL-in2p3.yml +++ b/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-laptop.yml @@ -1,13 +1,13 @@ #this step depends on where you run #for CCin2p3 -site: - name: cc-parallel - mpi_command: mpirun -n +# site: +# name: cc-parallel +# mpi_command: "mpirun -n" #for NERSC -#site: -# name: cori-batch -# image: ghcr.io/lsstdesc/txpipe-dev +site: + name: local + image: #all the following steps should not depend on where you run @@ -21,12 +21,19 @@ modules: > python_paths: [] stages: -# - name: TXSourceSelectorMetadetect -# nprocess: 30 -# - name: BPZliteInformer -# nprocess: 1 -# - name: BPZ_lite -# nprocess: 30 + - name: TXSourceSelectorMetadetect + nprocess: 6 + - name: BPZliteInformer + nprocess: 1 + aliases: + input: spectroscopic_catalog + model: photoz_model + - name: BPZliteEstimator + nprocess: 6 + aliases: + model: photoz_model + input: shear_catalog + output: source_photoz_pdfs - name: CLClusterBinningRedshiftRichness nprocess: 1 - name: CLClusterShearCatalogs @@ -39,7 +46,7 @@ stages: output_dir: ./data/cosmodc2/outputs-20deg2-CL -config: ./examples/cosmodc2/config-20deg2-CL.yml +config: ./examples/cosmodc2/Cluster_pipelines/config-20deg2-CL.yml inputs: # See README for paths to download these files @@ -54,4 +61,3 @@ inputs: resume: true log_dir: ./data/cosmodc2/logs pipeline_log: ./data/cosmodc2/log_20deg2.txt - diff --git a/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-nersc.yml b/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-nersc.yml index 885c96647..eed905b10 100644 --- a/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-nersc.yml +++ b/examples/cosmodc2/Cluster_pipelines/pipeline-20deg2-CL-nersc.yml @@ -39,11 +39,13 @@ stages: nprocess: 32 #>1 does not work with mpi - name: CLClusterEnsembleProfiles nprocess: 1 + - name: CLClusterSACC + nprocess: 1 + aliases: + cluster_profiles: cluster_profiles # - name: CLClusterDataVector # nprocess: 1 - - output_dir: ./data/cosmodc2/outputs-20deg2-CL config: ./examples/cosmodc2/Cluster_pipelines/config-20deg2-CL.yml diff --git a/examples/cosmodc2/config-1deg2-CL.yml b/examples/cosmodc2/config-1deg2-CL.yml deleted file mode 100644 index 446b5de17..000000000 --- a/examples/cosmodc2/config-1deg2-CL.yml +++ /dev/null @@ -1,79 +0,0 @@ -TXSourceSelectorMetadetect: - input_pz: false - bands: riz #used for selection - T_cut: 0.5 - s2n_cut: 10.0 - max_rows: 1000 - delta_gamma: 0.02 - source_zbin_edges: [0.1, 3.0] - chunk_rows: 100000 - true_z: false - shear_prefix: '' - -BPZliteInformer: - zmin: 0.0 - zmax: 3.0 - nzbins: 301 - columns_file: ./data/bpz_riz.columns - data_path: ./data/example/rail-bpz-inputs - spectra_file: CWWSB4.list - prior_band: i - ref_band: i - # Not sure about this - prior_file: hdfn_gen - p_min: 0.005 - gauss_kernel: 0.0 - mag_err_min: 0.005 - inform_options: {save_train: false, load_model: false, modelfile: BPZpriormodel.out} - madau_reddening: no - bands: riz - zp_errors: [0.01, 0.01, 0.01] - hdf5_groupname: photometry - - - -BPZ_lite: - zmin: 0.0 - zmax: 3.0 - dz: 0.01 - nzbins: 301 - data_path: ./data/example/rail-bpz-inputs - bands: [mag_r, mag_i, mag_z] - err_bands: [mag_err_r, mag_err_i, mag_err_z] - hdf5_groupname: shear/00 - nondetect_val: .inf - columns_file: ./data/bpz_riz.columns - spectra_file: CWWSB4.list - ref_band: mag_i - prior_file: hdfn_gen - p_min: 0.005 - gauss_kernel: 0.0 - zp_errors: [0.01, 0.01, 0.01] - mag_err_min: 0.005 - madau_reddening: false - mag_limits: - mag_r: 29.06 - mag_i: 28.62 - mag_z: 27.98 - -CLClusterBinningRedshiftRichness: - zedge: [0.1, 0.4, 0.6, 0.8] - richedge: [5., 10., 20., 25.] - -CLClusterShearCatalogs: - chunk_rows: 100_000 # rows to read at once from source cat - max_radius: 5 # Mpc - delta_z: 0.2 # redshift buffer - redshift_criterion: mean # might also need PDF - subtract_mean_shear: true - - -CLClusterEnsembleProfiles: - #radial bin definition - r_min: 0.3 #in Mpc - r_max: 3.0 #in Mpc - nbins: 4 # number of bins - #type of profile - delta_sigma_profile: true - shear_profile: false - magnification_profile: false diff --git a/examples/cosmodc2/config-20deg2-CL.yml b/examples/cosmodc2/config-20deg2-CL.yml deleted file mode 100644 index 60bb74e2f..000000000 --- a/examples/cosmodc2/config-20deg2-CL.yml +++ /dev/null @@ -1,85 +0,0 @@ -TXSourceSelectorMetadetect: - input_pz: false - bands: riz #used for selection - T_cut: 0.5 - s2n_cut: 10.0 - max_rows: 1000 - delta_gamma: 0.02 - source_zbin_edges: [0.1, 3.0] - chunk_rows: 100000 - true_z: false - shear_prefix: '' - -BPZliteInformer: - zmin: 0.0 - zmax: 3.0 - nzbins: 301 - columns_file: ./data/bpz_riz.columns - data_path: ./data/example/rail-bpz-inputs - spectra_file: CWWSB4.list - prior_band: i - ref_band: i - # Not sure about this - prior_file: hdfn_gen - p_min: 0.005 - gauss_kernel: 0.0 - mag_err_min: 0.005 - inform_options: {save_train: false, load_model: false, modelfile: BPZpriormodel.out} - madau_reddening: no - bands: riz - zp_errors: [0.01, 0.01, 0.01] - hdf5_groupname: photometry - - - -BPZ_lite: - zmin: 0.0 - zmax: 3.0 - dz: 0.01 - nzbins: 301 - data_path: ./data/example/rail-bpz-inputs - bands: [mag_r, mag_i, mag_z] - err_bands: [mag_err_r, mag_err_i, mag_err_z] - hdf5_groupname: shear/00 - nondetect_val: .inf - columns_file: ./data/bpz_riz.columns - spectra_file: CWWSB4.list - ref_band: mag_i - prior_file: hdfn_gen - p_min: 0.005 - gauss_kernel: 0.0 - zp_errors: [0.01, 0.01, 0.01] - mag_err_min: 0.005 - madau_reddening: false - mag_limits: - mag_r: 29.06 - mag_i: 28.62 - mag_z: 27.98 - -CLClusterBinningRedshiftRichness: - zedge: [0.2, 0.4, 0.6, 0.8] - richedge: [5., 10., 20., 25., 50.] - -CLClusterShearCatalogs: - chunk_rows: 100_000 # rows to read at once from source cat - max_radius: 5 # Mpc - delta_z: 0.2 # redshift buffer - redshift_criterion: mean # might also need PDF - subtract_mean_shear: true - - -CLClusterEnsembleProfiles: - #radial bin definition - r_min: 0.2 #in Mpc - r_max: 3.0 #in Mpc - nbins: 4 # number of bins - #type of profile - delta_sigma_profile: true - shear_profile: false - magnification_profile: false - - - - - - diff --git a/examples/cosmodc2/pipeline-1deg2-CL-in2p3.yml b/examples/cosmodc2/pipeline-1deg2-CL-in2p3.yml deleted file mode 100644 index 86c177ddd..000000000 --- a/examples/cosmodc2/pipeline-1deg2-CL-in2p3.yml +++ /dev/null @@ -1,59 +0,0 @@ -#this step depends on where you run -#for CCin2p3 -site: - name: cc-parallel - mpi_command: mpirun -n - -#for NERSC -#site: -# name: cori-batch -# image: ghcr.io/lsstdesc/txpipe-dev - - -#all the following steps should not depend on where you run -launcher: - name: mini - interval: 3.0 - -modules: > - txpipe - rail.estimation.algos.bpz_lite - -python_paths: [] - -stages: -# - name: TXSourceSelectorMetadetect -# nprocess: 1 -# - name: BPZliteInformer -# nprocess: 1 -# - name: BPZ_lite -# nprocess: 1 - - name: CLClusterBinningRedshiftRichness - nprocess: 1 - - name: CLClusterShearCatalogs - nprocess: 1 - - name: CLClusterEnsembleProfiles - nprocess: 1 -# - name: CLClusterDataVector -# nprocess: 1 - - - -output_dir: ./data/cosmodc2/outputs-1deg2-CL -config: examples/cosmodc2/config-1deg2-CL.yml - -inputs: - # See README for paths to download these files - shear_catalog: ./data/example/inputs/metadetect_shear_catalog.hdf5 - #photometry_catalog: ./data/example/inputs/photometry_catalog.hdf5 - fiducial_cosmology: ./data/fiducial_cosmology.yml - #calibration_table: ./data/example/inputs/sample_cosmodc2_w10year_errors.dat - #spectroscopic_catalog: ./data/example/inputs/mock_spectroscopic_catalog.hdf5 - cluster_catalog: ./data/example/inputs/cluster_catalog.hdf5 - shear_tomography_catalog: ./data/example/outputs_metadetect/shear_tomography_catalog.hdf5 - source_photoz_pdfs: ./data/example/inputs/photoz_pdfs.hdf5 - #cluster_shear_catalogs: ./data/cosmodc2/outputs-1deg2-CL/cluster_shear_catalogs.hdf5 -resume: true -log_dir: ./data/cosmodc2/logs -pipeline_log: ./data/cosmodc2/log_1deg2.txt - diff --git a/examples/redmagic/pipeline.yml b/examples/redmagic/pipeline.yml index 8d335fd25..7ccc7dcf3 100644 --- a/examples/redmagic/pipeline.yml +++ b/examples/redmagic/pipeline.yml @@ -25,8 +25,6 @@ stages: - name: TXJackknifeCenters - name: TXTwoPoint threads_per_process: 2 - - name: TXTwoPointRLens - threads_per_process: 2 - name: TXBlinding # Blind the data following Muir et al threads_per_process: 2 - name: TXTwoPointTheoryReal # compute theory using CCL to save in sacc file and plot later diff --git a/notebooks/Run_CL_ClusterShearCatalogs.ipynb b/notebooks/Run_CL_ClusterShearCatalogs.ipynb deleted file mode 100644 index 2dfdb2d51..000000000 --- a/notebooks/Run_CL_ClusterShearCatalogs.ipynb +++ /dev/null @@ -1,486 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "99b1f653-759a-4495-a5fa-6eae9d7de377", - "metadata": { - "tags": [] - }, - "source": [ - "# ClusterShearCatalogs stage functionalities\n", - "\n", - "This notebook aims at presenting the `ClusterShearCatalogs` stage of the TXpipe clusters extension. This stage selects background galaxies for each cluster of a cluster catalog and compute basic shear-related quantities for each of those galaxies (e.g., tangential and cross shear components, weights)\n", - "\n", - "*This notebook was developed by Céline COmbet and Camille Avestruz for the DESC CL_Cosmo_Pipeline team.*\n", - "___" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "9d883c0c-3514-410a-b884-f0bc7cd7a745", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import os\n", - "from pprint import pprint\n", - "import numpy as np\n", - "%matplotlib inline\n", - "import matplotlib.pyplot as plt\n", - "from IPython.display import Image\n", - "import ceci\n", - "import h5py\n", - "import yaml" - ] - }, - { - "cell_type": "markdown", - "id": "f1a90282-ed70-4496-bc4b-bc2d2e8ee302", - "metadata": {}, - "source": [ - "Make sure to change your path in the next cell that leads to your TXPipe directory. See examples for IN2P3 and NERSC below." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "d5eb6757-e79f-445c-a2c6-4d25af5f6f65", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# user specific paths -- IN2P3 example\n", - "my_txpipe_dir = \"/pbs/home/m/mricci/throng_mricci/desc/TXPipe\"\n", - "#my_txpipe_dir = \"/pbs/throng/lsst/users/ccombet/TXPipe\"\n", - "\n", - "#user specific paths -- NERSC example\n", - "#my_txpipe_dir = \"/pscratch/sd/a/avestruz/TXPipe\"\n", - "\n", - "os.chdir(my_txpipe_dir)\n", - "\n", - "import txpipe" - ] - }, - { - "cell_type": "markdown", - "id": "775eb4ed-fe92-492a-9246-022cbc299064", - "metadata": {}, - "source": [ - "# 1 deg$^2$ sample running directly in Jupyter" - ] - }, - { - "cell_type": "markdown", - "id": "423acd25-0fc8-49d4-87ec-ce193a17edef", - "metadata": {}, - "source": [ - "First we will do some runs on the 1 deg^2 example data set with around 80k galaxies. This is small enough that we can do it all in jupyter.\n", - "\n", - "The data set, which is based on CosmoDC2, contains pre-computed photo-z and and contains a RedMapper cluster catalog for the field." - ] - }, - { - "cell_type": "markdown", - "id": "261b72cf-352c-4f1c-a2b2-b021b1fca0d9", - "metadata": {}, - "source": [ - "## This initiates and run the stage" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "2851ba07-6fa4-4a4d-9b29-70c31d634ac2", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Options for this pipeline and their defaults:\n", - "{'chunk_rows': 100000, 'max_radius': 10.0, 'delta_z': 0.1, 'redshift_criterion': 'mean', 'subtract_mean_shear': True}\n" - ] - } - ], - "source": [ - "print(\"Options for this pipeline and their defaults:\")\n", - "print(txpipe.extensions.CLClusterShearCatalogs.config_options)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "e9467e42-30d9-4327-9408-307612d65be3", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "pipe_stage = txpipe.extensions.CLClusterShearCatalogs.make_stage(\n", - "\n", - " # catalogs\n", - " shear_catalog = \"data/example/inputs/metadetect_shear_catalog.hdf5\",\n", - " cluster_catalog = \"./data/example/inputs/cluster_catalog.hdf5\",\n", - " source_photoz_pdfs = \"data/example/inputs/photoz_pdfs.hdf5\", \n", - "\n", - " # Initial sample selection was performed and output in shear_tomography_catalog\n", - " # by previously running the TXSourceSelectorMetadetect stage\n", - " shear_tomography_catalog = \"data/example/outputs_metadetect/shear_tomography_catalog.hdf5\",\n", - " \n", - " # Fiducial cosmology: it is needed to get physical distances as we are\n", - " # currently selecting sources based on projected distance (in Mpc) \n", - " # from cluster center\n", - " fiducial_cosmology = \"./data/fiducial_cosmology.yml\",\n", - " \n", - " # This is the output for this stage\n", - " cluster_shear_catalogs = \"./data/cosmodc2/outputs-1deg2-CL/cluster_shear_catalogs.hdf5\",\n", - " \n", - " # This contains all the options for this stage. Default config options will be updated\n", - " config = \"./examples/cosmodc2/config-1deg2-CL.yml\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "0441a203-d5cd-4a26-924d-94c3d34752da", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "StageConfig{chunk_rows:100000,max_radius:5.0,delta_z:0.2,redshift_criterion:mean,subtract_mean_shear:True,shear_catalog:data/example/inputs/metadetect_shear_catalog.hdf5,cluster_catalog:./data/example/inputs/cluster_catalog.hdf5,source_photoz_pdfs:data/example/inputs/photoz_pdfs.hdf5,shear_tomography_catalog:data/example/outputs_metadetect/shear_tomography_catalog.hdf5,fiducial_cosmology:./data/fiducial_cosmology.yml,cluster_shear_catalogs:./data/cosmodc2/outputs-1deg2-CL/cluster_shear_catalogs.hdf5,config:./examples/cosmodc2/config-1deg2-CL.yml,aliases:{},}" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Check the new config options\n", - "pipe_stage.config" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "fbef9f5d-8bb9-44b7-8534-0fbc8c6962a4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Min search angle = 10.055618853834702 arcmin\n", - "Mean search angle = 12.982302811813245 arcmin\n", - "Max search angle = 22.546543656168343 arcmin\n", - "Max theta_max = 0.0065585236957462975 radians = 22.546543656168343 arcmin\n", - "Using single 2D shear calibration!\n", - "Process 0 processing chunk 0 - 82,200\n", - "Process 0 done reading\n", - "Overall pair count = 65968\n", - "Collecting data for cluster 0\n", - "Found 954 total galaxies in catalog for cluster 11\n", - "Found 826 total galaxies in catalog for cluster 827\n", - "Found 792 total galaxies in catalog for cluster 1985\n", - "Found 761 total galaxies in catalog for cluster 1632\n", - "Found 255 total galaxies in catalog for cluster 2453\n", - "Found 933 total galaxies in catalog for cluster 2678\n", - "Found 466 total galaxies in catalog for cluster 4643\n", - "Found 174 total galaxies in catalog for cluster 5084\n", - "Found 746 total galaxies in catalog for cluster 4434\n", - "Found 624 total galaxies in catalog for cluster 3939\n", - "Found 1457 total galaxies in catalog for cluster 6139\n", - "Found 515 total galaxies in catalog for cluster 4709\n", - "Found 1402 total galaxies in catalog for cluster 7121\n", - "Found 1163 total galaxies in catalog for cluster 8547\n", - "Found 292 total galaxies in catalog for cluster 8685\n", - "Found 268 total galaxies in catalog for cluster 8995\n", - "Found 1173 total galaxies in catalog for cluster 7698\n", - "Found 1961 total galaxies in catalog for cluster 10999\n", - "Found 215 total galaxies in catalog for cluster 9029\n", - "Found 368 total galaxies in catalog for cluster 9429\n", - "Found 807 total galaxies in catalog for cluster 10146\n", - "Found 1157 total galaxies in catalog for cluster 14476\n", - "Found 131 total galaxies in catalog for cluster 8395\n", - "Found 1276 total galaxies in catalog for cluster 16657\n", - "Found 913 total galaxies in catalog for cluster 13039\n", - "Found 1109 total galaxies in catalog for cluster 15382\n", - "Found 391 total galaxies in catalog for cluster 17011\n", - "Found 2071 total galaxies in catalog for cluster 8523\n", - "Found 447 total galaxies in catalog for cluster 11300\n", - "Found 2500 total galaxies in catalog for cluster 17462\n", - "Found 535 total galaxies in catalog for cluster 13025\n", - "Found 721 total galaxies in catalog for cluster 21385\n", - "Found 952 total galaxies in catalog for cluster 20888\n", - "Found 929 total galaxies in catalog for cluster 21815\n", - "Found 334 total galaxies in catalog for cluster 7594\n", - "Found 261 total galaxies in catalog for cluster 21425\n", - "Found 3329 total galaxies in catalog for cluster 30553\n", - "Found 703 total galaxies in catalog for cluster 11651\n", - "Found 907 total galaxies in catalog for cluster 27728\n", - "Found 972 total galaxies in catalog for cluster 30757\n", - "Found 2012 total galaxies in catalog for cluster 32634\n", - "Found 1440 total galaxies in catalog for cluster 33429\n", - "Found 816 total galaxies in catalog for cluster 15656\n", - "Found 412 total galaxies in catalog for cluster 29784\n", - "Found 881 total galaxies in catalog for cluster 22630\n", - "Found 574 total galaxies in catalog for cluster 17777\n", - "Found 815 total galaxies in catalog for cluster 33569\n", - "Found 606 total galaxies in catalog for cluster 39996\n", - "Found 1336 total galaxies in catalog for cluster 37007\n", - "Found 1561 total galaxies in catalog for cluster 25937\n", - "Found 556 total galaxies in catalog for cluster 24386\n", - "Found 1635 total galaxies in catalog for cluster 44685\n", - "Found 889 total galaxies in catalog for cluster 48725\n", - "Found 690 total galaxies in catalog for cluster 27260\n", - "Found 457 total galaxies in catalog for cluster 35316\n", - "Found 448 total galaxies in catalog for cluster 59428\n", - "Found 603 total galaxies in catalog for cluster 25976\n", - "Found 1193 total galaxies in catalog for cluster 31596\n", - "Found 2278 total galaxies in catalog for cluster 26346\n", - "Found 845 total galaxies in catalog for cluster 36608\n", - "Found 1332 total galaxies in catalog for cluster 26938\n", - "Found 522 total galaxies in catalog for cluster 74483\n", - "Found 927 total galaxies in catalog for cluster 62882\n", - "Found 227 total galaxies in catalog for cluster 25770\n", - "Found 227 total galaxies in catalog for cluster 59302\n", - "Found 476 total galaxies in catalog for cluster 53335\n", - "Found 267 total galaxies in catalog for cluster 23919\n", - "Found 1214 total galaxies in catalog for cluster 16567\n", - "Found 840 total galaxies in catalog for cluster 41321\n", - "Found 181 total galaxies in catalog for cluster 52141\n", - "Found 847 total galaxies in catalog for cluster 52451\n", - "Found 463 total galaxies in catalog for cluster 51057\n", - "Found 711 total galaxies in catalog for cluster 14210\n", - "Found 853 total galaxies in catalog for cluster 33410\n", - "Found 1044 total galaxies in catalog for cluster 78132\n" - ] - } - ], - "source": [ - "pipe_stage.run()\n", - "pipe_stage.finalize()" - ] - }, - { - "cell_type": "markdown", - "id": "4fbea885-102d-4b3d-b8e9-b95156537163", - "metadata": {}, - "source": [ - "## Checking out the output" - ] - }, - { - "cell_type": "markdown", - "id": "194d15a1-5388-4dee-b857-a47d592296de", - "metadata": {}, - "source": [ - "To avoid making lots and lots of copies of the data, this stage has not made a catalog, but instead made an index into the other catalogs, and stored only the new derived quantities.\n", - "\n", - "We have a helper class which is designed to match up all the different catalogs that go into this and collect the results for each cluster." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "f1b0d2a3-b2f0-4eb5-a28e-5642aebee295", - "metadata": {}, - "outputs": [], - "source": [ - "ccc = txpipe.extensions.CombinedClusterCatalog(\n", - " shear_catalog=\"./data/example/inputs/metadetect_shear_catalog.hdf5\",\n", - " shear_tomography_catalog=\"./data/example/outputs_metadetect/shear_tomography_catalog.hdf5\",\n", - " cluster_catalog=\"./data/example/inputs/cluster_catalog.hdf5\",\n", - " cluster_shear_catalogs=\"./data/cosmodc2/outputs-1deg2-CL/cluster_shear_catalogs.hdf5\",\n", - " photoz_pdfs=\"./data/example/inputs/photoz_pdfs.hdf5\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "feefafe9-3df0-49b4-8b59-4d387e475b70", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "We have 75 clusters\n" - ] - } - ], - "source": [ - "print(f\"We have {ccc.ncluster} clusters\")" - ] - }, - { - "cell_type": "markdown", - "id": "e249ca9e-7a23-4043-b4a5-ddc2fd885f4c", - "metadata": {}, - "source": [ - "We can extract the cluster catalog info by index (0 -- 74):" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "47ff342f-8a3f-492e-8915-becead0b90d0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'cluster_id': 11,\n", - " 'dec': -30.89586711375849,\n", - " 'ra': 60.69667268260482,\n", - " 'redshift': 0.49929956,\n", - " 'redshift_err': 0.0029379127,\n", - " 'richness': 167.65639,\n", - " 'richness_err': 2.9917574,\n", - " 'scaleval': 0.99996734}" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cluster_info = ccc.get_cluster_info(0)\n", - "cluster_info" - ] - }, - { - "cell_type": "markdown", - "id": "9be71498-f2a5-4ef8-a303-cd0e5e9aab8c", - "metadata": {}, - "source": [ - "And also the shear catalog associated with that cluster, again by index, in the CLMM data format" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "a565b00a-f735-4f82-bb16-4c59d5ba7ff2", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "GCData\n", - "
defined by: cosmo=None\n", - "
with columns: ra, dec, e1, e2, weight_clmm, tangential_comp_clmm, cross_comp_clmm, distance_arcmin, weight_original, zmean\n", - "
3 objects\n", - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
radece1e2weight_clmmtangential_comp_clmmcross_comp_clmmdistance_arcminweight_originalzmean
float64float64float64float64float64float64float64float64float64float64
60.50453842271902-30.956283762149680.030911786224021822-0.372707449997908959.325821260399727e-31-582877124896605.5580802751890670.110.5325856412433551.01.6672548870541304
60.769936503988525-30.803768581493113-0.19068023722048472-0.173775122710946869.717169154876238e-31-498275609021567.75246858718016259.66.6916280094932571.01.756284729977865
60.768679749598526-30.79745847728931-0.30065579551781680.449794943132864338.494567650500435e-31633999009218739.21074094856718668.06.9729475116934351.01.5009352447802593
" - ], - "text/plain": [ - "GCData(cosmo=None, columns: ra, dec, e1, e2, weight_clmm, tangential_comp_clmm, cross_comp_clmm, distance_arcmin, weight_original, zmean)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bg_cat = ccc.get_background_shear_catalog(0)\n", - "bg_cat[0:3]" - ] - }, - { - "cell_type": "markdown", - "id": "198c07c6-8c3b-468c-8cae-0a7dc9ad90fd", - "metadata": {}, - "source": [ - "# 20 deg$^2$ example using the pipeline approach" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "ce15c398-ad6c-41c1-99a9-1c36f235817c", - "metadata": {}, - "outputs": [], - "source": [ - "# Read the appropriate pipeline configuration, and ask for a flow-chart.\n", - "pipeline_file = \"examples/cosmodc2/Cluster_pipelines/CLClusterShearCat-20deg2-CL.yml\"\n", - "flowchart_file = \"CLClusterShearCat.png\"\n", - "\n", - "pipeline_config = ceci.Pipeline.build_config(\n", - " pipeline_file,\n", - " flow_chart=flowchart_file,\n", - " dry_run=True\n", - ")\n", - "\n", - "# Run the flow-chart pipeline\n", - "ceci.run_pipeline(pipeline_config);\n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "0b0990ed-e96c-49b5-bdad-88facbcc7cb4", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Wbx4MUuWLGHx4sXExcVRtWpVevbsyRVXXMErr7xCZGQktWvXzn3j1tusC1rES0oUBYCqVasyfPhwhg8fzuTJk9m+fXtO0nj33XeTmZlJ165dufjii7n44ovp06cPdruKT0W3aBWkpUNUX6sjkYogKQVi1kLfLhAWanU0Uhm5XPDLQqheDQb3sjoaCUSnT59m2bJlLFmyhCVLlrBs2TISExOpXbs2kZGRjB49mv79+9OzZ0+qVq1qdbgipRLkdrvdVgch5VtycjJLly4lOjqan376iS1bthAWFkbfvn257LLLuOqqq4iIiLA6TPGDcePGMXnyZHr06MFTTz3F1VdfTXCwWqxLyWzatIkOHTqwceNGLrjgAqvDkUokISGBjz/+mLfeeoudO3fyyCOP8Nprr1kdlgSAgwcPsnLlypzawhUrVpCenk7jxo3p378/kZGR9O/fn65du+r8KBWOEkUpttjYWKKjo4mOjua3334jISGBVq1aERUVxWWXXcawYcMICQmxOkzxkbVr1/LGG2/w5ZdfEhERwZgxYxg1apT2sRSbEkUpazt37mT69OlMmzaNlJQUrrvuOp544gk6dOhgdWhSDrlcLrZs2cKqVatyEsPNmzdjs9lo27ZtTmI4aNAgXSCXSkGJopRKZmYmy5YtY9asWURHR7N69WpCQkKIjIwkKiqKqKgounfvbnWY4gOxsbFMnjyZadOmUatWLe6//37Gjx9PrVq1rA5NAoQSRSkrixcvZsqUKXz//fc0bNiQe++9l9GjR1O3bl2rQ5NyJDk5mdWrV+ckhUuXLuX48eNUr16dzp075ySGAwcO1LlOKiUliuJThw8f5rfffstJHE+cOJFT2xgVFcXw4cN1sA1w2aPlTpo0CbfbzR133MFTTz1F48aNrQ5NyjkliuJPqampfPPNN0ycOJGNGzfSvXt3xowZw80336w+9QLAoUOHWLFiRU5iuHLlStLS0jyakXbv3p3evXvjcDisDlfEckoUxW+cTidr164lOjqan3/+mZiYGIKDg+nduzeXX345UVFRdOvWjaCgIKtDlRJISEjgo48+4pVXXuH48eNcf/31PPfcc7RurTG/JX9KFMUf4uLimDZtGlOnTiUxMZHrr7+eRx99lM6dO1sdmlgsNjbWYzTSLVu2EBwc7NGMdMCAAZxzzjlWhypSLilRlDITHx/P77//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", - "text/plain": [ - "" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(flowchart_file)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b05bcc85-325f-4a2e-9538-bbbf00ae378f", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "TXPipe-2023-Jul-12", - "language": "python", - "name": "txpipe-2023-jul-12" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/Run_CL_ClusterBinning.ipynb b/notebooks/cluster_counts/Run_CL_ClusterBinning.ipynb similarity index 100% rename from notebooks/Run_CL_ClusterBinning.ipynb rename to notebooks/cluster_counts/Run_CL_ClusterBinning.ipynb diff --git a/notebooks/Run_CL_ClusterEnsembleProfiles.ipynb b/notebooks/cluster_counts/Run_CL_ClusterEnsembleProfiles.ipynb similarity index 100% rename from notebooks/Run_CL_ClusterEnsembleProfiles.ipynb rename to notebooks/cluster_counts/Run_CL_ClusterEnsembleProfiles.ipynb diff --git a/notebooks/cluster_counts/Run_CL_ClusterShearCatalogs.ipynb b/notebooks/cluster_counts/Run_CL_ClusterShearCatalogs.ipynb new file mode 100644 index 000000000..f8a5a564e --- /dev/null +++ b/notebooks/cluster_counts/Run_CL_ClusterShearCatalogs.ipynb @@ -0,0 +1,879 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "99b1f653-759a-4495-a5fa-6eae9d7de377", + "metadata": { + "tags": [] + }, + "source": [ + "# ClusterShearCatalogs stage functionalities\n", + "\n", + "This notebook aims at presenting the `ClusterShearCatalogs` stage of the TXpipe clusters extension. This stage selects background galaxies for each cluster of a cluster catalog and compute basic shear-related quantities for each of those galaxies (e.g., tangential and cross shear components, weights)\n", + "\n", + "*This notebook was developed by Céline COmbet and Camille Avestruz for the DESC CL_Cosmo_Pipeline team.*\n", + "___" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9d883c0c-3514-410a-b884-f0bc7cd7a745", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import os\n", + "from pprint import pprint\n", + "import numpy as np\n", + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "from IPython.display import Image\n", + "import ceci\n", + "import h5py\n", + "import yaml\n" + ] + }, + { + "cell_type": "markdown", + "id": "f1a90282-ed70-4496-bc4b-bc2d2e8ee302", + "metadata": {}, + "source": [ + "Make sure to change your path in the next cell that leads to your TXPipe directory. See examples for IN2P3 and NERSC below." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d5eb6757-e79f-445c-a2c6-4d25af5f6f65", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# user specific paths -- IN2P3 example\n", + "my_txpipe_dir = \"/pbs/home/m/mricci/throng_mricci/desc/TXPipe\"\n", + "#my_txpipe_dir = \"/pbs/throng/lsst/users/ccombet/TXPipe\"\n", + "\n", + "#user specific paths -- NERSC example\n", + "#my_txpipe_dir = \"/pscratch/sd/a/avestruz/TXPipe\"\n", + "\n", + "os.chdir(my_txpipe_dir)\n", + "\n", + "import txpipe" + ] + }, + { + "cell_type": "markdown", + "id": "775eb4ed-fe92-492a-9246-022cbc299064", + "metadata": {}, + "source": [ + "# 1 deg$^2$ sample running directly in Jupyter" + ] + }, + { + "cell_type": "markdown", + "id": "423acd25-0fc8-49d4-87ec-ce193a17edef", + "metadata": {}, + "source": [ + "First we will do some runs on the 1 deg^2 example data set with around 80k galaxies. This is small enough that we can do it all in jupyter.\n", + "\n", + "The data set, which is based on CosmoDC2, contains pre-computed photo-z and and contains a RedMapper cluster catalog for the field." + ] + }, + { + "cell_type": "markdown", + "id": "261b72cf-352c-4f1c-a2b2-b021b1fca0d9", + "metadata": {}, + "source": [ + "## This initiates and run the stage" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2851ba07-6fa4-4a4d-9b29-70c31d634ac2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Options for this pipeline and their defaults:\n", + "{'chunk_rows': 100000, 'max_radius': 10.0, 'delta_z': 0.1, 'redshift_criterion': 'mean', 'subtract_mean_shear': True}\n" + ] + } + ], + "source": [ + "print(\"Options for this pipeline and their defaults:\")\n", + "print(txpipe.extensions.CLClusterShearCatalogs.config_options)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e9467e42-30d9-4327-9408-307612d65be3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "pipe_stage = txpipe.extensions.CLClusterShearCatalogs.make_stage(\n", + "\n", + " # catalogs\n", + " shear_catalog = \"data/example/inputs/metadetect_shear_catalog.hdf5\",\n", + " cluster_catalog = \"./data/example/inputs/cluster_catalog.hdf5\",\n", + " source_photoz_pdfs = \"data/example/inputs/photoz_pdfs.hdf5\", \n", + "\n", + " # Initial sample selection was performed and output in shear_tomography_catalog\n", + " # by previously running the TXSourceSelectorMetadetect stage\n", + " shear_tomography_catalog = \"data/example/outputs_metadetect/shear_tomography_catalog.hdf5\",\n", + " \n", + " # Fiducial cosmology: it is needed to get physical distances as we are\n", + " # currently selecting sources based on projected distance (in Mpc) \n", + " # from cluster center\n", + " fiducial_cosmology = \"./data/fiducial_cosmology.yml\",\n", + " \n", + " # This is the output for this stage\n", + " cluster_shear_catalogs = \"./data/cosmodc2/outputs-1deg2-CL/cluster_shear_catalogs.hdf5\",\n", + " \n", + " # This contains all the options for this stage. Default config options will be updated\n", + " config = \"./examples/cosmodc2/config-1deg2-CL.yml\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0441a203-d5cd-4a26-924d-94c3d34752da", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "StageConfig{chunk_rows:100000,max_radius:5.0,delta_z:0.2,redshift_criterion:mean,subtract_mean_shear:True,shear_catalog:data/example/inputs/metadetect_shear_catalog.hdf5,cluster_catalog:./data/example/inputs/cluster_catalog.hdf5,source_photoz_pdfs:data/example/inputs/photoz_pdfs.hdf5,shear_tomography_catalog:data/example/outputs_metadetect/shear_tomography_catalog.hdf5,fiducial_cosmology:./data/fiducial_cosmology.yml,cluster_shear_catalogs:./data/cosmodc2/outputs-1deg2-CL/cluster_shear_catalogs.hdf5,config:./examples/cosmodc2/config-1deg2-CL.yml,aliases:{},}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check the new config options\n", + "pipe_stage.config" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fbef9f5d-8bb9-44b7-8534-0fbc8c6962a4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Min search angle = 10.055618853834702 arcmin\n", + "Mean search angle = 12.982302811813245 arcmin\n", + "Max search angle = 22.546543656168343 arcmin\n", + "Max theta_max = 0.0065585236957462975 radians = 22.546543656168343 arcmin\n", + "Using single 2D shear calibration!\n", + "Process 0 processing chunk 0 - 82,200\n", + "Process 0 done reading\n", + "Overall pair count = 65968\n", + "Collecting data for cluster 0\n", + "Found 954 total galaxies in catalog for cluster 11\n", + "Found 826 total galaxies in catalog for cluster 827\n", + "Found 792 total galaxies in catalog for cluster 1985\n", + "Found 761 total galaxies in catalog for cluster 1632\n", + "Found 255 total galaxies in catalog for cluster 2453\n", + "Found 933 total galaxies in catalog for cluster 2678\n", + "Found 466 total galaxies in catalog for cluster 4643\n", + "Found 174 total galaxies in catalog for cluster 5084\n", + "Found 746 total galaxies in catalog for cluster 4434\n", + "Found 624 total galaxies in catalog for cluster 3939\n", + "Found 1457 total galaxies in catalog for cluster 6139\n", + "Found 515 total galaxies in catalog for cluster 4709\n", + "Found 1402 total galaxies in catalog for cluster 7121\n", + "Found 1163 total galaxies in catalog for cluster 8547\n", + "Found 292 total galaxies in catalog for cluster 8685\n", + "Found 268 total galaxies in catalog for cluster 8995\n", + "Found 1173 total galaxies in catalog for cluster 7698\n", + "Found 1961 total galaxies in catalog for cluster 10999\n", + "Found 215 total galaxies in catalog for cluster 9029\n", + "Found 368 total galaxies in catalog for cluster 9429\n", + "Found 807 total galaxies in catalog for cluster 10146\n", + "Found 1157 total galaxies in catalog for cluster 14476\n", + "Found 131 total galaxies in catalog for cluster 8395\n", + "Found 1276 total galaxies in catalog for cluster 16657\n", + "Found 913 total galaxies in catalog for cluster 13039\n", + "Found 1109 total galaxies in catalog for cluster 15382\n", + "Found 391 total galaxies in catalog for cluster 17011\n", + "Found 2071 total galaxies in catalog for cluster 8523\n", + "Found 447 total galaxies in catalog for cluster 11300\n", + "Found 2500 total galaxies in catalog for cluster 17462\n", + "Found 535 total galaxies in catalog for cluster 13025\n", + "Found 721 total galaxies in catalog for cluster 21385\n", + "Found 952 total galaxies in catalog for cluster 20888\n", + "Found 929 total galaxies in catalog for cluster 21815\n", + "Found 334 total galaxies in catalog for cluster 7594\n", + "Found 261 total galaxies in catalog for cluster 21425\n", + "Found 3329 total galaxies in catalog for cluster 30553\n", + "Found 703 total galaxies in catalog for cluster 11651\n", + "Found 907 total galaxies in catalog for cluster 27728\n", + "Found 972 total galaxies in catalog for cluster 30757\n", + "Found 2012 total galaxies in catalog for cluster 32634\n", + "Found 1440 total galaxies in catalog for cluster 33429\n", + "Found 816 total galaxies in catalog for cluster 15656\n", + "Found 412 total galaxies in catalog for cluster 29784\n", + "Found 881 total galaxies in catalog for cluster 22630\n", + "Found 574 total galaxies in catalog for cluster 17777\n", + "Found 815 total galaxies in catalog for cluster 33569\n", + "Found 606 total galaxies in catalog for cluster 39996\n", + "Found 1336 total galaxies in catalog for cluster 37007\n", + "Found 1561 total galaxies in catalog for cluster 25937\n", + "Found 556 total galaxies in catalog for cluster 24386\n", + "Found 1635 total galaxies in catalog for cluster 44685\n", + "Found 889 total galaxies in catalog for cluster 48725\n", + "Found 690 total galaxies in catalog for cluster 27260\n", + "Found 457 total galaxies in catalog for cluster 35316\n", + "Found 448 total galaxies in catalog for cluster 59428\n", + "Found 603 total galaxies in catalog for cluster 25976\n", + "Found 1193 total galaxies in catalog for cluster 31596\n", + "Found 2278 total galaxies in catalog for cluster 26346\n", + "Found 845 total galaxies in catalog for cluster 36608\n", + "Found 1332 total galaxies in catalog for cluster 26938\n", + "Found 522 total galaxies in catalog for cluster 74483\n", + "Found 927 total galaxies in catalog for cluster 62882\n", + "Found 227 total galaxies in catalog for cluster 25770\n", + "Found 227 total galaxies in catalog for cluster 59302\n", + "Found 476 total galaxies in catalog for cluster 53335\n", + "Found 267 total galaxies in catalog for cluster 23919\n", + "Found 1214 total galaxies in catalog for cluster 16567\n", + "Found 840 total galaxies in catalog for cluster 41321\n", + "Found 181 total galaxies in catalog for cluster 52141\n", + "Found 847 total galaxies in catalog for cluster 52451\n", + "Found 463 total galaxies in catalog for cluster 51057\n", + "Found 711 total galaxies in catalog for cluster 14210\n", + "Found 853 total galaxies in catalog for cluster 33410\n", + "Found 1044 total galaxies in catalog for cluster 78132\n" + ] + } + ], + "source": [ + "pipe_stage.run()\n", + "pipe_stage.finalize()" + ] + }, + { + "cell_type": "markdown", + "id": "4fbea885-102d-4b3d-b8e9-b95156537163", + "metadata": {}, + "source": [ + "## Checking out the output" + ] + }, + { + "cell_type": "markdown", + "id": "194d15a1-5388-4dee-b857-a47d592296de", + "metadata": {}, + "source": [ + "To avoid making lots and lots of copies of the data, this stage has not made a catalog, but instead made an index into the other catalogs, and stored only the new derived quantities.\n", + "\n", + "We have a helper class which is designed to match up all the different catalogs that go into this and collect the results for each cluster." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f1b0d2a3-b2f0-4eb5-a28e-5642aebee295", + "metadata": {}, + "outputs": [], + "source": [ + "ccc = txpipe.extensions.CombinedClusterCatalog(\n", + " shear_catalog=\"./data/example/inputs/metadetect_shear_catalog.hdf5\",\n", + " shear_tomography_catalog=\"./data/example/outputs_metadetect/shear_tomography_catalog.hdf5\",\n", + " cluster_catalog=\"./data/example/inputs/cluster_catalog.hdf5\",\n", + " cluster_shear_catalogs=\"./data/cosmodc2/outputs-1deg2-CL/cluster_shear_catalogs.hdf5\",\n", + " photoz_pdfs=\"./data/example/inputs/photoz_pdfs.hdf5\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "feefafe9-3df0-49b4-8b59-4d387e475b70", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "We have 75 clusters\n" + ] + } + ], + "source": [ + "print(f\"We have {ccc.ncluster} clusters\")" + ] + }, + { + "cell_type": "markdown", + "id": "e249ca9e-7a23-4043-b4a5-ddc2fd885f4c", + "metadata": {}, + "source": [ + "We can extract the cluster catalog info by index (0 -- 74):" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "47ff342f-8a3f-492e-8915-becead0b90d0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'cluster_id': 11,\n", + " 'dec': -30.89586711375849,\n", + " 'ra': 60.69667268260482,\n", + " 'redshift': 0.49929956,\n", + " 'redshift_err': 0.0029379127,\n", + " 'richness': 167.65639,\n", + " 'richness_err': 2.9917574,\n", + " 'scaleval': 0.99996734}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cluster_info = ccc.get_cluster_info(0)\n", + "cluster_info" + ] + }, + { + "cell_type": "markdown", + "id": "9be71498-f2a5-4ef8-a303-cd0e5e9aab8c", + "metadata": {}, + "source": [ + "And also the shear catalog associated with that cluster, again by index, in the CLMM data format" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a565b00a-f735-4f82-bb16-4c59d5ba7ff2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "GCData\n", + "
defined by: cosmo=None\n", + "
with columns: ra, dec, e1, e2, weight_clmm, tangential_comp_clmm, cross_comp_clmm, distance_arcmin, weight_original\n", + "
3 objects\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
radece1e2weight_clmmtangential_comp_clmmcross_comp_clmmdistance_arcminweight_original
float64float64float64float64float64float64float64float64float64
60.50453842271902-30.956283762149680.030911786224021822-0.372707449997908959.325821260399727e-31-582877124896605.5580802751890670.110.5325856412433551.0
60.769936503988525-30.803768581493113-0.19068023722048472-0.173775122710946869.717169154876238e-31-498275609021567.75246858718016259.66.6916280094932571.0
60.768679749598526-30.79745847728931-0.30065579551781680.449794943132864338.494567650500435e-31633999009218739.21074094856718668.06.9729475116934351.0
" + ], + "text/plain": [ + "GCData(cosmo=None, columns: ra, dec, e1, e2, weight_clmm, tangential_comp_clmm, cross_comp_clmm, distance_arcmin, weight_original)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bg_cat = ccc.get_background_shear_catalog(0)\n", + "bg_cat[0:3]" + ] + }, + { + "cell_type": "markdown", + "id": "198c07c6-8c3b-468c-8cae-0a7dc9ad90fd", + "metadata": {}, + "source": [ + "# 20 deg$^2$ example using the pipeline approach" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ce15c398-ad6c-41c1-99a9-1c36f235817c", + "metadata": {}, + "outputs": [], + "source": [ + "# Read the appropriate pipeline configuration, and ask for a flow-chart.\n", + "pipeline_file = \"examples/cosmodc2/Cluster_pipelines/CLClusterShearCat-20deg2-CL.yml\"\n", + "flowchart_file = \"CLClusterShearCat.png\"\n", + "\n", + "pipeline_config = ceci.Pipeline.build_config(\n", + " pipeline_file,\n", + " flow_chart=flowchart_file,\n", + " dry_run=True\n", + ")\n", + "\n", + "# Run the flow-chart pipeline\n", + "ceci.run_pipeline(pipeline_config);\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0b0990ed-e96c-49b5-bdad-88facbcc7cb4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4oAAAD7CAYAAAAsG2oBAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd3iT5frA8W+6aYHSQil7I8req2WXIYIbHDhAGaIyVdTjOHqOC1GWKEMUN46fevSAB7Ego2WI7L13WyhQKN1tkt8fd9M2XUlL2jTt/bmuXm3SvMn9jjzvc7/PeA1ms9mMUkoppZRSSimVyc3ZASillFJKKaWUKls0UVRKKaWUUkopZUUTRaWUUkoppZRSVjzyPJNxDpI3OSEUVaoq9QSPeiXz3te/L5n3Va7Hoz5U6lEy761llVKlp6TOGfo9VmWZ1pVURZJPnc2QZzKb69/D+ftKMyzlDHW/gyojS+a9DxlK5n2V66lyL9T9oWTeW8sqpUpPSZ0z9HusyjKtK6mKJJ86m3Y9VUoppZRSSillRRNFpZRSSimllFJWNFFUSimllFJKKWVFE0WllFJKKaWUUlY0UVRKKaWUUkopZUUTRaWUUkoppZRSVjRRVEoppZRSSillRRNFpZRSSimllFJWNFFUSimllFJKKWVFE0WllFJKKaWUUlY0UVRKKaWUUkopZUUTRaWUUkoppZRSVjRRVEoppZRSSillRRNFpZRSSimllFJWNFFUSimllFJKKWVFE0WllFJKKaWUUlY0UVRKKaWUUkopZUUTRaWUUkoppZRSVko0UTSZYNNO+PfCkvwU15SUApfinB2FUgq0rHJlFWXf6TlDWVSUYz4/RiNE7oA38ln32Z/BOx9D4zAY9Zy8tjy6FAevLYCFy2HgYzBiKpw6X/gyh07ItomOdVwcZjP8HgHXrhdtOZMJzsU4Lg5X4arrXaKJ4vKVcNckmP9lSX6Ka9m4He6eBNW7wy9rnR1N2Xf8DEx6A4J6wsPPOzsa16HbrWi0rHJd5X3f6TlD5Vbej/nCfPqTrPuH31g/P/sz2H8MXhgHc1+EbXshJc0pIZaoy1eh/2gYczdMfAC+fBf+2gO/FlI2rN0iifOLsyE+wXGx7DoEQ8bBnM/te72lXhIcCi/OcVwcZZ2rr3eJJoqjhkO/riX5CWXD4u/sf22vTvDkg5CSWnLxlCdNG8C7z8LVeMe/969rIeaS49+3pBQl3pLcbuWRq5RVRSlrKgpX2Xc56TlD3QhHH/OuVK6MGwG9O+d9ftG30KyB/H3HADiyCvwqlW5spWHeF9CgNjSsI49r1YBDv8Gkhwpepn93SSwdrc1N8PG/ZZ/Yo6LWS1x9vUt8jKKnZ0l/gnP9sgZmLi3aMrWDSiaW8qqSD1Sr6tj3PHkOHnsJUl3kimNx4i2J7VaelfWyqjhlTUVR1vddTnrOUI7gqGPeFcsVTw/rxympcPQ0uFWAWTf+2AT+Vayfq+QDBkPhy+XeZo7g4Q5j74W6wfYvU1HrJa683g47dH6PkD7QTerLlY62LfK+Ztch2LANGtWF2/tb/y8xGVaug/MXoVtb6NnB+v/HzkjzeUoqhHaCji2z/5eSKq0tI2+VfvuHT8Lou2x/cSxMJvny7T0C9WvDHf3Bx9v2Z/+4WprzK3nD6x/Kej16p+14C5KeAeu3SRz1gqFPF6hZPe/rLLHe3AT6dgVfH/vWs6zbcQAitssXang/uVKWn617YNVG+XvywxBQFb7+r2xzgJefAHd3+XvPYVj3F9QIgMb1oEsbOHYaBj4uXTjmfi5f3n8+Ja83m2X77jsqVyeH9pHC0PK/dX9B84aQlg6rI+G+ofL5jljHq9flOL4UBy2bwuBQOYYPnSg43oKWsWXbXti2T47dkI5wU6O8r9lzGP7cKpXU3l0K3h+uxhXLqsLKGlvlRnwCrFwv65GYBCvWQRU/Of58vCHqIqzZIsf0Q8PB28v6sx1VLhW27oVts/gEifnBYbDzIGz8G5o1hFt75b/d8tt3K9bB9v3yd52asu28PGHzLvke59ye9tBzhvMV9j0ubLt8/z84eAKqVoZpj8rx9cUvUr7WqwWP3yOvK+x4tbX/bZURtjjimLdnW9xIufLGQjCa8sbSr1v+LX43sp5p6XLu3X8s73v/908ZswgQvkn2W4Pa2S1o9pT3riD2Cny0XI7DpBTZXyDH4uWrsm9efdJ6mW175dht2kDqLxZFqUOB7bpZXLx1Pai49RJ72IrFVt0mvzqhhztkGOV4rxMkx8qKdbJd7xwg2zYhSepDp87D3QPzT47tqVfl50bqY3uPwE9/yN9VK8PIIRLbyXPw/Sp5/vmx9sVREIdcf5n+jhyMEx+QqxajX8z7mgVfwztLZEfc8ZT1FawDx+HJ1yEoEGoGwuCx8MzM7P8vXA4jpsgO69cNBoyWPvoAn/wIdftIYffFL/DQDGl5OXTCvthjLkk8SSlw/1BY9hO0vl2+lLY+u08XCO0Ilf3kqsptfWwvU5ATZ+V1cdfgvlvh5Hm4eWj2AQDyRb9/OhzILCzHvQJtboeX50ncrspkgvGvSiXproFwJhqaDswu/HPr1hYuXpbB3FeuynOjhssVxdcWyBce4OdweGkuPHIndG8H902D64nyJRp9l7zmvqGy7wCSU2Q8X0KSnExemA39H5XnN/wN7e6UsQE/h8N902Hi6/Ctjf1q7zr+tQduGSpdOR4cBv/6CJ76t/yvoHgLW6YgySnw4LPwv41yfAb4Q4/75RjKacHX8O4ncFtfWPQdNB8s33PLyclVuWpZVVBZY6vc+HMrdLpH9vmyn+CZd2UdxvwDpr0jx/LL82D3IZj2Nox9xfpzHVUuFbbuhW2zxd9Bvb7y2nc+lhg/+RFumyATOOSs/BS274b2loTwtQWy7bwyW2N6tJd1Cethex9Y6DnD+Qr7HtvaLiNvlWRx9mfyuGplmHi/bI+lP8hzhR2vtva/rTLCFkcd8/Zsi+KWKyCfN/oumPqIdHv86Q+Y9Ykkm45cz9grMg7u4mU5z234W5J0i9BOcv4H6NBS1mNYX3lsT3nvKqpVle3t4SEJ7+i74JE7ZJ998Ysk2RZGIzzxGvzf73DvYEnS3luW/X9761CF1VsuXoa3l0DLYfDq/Oz3Lk69xB626lD21G0KqhMeOQXDJ0LYGPjyVzkPbtktdaABY+RCzKQ35LM++Ap6PZS9jez97Pw4oj7Wurm8z2sLILh6dgLbuJ58jy3dsW/EDSeKGUZY+K1cxfLyhCG9pBUmp/gEuKUpfDsbfpwvGfxnP8v/TCYY+zK8MVVOkKOGyxWt2Z/JzgE5GNu2kKy+zU3Qp6tcWQG5+jegh1zZ8vGSfum/LbY/k3/8Jfmy3RUmVxOfGSMDTzf8bfuzawTIVQ0Pd9k5NQJsL1OQR1+UqwQjhsgV7xmPS1Lw0Ay5MgByxefXP6XQ69waZj0nB0JlX3nsqt5fJoX4s49B/VowfbQUbN/+VvAyzRvlfa5eris8H34tV8+rVZErRM+Pk6uNVfzkOZCrM5Yv1msLYEioXC0K6wH/miQTSSz5XipZT9wvrzt0Arb9ABu+kkqHI9Zxwdfy/elwi1wpGnkrfPy9dDUtKN7ClinIm4ulgH31STnO7hwAH/0T3lwE3/1PXnPirBRCT9wnhcxnb0NyqlwdL0qFuqxx5bKqoLLGVrnRrxuMHymvDfSHL2fCezNkzNvi7+SK76dvynNPj4LvfrMeC+eocqmwdS9sm024T65Gp6ZB/26w7gvY9bNUQH5cbT25S2H7zs1NYgf4bUP2MifPQYvGRes6pecM57L1PbZnu+Q+f7i7W7dMFHa8Frb/7SkjbHHUMW/PtihuuWI2yzHVsI50g/xhlbR4/PMpac1z5HpOfB26toGHbpeK8LRHpWXcIqCqxAjgX1nWIyjQvvLelXhmJojubjL2smEdSQa6tpX1z9kCuPBb2HUQZj4r2+O2PnJRIyd76lCF1Vsq+8n+O3jcepni1EvsYasOZU/dpqA64U2NpL4H0or4xTtSVs5/SXqXvb9MzpPvPAMLXpHvwIZt2bHZ89n5cUR9zGCQbeHtZX1uA/lO3jngxrY7OCBRdHeT5tKJr2dPz/v0KOvXVK0MA7pnP27ZFM5fkL8jd0rT6ac/Snb8+oey4UCahwEWvQ7/mCB/ZxghPT376h1A9Wqyse4aKAXerb2tvzQF2bIbfo+Ugc8WA3vCnl+yN66tz85PUZfZukea0kM7Wj8/boRcKVjyvTxeFSFfPMvV8HsHy9/JKVK5cEVGo+zzewZlPxdQFXb9B96aVvBy+fViyN21obKfXKlcn/mFfmh4dsKVW4YR5n0p+8JyHFoqfn9mHofVq8lvS6y9OmU/Vxh71vG5x+GTN7P/n5wiMcUVMvi5qMuYTNJ1NfdxdvdAWY+5mTOXrd0q3Y4aZA6Wb1Bb1jUmVrpFuCpXLqvyY2+5UbWy/G53c/ZrmtaXyl7OLnEN68h+t0yY5OhyqaB1t7XNqlWRbn1d28pjgyH7pL5yXfbrCtt3IN2UmjaQySAsfvhdygV76TnD+Qr7Htu7Xew5f+R3vG7bV/j+t6eMsIcjjnl7t0Vu9ixnMMh5A+Q4fXG2tGxMG23/OtqznodOSNI4vJ/1cvVr2X5ve8r78sJgsD5+31xke5vZ+g7Yqrf4+kj3+Nznr+LUZWyxFYu9dZvC6oSW82TbFtnboWl9+d29XfZzlkmELN9rez87N0fWx2pWlwss3/8v+/Ynf+2RHjPFrV/kdMNjFA0GyboffVGaoF+ZmH3ltiCeHrLiAPuOyInM0p0O5O+F/5SrniDdhuLipUvFhUtw5Vre++O4GYo+WHfXQTlILCdRi5wnUHs+O7eiLrPvqPzOPTi9dXPZvpb/160p92Cx9Af38pSD23IV0BUdPS3jOXKPq3FEc/kbU6DvI/Lz6J0w+wW5eppvHKfkitfj90JQju35/Ni8x1XuMVy22LOObW6CW4zShWTb3uxKYmHHTVGXOXlO4sh9nHl6yBXa3ZlXvOtmXp3dczj76nD1anm7PLkaVy6r8mNvuZEfj3w+3/JcYnLR3r8o5VJ+616cMrZpA2khPR1V8Gty7juQVsUpD8PkN6X7Uv/uMqZp6iOFf1ZOes5wvsK+xzfynchP7uPV1v63p4worqIe88XdFkVdbsZ7mWPSPsoez38jcq6nZVxxccbHF6e8Lw/OX5CLfbVucAIse+tmuRPO4tRlbjSW42fsq9sUpU4I+R/Plucs50l761W5Obo+NvUR6Qa/cDn8a7KMT3zo9oLXrSgcMkbxodth/RfSN/0fc+DOp+2fyjvmkvwE15Am8pw/lpmdVkdCv0flyt3sF2SwsyPEXJJmZssOz09xPruoy1i+aDmvfoOcjPwrZ1/pGDdSvijT35GYl6+U5vPH78VlWVovLFdnHKl1c9j5s1TCPv8PdL8vu+tRQXGkpuU9DvObHKIo7FnH42cg5EE5uX3wMgwMsf2+RV3GckUs93EGkhxbjrP+3WXsyivzZKKT/cfkKvkbU2zHVNa5almVH3vLjZJ+/xstl4q7zQL9petfUYy5W/bV3C8yx280zFvpL4yeM8qGgr7HJf2dsLX/7SkjbkRRjvnibouiLBe5Q86to++SsYKOYlnP8xflcXFbo26kvHdVlv0Wd+3G3qe4dbPi1GVuNBZ76zZFqRPay97PLu5y9tbH2raQ1y76Tlpx9x21b0I0ezhkjOK2vVJI7P6PXLFZsU4GZ9qjUV2ZPOS/f+b933/WyAFy19MyZsBRK21huRqR31i4DX/b/9k5M/vixGu5Grl5l/Xz6RlwLQHa35wd7wcvy9UESz/wTd+49gx2ln2Q38QN67flfS63nBdVTLlmYNu0U7pbrFwsYzjOxkgF0Wr5zDewDMD/ZkXez/jfhhvrX2/POo6YKuMDHrZxBSjnsWbvMhaN68l4x9zHGcClq9nHmbcXfPIGdGwlA7u37IYt38lYGFfmymWVRc79b2+5UVylUS4Vd5uZzdLFpsMt9i8D0qozboTMAvvW4qJ1OwU9Z5QFhX2Pi/KdyH1F3mRHjwlb+99WGXEjinrMF3db2LtchlG6dQb6yz3iLC5ftS++guRcT0s3v7/3Ff19brS8d1UNM+sy9m6zgupQxa2bFbVeYg9bsdhbt7GnTlhU9n52cZcrSn1s+mhpwZ36tv0zD9vjhhNFoxGW/p/87ekhg2eDq2dfzTAa8zY5G03ZB+TgUGn6HfeKNK2CzCb27ifSx3zfUXl8JfP9zGbpb56So+JuNlsf7Pa6ra90x3n+PemKBHDtOrzwvmT09ny2byW52mU2S8G094h98eb83aWNDHz/YZVcCbD4c6sMyrZMRrHhbyno3pshXSLvGeSY/sfOVK+WXC35ZgXM/1K2YVq6fCFyXj0ym61PZpaxgdv2yu+0dBk/AtINBmQshWWZ+26VKcwtx6WlomTZT3Vqyhfzg68kFrNZjtGV6+GvvfJlzb3fHLWO6Rky0cGVHFcAT5yV35arn7njTUy2vYwlVku8BoMMBD90Inu7WbbXzgPw8kR5HHtFuuss/bccZ4/fU7RbgJRVrlxWQd6ypnNr+8qN/I5Xy3M5Kwa5X+focim/dbdnm0HefRO+WZK+x+7J//9gve9ymj5a9v/arUW/bYGeM5yvsO+xvdulejVJRs7FyOPoWGkJsZw7IP/j1db+t1VGFHU9b+SYt3dbFLdcmf+lHLszn7XuyvzFL45bzwHdpTI970vZzhbnLkjSallXywyUOW/XYau8d1Umc96y2pRjvwdXl7FpP4fL/rE4l9lyZSlnbNWh7K2bmczZn21PXQby1udssRWLvXWbwuqE+Z4nLetoyvuchb2fnXu9S6I+dlsfmYvg4x9kzKKjOKTr6Wc/y5cb5MQU4C+D5kH6mV9LsD5wTp6TnXwpTiroc16QQqDdndB0EASHSPeH4f2gXQtpgn17CdwzWaZSbtFImmvvny6F+5loKRQsB6S9AqrC0jekMBwwBoJ6Qv1+mX2sm9r32d3bycxj906RwbY3N7G9jKXv8YVLObbh29IlaNRzUknYeVDGq/w0P7vLysp1Mki+Vii0vwtCR8EDz8jVS1ceP7boNel7PeUtqNYFavSQL47litS5GLlKmXN7DeklBd24V2S7jpwGXTJn8Xv637JPDp+UVgOTSd5j31GY+qi8pnt7+T32ZTnJn78gE0rUCJB9UKsX1AyRY9syyYSlcDxyyrHr6Okhx9G6v2Qq9XunyKxmABP+Kfs3d7wXLtleJr/t9vxYmbHvoRky/uNMtEzl/v7zcnIBuRIZuQOqdYXWw2W65tsmyEm3sC53rsBVyyrIW9akptlXblgqCGdznNzPZI5zyhlH1MXs7ZC1vRxYLuW37vZsM5CKgWXK8jVbpBvZj/Ozj3lb+y6n2kGyz4vamgh6zigrCvse27NdLJWoHg/I9PT/+kj2y5FTcn9AyP94tbX/bZURReGIY96ebVGcciXqoswS3rm13LctMVlul/D9/4o+DrSw9awRAB++Kvug232SoI97RbZ/Sqqc6xKSsm8xdPS09XsXdpy4ouuJcjuLnIlaeoZs+zPR2d/pj/4p9aO+j0h96Ol/y/hakPrD0dP21aFs1c3OREv9yhKPPXWZ/Ool9rAViz11m8LqhDdynrTns0urPvb0KJkgx97b1NjDYDbnOl1c/x7O32f3GxiNMgvYweOy8YMCZUplv0pyw82dmQdnzUDpL752S/Y00UGBMtDby1OWX/eXZOsDe8pNzS2OnJKroq2ayf/i4qXrR88OsuMPn5TXVa0sV/RaFrGL3KnzUphkZMjMZpbuDrY+u8Mtsv6f/0dm7rq9v1wJK2wZg0FudJqaJlcYe3WWKyUgX/h1f8lVoCb1oV9X63ENMZfkXkMN68jfCUlScOw9ItP2PnJHEVa67ndQZWTRNpS9DhX9zqrXrsuNcc9flIO8Sxt5PuqizHpmORm2aAwjBstV8bMx8NNqKexGDJGbKBuN0KmVvDZiOxw6Kcv6VZITdc6pu3+PkBPr8H7Z0+NfvCzjhS5ekSm5LeMuNu2UY8RslsHMIR1lmmVHrCPIVaSvfpUT4219pAXxy19l3SwVjNzxFrZMp1YFbzeQwmfrHrla27er9XYxZp64G9aRwu16EiQkyr20ureTaaLtVuVeqPtD0TaUvSpYWZVfWQOFlxt/7ZHj2WiS4+PugXJM/B4hz/lVkvdKSILf1stzlXzg3kHyXrbeH+wrl779reB1t1XGjnsFvvov7PhRuo3VDZaWBksrRlH2ncWo52RK8haN7d/+Oek5w4Ec+D22sLVdQCqZG/6WcUuDQ+XefDc1km1V2PEKhe9/KLyMsIcjj3lb26I45UrkjuwELLce7WGQnePSbK2nxdHTsGazrM/QPlLBb95QtvvOgzIpVVJm62fzhnI+rOxr+zixSxmpKyWlSIuaZUxbi8bSIvZ1jueaNci+p+Tlq1JuXLkmLcQmk5QhOesdtupQUHC95eQ5KbMsdYyWTeU9bqReYkthdSiLwuo2BdUJT56T27Fcuy5lbN+uUL+2xHo9USZC69dVkq/vV8lzBoPcniJnr5SCPruweqytmItaH7PMZjy+uIdsPnW2G04Uy6pF31p3Q8jP0N7ST9gVJCTJ1aHVn8iYgJySUuQqaGG3k8ijjBR+ru6/f9oe7N2uhWMH+pe0h5+HUcPkimNuU9+GuUW5aXEZShTLKlcuqxxeLuXDUplMzmcsR3HEJ8gx/suH1s+78n7Ij8ucM8rJ99ge9h5jby127DFf2srVempdqUSVxzqUIxW1PjbsCRl/WexZlvOpszlgkvay6fLV7H7rBUlLL51YHOGnP+DYmbz3egK5IlTUbi3KMeIT8nZty82VumuejpKrgWPuyvu/PYeL3lqvbHPlsqo0yqWijmfJz/VEubreurnc/HxCPnmJK++H/Og5o+yx9xhzxDHvTBVlPdWNK291KEeytz72nzVQJ0hmRG3Z7MZvxZNbuU0UX3rC2RE4VufW0iR+y1AY1lem346Lly/YI3dk92dWpWtUMcY5lWW1ashg6GET5ThrWl/Ggpy/KN0cpo92doTljyuXVSVdLiWnwIHj0mUqOlbGFxbHqo0yBgfg/qHSmpGbK++H/Og5o+yx5xhz1DHvTBVlPdWNK291KEeypz524TLcPUkuuDRvCDt+cnwc5bbraXl0KU76OR8/K+MSWjWTe9QU6ya32p1CFSA1TcbA7Doks722bAoDehRz5lPtelruObRcyuX9ZdKFEmRMSe/O0LVt0d8nPSP7lgYP3ub6M3/ayyXOGfo9tuKoY76sc5n11LqSciJ76mN/bJJx7g/clneYQZFVpDGKygYt/FRp0ERRqfJBE0VVEWldSVUk+dTZHHJ7DKWUUkoppZRS5YcmikoppZRSSimlrGiiqJRSSimllFLKiiaKSimllFJKKaWsaKKolFJKKaWUUsqKJopKKaWUUkoppaxoolhBrVi1g1WrVpGSkuLsUJRSSimlKozk5GQyjM6OQinbNFGsoL7+fiO33nor1atX5/bbb2fRokWcOXPG2WEppZRSSpUr8fHxhIeH89prrzFw4EACAwPZssvZUSllmyaKFdTyT6dw4cIFFi5ciI+PD88//zwNGzakadOmTJkyhfDwcNLT050dplJKKaWUSzlx4gRffPEF48ePp1WrVlSrVo3Bgwfz448/0qxZMz7++GNaNnN2lErZ5uHsAJTz1KxZk0ceeYRHHnmE1NRU1q9fz8qVK/ntt9+YP38+AQEBDB48mNtuu41BgwZRs2ZNZ4eslFJKKVVmZGRksGfPHiIiIoiMjCQiIoKoqCi8vb3p0qULt99+OzNnziQkJISAgIDsBQ897LyglbKTJooKAG9vbwYNGsSgQYOYN28eR44cyUoaH3/8cTIyMujQoQNDhgxhyJAhdO/eHQ8PPXzKu43bITUNwno4OxJVHiQmw+Zd0KM9+FVydjSqIjKZ4LcNUNkX+nZ1djTKFcXHx7NlyxYiIyOJjIxk69atJCQkEBAQQEhICJMmTSI0NJQuXbrg7e3t7HCVuiEGs9lsdnYQqmxLSkpi06ZNhIeH8+uvv3Lw4EH8/Pzo168fw4cPZ8iQITRo0MDZYaoSMHXqVObNm0fnzp154YUXuOuuu3Bz0x7rqnj2799P69at2bdvH61atXJ2OKoCiY+P57PPPuODDz7g+PHjTJ8+nffee8/ZYSkXEBUVldVSuH37dv766y/S09OpXbs2oaGhhISEEBoaSocOHfT8qModTRRVkZ04cYLw8HDCw8NZtWoV169fp0mTJoSFhTFs2DAGDhyIj4+Ps8NUDrJr1y5mz57NN998Q8OGDZk8eTITJkzQfayKTBNFVdqOHz/Oxx9/zJIlS0hOTmbEiBHMmDGD1q1bOzs0VQYZjUYOHTqUlRhGRERw8uRJPDw8uOmmm7ISwz59+tCwYUNnh6tUidNEUd2QjIwMtmzZwooVKwgPD2fHjh34+PgQEhJCWFgYYWFhdOrUydlhKgc4ceIE8+bNY8mSJfj7+/PEE08wbdo0/P39nR2achGaKKrSEhERwfz58/npp58IDg5m3LhxTJo0ierVqzs7NFWGJCQksGvXLqvE8OrVq1SpUoVu3bpltRaGhIRQqZL2l1cVjyaKyqEuXLjA77//zooVK/jjjz+4evVqVmtjWFgYgwcPpmrVqs4OU90Ay2y5c+fOxWw2M3r0aF544QVq167t7NBUGaeJoipJKSkpfP/998yaNYt9+/bRqVMnJk+ezIMPPqhj6hWg3UiVKipNFFWJMRqN7Nq1i/DwcP773/+yefNm3Nzc6NatG8OHDycsLIyOHTtiMBicHaoqhvj4eJYtW8bMmTO5cuUKI0eO5NVXX6VZM53zW+VPE0VVEqKioliyZAkLFiwgISGBkSNH8swzz9CuXTtnh6acqLBupO3atSMkJIROnTrRt29fnWdBqQJooqhKzcWLF/n9999ZtWoVf/zxB7GxsdStW5fBgwczaNAgBgwYQI0aNZwdpiqi1NRUPv/8c958802io6O5//77ef755zURUHlooqgcafv27cybN4/ly20tNRwAACAASURBVJdTo0YNJkyYwFNPPUVQUJCzQ1NOoN1IlXI8TRSVU5hMJrZv387vv//O6tWr2bx5MyaTiY4dO2bdpqNnz554eno6O1Rlp/T0dJYvX867777LgQMHuO222/jHP/5Bjx56bw0lNFFUNyo1NZXvvvuO2bNns3v37qzupQ888ICeLyqYnN1IIyMj2blzJyaTSbuRKuVAmiiqMiExMZHNmzdnzaa6fft2fH196dmzp06K42LMZjMrVqzg7bffZvPmzYSEhPD8888zbNgw7WZcwWmiqIorJiaGRYsW8dFHH3Ht2jXuuOMOpk6dSs+ePZ0dmioFubuRbty4kVOnTmk3UqVKmCaKqkzKeQuO8PBw4uLiqFWrFgMHDmT48OEMGDCAwMBAZ4epbIiIiGDmzJmsXLmSNm3a8Mwzz+jEEhWYJoqqqCzdS7/99lsCAgIYM2YMTz/9NPXq1XN2aKoEFdSNtGrVqnTt2lW7kSpVSjRRVGVezklxwsPDWb9+PSaTifbt22e1Nvbu3RsvLy9nh6oKsGfPHt577z2WL19O/fr1mTJlCuPHj9cTfAWjiaKyR1paGr/88gtz585l06ZNdOjQgSeeeIKHH35Yy4xySruRKlU2aaKoXE5CQgJ//vknK1asYPXq1Zw6dQo/Pz969OhBWFgYw4cPp2XLls4OU+Xj5MmTzJ07l48//pgqVaowceJEpk6dSrVq1ZwdmioFmiiqwly8eJFly5axYMECoqKiGDp0KFOmTCEsLMzZoSkHsqcbaWhoKH369KFmzZrODlepCk0TReXyDh8+zOrVq1m9ejXr1q0jISGBZs2aZU2K069fP713Yxlz8eJFPvroI+bNm4fRaGTMmDE8//zz1KlTx9mhqRKkiaLKz86dO1m0aBFffvklXl5ePProo0yfPp2GDRs6OzTlANevX2fr1q1Z9y7cuHEj165d026kSrkATRRVuZKRkcHu3but7t1oMBisuqn26tULb29vZ4eqkArEp59+yrvvvsvly5cZOXIkL7/8MjfddJOzQ1MlQBNFZWEymVi5ciXz588nPDycFi1aMHHiRMaNG4evr6+zw1M3QLuRKlV+aKKoyrXY2FjWrl2bNb7R0k21T58+DBgwgLCwMNq0aaOzcTqZZcr7N954g+PHjzN06FBee+01nem2nNFEUV27do3PPvuMOXPmcPbsWfr378/kyZN1VmQXlbsb6YYNGzh9+rR2I1WqnNBEUVUoOWdTXbt2LZcvXyYoKIi+ffsSFhbGoEGDaNSokbPDrLAsrQyvv/4627dvJyQkhNdff50BAwY4OzTlAJooVlyHDx/mo48+YunSpXh4eHD//fczbdo0br75ZmeHpopAu5EqVbFooqgqLJPJxM6dO7MSx4iICFJSUmjSpElWN1W9DYfzhIeH89prrxEZGan3YiwnNFGsWEwmE2vXrmXevHmsXLmSpk2bMnbsWCZMmKATWLmIgrqRNmnSJOvehaGhoXTs2FHLZqXKIU0UlcqUnJzM9u3biYyMJDw8nHXr1mE2m63GN4aGhuLj4+PsUCuUnPdibN26Nc8++6zei9FFaaJYMcTHx/Ptt98yZ84cDh8+zIABA7R7qQvIyMjg8OHDNruR9u3bl6CgIGeHq5QqBZooKlUASxcbS4vj9u3bqVSpEiEhIVmJow7GLz179+5l1qxZLF++nHr16jF16lSd+MLFaKJYvh07doylS5eyePFiMjIyePDBB5k8ebLu6zJKu5EqpWzRRFEpO0VHRxMREUF4eDgrVqwgKiqKGjVq0K9fP8LCwhg4cCCNGzd2dpjl3qlTp5gzZw5Lly7Fz8+PJ598kilTphAQEODs0JQNmiiWP2azmTVr1mR1L23cuDHjx49n3Lhx2m2/jNFupEqpotJEUaliyjkxzu+//058fLyObyxFsbGxfPjhh8yfP5+MjAzGjBnDjBkzqFu3rrNDUwXQRLH8SEhI4JtvvmH+/Pns37+fkJAQpkyZwl133aXdwssA7UaqlHIETRSVcoCc928MDw9n/fr1GI1GOnTooOMbS5jlXoyzZs0iNjaW++67j5deeokWLVo4OzSViyaKru/EiRMsWbKEjz/+mMTEREaOHMmzzz5L27ZtnR1ahZazG2lkZCSbNm0iKSkpTzdSPQ8ppYpCE0WlSkBCQgJbtmzR8Y2lKC0tjW+//Za33nqLo0ePMnToUF599VW6dOni7NBUJk0UXVdERATz58/n559/JigoiPHjx/P0009To0YNZ4dWIdnqRmoZW9iyZUvtRqqUKjZNFJUqBTExMWzcuJHw8HB+++03zp07R/Xq1enfvz9hYWGEhIRoxdlBLPdi/Pe//822bduybq0xfPhwZ4dW4Wmi6FpSU1P57rvveP/999mzZw+dOnVi8uTJPPDAA3h6ejo7vAojdzfS9evXc+bMGe1GqpQqcZooKuUEOcc3rl69mmvXrlG7dm1CQ0MJCwtj2LBh1KlTx9lhujzLrTVWrFhBx44dmTJlCqNGjcLd3d3ZoVVImii6hujoaBYvXsyHH35IfHw8d9xxB9OnT6d79+7ODq1CyN2NNDIykuTkZPz9/enSpYt2I1VKlRpNFJVysrS0NDZv3syaNWsIDw9n27ZtmEymrPs39u/fn9DQUPz8/JwdqsvasWMHc+fO5ZtvvqFx48Y899xzjBkzRltFSpkmimXb9u3bmTdvHt9++y2BgYGMHj2aSZMm6QRRJezIkSNs3rw5Kyk8ePAgADfffDM9e/YkNDSUHj166LhrpVSp00RRqTLm2rVrrFu3jvDwcNasWcPBgwfx8vKia9euDBgwgH79+tG9e3e8vb2dHarLOXbsGLNmzWLZsmXUqVOHadOm6b0YS5EmimVPWloav/zyC3PmzGHz5s106tSJ8ePH88gjj2hrVQlITk7m77//ZtOmTWzatInNmzcTGxuLj48PnTt3JiQkhJCQEHr27En16tWdHa5SqoLTRFGpMu7ChQts2LCB8PBwIiIiOHDgAJUqVaJjx45ZXVV79+6Nl5eXs0N1GadPn2b27NksXboUX19fnnrqKSZPnqy3MylhmiiWHRcuXOCzzz7jgw8+ICYmhltvvZUpU6YQFhbm7NDKlejoaP7++++s8YXbt28nJSWFWrVq0blz56xJZzp37qyJuVKqzNFEUSkXEx0dTUREBOHh4axatYozZ87g5+dHjx49dEbVIrp06RILFizggw8+IC0tjccee4znnnuOevXqOTu0ckkTRefbsWMHixcv5osvvqBKlSo89thjPPnkkzRo0MDZobk8o9HIoUOHrJLCAwcO4O7uTosWLbKSwk6dOunxr5RyCZooKuXick6M8+eff3Lp0iWqVKlCt27dshLHjh076hTphUhISOCTTz7hvffe4+LFi9x333384x//4Oabb3Z2aOWKJorOYTQa+e2335g/fz7h4eG0b9+eiRMn8tBDD2m36xuQc9KZ7du3ExERwdWrV7PKX0tS2KtXL6pVq+bscJVSqsg0UVSqnMmZOIaHhxMXF0dwcDC9e/fWW3HYYLkX49tvv82RI0cYOnQoL7/8Mt26dXN2aOWCJoql6+rVq3z++efMnj2bc+fOMXToUKZMmcKAAQP0wlExnDhxIispzHnvQsuM1ZbZSLVHh1KqvNBEUalyzGg0smvXrqzxjRs2bCA+Pt7qVhxDhgzRbme5WO7F+Oabb7J161a9F6ODaKJYOnbt2sXChQv56quv8PDwYPTo0UybNo1GjRo5OzSXkZSUxI4dO7KSwnXr1hEbG4unpydt27bVexcqpSoETRSVqkAyMjLYvXt3Vmvjxo0bSU1NpUmTJlndVPv160eNGjWcHWqZkfNejO3bt2fatGl6L0Y7GI1G+vfvz5UrV7KeS01N5cSJEzRp0sRq1t7AwEDWrl2r2/QGWC5uzJ8/nzVr1tCsWTOeeuopxo4dq7fWsUPuSWf+/vtvUlNTqV27Np06dcpqMezSpYvOOK2UqjA0UVSqAktKSmLTpk1ZN3Zev3496enpVoljWFgYAQEBzg7V6Xbu3MmcOXP45ptvaNSoEZMmTWLChAk6U2EhHnroIb755hsKO80YDAYeeOABvv7661KMrPyIj49n2bJlzJ07lzNnztC/f38mT57MsGHDtHtpAXTSGaWUso8mikqpLAkJCWzZsiWrxXHnzp0YDAbat2+fNb6xT58+VK1a1dmhOs3x48eZP38+S5YsoVq1akyYMIFp06bh7+/v7NDKnJUrVzJs2DC7Xjd06NBSiKj8OHr0KAsWLOCTTz7Bzc2NBx54gKlTp3LLLbc4O7QyJz4+nr/++isrKdy4cSPXrl2jatWqdO3aVSedUUqpAmiiqJQq0KVLl9i8eTORkZGEh4ezY8cO3N3dadeuXVZrY69evSpkV6yYmBgWLVrE3LlzMZvNTJw4keeee05vkp1DRkYGNWvWJC4ursDX+Pv7Z439UoUzmUysXbuWefPmsXLlSpo0acK4ceMYP368tvrnUNCkM02aNMlKCnXSGaWUsk0TRaWU3S5cuMCGDRsIDw/njz/+4OTJk/j6+tKzZ8+syR369OlToSr98fHxLFy4kFmzZpGSksLjjz/Os88+S/369Z0dWpkwceJEPv30U9LS0vL8z9PTk7Fjx/LRRx85ITLXcf36dZYvX87cuXM5ePAgISEhTJkyhbvvvrvCj+tMTExk586dWUmh5RZBvr6+dOjQISsp1LHXSilVdJooKqWK7cSJE6xdu5Y///yTtWvXEhMTg7+/P71796Z///707duXtm3bVoir9omJiSxdupT333+fmJgY7r//fl544QVatmxp1/IHDx4sl90GN2zYQJ8+fQr9f69evUoxItdx/PhxPv74Y5YsWUJycjIjRoxgxowZtG7d2tmhOU1UVFRWUhgREcG2bdtIS0vTSWeUUqoEaKKolHKYAwcOZCWN69ev5/LlywQGBtKrVy/69etH3759adOmTblOHNPT01m+fDkzZ87k0KFDDB06lJdeeonu3bsXuEx8fDwNGjTg1VdfZfr06aUYbckzm83UrVuX6OjoPP+rVasW58+fL9fHA8hESNeuXaNv3752vT4iIoL58+fz008/ERwczLhx45g0aVKF69ackZHB4cOHs5LCiIgITp48iYeHBzfddFNWUtirVy8aN27s7HCVUqrc0URRKVViTpw4kTUxztq1a7l8+TJVqlShW7duWWMcy+s4IcvtCt566y22bNmSdS/G/GajfPfdd3nxxRcxmUzMnDmTGTNmOCnqkjFjxgzmzZtn1f3Uy8uLqVOnMnPmTCdGVvI2bNjA0KFD6dq1K2vXri3wdSkpKXz//ffMmjWLffv20alTJyZPnsyDDz6Ih4dHKUbsPDknnYmMjGTTpk0kJSVZTToTGhpKz5498fX1dXa4SilV7mmiqJQqNRU1cbTci3HlypW0bduW6dOnZyUAqamp1K9fn9jY2KzXv/baa/zzn/90YsSOtXPnTjp27Jjv8+3bt3dCRKXj119/ZcSIEWRkZGA2m9m3b1+ershRUVEsWbKEBQsWkJCQwMiRI3nmmWdo166dk6IuPZZJZywthgcPHsRsNmdNOmNpMWzZsqXe6kMppZxAE0WllNNUtMRx9+7dvP/++3zzzTc0bNiQyZMn4+7uzpQpUzCZTFmvMxgMzJgxg3feeceJ0TpW8+bNOXbsWNbjJk2acPz4cSdGVLK++uorRo8ejclkwmw24+npyWOPPcaiRYsA2L59O/PmzWP58uXUqFGDCRMm8NRTTxEUFOTkyEuGZdIZS1K4efNmLl++jJ+fH+3bt88aX9i/f/8K18VWKaXKKk0UlVJlRkVJHI8cOcKsWbP48ssvycjIyEomcjIYDDz33HPlpmvmv/71L9544w3S09Px9PTklVde4ZVXXnF2WCXigw8+YMqUKXn2qbe3NwsXLmTx4sVs3bo1q3vpAw88UO5mCo6KirK6oX1Bk8507doVLy8vZ4erlFIqH5ooKqXKJJPJxMGDB7Pu4bhmzRquXLlSIonj4cOHiYmJKXR2zpLw0Ucf8fTTT+dJKCzc3NyYNm0a7733XqnGVRKOHz9O8+bNs9b1yJEjNG/e3MlROd4777zDiy++mO//3NzcMBgM3H///UyZMoUuXbqUcnQlI/ekMxs3buTUqVN5Jp3p3bs3jRo1cna4Siml7KSJolLKJRSUOFomuriRxHH27Nk8++yzTJgwgZkzZ1K1atUSWgtrbdu25cCBAxiNxgJf4+bmxuTJk5k9e7bLj9Pq0KEDu3bton379uzcudPZ4TiU0Whk4sSJLF26tMDEHyA4OJhz586V6gQ1x44dY/bs2Q67X+W1a9fYtm1b1vjCyMhIkpOT8ff3p0uXLlbjCytVquSQz1RKKVX6NFFUSrmkghLHoKAgunXrRmhoqN2J4/Dhw1m5ciXu7u4EBQXxySefcOutt5Zo/KtWrbL7M9zc3Bg7diyLFi1y6WRxzpw5TJ8+ndmzZzNt2jRnh+MwaWlpjBo1ip9++slqrGl+DAYD//d//8fdd99dKnHNmjWLf/3rX6Snp3Px4sVi3XReJ51RSqmKSRNFpVS5YDQaOXTokM3EsWPHjlaVWZPJREBAAPHx8YAkZSaTiXvuuYdFixYVq2Jtj169erFp0yabiYWFm5sb48aNY+HChS5bGY+KiqJRo0acOnWKOnXqODsch0hMTOSOO+5g3bp1hbYMW7i7u9OtWzciIyNLNK6NGzcyduxYjh8/nhXXr7/+yvDhwwtdLiEhgV27dmUlhZs2beLKlStZk85YksKePXvqpDNKKVXOaaKolCqXcieO4eHhxMXF5Ukc3dzc8r11g6enJ1WqVGHx4sXce++9Do3t/PnzjBgxglOnTnHp0iXS09Oz/ufu7o6Hhwcmk8nqeYuxY8eyePHi0p3QJyFOficnQEY6ZKRBSmKO/1+Fgk4lacmQlpL18M0vf+Klh3O0pnlXAk+f/Jd1cwM//+zHPn7g4QWeXvI3QOWAYqyQY1y6dImBAweyf//+fPdVYXbt2lUit8C4evUqr7zyCh9++CFubm5ZSaKXlxfPPPMMb731ltXrc08689dff5Genk7t2rWzksJOnTrppDNKKVUBaaKolKoQjEYjO3bsYP369axbt46NGzcSHx9P5cqVSU5Ozrc1yNK6OHToUJYsWULdunVLJLbY2FhiYmI4e/YsMTExnDt3jujoaM6ePcvp06eJjo7mypUrWWPfxowZw9KlS/Mmi8kJcP2K/CTEQWK8JHQpCZB4LfPvRHk++br8JF2H+MvyfEYapCZJMmjMsErwHMVoBveSaBD1rgRu7uDhCd6+klD6+IF/dahUJfvHzx98fOV/fv7ynLcv+FWFKoGSeFYJhEqVC/24s2fP0r9/f44dO4a7uzsGg4GMjIw8r/Py8qJq1aoEBARQo0YNgoODqV69Ovfeey9Dhgxx6Cb44YcfeOKJJ7h+/Xq+iWuPHj344IMPspLCDRs2cPr0aTw8PGjXrl1WUtinTx8aNmzo0NiUUkq5Hk0UlVIVkiVxHDNmDIcOHSq026Cnpyfe3t68//77jB8/vnQCTIqHK9FwNRbiLpARe54L589w7tw5Yi5coLWvmaaGREjITAqT4iG/dTC4SQKVM6k0myQRrEjFv8EA7h6yPSxMJjAZZXvk5u4BvlWyE0f/IKgWBJUDSPKuwos/R5BodiewZk2q16pD9fqNCAyuQ2BgoNWPr69via/a8ePHmTBhAmvWrMFgMBQ4mY7lf8HBwfTo0YOQkBB69OhBp06d8PEpoFVXKaVUhaWJolKqwjKbzQQEBHDt2jW7Xm8wGAgLC2Pp0qU0aNCgeB96LRZiz0HsWbhwGq5elITwSgxcjpK/r1+R1r2cPDwlyTGbJbkx2R4PpxzMzV1+DAZJLjNytdp5eElSWb0OBNaG6rUhoBYEBENwQwiqDzXqgb9jxr2mp6cze/ZsXn31Vcxms13dX3/++WfuvPNOh3y+Ukqp8q305udWSqkyZv/+/XYniSCJ5R9//MEtt9zC7NmzGT9+vPXEMhnpcPE0RJ+AS+fg4hn5iTkJMafgShSk50gA3T2lpc9klBa+wuROSlTps5WgZ6RBXIz8AHh4gME9b1Lp6QXV60JwI6jVCGo2kJ+g+lCriSSV7oWfniMiInj88cetJquxxdPTk7Nnz9r1WqWUUkoTRaVUhbV+/fp8u+p5eHjg7u6O2WwmLc26Zc/Hx4egwAC+WrQA054NTOxYH84dgbOHIOpYdkLg5gZuHmA25t8lFMCYDtowWH5lZAD5XABIT8u8eHAS9npIa7ExPftigZu7tEjWaw51mkPtJlk/VyrX4rmXX2XZsmWYzeas8ZH2dA4ymUxERkYyadIkx66nUkqpckm7niqlKqyRI0fyww8/4ObmRkBAAMHBwTRo0IDatWtTJ7gmwZ4mapNMrbQrBF89Q51Lx/GLjwEyi00PT8CQt5uoUo7i4QWYsy5AXM5w47BbIGer1OWsRwBnjV6cjE/h1IUrnDt/nri4uKxF3d3d8fT0xGw2k5qaCkDt2rWJiopyxpoopZRyMZooKqUqrGPHjlG5cmVqZlzH7cQuOLkXTu2DYzuly6jZJOMCPb0gPbViTf6iyj53z+zJeAxuEFSP5EbtOFOlPme9qnPOUJnT15I5c+YMp06d4tSpU0RHR3P06NESm8FXKaVU+aGJolKqYrkSDUf+hqPb4eBWOLgFEq/K/9w9MiveWiwqF+XmJi3d6WlyHHv7QZM20KIrNO8EbXphDm5kPbZWKaWUyocmikqp8stklNbB3X/Cvo1waCvEXQQM4OWtrYSq4nD3BFO69Jr2D4JbukOb3tCuLzTrIOMilVJKqRw0UVRKlR9mExzfBbvXwY5w2LtBbiTvkdlFz5TP/fKUqogMbuDuLmMfffygbR/oGAZt+0LTdtb3m1RKKVUhaaKolHJt8Zdh6wqI/Bl2roXk69Zjt5RStrm5SatiRjpUqgIdB0DPu6DbbVC1urOjU0op5QSaKCqlXE/0Cdj8C2z8EQ5slhugGwy270WolLKPm3t2t+yW3aHXCOh5B9Rq7Ny4lFJKlRpNFJVSruHqRfjjC1i1FM4e1olnlCotBoMkjsYMaHAL3DoWwh6WsY5KKaXKLU0UlVJll9kEf6+G3z6GLb/Kc6aMrNsYKqVKmcEg3VTNBuh5O9w2QcY26phGpZQqdzRRVEqVPUnx8OtH8Mt8uBwtYw6N6c6OSimVk7uHtDJWrwP3TIfhT4J3JWdHpZRSykE0UVRKlR3J1+H7WfDTHEhL0dZDpVyFmztUDoCH/wlDx4Gnt7MjUkopdYM0UVRKOZ/ZDP9bCp+8IK2JOimNUq7J3R38a8KYN2HQaOmqqpRSyiVpoqiUcq4Lp2DmI7A/EjBpC6JSLi9zFuK2veG5z6FmA2cHpJRSqhg0UVRKOc/udfDanZCSpGMQlSpv3D2hkh+8/gu06e3saJRSShWRJopKKefY8Qe8dBuYjWAyOTuafF3NgB3xsCcBAj2htR/cUhmSjXA8Gc6kwL6E7Nd7GmBoDWhf5cbfu0tVeV2SEZJMUMOzZNbREcKvyLr4uUNtb6jiDsHe0LYymMyw5RqsuQKvNHFunPZu85LgCvuxRLi5S+vi679A16HOjkYppVQR6HzWSqnSd3o/vDJM7oNYBpPEdDPMOgUNNsIX0VDVHXzd4OsYCFoHDTdCRBzcU1Mq/q8dh/lnYFxd20mive+9MQ7u3g3V18EvF0t8lYvFaIbhu+CFo1DVQ5577TgM2gFrr8jj5TFw127ZPs5i7zYvCa6wH0uU5Tv++t1w5qCzo1FKKVUEHs4OQClVAc18RJqazGUvSTQDt++EDVfhh7bSQmhxb7Akg33+ltYhgN4B8vsWPwjyctx79wqAVDP8XALJxeJzMKHejb/PkvPwv0twuS/4Z55NxtaFO3ZBVKo8HlUb/nsJ1ly+8c8rjqLuT3sUZfuV5H50GWaTJIuzHoEPtjk7GqWUUnbSFkWlVOnaHwnHdpTZMYkLzsKqyzC1gXVSYXGzH8xtAYlGeeyVOamjpx2TOxb1vWvbSDyL45dYmHnKMe+1+SoYAPcc6+7tBp+0ggup2c/Zs21KSlG3uS3F2X4lsR9djjEdDv8NBzY7OxKllFJ20hZFpVTp2rsBPL0gPc3ZkeQRnwHPH5HE55mGBb/unpqQYGdi4cj3/v4CHEyUrpPTGsp7fhENl9Ohnjc8Xjf7tb9fhkOJ0KQSNKwk4wV/vAij9kIlN3j9BDTygUfryOsTjbDyEpxPgW7+0LNa9nulmODXWBgZDJuuwuEkGF0HqntChhmePAjLWmUnjHW9pSUxP7uuw4Y4aFQJbg+y/l9hMQAcS5IurSkmCK0GHXOMKcwvxrtrFm+bF/Q5hW2/wmIrSLoZ1sfB3utQzwf6BEDNfJLKPy7D3gRJavsGgK+79f/z29dlkocX7FkPLXs4OxKllFJ20BZFpVTpir9cZm+BsS4Okk3QwEcmOymIl5t0WSzt9x4ZDN/HwOzM8X5VPWBiPVh2Hpaez37d9COSLE2sB55uMHqfPN8nQJKYyh7SRfS2zETtQKIke0GekqgM3gHPHJH/fXIe6m6QBOmLaHhoHzy2XxKTifUlafoyGvr+DftzTOwzqHre+BechXdOSXJ0xy7rlrnCYgBYeA5G7IE7a0K/QBiwXcY/FhbjonNF3+aFfU5B26+wZQpyIlleF5cO99WCk8lw8yb4KUcXVTNw/17ZNr0DYNwBaLMZXj4Gy6LkNQXt67LJAPGXnB2EUkopO2miqJQqXbUal8mxiQCnkuV3k0pl972b+1o/djdALe/sxxlmWHhWWuu83GBI9ewulzU8oZI7eBik1a+GpwwVHbsf3mgmSc6o2tJKNvu0tP49XhcGBMrENT5ucCQEfusAN/nKz+8doY43Qm1FZAAAGq5JREFURFyFDlvgpWPSqpZbvFHGcX7bBn5sJzOMfpaZ7NiKAeDtk9JSVtML2lSWpO2js/K/gmK0dAsuyjYv7HPy2362linIo/ugdzUYESzbb0YjuC8YHtorSSPA19Hw60VJAjtXhVk3SYJZ2UMeF7avyySzEWo7eepbpZRSdtNEUSlVunreCWX0rjwemYmFvePVnPHehnzG++V8yt0gyczEg9nJ6dOF3O888qp0a/w0SrpTvn5CbvsB0goK0sXUYIC7asp63Foju5tprwA42BOeqi+Jy1snpXXxcq4hqFXdJZmzaFkZzqfaH8OiW+AfjeXvDLN024zN8Rn5xeideYYryja39TmOWGbrNUmsQwOsnx9XV1pAl5yTx6suy0UAr8z1uLem/J1slIS0qPva6cxmCLnL2VEopZSyk45RVEqVrhp1YdgEWPlxmZvQplXm2K4jSa713jkZgPkt4NH90HKT3LtwRqOCX78vUZKRsTm6u46tCwtvgco5xsK5UfCkNFU9YMHN8EAtuGe3JELjD0jLYUE8DZBusj+GoTWkm+bMU3AhDa6kSwtiTrljLM42t+dzbnQZy703c2/P1pVl/+1LlMd1veFcirx3gKckiVXdoUbmOMai7muncvOA4RMhsIDBq0oppcocbVFUSpW+se9CvZtkcosypHVmK82VdKnwu8p75/ZQbVjfWSaM+ccxuHN3/t1BAWJS5SfYSxKTnD/+hVxKvJAmE+vkFFIN1nSShOanizLZjj3siWH1Zei3HQYGwuyboJlv4e8Jxdvmxfmcoi5jyQ/Pp1o/7+Um61s1MzkeV1e6s04/Iq2iy2OgiS88Xid7maLsa6fx8IQGt8DYd5wdiVJKqSLQRFEpVfp8/GDWWhmv6FHILCOlrLonTM7sumfp/leQ63YmQSBj2HzcHPfeuXvu5swLMsywLV4mXdndQ1qYVsTK/Q7zW75RJZnx87+xeT/nP4Xc+8/DADOO5n2+VWVol9kyZqslzt4YYtLgrt0yFtGe2UQtiro/7f2cnNuvOLG1qSK/N1+1fj7dDNcyoH3m/5v5wgc3y3osOCuJ5KYu2bOe2rOvnc7DE2o3hVlrwNuOrFsppVSZoYmiUso5qtWEBX9Bp0H5D7xzkn81lQlj3jiZf+JiRmbT/DJaHqebs5/Pz/4ECL8Cfu5Ff28z1r9BkoboNOmSCBCdCseT4Gpmcmk0Z8+A6mmAmc2lpS4us5evrxvEZch7ZphldtJKbjKj5p7MLpFJRnj3VPY4RHM+61fdEyLi4PMo6+fTTBCVKq2LAZ7ZMeUeJmg0Zye4g23EsC9BHl9Jz47nVLJ1y1l+MULRtrk9n5N7++29bl9sOX93qSqT9vxwQcYkWvx5BYK8YHw9ebwhDlZcgvdugucbyW08ct6z0ta+dioD8r3uPES+5/5BNhdRSilVtugYRaWU8/hWhX+vgA0/wPuPQ1qK08ctVnaH7d2kteyOXTIpyoBAGRe267rcFuLR2nJLA5BbE4AkOKsuQzUPSQhi02Ss3qJzMKFe8d57d+aMnzm7TT5YS26N0GMb9KomXRW7+8P/LsMbJ+C5RjKb6IhgCAuUZCPAE+4NluW7+8v9GO/dLRPKvNQY5rSApw9Bu80yQ+jFNHi1CQzPrNufSZGk5ESy9QyizXxh7AGJ/Y6a0tI2+4yMWfy8dfbrTqdIS9mV9OzbVJxMlqTyUrrM+llYDLFp8p5vn4Q91+XvFn4yCc79e+HNZgXHWJRtbs/n5N5+4+vaXia//fhZK3mPUXulu2pchoxx/KlddnfblZfg0/OwMlbGcFZ2h/o+cgwMy9w3he1rp/HwBHdPmDgHbh1Xpi4EKaWUsp/BbC6j0w8qpSqWy1HwxT9h1afg5u70hBGkW+Hu69LS5OMm3Sp7Vctu1fk1VpINW4XoiGBo6Ve09951XRLPVBO4I7OL9smcJXNbvCQFrStLa9wfl+EmP2joI8nS75dl/KDJLC1UI4KlRRPk/59HgY+73FbBMlnMwUSZYdRshoHVs2/D8W2M3LweZOzc4BrZ6/KfixDsDUeTJAlMN8ktMAbXyJ6o5ddY2JmZKNX0godqwdq47NteBHnKxDVebgXHADIhzYpY2U4DAyWx+jYGelaDw4kFx1iUbW7rczpUyX/7FbaMgYL3Y7oZ1l2RGV+bVJJWxpzjQmPSYNph2a8xaZCQAdeN8vp3msOoWoXv61Ln6QUmEwx+DB55TSeuUUopF6eJolKqbDm9H755A9Z9D+7ukOH8hFGp0pZglNuMrO6Y3QprkWSUrrRvNXNObHl4eMq9UQc/Dg+9AjXqOTsipZRSDqCJolKqbIo6DisXSQtjQlxmK2MRZpBRyoV9EQ2TD8HJ0OyxnhZfRUNTX+jh75zYAPk+mkxQ2R9uHQvDn5TJqZRSSpUbmigqpcq2jDTY/F9JGnesAXcPMGXknfpTqXLkQCL02iZdeIcFZU9ScykdHqmdPUaxdBnAwwOMRugQJvdD7T68TM1crJRSynE0UVRKuY6LZ2Dt17Dh/+D4TmnVAG1pVOXSpXT48QIcT5bxna38ZOymR2nODWP5jplM0Kw99B4JA0ZBUP1SDEIppZQzaKKolHJNl6Ng868Q8SPsXi+tjO4eOqZRqRvl4SkXX9w8oF0/6HU39LhdJ6dRSqkKRhNFpZTrS4qHbatg5xrY8QfEnASDm1R401OdHZ1SZZu7Z3Z37poNocsQ6DBAfleq4uzolFJKOYkmikqp8ifuAuzdAPsiYGc4nDkoz2uLo1Lg5SNjf00mCKonrYatQ6HzEKjZwNnRKaWUKiM0UVRKlX+XzsH+SDi8DQ5slvGNqcly+w2DmyaPqvxy95BbV5hMkiA27QCtekKLLtAqFGrUdXaESimlyihNFJVSFY/JKK2Mh7fBkW2SRJ4+IOOyDAZw9wJTulSulXIFbm7ZLeZms/zdqBW0DJGk8KbO0OCW7MlplFJKKRs0UVRKKZAK9vkjcGo/nNoHp/bC0Z0Qe1ZaZCxjHjPS5bFSzpD7ODS4Qc360LwjNGwNjTJ/6jbX21YopZS6IZooKqVUYdJS4MwBSSDPHIBzR6U18sJJ6b4K0krj4ZU57svo3HiV63NzkxlHTRnZrdpelaBWI2jQEuo1h4at5KfBLdKlVCmllHIwTRSVUqq44i7A+aMQdUx+zh2FswfhwilIup79Ojd36QpoMuo9H5Ukge7ucizkvLDgWxWCG0HDW6BOc6jbDOpk/gQEOy1cpZRSFZMmikopVRJSk+DCaem6eukcXDwDF8/KrTsunoZL561v3WEwyG0KDIa8CYRyDZYLAmYzGDPHClp4esvEMcGN5KdmA/kJqgc16kFwQ/D2dVbkSimlVB6aKCqllLNcvwJXouHqRbic+fvqBfk7LkaSzKsXISEOjLkSR4MbeHgABklIcnZTVDfOkDk5jMEAmCEjI+/YVHd3qBII/jUl4QusDYG1oFowVKsJ1evI78Ba8jqllFLKhWiiqJRSruBarCSW8Vckcbx+Ba5n/rY8vnYJrsZCQuZzqckyxrJAhuxkyGCQp8xmIPO0YMywbhUrqwyZ62H5mxzrYjZndvctZD28fMC7ElQOgMqBUC0I/GtIclc5QH5XCch+XDUwM0EMKuk1U0oppZxGE0WllCrvEuIgJVF+khMg8Vr246R4SIyXv9OSZTbN5ARZLvGqJFpJ8ZCeAunp8rflPXNKii84qcx8v0QjbL4GPfzBz3KXhkqV81/GYJAxezlVDpDfvlXB0xM8feRvgwH8qmW/n4endOP09gW/qvIaHz/58fOHSlXAx1ceW95TKaWUUlY0UVRKKVUq9u/fT+vWrdm3bx+tWrVydjhKKaWUKoSbswNQSqn/b+/Oo6MqEzQOv5VKZSEJWYkhEAmBsAqE1bAvAgqKsshAZBGZUZl2axrb6ZbWaZfWPgfadpkZR+UI2iikUTaxBRkQRFlksVEkQBbClkAgCwlZK1U1fyAFF5JKJSRUML/nHA5U3e2t++Wc4s136xYAAAAaF4oiAAAAAMCAoggAAAAAMKAoAgAAAAAMKIoAAAAAAAOKIgAAAADAgKIIAAAAADCgKAIAAAAADCiKAAAAAAADiiIAAAAAwICiCAAAAAAwoCgCAAAAAAwoigAAAAAAA4oiAAAAAMCAoggAAAAAMKAoAgAAAAAMKIoAAAAAAAOKIgAAAADAgKIIAAAAADCgKAIAAAAADCiKAAAAAAADiiIAAAAAwICiCAAAAAAwoCgCAAAAAAwoigAAAAAAA4oiAAAAAMCAoggAAAAAMKAoAgAAAAAMKIoAAAAAAAOKIgAAAADAwORwOByeDgEA+GWx2WwaMWKE8vLynM+Vl5crIyNDcXFx8vX1dT4fFhamzZs3y2w2eyIqAACogrenAwAAfnnMZrNiYmK0bds2Xf37yNTUVOe/TSaTkpKSKIkAADQyXHoKAGgQSUlJ15TEqzkcDk2bNu0GJQIAAO7i0lMAQIOorKxUZGSk8vPzq10nODhYZ8+elcViuYHJAABATZhRBAA0CG9vb02ZMkU+Pj5VLrdYLHrggQcoiQAANEIURQBAg0lKSlJFRUWVy6xWq5KSkm5wIgAA4A4uPQUANBiHw6FWrVopOzv7mmVRUVE6deqUvLz4nSUAAI0N784AgAZjMpk0ffr0ay4/9fHx0cyZMymJAAA0UrxDAwAaVFWXn1ZUVHDZKQAAjRiXngIAGlx8fLzS0tKcj+Pi4pSenu7BRAAAwBVmFAEADW7GjBnOu5taLBbNmjXLs4EAAIBLzCgCABpcenq64uPjdekt58iRI4qPj/dwKgAAUB1mFAEADa5du3bq0aOHJCkhIYGSCABAI0dRBADcEDNnzjT8DQAAGi8uPQUA3BBZWVmKjY1VZmamoqOjPR0HAAC44O3pAADgKUVWu05dsHo6RtPhH65fPTNfhf7hKswv93SaJqNVoEVBFi4gAgDUDjOKAJqsQ/nlWp1Z5OkYTYrdbpOXl9nTMZqU8bFB6hTq6+kYAICbDL9iBADcMJREAABuDhRFAAAAAIABRREAAAAAYEBRBAAAAAAYUBQBAAAAAAYURQAAAACAAUURAAAAAGBAUQQAAAAAGFAUAQAAAAAGFEUAAAAAgAFFEQAAAABgQFEEAAAAABhQFAEAAAAABhRFAAAAAIABRREAAAAAYEBRBAAAAAAYUBQBAAAAAAYURQAAAACAAUURAOqZtaxUxQV5no5R7xx2u47t363N7/3F01EanV/qmAMAmi6KIgDUk8zvd2rpvFl6cVi8UrZ84ek49W7/+pVaOm+mti9719NRGo1f+pgDAJouiiIA1JPYnolK/JeHVFlRXu/73vXpB/W+z9pKGHu/4voM8nSMBlebc92QYw4AgCdRFAGgHgVF3FLv+zy45QttXfJmve+3LszeFk9HaFB1OdcNMeYAAHiat6cDAMDNxmG3K3XXVp1JPajgqFbqMmyMvH18q1z3h41rdDbjiHwDgzRo2hyVFxdp37pklRTkK/iWaPUZP8257pEdX+ns0VSFtW6j0JYxiorvogOb1il5/qPy9vXXpncWKDQ6Rr3GTZUkVZSW6NA3G1WYk62Y23qrTY++zn1VVpTr4Nb16j7qPh3bv1vnjqWp17ipMplMbr3GqrJcLfvwAR3dt0Oh0THqPPQuwzJX2SQp98RRpe/epsrycsX2vF3RnbrXW/aaxqe6Y7s6167yVsdWadXRvdt1Oi1FwZHRatt7gALDIq5ZL3XnFp1JS1GL2HjF9Rkoi5+/Ybk7YwEAQH1jRhEAaqEoN0cfzp0ha1mJut85QXvXfKzX7x+k4vzcKtfvPuo+/bBxjb5Z+rYkyTcgSLdPfkh71i7T7lVLnet9/pfndHz/d0qcPEtmb4tW/OfjkqS2vQeoTUKifJsFqO+E6eo4eLQkKSfjsNa8+owCQ8IVGBqh9x+brM9fe16StGf1R3r1zm5KfnaO9q1LVvIf5uiTPz6ps5mpbr3G6rJcaUfyIm1Z/IYy9m7Xh3NnGGbhXGWTpJ0rFuujZ2ary7Cxius7SO89OlH716+sl+w1jY+rY1d3rl1tU528U8e06NGJKi08r+6jxys/65hem9hfP21e51zH4XBo2e8eVk7GEcX26q+VL83V65MH68v/fkV71y5zeywAAGgIFEUAqIVPX3hKve6Zoq7D71bwLdEaNONXyj2ZqaP7dlS7TcStcYbHXl5mBYVHOh/bbZXauWKxOg+9S2aLjzoMGKGOA0dKkgJCwmTx9ZOX2azmkS0VEBImh92uT1+cq9GP/V5xfQcpYez96n3PVH2z9G1lHz6gPuOnqV2/wXLYbfL29dPTq3dp1lvLFdGmXY2vz1WWS8qKLyiybQcl/fk9TV+4WK279tTetcslqcZskrTl/TfUMr6rAsMiFNW+s+J6D9DOv78vSdeVXap5fFwdu6pzXdM21Vnx3GNq26u/uo26V81bRGnIg0+o++jxSp7/78o/dVyS9M8vPlHK1vVKnDxLrbskaMyv/6i8U8fk0yxArbokuDUWAAA0FIoiALjp+I97lLr9K3UZdvkyy/jEYXrq71+ry/Ax1W9YxSWTV15GafIyy+Lnr9Wv/Fb5WSckSf2n/lu1uzu2/zudTjuoPas/1qZ3FmjTOwtUcPqkJClj77eSpGbBYZLJpK7Dx8rL7K2OA++Ql5e5xtfoTha/gEC16zfE+TgyrqMKz2a7nW3C/IUaNvvXki4WU1ulVcUFl2dk65rdnfGp6dhVqe02Jw7sVeY/dym2Z6Lh+X4TZ8haXqbvVn4oSTqyfbMCIyJltvhIkrqNHCezxUeV5WWKat+51j8XAADUJz6jCABuyj58QH5Bwc7/2F8S1b7zde3XZDJp3DOvaMXzj+uvkwZoxMPzNGTWE9WufzotRUHhkeo7Ybrzub4Tpmv8swvk0yzgiv161frmM7XNIklmb2/ZrFa3s3UcNFKlhQXauuRNXcg9q9LzBbLbbFflqH12d8bHnWNfrbbbnEk7JOniebnSLe06yWQy6XRaiiSpeYuWKjyTrdLCAvk3D5HZ4iO/gEA1CwmXVLexAACgvjCjCABuKsrNUcn5PFWUltT7vnuOnaxHFq1VaPSt2vBff9Lf5s6s9isXLuTmqCg3R4HhLdQ8sqXhj19g8xuapS7ZUnd8pfceGa/4xGG6e95LCo9pe92ZJffGpy7HrvU2P88Wn8/JNjxttvjIN7C5/AKDJF2cYQwIi9Dnrz2nitIS7V+/UmGtY9X3ihscXc9YAABwPSiKAOCmSwXhhw2rrlnm6jOK0sUblxgf253/ttsqdfKn7xWbcLueTN6iIQ8+oUPbvtThb//vivUvbxsafasqSoqV8vWGa45z8Kt/uPVaquNOFldqylaUm6O/zXtQfcZPd+vOobVR0/i4e+wrz3Vd8l6awTz+wx7D87ZKq8ovFKplh9ucee/9j1fVLDhMO5IXyWzx0Zwl/3De9fR6xwIAgOtBUQQAN3UaNEr+zUP0xRsvKn33NklS2YVCrX/zJQWEXrxc8FLLuLIYNgsOVdG5Mzp/JkuSVHTujHJPZKq06LwkyW6zO++Aava2aMxTzyswvIVKCy8u9/HzV2lhgRwOh+y2SsUnDpPF108rX/yNTqcelCRZy0r19QdvyWQ2X85xVTl1R01Z7Hab7Hb7VdvYnK83vv9wl9nOpKXIWlaq0vP5zvOUn3XcOEtWx+w1jY87x776XJ9OPeheXl0e89Zdeyqu7yD9uHGtrOVlztUydn+jgNBw9Zs0U9LF8nro6y81du4LGjrrSd12xz2Gz2LWNBYAADQkiiIAuMm/eYgmPf9XWctLtejRiXp5REf9eUwPRbXvrMi2HSRJ2Ud+kiRdyDvr3C5hzCRJ0tuzxmj5s49q07sLdWv33jp3PF2bF70mSdr72XKl7doq6WKB8A8KUbeR4yRJMd37qLy4SB/9drY2vbNAzULCdPfTL6vsQqHemDJUC8b10csjO0syqfOQOyVJBadPym63Ke/UsVq/TldZCrJPqOxCoUp+Lk6SlJ91XDZrhYoL8tS8RZTLbC073CbfgCBtWfy6lj79kD594UlFxLZXYU62lv3uYeWezKxz9prGx51jX32uI9vG17hNVWM++YW3FNa6jZKfnaP8rBPKOvSjti55S9MXfuC8BPfQto3as+Zj/WlUF705dZj+d/bdWv77R5Ty9QZn6XQ1FgAANCST4+rroQCgiTiUX67VmUW13i4/64TSdm2V3VapjgPvUEjLGEkXb6ZyePsm2SoqZDKb1bZnotr2HiBJOvnT9zq6b4duad9ZHfoPV+rOLWrRpp1CWsbIbrcpdftXyjl6RA67XQGhEeo26l75+DeTdHEWb99nyfL28VWXoXc5bwqTc/SIMvZ8Kzkcap84zPk1HPs3rNK5zDRJkm9gkDr0H67IuI5uvTZXWVK2rlfWoR8lSQFhEeo5drLSd29zfu1FQGi4+k6YLrPFp9psknTuWLoObftSke06Kf72oSotKtD+DavUpns/nT2WVufsNY1PTceO7tStynPtahuTyVTtmNsqrcrY863OpKUorFUbxfUdZPgMaVFujj5f+AeFtIxRUW6OKkouqLykWKdTD+quJ59Twtj7Xf5cuGt8bJA6hfrWahsAACiKAJqsuhbFm9WuT5bIbnd9h89OA0cptNWtNyiR+27m7FWpKCnWuw/fp9n/s0LNgkMNy6xlpdq86DXd+fj8ejkWRREAUBd8PQYANBEl5/Nlr6x0uU6lteIGpamdmzl7VQ5sXqfcE0cN36d55bLOQ0Z7IBUAAJcxowigyWpqM4poPHIyDuudfx0nL29vdRo8WkE/36SmuCBXve6Zok6D668oMqMIAKgLZhQBALjBIuM66jerdurAps+UdzJT/kEhapOQqPjEofIy89YMAPA83o0AAPCAgJAw3T7pQU/HAACgSnw9BgAAAADAgKIIAAAAADCgKAIAAAAADCiKAAAAAAADiiIAAAAAwICiCAAAAAAwoCgCAAAAAAwoigAAAAAAA4oiAAAAAMCAoggAAAAAMKAoAgAAAAAMTA6Hw+HpEAAAAACAxoMZRQAAAACAAUURAAAAAGBAUQQAAAAAGHhLWuHpEAAAAACAxuP/AZe+EsCx2EOsAAAAAElFTkSuQmCC", + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Image(flowchart_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "eb563297-d3b0-4792-9e6a-a1a72ce24c06", + "metadata": {}, + "outputs": [], + "source": [ + "ccc = txpipe.extensions.CombinedClusterCatalog(\n", + " shear_catalog=\"./data/cosmodc2/20deg2/shear_catalog.hdf5\",\n", + " shear_tomography_catalog=\"./data/cosmodc2/outputs-20deg2-CL/shear_tomography_catalog.hdf5\",\n", + " cluster_catalog=\"./data/cosmodc2/20deg2/cluster_catalog.hdf5\",\n", + " cluster_shear_catalogs=\"./data/cosmodc2/outputs-20deg2-CL/cluster_shear_catalogs.hdf5\",\n", + " photoz_pdfs=\"./data/cosmodc2/outputs-20deg2-CL/source_photoz_pdfs.hdf5\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "34ad8331-d722-48e7-97a4-36cfa4653f4e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "We have 1942 clusters\n" + ] + } + ], + "source": [ + "print(f\"We have {ccc.ncluster} clusters\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "364ee600-a3d9-46db-ad8b-fc331d8e513e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "74b7c16c-84de-4730-a304-363c2f2f9bd4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'cluster_id': 911,\n", + " 'dec': -26.077918984346976,\n", + " 'ra': 52.940786054153854,\n", + " 'redshift': 0.47682086,\n", + " 'redshift_err': 0.0035390393,\n", + " 'richness': 46.272552,\n", + " 'richness_err': 2.3943121,\n", + " 'scaleval': 0.9999924}" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cluster_info = ccc.get_cluster_info(9)\n", + "cluster_info" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "a1f12631-80ef-4785-a813-24bb4f13b2f0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "51.88613530423048" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cluster_info['ra']" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "b577aecf-501f-497d-a0ee-a6182324aee5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "GCData\n", + "
defined by: cosmo=None\n", + "
with columns: ra, dec, e1, e2, weight_clmm, tangential_comp_clmm, cross_comp_clmm, distance_arcmin, weight_original\n", + "
3 objects\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
radece1e2weight_clmmtangential_comp_clmmcross_comp_clmmdistance_arcminweight_original
float64float64float64float64float64float64float64float64float64
53.133981455891-26.1579401322444941.15036136881148930.357480533847292678.008042302090729e-32-1671776789321653.0-3914842379489795.011.4621334128759981.0
53.031571255443474-25.892561578726940.4840315494136206-0.441368820873072332.7202140347706063e-311250777566752798.5113925683195897.5812.1516122098131911.0
52.94860624506361-26.0774914903219470.5360523283156245-0.468629286591236657.769507610612709e-32-1705167103094053.01901965101349017.50.422224928497471341.0
" + ], + "text/plain": [ + "GCData(cosmo=None, columns: ra, dec, e1, e2, weight_clmm, tangential_comp_clmm, cross_comp_clmm, distance_arcmin, weight_original)" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bg_cat = ccc.get_background_shear_catalog(9)\n", + "bg_cat[0:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "3b96b15a-8725-4f73-9232-4254f13595bb", + "metadata": {}, + "outputs": [], + "source": [ + "import clmm" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "20be4071-e44d-4dbd-8a29-2de556b9ca22", + "metadata": {}, + "outputs": [], + "source": [ + "comp=clmm.dataops.compute_tangential_and_cross_components(cluster_info['ra'], cluster_info['dec'],bg_cat['ra'],bg_cat['dec'],bg_cat['e1'], bg_cat['e2'], coordinate_system='euclidean')" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "id": "8c4341f2-8e54-40c8-94b6-e4d4232c344d", + "metadata": {}, + "outputs": [], + "source": [ + "comp=clmm.dataops.compute_tangential_and_cross_components(cluster_info['ra'], cluster_info['dec'],bg_cat['ra'],bg_cat['dec'],bg_cat['e1'], bg_cat['e2'], coordinate_system='celestial')" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "a2eb1835-60d3-4a1e-8cef-371b412c9484", + "metadata": {}, + "outputs": [], + "source": [ + "prof = clmm.make_radial_profile(comp, bg_cat['distance_arcmin'],\"arcmin\",\"arcmin\")" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "b66f2ec5-f2d2-49da-8d40-744c47f72418", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "GCData\n", + "
defined by: cosmo=None, bin_units='arcmin'\n", + "
with columns: radius_min, radius, radius_max, p_0, p_0_err, p_1, p_1_err, p_2, p_2_err, n_src, weights_sum\n", + "
10 objects\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
radius_minradiusradius_maxp_0p_0_errp_1p_1_errp_2p_2_errn_srcweights_sum
float64float64float64float64float64float64float64float64float64int64float64
0.00.90489844430095461.4039144907749920.000263224287487102439.470525567952654e-060.00031111657046946870.0309581844230767050.0200826879232986160.02807775198094879108108.0
1.4039144907749922.16949394509001842.8078289815499840.00063108020739835936.277885485753274e-060.0093495730012346480.015851651432859460.00112741366069338770.015105884977522625325325.0
2.8078289815499843.53909822525926384.2117434723249760.00102948194303769884.933882499824821e-060.0005079772604103710.0119008397183531270.00163997698096334880.01225547581762401541541.0
4.2117434723249764.9420562568114765.6156579630999680.00143758589166911134.4093735022952785e-060.0143493711438452220.010405262443768265-0.00356416017337557370.010509277627826458736736.0
5.6156579630999686.3685956380456027.0195724538749610.0018525493768674163.885730841798387e-060.0307981938878400460.0096259393153702260.0115921576091214220.009634986443024827924924.0
7.0195724538749617.7307924174582258.4234869446499520.0022487963578809643.5368723882833518e-06-0.0070733723726998290.008562364797977319-0.0049059210200015930.00893184299982287811391139.0
8.4234869446499529.1604873564477429.8274014354249440.00266467775762207133.28481383160835e-060.00151923503540016810.008551172581146885-0.0064758534146135870.00863891993609182712931293.0
9.82740143542494410.55191014725141211.2313159261999370.00306942624073562342.989543601633086e-060.00083073593177328150.007813250268334642-0.000352718937649448560.007725917432736751515701570.0
11.23131592619993711.94134998385944412.635230416974930.0034735979058553092.7813291491757175e-060.0176830341341189280.0070253272401426720.00051317084184197740.00713150223658634817571757.0
12.6352304169749313.3259468092275514.039144907749920.00387636079611089572.6936711846667824e-060.00387960717356027530.0070764554152493880.00320872457676697970.00710285823622978118821882.0
" + ], + "text/plain": [ + "GCData(cosmo=None, bin_units='arcmin', columns: radius_min, radius, radius_max, p_0, p_0_err, p_1, p_1_err, p_2, p_2_err, n_src, weights_sum)" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prof" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "2a4c76be-e9fd-48aa-b18e-7a2e7ae4e797", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkEAAAGhCAYAAABmqGCyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACD5klEQVR4nO3dd3zTdf7A8VeS7gndLRQoeypQBIpWQJGl4gAZKngKKnqeB5zbu3Pc/Q4H53GeAspwoQzFLTJUQJSyhwJllxZoS2kLTWfaJvn98W3Slg46knyT5v18PPogpJ/k+4nS5p3P5/15vzVms9mMEEIIIYSb0ao9ASGEEEIINUgQJIQQQgi3JEGQEEIIIdySBEFCCCGEcEsSBAkhhBDCLUkQJIQQQgi3JEGQEEIIIdySh9oTcFYmk4n09HQCAwPRaDRqT0cIIYQQDWA2m8nPzycmJgattv61HgmC6pCenk5sbKza0xBCCCFEE5w5c4a2bdvWO0aCoDoEBgYCyn/EoKAglWcjhBBCiIbQ6/XExsZa38frI0FQHSxbYEFBQRIECSGEEC6mIakskhgthBBCCLckQZAQQggh3JIEQUIIIYRwSxIECSGEEMItSRAkhBBCCLckQZAQQggh3JIEQUIIIYRwSxIECSGEEMItSRAkhBBCCLckFaOFEEKozmgyszMll6z8EiICfRgYF4JOK82rhX1JECSEEEJV6w5m8NI3h8nIK7HeFx3swwu39mR072gVZyZaOtkOE0IIoZp1BzN4ZPneagEQQGZeCY8s38u6gxkqzUy4AwmChBBCqMJoMvPSN4cx1/I9y30vfXMYo6m2EUI0nwRBQgghVLEzJbfGClBVZiAjr4SdKbmOm5RwKxIECSGEUEVWft0BUFPGCdFYEgQJIYRQRUSgj03HCdFYEgQJIYRQxcC4EKKDfajrILwG5ZTYwLgQR05LuBGHBEELFiwgLi4OHx8f4uPj2bp1a73jt2zZQnx8PD4+PnTs2JFFixZV+/7nn3/OgAEDaNWqFf7+/vTt25ePPvqo2dcVQgjhODqthhdu7VlrYrQlMHrh1p5SL0jYjd2DoFWrVjFr1iyef/559u3bR2JiImPGjCEtLa3W8SkpKYwdO5bExET27dvHc889x+OPP86aNWusY0JCQnj++edJSkrit99+4/777+f+++9n/fr1Tb6uEEIIxxvdO5qbekbWuD8q2IeF9/aXOkHCrjRms9muZw8HDRpE//79WbhwofW+Hj16cPvttzN37twa459++mm+/vprkpOTrffNnDmTAwcOkJSUVOd1+vfvz80338w//vGPJl33cnq9nuDgYPLy8ggKCmrQaxVCCNF4I/+zhWPnC/D31lFoMHJXfFteGX+VrACJJmnM+7ddV4JKS0vZs2cPI0eOrHb/yJEj2bZtW62PSUpKqjF+1KhR7N69m7KyshrjzWYzP/74I0ePHuX6669v8nUNBgN6vb7alxBCCPs6e7GIY+cL0GpgfP+2APh46iQAEg5h1yAoOzsbo9FIZGT1pc7IyEgyMzNrfUxmZmat48vLy8nOzrbel5eXR0BAAF5eXtx8883873//46abbmrydefOnUtwcLD1KzY2ttGvVwghRONsOnoBgPj2rekSEQDIkXjhOA5JjNZoqkf0ZrO5xn1XGn/5/YGBgezfv59du3bxf//3f8yZM4fNmzc3+brPPvsseXl51q8zZ85c8XUJIYRonk1HsgAY3j2C8Iqj8Fn5BjWnJNyIXRuohoWFodPpaqy+ZGVl1VilsYiKiqp1vIeHB6Ghodb7tFotnTt3BqBv374kJyczd+5chg0b1qTrent74+3t3ejXKIQQomlKyoxsO6ms8A/vFkFRqRGALL0EQcIx7LoS5OXlRXx8PBs3bqx2/8aNGxkyZEitj0lISKgxfsOGDQwYMABPT886r2U2mzEYDE2+rhBCCMdKOpVDSZmJ6GAfukcFEhGofBC9UGDAzmd2hADsvBIEMGfOHKZOncqAAQNISEjg3XffJS0tjZkzZwLKNtS5c+f48MMPAeUk2FtvvcWcOXN48MEHSUpKYunSpaxYscL6nHPnzmXAgAF06tSJ0tJS1q5dy4cffljtJNiVriuEEEJdmyu2woZ1i0Cj0RBeEQSVlpvQF5cT7Ff3B18hbMHuQdCkSZPIycnh5ZdfJiMjg969e7N27Vrat28PQEZGRrXaPXFxcaxdu5bZs2fz9ttvExMTw5tvvsn48eOtYwoLC3n00Uc5e/Ysvr6+dO/eneXLlzNp0qQGX1cIIYR6zGYzPx1VgqAbukcAyqmwYF9P8orLyMovkSBI2J3d6wS5KqkTJIQQ9nMiK58Rb/yMl07Lvr/fhL+38pl8xBtbOJFVwMczBnFt5zCVZylckdPUCRJCCCFqs+mIcjR+UMcQawAEVOYFyQkx4QASBAkhhHC4n45U3wqzsARBUitIOIIEQUIIIRwqv6SMXadzAeVofFURQRW1guSYvHAACYKEEEI41C/Hsyk3mekY5k+HMP9q3wsPsKwESRAk7E+CICGEEA616Wjl0fjLRQRJTpBwHAmChBBCOIzJZLb2C7s8Hwiw1gqSnCDhCBIECSGEcJhD6Xou5Bvw99JxTVzrGt+PkP5hwoEkCBJCCOEwlq2wazuH4e2hq/F9y0pQfkk5JWVGh85NuB8JgoQQQjhMXUfjLYJ8PPD2UN6aJC9I2JsEQUIIIRwip8DAgbOXgNqTogE0Go01OVrygoS9SRAkhBDCIbYcu4DZDD2jg4gK9qlznDUvSGoFCTuTIEgIIYRDWLbChncPr3ec1AoSjiJBkBBCCLsrN5r4+VjdR+Orku0w4SgSBAkhhLC7vWmX0JeU08rPk76xNY/GVyVNVIWjSBAkhBDC7ixH44d2DUen1dQ7VmoFCUeRIEgIIYTdbbrC0fiqrFWjJTFa2JkEQUIIIewq/VIxRzLz0Wrg+i71J0VD1dYZEgQJ+5IgSAghhF1ZtsL6tWtNa3+vK463JEbnFhowmsx2nZtwbxIECSGEsCvLVtjwbldeBQII9fdGqwGTWSmwKIS9SBAkhBDCbkrKjPx6IgeA4Q3IBwLQaTWESa0g4QASBAkhhLCbHSm5FJcZiQzypmd0UIMfV5kXJLWChP1IECSEEMJuKrfCItBo6j8aX5XUChKOIEGQEEIIuzCbzdak6IZuhVlI/zDhCBIECSGEsItT2YWk5hThqdNwbeewRj22snWGBEHCfiQIEkIIYReWrbBBcaEEeHs06rGSEyQcQYIgIYQQdtHUrTCQnCDhGBIECSGEsLkCQzk7U3KBhtcHqipc+ocJB5AgSAghhM39cjybMqOZDqF+dAwPaPTjI6q0zjCbpWq0sA8JgoQQQtjc5oqtsGHdGr8VBpU5QaXlJvTF5TablxBVSRAkhBDCpqoejW9I1/ja+HjqCPJRkqkvFEhytLAPCYKEEELY1KF0Pef1Bnw9dQyMC2ny80QESa0gYV8SBAkhhLApy1bYtZ3D8PHUNfl5quYFCWEPEgQJIYSwqZ+ONG8rzEJqBQl7kyBICCGEzeQWlrLvzCUAhjXhaHxVUitI2JtDgqAFCxYQFxeHj48P8fHxbN26td7xW7ZsIT4+Hh8fHzp27MiiRYuqfX/x4sUkJibSunVrWrduzYgRI9i5c2e1MS+++CIajabaV1RUlM1fmxBCiEo/H7uA2QzdowKJaeXbrOeKkFpBws7sHgStWrWKWbNm8fzzz7Nv3z4SExMZM2YMaWlptY5PSUlh7NixJCYmsm/fPp577jkef/xx1qxZYx2zefNmpkyZwqZNm0hKSqJdu3aMHDmSc+fOVXuuXr16kZGRYf36/fff7fpahRDC3Vm2wppSJfpy1v5hkhgt7KRxzVya4I033mD69OnMmDEDgPnz57N+/XoWLlzI3Llza4xftGgR7dq1Y/78+QD06NGD3bt3M2/ePMaPHw/Axx9/XO0xixcv5rPPPuPHH39k2rRp1vs9PDwavPpjMBgwGCp/0PR6faNepxBCuDujycyWYxeA5ucDAYQHSE6QsC+7rgSVlpayZ88eRo4cWe3+kSNHsm3btlofk5SUVGP8qFGj2L17N2VlZbU+pqioiLKyMkJCqh/FPH78ODExMcTFxTF58mROnTpV51znzp1LcHCw9Ss2NrYhL1EIIUSFfWkXySsuI9jXk36xrZr9fNJJXtibXYOg7OxsjEYjkZGR1e6PjIwkMzOz1sdkZmbWOr68vJzs7OxaH/PMM8/Qpk0bRowYYb1v0KBBfPjhh6xfv57FixeTmZnJkCFDyMnJqfU5nn32WfLy8qxfZ86cacxLFUIIt2cpkHh913A8dM1/e7H0D8svKaekzNjs5xPicnbfDgPQaDTV/m42m2vcd6Xxtd0P8Nprr7FixQo2b96Mj4+P9f4xY8ZYb/fp04eEhAQ6derEBx98wJw5c2o8j7e3N97e3g17QUIIIWr46YhlK6x5p8Isgnw88PbQYig3cSHfQGyIn02eVwgLu64EhYWFodPpaqz6ZGVl1VjtsYiKiqp1vIeHB6GhodXunzdvHv/617/YsGEDV111Vb1z8ff3p0+fPhw/frwJr0QIIUR9MvNKSM7Qo9HA9V1sEwRpNBqpFSTsyq5BkJeXF/Hx8WzcuLHa/Rs3bmTIkCG1PiYhIaHG+A0bNjBgwAA8PT2t973++uv84x//YN26dQwYMOCKczEYDCQnJxMdHd2EVyKEEKI+lq2wvrGtCA2w3aq6tWq0nBATdmD3I/Jz5sxhyZIlLFu2jOTkZGbPnk1aWhozZ84ElFycqie6Zs6cSWpqKnPmzCE5OZlly5axdOlSnnjiCeuY1157jb/+9a8sW7aMDh06kJmZSWZmJgUFBdYxTzzxBFu2bCElJYUdO3YwYcIE9Ho99913n71fshBCuB3r0fgmdo2vi6VW0IUCCYKE7dk9J2jSpEnk5OTw8ssvk5GRQe/evVm7di3t27cHICMjo1rNoLi4ONauXcvs2bN5++23iYmJ4c0337Qejwel+GJpaSkTJkyodq0XXniBF198EYCzZ88yZcoUsrOzCQ8PZ/DgwWzfvt16XSGEELZhKDfy6wnl4IotjsZXJbWChD1pzJasY1GNXq8nODiYvLw8goKC1J6OEEI4ra3HLzB16U4iAr3Z8dyN9R58aaz//Xicf288xsQBbXltwtU2e17RcjXm/Vt6hwkhhGiWTRWnwoZ1C7dpAARSK0jYlwRBQgghmsWSFG3rrTCokhMkQZCwAwmChBBCNFlKdiEp2YV46jRc2znM5s9feURegiBhexIECSGEaLJNFafCrukQQqCP5xVGN57liHxOgQGjSVJYhW1JECSEEKLJLFthtj4abxEa4I1WAyazEggJYUsSBAkhhGiSQkM5O07lAjDcDvlAADqtxlp8UbbEhK1JECSEEKJJfj2RTanRRLsQPzqF+9vtOpYtMUmOFrYmQZAQQogm2XRUORo/3A5H46uKkP5hwk4kCBJCCNFoZrOZzZZ8IDtthVmES/8wYScSBAkhhGi05Ix8MvJK8PHUMrhjqF2vJf3DhL1IECSEEKLRLKfCru0Uho+nzq7Xkv5hwl4kCBJCCNFolvpA9t4KA8kJEvYjQZAQQohGuVRUyt60i4BjgiCpGi3sRYIgIYQQjbLl2AVMZugWGUibVr52v17V/mFms1SNFrYjQZAQQohGsWyFDese7pDrWVaCDOUm9CXlDrmmcA8SBAkhhGgwo8nMlmNKfaAb7NQq43I+njqCfDwAuCB5QcKGJAgSQgjRYPvPXOJiURmBPh70b9/aYdeVWkHCHiQIEkII0WCWAonXdw3HU+e4txBLXpAkRwtbkiBICCFEg/1UkQ/kqK0wC0utIOkfJmxJgiAhhBANcl5fwqF0PRoNDO3mmKRoC6kVJOxBgiAhhBANYtkKu6ptK8ICvB16bakVJOxBgiAhhBANYtkKG+7gVSCokhMkidHChiQIEkIIcUWl5SZ+OZ4NwA0OqBJ9Oct2mDRRFbYkQZAQQogr2nU6l8JSI2EB3vSOCXb49SubqEpOkLAdCYKEEEJckbVKdLdwtFqNw68fHqBsh+lLyikpMzr8+qJlkiBICCHEFf1UkRStxlYYQJCvB14eyluWHJMXtiJBkBBCiHql5hRy6kIhHloN13UJU2UOGo2myjF5CYKEbUgQJIQQol6WrbABHVoT5OOp2jysydFSK0jYiARBQggh6vXTUaVh6nAHV4m+nNQKErYmQZAQQog6FZWWs/1UDqBePpCF1AoStiZBkBBCiDptO5FDabmJtq196RwRoOpcKrfDJAgStuGh9gTcjskIqdug4DwEREL7IaDVqT0rIYSo1aajlirREWg0jj8aX5W1VpDkBAkbkSDIkQ5/DeueBn165X1BMTD6Veg5Tr15CSFELcxmszUpWu2tMJCcIGF7DtkOW7BgAXFxcfj4+BAfH8/WrVvrHb9lyxbi4+Px8fGhY8eOLFq0qNr3Fy9eTGJiIq1bt6Z169aMGDGCnTt3Nvu6dnX4a1g9rXoABKDPUO4//LU68xJCiDocPZ9Pel4J3h5aBncMVXs6lTlBEgQJG7F7ELRq1SpmzZrF888/z759+0hMTGTMmDGkpaXVOj4lJYWxY8eSmJjIvn37eO6553j88cdZs2aNdczmzZuZMmUKmzZtIikpiXbt2jFy5EjOnTvX5OvalcmorABhruWbFfete0YZJ4QQTmLTEeVU2JBOofh6qb9tb8kJyikwYDTV9vtUiMbRmM1mu/5LGjRoEP3792fhwoXW+3r06MHtt9/O3Llza4x/+umn+frrr0lOTrbeN3PmTA4cOEBSUlKt1zAajbRu3Zq33nqLadOmNem6l9Pr9QQHB5OXl0dQUFCDX2+tUrbCB7dcedx930JcYvOuJYQQNjJxURI7T+fy8m29mJbQQe3pYDSZ6fL8Wkxm2Pn8jdaVISGqasz7t11XgkpLS9mzZw8jR46sdv/IkSPZtm1brY9JSkqqMX7UqFHs3r2bsrKyWh9TVFREWVkZISEhTb6uwWBAr9dX+7KZgvO2HSeEEHaWV1TGnrSLgPr1gSx0Wg0h/pZGqrIlJprPrkFQdnY2RqORyMjIavdHRkaSmZlZ62MyMzNrHV9eXk52dnatj3nmmWdo06YNI0aMaPJ1586dS3BwsPUrNja2Qa+xQQIirzymMeOEEMLOfj5+QVl5iQggNsRP7elYyTF5YUsOSYy+/Fil2Wyu96hlbeNrux/gtddeY8WKFXz++ef4+FRfGm3MdZ999lny8vKsX2fOnKn7BTVW+yHKKTDqOV4a1EYZJ4QQTsByKmy4E5wKq8pyTF6CIGELdg2CwsLC0Ol0NVZfsrKyaqzSWERFRdU63sPDg9DQ6qcT5s2bx7/+9S82bNjAVVdd1azrent7ExQUVO3LZrQ65Rg8UGcg1O9eqRckhHAKJpOZzceco1XG5SqbqEqtINF8dg2CvLy8iI+PZ+PGjdXu37hxI0OG1L7qkZCQUGP8hg0bGDBgAJ6elY37Xn/9df7xj3+wbt06BgwY0Ozr2l3PcTDxQwiKrn6/p6/y5/aFcP6Q4+clhBCXOXD2ErmFpQR6ezCgQ2u1p1ONHJMXtmT3Yolz5sxh6tSpDBgwgISEBN59913S0tKYOXMmoGxDnTt3jg8//BBQToK99dZbzJkzhwcffJCkpCSWLl3KihUrrM/52muv8be//Y1PPvmEDh06WFd8AgICCAgIaNB1VdFzHHS/uXrF6Dbx8PEESP0VPr4LZvxQsXUmhBDq2FTRMDWxaxieOufqrmQtmCiJ0cIG7B4ETZo0iZycHF5++WUyMjLo3bs3a9eupX379gBkZGRUq90TFxfH2rVrmT17Nm+//TYxMTG8+eabjB8/3jpmwYIFlJaWMmHChGrXeuGFF3jxxRcbdF3VaHU1j8FPWg7LRkH2Mfh4IjzwPXgHqjM/IYTbs+YDOdlWGFRJjC6QIEg0n93rBLkqm9YJaoiLp2HJCCi8AJ1uhLtXgc7zig8TQghbysovYeD//Qg4Zy2ePam5jF+YRGyIL1ufukHt6Qgn5DR1gkQjtO6gBD6efnDyR/huDkh8KoRwsM0VW2FXtQ12ugAIquQE6Q3IZ3jRXBIEOZM28TB+KWi0sPdD2PpvtWckhHAzlq2wYU64FQaVOUGGchP6knKVZyNcnQRBzqb72Mrj9D/9A377VN35CCHcRpnRxNbjSlFaZ+gaXxsfTx2BPko66wU5Ji+aSYIgZzToIUh4TLn91aNw+hd15yOEcAu7TudSYCgn1N+Lq9oEqz2dOlXWCpLkaNE8EgQ5q5v+AT3GgbEUVt4NF46qPSMhRAtnyQca2i0crbaeCvcqs+QFSdVo0VwSBDkrrRbufBfaDoSSPKWWUL40WBVC2M9PFflAzroVZiG1goStSBDkzDx9YcpKCOkIl9Lgk4lQWqj2rIQQLdCZ3CJOZBWg02pI7BKu9nTqJa0zhK1IEOTs/EPhns/ANwQy9sNn08FkVHtWQogWZtNRZRUovn1rgn2du0aZNFEVtiJBkCsI7aSsCOm84dj38P3TUkNICGFTPzlxlejLSf8wdRhNZpJO5vDV/nMknczBaHL99yG7t80QNtJukJIj9OkfYNdiaN0ehvxJ7VkJIVqA4lIjSSdzAOfPB4IqOUESBDnMuoMZvPTNYTLyKrcgo4N9eOHWnozuHV3PI52brAS5kl63w8h/KLc3/BUOfanmbIQQLUTSqWwM5SZign3oGhmg9nSuyJoTpJecIEdYdzCDR5bvrRYAAWTmlfDI8r2sO5ih0syaT4IgV5PwGAx8SLn9+UOQtkPd+QghXN6mI8rR+OHdI9BonPdovIVlO0xfUk5JmeRI2pPRZOalbw5T28aX5b6XvjnssltjEgS5Go0GRr8C3caC0QArJkPOSbVnJYRwUWaz2WWOxlsE+Xrg5aG8fUlytH3tTMmtsQJUlRnIyCthZ0qu4yZlQxIEuSKtDsYvgZh+UJwLy8dDYbbasxJCuKDjWQWcu1SMl4eWhE6hak+nQTQaDeEBkhfkCA0tQ+Cq5QokCHJVXv5w92po1Q4upigrQmXFas9KCOFiLA1TEzqG4uflOmdlKo/Ju+abr6uwbD3aapyzkSDIlQVEKDWEfILh7C4lR8hkUntWQggXUnk03rkLJF7Okhwt22H2NTAuhOhgH+rKFNOgnBIbGBfiyGnZjARBri68G0z+BHRekPw1bPyb2jMSQrgIfUkZu1MvAnBD90iVZ9M4UivIMXRaDS/c2rPW71kCoxdu7YnOiXvN1UeCoJagw3Vw2wLldtJbsONddecjhHAJW49lYzSZ6RTuT7tQP7Wn0yjSP8xxRveOZuG9/WtUEo8K9mHhvf2lTpBwAlfdBTf+Xbm97mk48p268xFCOD1XqhJ9Oekf5lije0czLaF9tftWPDjYpQMgkCCoZbluDvS/D8wmpcfY2T1qz0gI4aRMJjNbjrnW0fiqrInRBbIS5ChnL1Y/fJOaW6TSTGxHgqCWRKOBm9+AziOgvBhWTIKLp9WelRDCCf1+Lo/sglICvD0Y0MH1klqtOUGyHeYwp3MKAaw1mk5dKFBzOjYhQVBLo/OAu96HqD5QeAGWT4Ai1yxiJYSwH0vX+Os6h1nf1FyJJScou8DgstWKXU1ajrLyM7ijUk8qJbtQzenYhOv9yxdX5h0Id38KQW0g5zisuhfK5dOSEKKSpT7Q8O6udTTeItTfC40GTGbIKZTfb/aWX1JGTmEpAMO6Kv9mTl2QIEg4q6BouOdT8A6C1F/hy0elhpAQAlBq6xw4mwe4ZlI0gIdOS6i/1ApylNSKVaCwAC+uahsMyEqQcHaRvWDSR6D1gIOfwU//UHtGQggnsOWY0jC1d5sgIoJcs9IvVD0hJkGQvVmCoHYhfsSF+QNw7lIxxaWu3cBWgqCWruMwGPc/5fYvb8Du91SdjhBCfZtc+Gh8VZa8oAuSHG13qbnKqk+HUH9C/L2sNYMsydKuSoIgd9D3bhj6jHL7u7/A8Y3qzkcIoZoyo4mfjysrQcNd8Gh8VVIryHFSsytWgkL90Gg01tUgV88LkiDIXQx7Bq6+G8xGWH0fZBxQe0ZCCBXsSb1Ifkk5If5eXN22ldrTaRZLrSDZDrO/qitBAB3DlT9Tsl37mLwEQe5Co4Fb/wtx10NZIXw8ES6dUXtWQggHsxyNH9o13GX7PVlYagVJYrT9WXOCKtqrdLSsBLl4crQEQe7EwwsmfgThPaAgEz6ZCCV5as9KCOFAlUfjXXsrDCQx2lFKyoxk5ClbjpaVoLiwAEC2w4Sr8W2lHJ0PiIKsw7BqKpSXqj0rIYQDnL1YxLHzBWg1cH2XMLWn02zhkhPkEGcq2mMEenvQ2k9JiLZsh526UIDZ7LrFKiUIcketYuGe1eAVAClb4Js/gwv/IxZCNMymo0pCdHz71rTy81J5Ns1XtXWGK78ROzvLVlj7MCUpGipXhPQl5eQWuu4HaQmC3FX01Up7DY0ODnwCm19Re0ZCCDuzbIUNc/Gj8RaWxGhDuYl8Q7nKs2m5LMfg24f4W+/z9dLRppUv4NpFEx0SBC1YsIC4uDh8fHyIj49n69at9Y7fsmUL8fHx+Pj40LFjRxYtWlTt+4cOHWL8+PF06NABjUbD/PnzazzHiy++iEajqfYVFRVly5fl+rrcBDf/W7m95RXY97G68xFC2E1JmZFtJ7MB1+waXxsfTx2BPh6ANFK1p7SK7bD2FUnRFi3hmLzdg6BVq1Yxa9Ysnn/+efbt20diYiJjxowhLS2t1vEpKSmMHTuWxMRE9u3bx3PPPcfjjz/OmjVrrGOKioro2LEjr7zySr2BTa9evcjIyLB+/f777zZ/fS5vwP1w3Wzl9jePw8lN6s5HCGEXSadyKCkzER3sQ/eoQLWnYzOSF2R/pyu2wyxbYBbWvCBZCarbG2+8wfTp05kxYwY9evRg/vz5xMbGsnDhwlrHL1q0iHbt2jF//nx69OjBjBkzeOCBB5g3b551zDXXXMPrr7/O5MmT8fb2rvPaHh4eREVFWb/Cw12zUaDd3fB36D0eTOWwehqcP6T2jIQQNra5ylaYJa+jJbCcEJNj8vaTVrEd1q7OlSDXrRVk1yCotLSUPXv2MHLkyGr3jxw5km3bttX6mKSkpBrjR40axe7duykrK2vU9Y8fP05MTAxxcXFMnjyZU6dO1TnWYDCg1+urfbkNrRZuXwjtrwWDXqkhpM9Qe1ZCCBsxm838VFEfqKVshVlIrSD7KjeaOHuxGKhtJUg5Ji85QXXIzs7GaDQSGRlZ7f7IyEgyMzNrfUxmZmat48vLy8nOzm7wtQcNGsSHH37I+vXrWbx4MZmZmQwZMoScnJxax8+dO5fg4GDrV2xsbIOv1SJ4eMOk5RDaBfRn4ZO7wJCv9qyEEDZw8kIBZ3KL8dJpGdIpVO3p2JTUCrKv9EsllJvMeHtorf+tLSwFE1NzijCaXPN0nkMSoy9fejWbzfUux9Y2vrb76zNmzBjGjx9Pnz59GDFiBN999x0AH3zwQa3jn332WfLy8qxfZ864YTVlvxC49zPwD4fM3+HTP4CxcatvQgjnYTSZSTqZw1s/nQBgYFxr/L09VJ6VbVlzgvSSE2QP1pNhoX5oL6swHtPKFy8PLaVGE+cqVotcjV2DoLCwMHQ6XY1Vn6ysrBqrPRZRUVG1jvfw8CA0tOmfYPz9/enTpw/Hjx+v9fve3t4EBQVV+3JLrTvA3avAwxdO/KA0XJX6G0K4nHUHM7ju1Z+Ysng7X+5PB+C3s3msO9iytrqlf5h9pVacDGsX4l/jezqthg4VeUKnXLSHmF2DIC8vL+Lj49m4sXrX8o0bNzJkyJBaH5OQkFBj/IYNGxgwYACenp5NnovBYCA5OZno6OgmP4fbaBMPE5YCGtj7AfzyhtozEkI0wrqDGTyyfK+11YGFvqScR5bvbVGBkOQE2VdqtqVxql+t33f1Y/J23w6bM2cOS5YsYdmyZSQnJzN79mzS0tKYOXMmoGxDTZs2zTp+5syZpKamMmfOHJKTk1m2bBlLly7liSeesI4pLS1l//797N+/n9LSUs6dO8f+/fs5ceKEdcwTTzzBli1bSElJYceOHUyYMAG9Xs99991n75fcMnS/Gca8qtz+8WX47VN15yOEaBCjycxL3xymvvXbl7457LI5HJeTnCD7Sq2jRpCFqydH231zeNKkSeTk5PDyyy+TkZFB7969Wbt2Le3btwcgIyOjWs2guLg41q5dy+zZs3n77beJiYnhzTffZPz48dYx6enp9OvXz/r3efPmMW/ePIYOHcrmzZsBOHv2LFOmTCE7O5vw8HAGDx7M9u3brdcVDTDoYbiUBklvwVePQlAMdLhW7VkJIeqxMyW3xgpQVWYgI6+EnSm5JLSAJGlLTlBecRklZUZ8PHUqz6hlSbXmBNXcDoMqK0Euuh3mkAy5Rx99lEcffbTW773//vs17hs6dCh79+6t8/k6dOhwxT4xK1eubNQcRR1u+ocSCCV/DSvvhukbIbyr2rMSQtShoUUDW0pxwWBfTyU5t9zEhXwDsSG1r1iIxjOZzHVWi7boVFEwMUW2w0SLpNXCne9C24FQcgk+Hg8FWWrPSghRB0uOjK3GOTuNRkN4QEXBxALZErOlrHwDJWUmPLQaa5+wy8WFKdth6XklFJW6Xv82CYLElXn6wpQV0DpOWRX6ZCKUumbUL0RLNzAuhOhgH+oqKKIBooN9GBgX4shp2ZX1hJj0D7Mpy1ZYm9a+eOhqDxdC/L1o5accWjqdXeSwudmKBEGiYfzD4N414BsC6fvgs+lgMqo9KyHEZXRaDS/c2rPWxGhLYPTCrT3RaVtO6wzrSlAL2eJzFqk5lq2w2vOBLFw5L0iCINFwoZ1gykrQecOx72HdM1JDSAgndGOPSOun86qign1YeG9/RvduWaVCpFaQfaTmViRFXyHPyhIEuWJeUMsqHSrsr90guPMdpZr0znehVXsY8pjasxJCVPHtb+lcKioj1N+LNyZdzaWiMiIClS2wlrQCZCG1guzjdE79SdEWnVz4mLwEQaLxet0BeWdhw1+Vr1ax0PM2tWclhEBpM/TOFqVZ9P3XdmBo15bVMLU2UivIPtIauR120gWDINkOE02T8Bhc8yBghs8fgrQdas9ICAH8ciKbI5n5+HrquHewe9RFs/YPk5wgmzGbzda+YXVVi7boaD0mX3DF8jXORoIg0TQajVJRuusYKC+BFZMh56TasxLC7b37s7IKNOmaWFr5eak8G8ewbIfJ6TDbuVRURn6JcuT9SrWXOoT6o9EobVlyCksdMT2bkSBINJ1Wp/QYi+kHxbnw8QQozFF7VkK4rUPpeWw9no1WA9Ovi1N7Og5jSYzOLjC0mHYgarOsAkUH+1yxCrePp46YYKWOkKvlBUkQJJrHyx+mrILgdpB7SlkRKitWe1ZCuKUlW1MAGNsn2q0qJ4f6e6HRgMkMuS62EuGsLMfj2zXw35FlS+zUBdc6Ji9BkGi+wEi49zPwCYazO5UcIZNJ7VkJ4VbSLxXzzYF0AB66vqPKs3EsD52WUH9l60/ygmzDEgR1uEJStEVHa60gWQkS7ii8G0z+BHReSp+xjX9Te0ZCuJVlv6RQbjIzuGMIV7VtpfZ0HC7ckhckJ8RswlItut0VkqItrAUTXaxWkARBwnY6XAe3LVBuJ70FOxerOx8h3ERecRkrdqYB8PD1nVSejTosx+QvSHK0TaTmNnIlyEVrBUkQJGzrqrvghopVoO+fgiNr1Z2PEG5gxc40CkuNdIkIYFi3cLWnowprECRNVG3CshJ0pUKJFpaVoNScQpdKTpcgSNhe4l+g/zQwm+CzB+DcHrVnJESLVVpu4r1flYToB6/viEbT8ipCN4S1VpBecoKaq8BQTnaBkmDe0O2wmFa+eHloKTOaOXvRdRqpShAkbE+jgZvfgE43QnkxfDIJLp5We1ZCtEhf7T/Heb2BiEBvbusbo/Z0VCNVo23HsgoU4u9FkE/NHnS10Wk1xIW6XnK0BEHCPnSeMPEDiOwDhRfg47ug+KLasxKiRTGbzSzeammREYe3R/31XFqyiCBJjLaVtAb2DLucKyZHSxAk7Mc7EO5ZDUFtIPsYrLwXyuUXlBC2svnYBY6dL8DfS8fdg9qpPR1VWXOCJAhqNmvj1EbWmrK2z8h2nVpBEgQJ+wqKgXs+Be8gSP0Fvvqj1BASwkberWiUOnlgO4J9G7Zt4bRMRkjZCr9/pvxpMjbq4dbWGfklLte/ytmk5VqSoht2MszCFVeCpIu8sL/IXjDxQ6Wtxu+fQqt2cOPf1Z6VEC7t97N5JJ3KQafV8ICrt8g4/DWsexr06ZX3BcXA6Feh57gGPYUlMbqkzES+obzBuSyiptPZTdsOc8Vj8rISJByj03C49U3l9tZ/w+731J2PEC7u3YpcoFuviqZNK1+VZ9MMh7+G1dOqB0AA+gzl/sNfN+hpfL10BHorn+ulkWrzpOVagqDGrQRZqkZn5JVQVFpu83nZgwRBwnH63QNDn1Zuf/cXOL5R3fkI4aLO5Bax9vcMQDkW77JMRmUFiNq2ryruW/dMg7fGwoMkL6i5DOVG0vOU/o+NXQlq7e9Faz9lBc5VVoMkCBKONexZuHoKmI3w6R8g4ze1ZySEy1n2awpGk5nrOofRKyZY7ek0Xeq2mitA1ZhBf04Z1wCVx+SlVlBTncktxmyGAG8Paz+2xrDkBUkQJERtNBplWyzueigtgE8mQt5ZtWclhMvIKypj1a4zQAtolFpw3qbjLP3DZCWo6aw9w0L8mlR4My5MyQtyleRoCYKE43l4wcSPILwH5GcoNYRK8tSelRAuYfmOVIpKjXSPCiSxS5ja02megEibjpOCic1n7R4f1ritMIvKY/ISBAlRN99WytH5gCjIOqwkQBrL1J6VEE7NUG7kvV9PA8oqkMu3yGg/RDkFRl2vQ6PUGWs/pEFPJ7WCmq9yJahxSdEWHa3H5F2jVpAEQUI9rWKVYoqe/nBqM3zzZ5D6HkLU6ct958guMBAV5MOtV7eAFhlanXIMvtbE6IrAaPQryrgGiAiSnKDmquwe39SVoIrtsOxCl6jXJEGQUFf01XDX+6DRwf6PYcuras9ICKdkMpl592flWPwD13XAU9dCfn33HAfdb6l5f1CMUl+sgXWCAMIDKgomyhH5JrNshzW0cerl2of6odFAfkllE1Zn1kJ+ioRL6zoSbp6n3N48F/Z/ou58hHBCm45mcfJCIYHeHkwZ2IJaZJjNcOGIcvva2aCpeFu679tGBUBQdSVIgqCmKDearB3gOzSyRpCFj6fOWrfKFfKCJAgSzmHAA3DtLOX2139StseEEFbvVKwC3T2oHYEtqRryhaOQcwJ0XpA4B6L7Kven7230U1lygvKKyzCUN67thlCKHJYZzXh5aImqaEjbFHEulBckQZBwHje+AL3Hg6kcVk2F84fVnpEQTmH/mUvsTMnFQ6vh/mtdvEXG5Y58o/zZcRj4BEHsQOXvZ3c1+qmCfT3xqtgmlOToxrNuhYX4odU2Pem+kwu1z5AgSDgPrRZuXwjthoBBrxyd12eoPSshVPfuzycBGNc3hqjgpn9Cd0rJ3yp/WvKC2l6j/HlmZ6OfSqPRWHuIyZZY452uOBnW2O7xl7OuBEkQJEQjeXjD5I8htAvozyrFFA35as9KCNWk5hSy7mAm0AKKI17u0hnI2K/kAXUbq9xnCYIyf4Oy4kY/pTUIkuToRmtqz7DLyXaYEM3hF6LUEPILU34RfvoHMLpGMz4hbG3pLymYzDC0azjdo4LUno5tHflO+TN2MASEK7dbtVOKI5rKIX1/o5+yslaQHJNvrNMVKzeN7Rl2OUvBxLTcIsqNpmbPy54cEgQtWLCAuLg4fHx8iI+PZ+vWrfWO37JlC/Hx8fj4+NCxY0cWLVpU7fuHDh1i/PjxdOjQAY1Gw/z5821yXeFEQuLg7tXg4QsnfoC1f5EaQsLt5BaWsnp3C2mRUZsjFVthPaockddoKleDzjZ+SyxCmqg2WeVKUPOCoJhgX7w9tJQZzZy92PjVPEeyexC0atUqZs2axfPPP8++fftITExkzJgxpKWl1To+JSWFsWPHkpiYyL59+3juued4/PHHWbNmjXVMUVERHTt25JVXXiEqKsom1xVOqG08TFgKaGDP+/DLf9SekRAOtXx7KiVlJnrFBDGkU6ja07GtwhxI/VW5fXmdoGYkR1trBUkQ1Chms9maGN3c7TCtVuMyjVTtHgS98cYbTJ8+nRkzZtCjRw/mz59PbGwsCxcurHX8okWLaNeuHfPnz6dHjx7MmDGDBx54gHnz5lnHXHPNNbz++utMnjwZb29vm1zXYDCg1+urfQkn0P1mpWIswI8vwe+fqTsfIRykpMzIB9tOAy2kRcbljn0PZhNE9YHW7at/r21FEHRmV6NXgKVWUNNcyDdQXGZEp9VY6/w0hyUIOunkeUF2DYJKS0vZs2cPI0eOrHb/yJEj2bZtW62PSUpKqjF+1KhR7N69m7KyhvWWasp1586dS3BwsPUrNja2QdcSDjB4Jgz+o3L7y0fg9K/qzkcIB1iz9yw5haW0aeXL2D7Rak/H9qynwm6t+b2YvqD1gIJMyDvTqKetbKIqOUGNcbpiFSimlQ9eHs0PDVylkapdg6Ds7GyMRiORkdU7AEdGRpKZmVnrYzIzM2sdX15eTnZ2tt2u++yzz5KXl2f9OnOmcT94ws5G/hN63ArGUlh5N1w4pvaMVGU0mUk6mcNX+8+RdDIHo0nypVoSk8nMkq0pADxwXVzLaZFhYSiAkz8pt7vfXPP7nr7KChE0+qh8RKCyHSY5QY1jaZza1ErRl4sLq+ghdsG5gyAPR1zk8mVcs9lc79JubeNru9+W1/X29q5za004Aa0W7lwMH9yq5Al8PAFm/AABEWrPzOHWHczgpW8Ok5FX+Uk3OtiHF27tyejeLXDFwA1tTD5PSnYhQT4eTL6mBa5Kn/gBjAZo3QEie9U+pu1ASN+n/Lz3mdDgp7Yckc8uKMVoMqNrRtE/d1K1UKItyEoQEBYWhk6nq7H6kpWVVWOVxiIqKqrW8R4eHoSGNiwxsCnXFS7A0xemrITWcXApFT6ZBKXO/QNma+sOZvDI8r3VAiCAzLwSHlm+l3UHpbhkS2BplHrv4Pb4ezvks6pjHalSILGuD7eW5OhGrgSFBXih0SirpbmFzt/A01lUdo+3zUpQx4qcoEx9CYUG5y1xYtcgyMvLi/j4eDZu3Fjt/o0bNzJkyJBaH5OQkFBj/IYNGxgwYACeng3rl9OU6woX4R8G93wGvq2V3kJrZoDJPXoEGU1mXvrmMLVtfFnue+mbw7I15uL2pOayJ/UiXjotfxjSQe3p2F55KRzboNzuUUs+kEUTiyZ66LSE+nsBkhfUGJbtsKZ2j79cKz8vQir+PzjzapDdN5rnzJnDkiVLWLZsGcnJycyePZu0tDRmzpwJKLk406ZNs46fOXMmqampzJkzh+TkZJYtW8bSpUt54oknrGNKS0vZv38/+/fvp7S0lHPnzrF//35OnDjR4OsKFxbWWVkR0nnD0bWw7lm3qCG0MyW3xgpQVWaUBog7U3IdNylhc5ZVoNv7xRDRjCaWTuv0z2DIA/+IylNgtalaNDHjQKMuES55QY1m2Q6z1UoQ4BLH5O2+zjpp0iRycnJ4+eWXycjIoHfv3qxdu5b27ZUjkRkZGdVq98TFxbF27Vpmz57N22+/TUxMDG+++Sbjx4+3jklPT6dfv37Wv8+bN4958+YxdOhQNm/e3KDrChfXbjDc+Y5STXrnO8oR24Q/qj0ru2rop1r59Ou6Tl0oYMPh8wA8mNgCiyNCZZXo7mOVXL+6WIomHvlW2RJrN7jBlwgP9CY5Q47JN9SlolLyipXT17bKCQIlCNqTetGpk6Mdstn86KOP8uijj9b6vffff7/GfUOHDmXv3r11Pl+HDh2sydJNva5oAXrdofQe2vg3WP88BLeFnrepPSu7MJnMHDvfsB5qltMxwvUs+SUFsxlu6B5Bl8hAtadjeyYTHFmr3K7taPzlLEFQIytHV7bOkCCoISyrQJFB3vh66Wz2vJXJ0c5bK6gFZtwJtzLkT0qS9K4l8PlDEBhdmVDZQvxyPJu53ydzKP3KBTxb+3kyMC7EAbMStpZdYGDNnrNAC22RAXBut1L7xzsI4q6/8vjYy4omNvCEsLVWkF5WRRuisnu87bbCoDI52pm7ybew4hPC7Wg0MPpV6DoayktgxWTIOan2rGzicLqeact2cu/SHRxK1xPo7cHtfWPQAHW9FVwqKuPLfeccOU1hIx8mpWIoN3F122AGtdRANvkb5c8uI8HD68rjY/o1qWiidSWoQFaCGiItxzY9wy7XMVypFZRyobBBuzdqkCBIuD6dB0xYBtF9oShHqSFUmKP2rJos/VIxf1l9gJv/t5Wfj13AU6fh/ms7sOWp4cyf3I+F9/YnKrj6lld0sA8JHUMxA3/59ADLt6eqM3nRJMWlRj5KOg3Agy2xRQYoKzm1NUytT9WiiY3oI2ZJKM/SSxDUEKftFAS1C/FDo4F8Q7nTBqSyHSZaBi9/pev8khGQewpWToFpXym/RF1EXnEZCzef5L1fUzCUmwC4+aponhrVrVpDw9G9o7mpZxQ7U3LJyi8hItCHgXEhaICXvjnEB0mp/PXLg5SUGZnRUpNrW5jP9pzhYlEZsSG+jO5Ve1Nol5eVrPxs6ryh800Nf1zba5SiiWd2Qe/xVx5PZcFESYxumLTciu0wG54MA/Dx1NG2tS9ncotJuVDolPmKEgSJliMwEu75FJaNhDM74IuZMOG9+k+gOAFDuZHl29P430/HuVSknNAYGBfCs2O6069d61ofo9NqSKilq/iL43rh6+XBoi0n+ed3yRQajDx+Y+eWubLQQhhNZpb8orTImHFdRzxaWosMC8sqUKfh4B3Q8Me1HQg7321UcnTV/mFX6lAg7LcSBEr7jDO5xZzKLmRQx4YVPHakFvrTJtxWRHeY/AloPeHwl/DD39WeUZ1MJjPfHEhnxBtb+Me3h7lUVEbniACWTBvAqocG1xkA1Uej0fD06G785aauAPznh2O8su6I0+7HC1h/KJPUnCJa+Xly14C2ak/Hfiz5QN0buBVmEVtRNDHjNyhrWKKzZcWhpMxEgRNXK3YGRaXl1lN0tk6MhsrkaGetFSQrQaLl6XAd3L4APn8Qtv0PWrWHgQ+qPatqkk7m8Mr3yRw4mwcoy/dzburKXfFtm70SoNFo+NONXfD10vHP75J5Z8spSkqNvHBrL7TSR8mpmM1m3qkojjh1cHv8vFror+SLqUrlZ40Wuo1p3GNbtVcKKxZmQcb+BtUL8vXSEejtQb6hnKx8A4E+Des24I4sx+Nb+XkS7Gf7/06WY/LOWiuohf7ECbd31UTl6PxP/4Tvn1JqCDX2l68dHDufz6vfH+HHI1kA+HvpeHhoJ2Ykxtn8DXBGYkd8vXT89cuDfJCUSlGpkVfGXyUNJZ3IrtMXOXDmEl4eWqYldFB7OvZjKZDYbojS+qYxNBrlqHwjiyaGB3orQZDeQKfwRmy/uZlU61aY7VeBoLJq9CknrRUkQZBouRKfgEtpsPdD+OwB+MN30Ka/KlM5ry/hPxuPsXr3GUxmJafn7oHtePzGLtYkTnu4Z1B7fD11PPHpAT7dc5biMiP/mdQXz5aad+Ji3v1ZKecwvn9bu/47UF1jT4Vdzlo0seEnxMIDvTmVXSgV1K8g1VojyPb5QFB5TD4tp4hyo8npct4kCBItl0YDN78Beefg5I9K1/kZPygtNhwkv6SMd38+xeKtpygpU058je4VxZOjuzns0+md/dvi46nj8RX7+Pa3DErKTLx1dz98PG1XGVY03omsAn5IzkKjgRmJcWpPx34KsyEtSbnd/eamPYelmerZhhdNtByTl6rR9avsHm+fICg6yAcfTy0lZSbOXCy2rgw5C+cKyYSwNZ0n3PU+RPZWcgo+vguKL9r9smVGEx8mnWbY65v5308nKCkzEd++NWseSWDR1HiHL8+P7RPNu9Pi8fLQ8kPyeR78cDfFpUaHzkFUt2Srkgs0okdky96uOboWzCaIvlppitoUlqKJ+RmQd7ZBD5HWGQ1T2T3ePsGJVquxNmV1xvYZEgSJls8nSDk6H9QGso/Cynuh3D6/GM1mM9//nsHI//zM3786RE5hKR3D/Fl0bzyfzUwgvr16lYBv6B7J+3+4Bj8vHVuPZ3Pfsp3kl5SpNh93lpVfwud7lcreD7fUFhkWyRVbYY09FVaVl5/yQQYafFReagU1TGX3ePusBIFzJ0dLECTcQ1CMUkzRKxBSf4GvHlOW1W1o1+lc7ly4jUc+3ktKdiFhAV784/berJ99PaN7RzlFrZIhncP4aPpAAr092Hk6l3uX7OBSUana03I7H25LpdRool+7VsS3b3wpBJdhyIdTm5TbzQmCoHofsQaoWitI1K603ET6pWIA2tkzCApTVjqdsYeYBEHCfUT1hkkfKsvqv69WTo7ZwImsAh76cDd3LUpiX9olfD11PH5jFzY/OZypg9s7XRJyfPsQVjw0mNZ+nhw4m8fkd7eT7aQl7VuiQkM5H1W0NXm4pbbIsDi+EYylENIRIno077naVgRBDVwJstQKku2wup29WITJDH5eOsID7JeYbz0hdkG2w4RQV6cb4Nb/Kre3zoM97zf5qbLyS3j+i98ZNf9nNhw+j1YDUwa2Y8uTw5hzU1cCvJ333EHvNsGsfCiBsABvjmTmM/GdJDLz5BOzI6zefYa84jI6hPpxU88W2iLD4kiVrbDmBnuNLJoYESTbYVdi2QpTenzZLxi3bIc5Y8FECYKE++l3L1z/lHL72zlw/IdGPbzQUM5/fzjOsNc38/GONIwmMyN6RLJ+1vXMvbOP9VSKs+sWFcinMxOICfbh1IVC7npnG2cqTooI+yg3mlhqaZGR2LFl12wqN8CxDcrtHrc2//latQf/cDCVQcaBKw63rGxcKirDUC6HAGpjSYruYKekaAvLdth5vYFCJ6vgLUGQcE/Dn4OrJoPZCJ/ep3y6vIJyo4lPdqQxbN5m/vPDMYpKjVwd24pVDw1myX0D6BIZ6ICJ21ZcmD+rZybQPtSPM7nF3LUoiZNOuGTdUnx/MJOzF4sJ8fdiQnwLbpEBkLIVSvMhIAraDGj+82k0jdoSa+XniVfFVrRsidXOnj3Dqgr28yTU3wtwvtUgCYKEe9JoYNz/oEMilBbAJxPrPHprNpvZePg8o+b/zHNf/M6FfAPtQ/14++7+fPnoEKdsCtgYbVv7sfrhBDpHBJCpL2HSO0kkZ+jVnlaLYzabebeiRca0hPYtv07TEUuvsLG2a2Js2RI7c+UgSKPRyAmxK0jLtW+16KoqK0dLECSEc/DwgknLIbyHUn/k44lQkldtyL60i0x6ZzsPfribkxcKae3nyYu39mTj7KHcfFV0i0lqjQzyYdVDg+kZHUR2QSmT393OgTOX1J5Wi5J0Koffz+Xh3dJbZACYjHBkrXK7uafCqrKuBO1q0OnOcKkVVK/TlmrRdl4JAudNjpYgSLg331Zwz2oIiISsQ7D6PjCWcTq7kD9+vJc7Fmxj5+lcvD20PDqsE1ueGs4fro3Dy6Pl/eiEBniz4sHB9I1tRV5xGfcs2cGu07lqT6vFWFyxCnTXgLaEVGwNtFhndynFSb2DldVWW2lk0URZCaqb0WTmbK5yPN4RQZClfYZshwnhbFq1U2oIefrDqU3sW3AfI97YzHe/Z6DRwF3xbdn85DCeGt2doBbejTrYz5PlMwYxKC6EAkM5U5fuYOvxC2pPy+UdO5/PpqMXlBYZ17Xw4ogAyRVbYV1HKSuutlKtaOKV6wVZq0br5eTj5TLyiik1mvDUaYgO9rX79SpXgiQIEsLpFIf14dtu/8Jo1tAv5zse1XzOsG7hfP/nRF6/62qH/JJwFgHeHrx//0CGdg2npMzE9Pd388Ph82pPy6VZcoFG94qig5P1TrI5s7n5DVPrU7WP2BVYagXJSlBNaRVJ0bEhfg45pdipyjF5s40L1TaHBEHCrRlNZlbvOsOweZt4bHc4fy+/H4A5np/xfr+TdI8KUnmG6vD10vHutHhG9Yqk1Ghi5vI9fPtbutrTcknn9SV8tV9pkfFgS2+RAXD+EFw8DR4+0HmE7Z/fWjn6ysnRllpBkhNUk/VkmJ26x1+uXagfWg0UGMqd6v+HBEHCLZnNZjYdyWLsf7fy1JrfOK830KaVLwPvegLzkFnKoK8fg1NbVJ2nmrw9dLx1d39u6xtDucnM4yv28enuM2pPy+W89+tpyoxmrunQmv7tWnCLDAvLKlCnG8DLDqtelpWgjANXLJpoqRUkK0E1peZakqIdszLp7aGjbWsl4HKmE2LOW9JWCDv57ewl5q49QtKpHACCfT350w2dmZrQHm8PHZheAP0ZOLgGVk2F6eubX/LfRXnqtLwxsS++njpW7jrDk5/9RkmZkakt/XSTjRQYyvl4h9Ii46HrO6k8GwexRcPU+rTuoBRNLLygBELtBtU5tLJqtOQEXS412zE1gqqKC/MnLbeIlOxCBjtJaRFZCRJu40xuEY+v2Me4t34l6VQOXh5aHr6+Iz8/OZwZiR2VAAiUmia3LYB2CWDIg4/vgvxMdSevIp1Ww9w7+3D/tR0A+NtXh3hny0l1J+UiVu5MI7+knI7h/tzYPULt6djfxdNw/nfQ6KDbGPtcoxFFEy05QdkFpRhNzpOH4gxOO6hadFWV3eSd55i8BEGixbtYWMo/vj3Mjf/ewtcH0tFo4M5+bfjpL0N5dmwPgv1qOfHl6QOTP4HQzpB3RgmEDM7zg+toGo2Gv9/Skz8OV1Yz5n5/hP9sPOZUCY7OpsxoYllFi4wHEzuibcktMiwsq0Dth4BfiP2uE9uw5OjQAC80GiX372JRqf3m42LMZrO1UKI9u8dfrmOY8/UQk+0w0WKVlBl5f9tp3t50gvwSpV/NdZ3DeGZMd3q3Cb7yE/iFwD2fwZIRkPkbfHY/TF4BOvf8sdFoNDw5qjt+Xh68vv4o//3xOMVlRp4d073FFI20pe9+yyA9r4SwAG/u6NdG7ek4hvVUmA16hdXHkhd0pv4gyFOnJcTPi5zCUrL0BsLs2CndlVwoMFBUakSrgbatHXfyNa6ih5gzHZOXlSDR4phMZtbsOcsN8zbzyvdHyC8pp3tUIB8+MJDlMwY1LACyCImDu1eBhy8c3wBrn2hQpdqW7I/DO/O3W3oCytHvv311EJNsNVRjNpt5p+JY/B+GuEGLDICCLEjbrtzufrN9rxXTT9lyy0+/YtHEyoKJkhdkYTkeHx3sW5kG4ACW7bC03CLKjCaHXbc+EgSJFmXr8Qvc/L9f+MunB0jPKyEm2Id/33U13z2eyPVdw5v2pG0HwPglgAb2vAe/zrfllF3S9OvimHtnHzQaWL49jSc/+41yJ/ml5gx+PZFDcoYeX08d9wxqr/Z0HOPoWsAM0X0h2M7NYb38IaqiaOIVjspHBEmtoMtZjsd3CHPcVhhAVJAPPp5ayk1mzlRsx6lNgiDRIhxKz2Pq0h1MXbqT5Aw9gT4ePDOmOz89MYzx8W2bXwysxy0w+hXl9g8vwu+fNXvOrm7KwHb8Z2JfdFoNa/ae5c8r91NaLoEQwDs/K4njk66JpXVLb5FhkWzHAom1qdpHrB4R0j+shrSKpOh2IY4t3KnVaqxbYs6SF+SeyQ2ixTh3qZh/bzjKF/vOYTaDp07DtIQOPDa8s+3ffAbPhEupsH0BfPkIBMUoCaBu7PZ+bfDx1PKnFfv47vcMSsqMvH1Pf/fY/qnD4XQ9W49no9UoK2ZuoUQPKRU1tbrbOR/IInYg7Fp8xZUgaaJak3UlyIFJ0RYdw/xJztBz6kIhNzpB5RFZCRIuKa+4jLnfJzN83mY+36sEQOOujuHHOcP42y097ffpe+Q/lfonxlJYMQWyj9vnOi5kdO9o3p02AG8PLT8eyWL6B7soKi1Xe1qqWbJVyQUa0yeaWAdV41XdiY3Kz0RoZwjv5phrWpKjM3+D8roDnAjJCaohNddSI8jxLVysx+SdZCXIIUHQggULiIuLw8fHh/j4eLZu3Vrv+C1bthAfH4+Pjw8dO3Zk0aJFNcasWbOGnj174u3tTc+ePfniiy+qff/FF19Eo9FU+4qKirLp6xKOZyg3smTrKYa+vol3tpyitNzE4I4hfP3Ytbw5pZ/9j3tqdXDnYmgzAEouwfLxSkKomxveLYL37x+In5eOX0/kMG3pTvQlZWpPy+HSLxXz9QGlvcjD7tAiw6JqgURHnRRs3QH8wpTgK+NAncOs/cP0shJkkZpjqRbt+CA9znpM3jlKjtg9CFq1ahWzZs3i+eefZ9++fSQmJjJmzBjS0tJqHZ+SksLYsWNJTExk3759PPfcczz++OOsWbPGOiYpKYlJkyYxdepUDhw4wNSpU5k4cSI7duyo9ly9evUiIyPD+vX777/b9bUK+zGZzHy1/xw3/nsL//wumUtFZXSNDOC9P1zDigcHc1XbVo6bjJcfTFmp/BK+lAorJkOpcyT5qSmhUyjLZwwi0MeD3akXuXfJDi4Wuldtlvd+TaHcZGZwxxDH/ptUU7kBjm9Ubtv7aHxVGk2D+ohZ+4cVSBAEkFdUxqUi5QOKGkFQx3DnOiZv9yDojTfeYPr06cyYMYMePXowf/58YmNjWbhwYa3jFy1aRLt27Zg/fz49evRgxowZPPDAA8ybN886Zv78+dx00008++yzdO/enWeffZYbb7yR+fPnV3suDw8PoqKirF/h4U08HSRUte1kNre9/St/XrmfsxeLiQzy5tXxffj+z9czvHuEOjVqAsLhnjXg2xrO7YE1M8BkdPw8nEz/dq1Z8eBgQvy9+O1sHpPf3e422xD6kjJW7FR6qz3sLi0yQOmvV5oPgdEQ09+x17Z2lK8nCLJsh+kNUtyTyp5h4YHe+Hk5Pi04rmILLivfQIFB/W1zuwZBpaWl7Nmzh5EjR1a7f+TIkWzbtq3WxyQlJdUYP2rUKHbv3k1ZWVm9Yy5/zuPHjxMTE0NcXByTJ0/m1KlTdc7VYDCg1+urfQl1Hc3M5/73dnL34h38fi6PAG8PnhjZlU1PDGPSNe2af+KrucI6VxRP9Iaj38H659Sdj5Po3SaYVQ8NJiLQm6Pn85n8znbSLxWrPS27W7EjjQJDOV0iAhja1HIMrujIN8qf3W9WWs44knUlqO4TYpbE6OIyo1O86aotVcWkaIBgP09CK3I2U5xgNciu/2Kzs7MxGo1ERkZWuz8yMpLMzNp7MWVmZtY6vry8nOzs7HrHVH3OQYMG8eGHH7J+/XoWL15MZmYmQ4YMIScnp9brzp07l+DgYOtXbGxso1+vsI3MvBKe+uwAY/77M5uOXsBDq+G+hPZsfnIYj93QRZVPL3VqnwB3vqPc3rEIkhaoOx8n0SUykNUPJ9CmlS+nsgu5a1GStUBbS1RabuK9X08D8OD1btIiA5TVzyNrldv2aphanwYUTfTz8iDAW/mdIbWCKvOBHH08vqrK5Gj184IcErZfvl1hNpvr3cKobfzl91/pOceMGcP48ePp06cPI0aM4LvvvgPggw8+qPWazz77LHl5edavM2fONOCVCVvSl5Tx+vojDJu3idW7z2Iyw9g+UWycM5SXbuvtvCXve90BN72s3F7/HBz+Wt35OIkOYf6snplAh1A/zl0q5q53tnEiS/1fevbwzYF0MvUlRAR6c1vfGLWn4zhndkBRNvi0gg7XOf76Xv4Q2Uu5XU+9IKkVVEntlSCoTI52hrwguwZBYWFh6HS6Gqs+WVlZNVZyLKKiomod7+HhQWhoaL1j6npOAH9/f/r06cPx47Ufafb29iYoKKjal3CM0nIT7/+awrDXN/P2ppOUlJm4pkNrPn90CAvuibf+wDi1IY/DgOmAGT5/8Io9jdxFm1a+rH44gS4RAZzXG5j0ThKH01vWVrPZbGZxxbH4P1zbwaFtCFRnORXWdTToamlE7AiN2BKTlaDKIMiRjVMvZ0mOdoaCiXYNgry8vIiPj2fjxo3V7t+4cSNDhtReZC4hIaHG+A0bNjBgwAA8PT3rHVPXc4KS85OcnEx0dHRTXoqwA7PZzHe/ZXDTf7bw4jeHyS0spWO4P+9OjWf1wwn0b9da7Sk2nEYDY16DLqOgvARWTIKck2rPyilEBPmw6uEEesUEkVNYyuR3k9iXdlHtadnMlmMXOJKZj7+XG7XIAKWHniUfyFFVomtjrRxdd3K0NQjSu0eSfn0sidEdVKgRZGFdCXKH7bA5c+awZMkSli1bRnJyMrNnzyYtLY2ZM2cCyjbUtGnTrONnzpxJamoqc+bMITk5mWXLlrF06VKeeOIJ65g///nPbNiwgVdffZUjR47w6quv8sMPPzBr1izrmCeeeIItW7aQkpLCjh07mDBhAnq9nvvuu8/eL1k0wM6UXO5YsI0/frKX1JwiwgK8+b87erNh1vWM7BXlml3JdR4wYRlEXw1FOfDxXVBYew6auwnx9+KTBwfTv10r9CXl3LtkBztOtYz/Nu9WNEqdPLAdwb4qrYaoIfN3uJSmNBfudKN684itOCGWcaDOoomWWkHuvh1WXGrkfEW9JDWOx1t0qsgJSrlQqPqJPbsHQZMmTWL+/Pm8/PLL9O3bl59//pm1a9fSvr3yiSkjI6NazaC4uDjWrl3L5s2b6du3L//4xz948803GT9+vHXMkCFDWLlyJe+99x5XXXUV77//PqtWrWLQoEHWMWfPnmXKlCl069aNO++8Ey8vL7Zv3269rlDHiax8Znywm4nvJLH/zCX8vHTMGtGFLU8O455B7fHQuXgRc+8AuPtTCG4HuSdh5d1QJp8+AYJ9Pflo+iASOoZSWGrkvvd28vOxC2pPq1kOnstj28kcdFoN91/bQe3pONaRiq2wzjcqtbPU0jruikUTLbWC3H07LK2iUnSwryet/NTraRcb4ocGKCw1snx7KkknczCa1AmGNGa1wzAnpdfrCQ4OJi8vT/KDbCBLX8J/fjjOql1pmMyg02qYdE0ss27sYu3y3KJkHYGlI8GQBz1vhwnvOf74sJMqKTPyyPI9bDp6AS+dlrfu7sfIXq5Zzf3xFfv4+kA6t/WN4b+T+6k9HcdaMASyDsHti6DvFHXnsmKK0sV+5P/BkMdqfPvzvWeZs/oA13UOY/mMQbU8gXtYfyiThz/aw1Vtg/n6MRUS2SusO5jBHz/ZVy3wiQ724YVbezK6d/NTVhrz/i2/lYVdFRjKeWPjMYa+vpkVO5UA6Kaekayflci/7ujTMgMggIjuMHk5aD3h8Jfwwwtqz8hp+HjqeGfqAMb0jqLUaOKRj/fy1f5zak+r0c5eLOK73zMAeMidWmQA5J5SAiCNDrqOUns20HaA8mcdJ8TCpX8YgLVMhRo9wyzWHczgkeV7a6z8ZOaV8Mjyvaw7mOHQ+UgQJOyizGhi+fZUhr2+mTd/PE5xmZG+sa1Y/XACi6cNoHNEoNpTtL+46+G2t5Xb296EXUvUnY8T8fLQ8r8p/bijXxuMJjOzVu1n9S7XKkux7JfTGE1mruscRq+YYLWn41iWU2EdrgO/EHXnAlWSo2sPgqz9w9x8O+y0pWeYSo19jSYzL31zmNq2nyz3vfTNYYdujTlR1TnREpjNZjYcPs+r645Ya0B0CPXjqdHdGdPbRROem+PqSUry6KZ/wtonIagtdBut9qycgodOy7/vuhofTx0rdqbx1JrfKC4zct+QDmpP7YryispYuUvJZXzQ3VaBoDIfyJG9wurTpr+yKqU/B3nnILhNtW9b6gRdKirDUG50rzIGVaRZu8erEwTtTMklI6/u1TgzkJFXws6UXBI6hTpkTrISJGxmT+pF7lqUxMMf7eHUhUJC/L14aVwvNsweytg+0e4XAFlc/wT0mwpmE3x2P5zbq/aMnIZWq+Ffd/TmgWvjAHjh60Ms3Oz8pQWW70ilqNRI96hAru8SpvZ0HCv/fGXD0m5j1Z2LRbWiiTWPyrfy88RTp/z+yS5wr6a+VVlXglTaDmvodqQjty0lCBLNdupCAY8s38P4hdvYnXoRH08tjw3vzJYnh3HfkA54ebj5PzONBm75D3S6AcqK4JNJcDFV7Vk5DY1Gw99u6cGfbugMwKvrjvDvDUdVPzpbF0O5kfe3nQaUXCC3C+6PfgeYlWapl624qKqeookajYbwAPeuFVRabuLcRaWHn1rVoi3bkgBaTAzWHmacdhuDtYfRYqp1nL3JdphosuwCA2/+eJxPdqRRbjKj1cBd8bHMvqkrUcEtNOG5qXSecNcH8N4YOH9QqSE0fb3ShV6g0Wj4y8hu+HrpeG3dUf730wmKSo389eYeThdkfLUvnQv5BqKCfLjlKjdqkWFhyQdSs0BibdoOVPLu6iiaGB7kQ3peidvmBZ27VIzJDL6eOmuiuKMNjAshOtiHq/N/5u+eHxKjybV+L90cwstl0zgQeD0D4xyXZyZBkGi0otJylm5NYdGWkxSWGgG4oXsET4/uTrcoN0h4biqfILh7NSwZAdlHYdVUuHcNeDhpTzQVPDqsM36eOl785jBLf0mhuMzIP2/r7TQNSU0mM+9WtMh44Do3XOUsyYOUn5Xb3Z0kH8jCckLMUjTxsp+rCDdvnZFq3QrzU+2DhU6rYUH/s1y9bX6N70WRywLP+Rzo3xGdA3/e3ewnWDRHudHEyp1pDHt9M//eeIzCUiN92gTzyYODWPaHayQAaojgNnDPp+AVCKe3wtd/UtoPCKs/XBvHa+OvQqOBT3ak8cSnByg3mq78QAfYfCyLE1kFBHp7MGVgO7Wn43jHN4KpDMK6QnhXtWdTXUhH8AutKJr4W41vu3sTVWvPMJVOhgFgMtLv0CtoNHB5nKPVKCvC/Q69Ciajw6YkQZC4IrPZzI/J5xnz36088/nvZOUbiA3x5c0p/fjqj9cypJObJYY2V1RvmPiBcprlt1Ww6f/UnpHTmXhNLPMn9UWn1fD5vnP8acU+SsvVD4Te2aKsAk0Z1I5AHzdqkWGRXNErrLuTbYWBkntXTx+xcGsQ5J45Qdbu8Wo2pE7dBvp06lrn0WBWTvilbnPYlCQIEvU6cOYSk9/dzvQPdnM8q4BWfp787Zae/DBnKOOujnGabQqX0/lGuPW/yu2fX4c9H6g7Hyd0W982LLynP146Ld8fzOThj3ZTUua4T4iXO3DmEjtScvFwxxYZoLR/OfGDctvZ8oEsLH3EztQMgqy1gvTuuhKkbIepuhJUcN6242xAgiBRq9ScQh77ZC+3vf0rO1Jy8fLQMnNoJ7Y8OZzp18W5bZ0Nm+o/Fa5/Urn97ezKNxhhNbJXFIvvG4CPp5ZNRy/wwPu7KDSUqzIXSy7QuL4xRAf7qjIHVZ3aDKUFENRGORnmjOopmuj2OUEVNYLU7B5PQKRtx9mABEGimtzCUl765hAj3tjCt79loNHA+P5t2fTEMJ4Z0929umQ7wvDn4arJYDbC6vuUztyimqFdw/ng/oH4e+nYdjKHact2kldc5tA5pOUU8b27tsiwOGLZCrtZ2XpyRm36g0ZbWTSxCksTVXfMCTKZzKoXSgSU4Flb33uIRgmy2w9x2JQkCBKA0tRyweYTDH1tE+/9epoyo5nru4bz3Z8S+ffEq2nTyg0/+TqCRgPj/gcdEpVP2R9PrPHLW8CgjqEsnzGIIB8P9qRe5J4l28ktdFzRu6W/nMJkhuu7htM9yg0bKhvL4ej3ym1nzAeyqFY0sfpqkCUnKLvAgEmljuVqydSXUFpuwlOnIVrN8iXrn1US6wFqZAZV/H30K6B13E6DBEFuzmgy8+nuMwyft5nX1h0l31BOz+ggPpo+kA8fGEjPGDf8he9oHl4waTmEd4f8dPhkIpTo1Z6V0+nXrjUrH0og1N+Lg+f0TH43ySGF7y4WlrJ691kAHnbXVaAz26EoR6lr1f5atWdTvzq2xMICvNFooNxkJrfIvapGWypFt23th4dOpbf9/Z/A3g8ADVz/FARd1i0+KAYmfgg9xzl0WhIEuSmz2czmo1nc/OZWnvzsNzLySogJ9uGNiVfz7Z+uI7FLuNpTdC++rZSj8wGRSjHF1dPA6NgtH1fQMyaIVQ8PJjLIm2PnC5j4ThLnLhXb9ZrLt6dSXGakV0wQQxzUz8jpWAokdh0DOicvL2etHF09OdpTpyXEzwtwv+Toyu7xKm2FZR5U8h4Bhj0DNzwPsw7Cfd/C+KXKn7N+d3gABBIEuaWD5/K4d+kO/vDeLo5k5hPo48GzY7rz0xPDuLN/WznxpZZW7eDuVeDpB6c2wbezpIZQLTpHBLL64QTatPLldE4RExclcTq70C7XKikz8kHSacBNW2SA8m/wiJNWia5N24oTYhn7laKJVViPyRe4VxB02hIEqXEyrCQPVk+F8hLodKOyCgTKlldcIvSZoPzpwC2wqiQIciNnLxYxa+U+bvnfL/x6IgcvnZYZ18Xx85PDeXhoJ3w85cSX6mL6wYT3lOTOfcuV4/Oihvah/nw6M4G4MH/OXSpm4jtJHD+fb/PrfL73HNkFpbRp5cvYPtFXfkBLlHEA8s4owXmnG9SezZXVUzTREgS5W/+wtFyVGqeazfDVHyH3FAS1hTsXg9a5wg7nmo2wi7yiMv61Npkb5m3hy/3pANzWN4Yf/zKUv97Sk9b+XirPUFTTbTSMnafc3vR/cGCluvNxUjGtfFn18GC6RQaSlW9g0rvbOXguz2bPbzKZWWJtkRGHp1q5FGqzrAJ1vhE8XeCARD1FE621gtzshNjpbJW2w5LeVgpsaj2VfB9/59tOdtOfavdQUmZk8c+nuP71Tbz78ylKjSYSOobyzWPX8d/J/YhVs2iWqN810+HaPyu3v3oMTm1Rdz5OKiLQh5UPDaZPm2ByC0uZsng7e9MuNvwJTEZI2Qq/f6b8WaVc/w/J5zmVXUiQjweTrom1w+xdhCUfyNl6hdXH0kfssuRodzwmbzZXPR7vwJWg1CTY+Hfl9ui50DbecdduBCfPcBNNYTKZ+fpAOq+vP2pNGu0WGcgzY7szrGu4e+Y1uKIbX4RLZ+DQ50qz1enrIaKH2rNyOq39vfj4wUE88N4udqdeZOqSHSy57xoSrpTEfPhrWPc06NMr7wuKgdGvQs9xvPuzsgp0z+D2BHi76a/KnJNwIRm0HtB1pNqzaThrcvRlQZCT9Q8zmszsTMklK7+EiEAfBsaF2Lx5aE5hKQWGcjQaiA1x0EpeQRZ8+gel/lnvCXDNDMdctwnc9Ce75fr1RDb/WpvMoXTliHVUkA9zRnZlfP+2Du3MK2xAq4XbF0J+BqQlwcd3wYwfIDBK7Zk5nSAfTz6cPpAHP9zNrydy+MN7O3lnajzDukXU/oDDXysn8Lgs8VyfAauncXL4QnanBuGl03L/kA72nr7zsvQK65CoHI93FTGWoolnlSA3KAaokhPkBP3D1h3M4KVvDpORVzmX6GAfXri1J6N72y7/zNIzLCbY1zGV/o3l8NkDUJAJYd2U9kBO/MFbtsNaiOQMPfct28k9S3ZwKF1PgLcHT47qxqYnhjFxQKwEQK7K0wcmfwKhnZXk1E8mgqFA7Vk5JT8vD5bedw03dI/AUG7iwQ93s+5gppKcWVasfDrNPqGsDnw7ixoBEFjva/3z39Bi4vZ+MUQEqVhcTm2WfKDuN6s7j8byDqgsmljlqLyz5AStO5jBI8v3VguAADLzSnhk+V7WHcyw2bUc3jNs0//B6a3g6Q+TPlL+XzgxWQlycRl5xfx7wzHW7D2L2QweWg33Dm7Pn27oTGiAt9rTE7bgF6LUEFpyk3JS57P7YeJyJemz4LxSW6j9ENWOmNqNJXgx5Fd86Su+8qvfV1J5n48hnyVGPelBWZhL9AR8WoxpTQlac2P6jZkJMV5goPYIDyYOs9erc376jMqcGlcLgkBJjs78XXkNvW4HqvQP0xswm82qpAYYTWZe+uZwnSG4Bnjpm8Pc1DPKJh9eK7vHOyAIOvo9/PKGcnvcmxDezf7XbCYJglyUvqSMhZtPsuyXFAzlJgBuviqaJ0d2o0OYig3yhH2EdIQpK+GDW+D4BnitA5QVVX6/Si6L6qzBi75K8FIRtJToLwtq8msPbCy3TY1vlqoF2lpuQJUFHw14BynBYnHuFZ9neIyJLpGBjb5+i3F0rfJnmwHW7SSXEjsQdi+tvhJUkRhdXGakwFBOoI/jeyHuTMmtsQJUlRnIyCth24lsErs2v2ht5UqQnd8XclPgi4eV2wMfUur/uAAJglxMabmJj3ek8uaPx7lYpFQUHtghhGfHdqdfOxfasxeNF3sNDHoYfv1v9QAIrLkszSo7bzYrz1stYKktQLn8vqrBTcWfZuOVr9dgFcGLd6Dy5VPltndgxfcuvy8Qk1cQb/6ayYoDlyjAl7/c3I8HEjspp8A+uHLRv8T+vW34GlyQKxVIrI21aOIBpWiihzd+Xh4EeHtQYCjnQr5BlSCooflID3ywi4ROYQzpFMqQTqH0iglu0spQZfd4O64ElZXAp/cphRHbDICR/2e/a9mYBEEuwmw2893vGby27qj1uGPniACeGd2dG3tEyIkvd2Aywu+f1vHNioX0tU9AQBSUFda9wlJSSxBjyKsIXkw2nHBF8FIjaAmsErTUFtwEVR/n5d+kxEot8OdYM4VBySzemsLL3x2huNzMH4cOUVY29BnUnhek6JH7IxhHgs7xb5SqK74EKT8rt13paHxVlqKJRTnKtljFsfnwQG8KDOVk5RvoGO74fBVLXtKVlBnN/HzsAj8fuwBAoI8HgzuGVgRFYXSNDLji732jycyJLCWH8FJxKUaT2T75oeueVoJN3xC4632lH6KLkCDIBWw/lcPctckcOKsUggsP9GbOTV25K76tes3whOOlbqt+nLsGs5IjtOym5l1Ho607ULEGLMF1BDZVxjYxeLEljUbDc2N74OflwX9/PM7r649SVFrOE6NfQbP6PpQMjMpAyARozMq0NbuXQs4J5Ze6X4hKr0AlxzcoW5Hh3SGss9qzaRqNRlkNOrZO2RKrEgSlZBeqlhw9MC6E6GCfOrfENEBUsA9L7hvAjlO5bDuZw45TOeSXlLPx8Hk2Hj4PQFiAV0VQpKwWtQ/1qxYUrTuYwQtfHyK/RNlSfvbzg7z54wmbnz5j/wrY874y8/FLoJVr1dSSIMiJHT+fz6vrjvBDchYA/l46Hh7aiRmJcfh5yf86t1NwvmHjfEOVY/TVgpY6VllqW43x9FM9eLEljUbD7Ju64uelY+73R3h700mKru3M3yd+gGbdM9UCy0xzKG97T+fl269G98VDkLIFltyo5GO5QJKnzViOxnd30a0wC0sQdHYn8ChQNTlanWPyOq2GF27tyczle2t8z/JT98KtPekVE0yvmGAeuC6OcqOJQ+l6tp3MYdvJbHadziW7oJRvf8vg29+Uk2QxwT7W7bNSo5HnPj9YY53Tcvps4b39bRMInT9UvTFq5xub/5wOJu+kTui8voT5Pxxj1a4zmMzKD83dA9vx+I1drHUuhBsKiGzYuIkfKA0JRTUPD+2Er5eOv391iPd+PU1xaRwvP/Ybx3dtoCj3HMsOFLG+oBMvjOqDrmcHCN0IKyYrfY+WjFC6XbtSwcCmKiuGEz8ot101H8iilqKJlu0oNZuo9mvX+rI1SEVUHXWCPHRaro5txdWxrXhkWCcM5UYOnMlj28lstp3MYV/aRdLzSliz9yxr9p6t87rNPn1mMior0gXnwSsA1j0L5cXVG6O6GAmCHKy+CqEFhnLe3XKSxVtTKC5TEktH94riydHd6KTC3rVwMu2vlMuiUb7ffoijZ+YypiV0wNdTx9NrfmPlrjN8uf8cJWUAbQBlAayVX0UOUGQveHCTknCe+qtSo+mml2HIn1rUSlkNJzcpCfLBsRDdV+3ZNE8tRROtneT16gVBX+w7hxmIb9eKJ0Z1b3TFaG8PHQPjQhgYF8KsEVBcamR3qrJ1tuFQJicvFNb5WMvps50puVeuql5VbRXWQVl5dsLGqA0lQZAD1VUh9Pmbe3CxsJT5Pxwnp7AUgP7tWvHc2B4M6OBmuQiiblqdcgx+9TQuz2WxLqSPfqXl1QuysbsGxHIkM5+lv6RQUlY9Edxshlkr9+PtoVU+jfuHwdQvlYTzvR/Axr9BVjLc8h+lkGVLVLVAoqsHe94BENELzlfUC+p5W+V2mEo5QWazmc/2KKs1dw2IbVwgUgdfLx2JXcJJ7BJO96hA/rxy/xUf06iq2XVVWAcozlE+JDhDeY4mcM3QzQXVVSE0I6+Exz7Zx9++OkROYSlxYf4surc/ax4ZIgGQqKnnOOUYfNBl+/lBMc07Hu9GjCYza3+vvyLvS98cxmiq+IXv4aWU/h/zGmh0cOAT5Yh9fgNztFyJsVwpeAeunw9kEVtxVL6iXpClVpBarTN+O5vHiawCvD20jL3KhgnKFRp6+qyh4zAZlRWgOk9SamDdM9WaD7sSWQlygPoqhFpoNUoy3N2D2uMpJ75EfXqOUz6lW/bmW2rFaDtpaLG6atsFGo1Soymsq1IP5ewuWDwcpqyA6KsdM3FHSNumFJL0DYF2CWrPxjbaDoTdy6zVr605QSqtBFlWgUb3jiLIDnWKLKfPMvNK6to0JypY2XprkIacStWfU8a5YC6ivNs6wJV+6QKYzNA1MkgCINEwWp3yC6fPBOVPCYAarKErALWO6zRcyRMK7aL84l86Cg59YeMZqii5Yius21jQtZDPyJbk6PT9UF5qzQm6WFRGabkt62JdmaHcyNcHlIBifP+2drmG5fQZVJ42s6h6+uyKuUfFF2HXUvjmzw27cENPrzoZh7zjLliwgLi4OHx8fIiPj2fr1q31jt+yZQvx8fH4+PjQsWNHFi1aVGPMmjVr6NmzJ97e3vTs2ZMvvqj5i6ix17WXZv3SFULYVLO3C0I7wYwfoPMI5WTMp3+ATf8Ck2PfUG3ObIYj3ym3Xf1UWFUhHZWVLaMBMn+jtZ8nnjolAHD0CbEfk7PIKy4jKsiHazuH2e06o3tHs/De/kQFV/83HBXsU//xeGM5HFsPq++Ded3guzmQe7JhF23o6VUnY/cgaNWqVcyaNYvnn3+effv2kZiYyJgxY0hLS6t1fEpKCmPHjiUxMZF9+/bx3HPP8fjjj7NmzRrrmKSkJCZNmsTUqVM5cOAAU6dOZeLEiezYsaPJ17Unm+/RCiGazLJdUNfnYA3KgYV6twt8W8HdqyHhMeXvW15VtslK6z6V4/TS9ymnqDz9oeNwtWdjO5aiiQBndqLRaAgPUKdW0JqKrbA7+rexT+XmKkb3juaXJ4fy3a3w2XXn+O5W+OXJobUHQJkHYf3z8EYP5RTk4S+VoDGiJ4x4SalCX99PTFAblz2VqjGbzfWlqjTboEGD6N+/PwsXLrTe16NHD26//Xbmzp1bY/zTTz/N119/TXJysvW+mTNncuDAAZKSkgCYNGkSer2e77//3jpm9OjRtG7dmhUrVjTpugaDAYOh8lOBXq8nNjaWvLw8goKCmvFfQMkJuu7Vn664R/vL0zfY/QdDCFF5UAFqPWPXuGJy+z6Gb2eBsRQi+8CUT6BVO1tO1zF+fBm2/ht63qYk2bckP78OP/0Tet0Jd73HbW//yoEzl3h3ajwje0U5ZAoX8g0MnvsjRpOZH+YMpXOEncue1HakvWqj5YIspQ3P/hXK6TkLv1DoMxGunqzku2k0VU6HQa0/MU52KEOv1xMcHNyg92+7rgSVlpayZ88eRo6sXmBs5MiRbNu2rdbHJCUl1Rg/atQodu/eTVlZWb1jLM/ZlOvOnTuX4OBg61dsrO1Kf9tsj1YIYRNN3i6oTb974L5vwT9ceTNZfAOkbbfxjB3Akg/kqr3C6tO2Ii+oIjnauhLkwOTor/afw2gy0ze2lWMCoNXTaiY06zNg9VR4Zyj8uzusf075N6v1hB63wuQV8JejMOYViOlbWSKhBZ9KtWvmW3Z2NkajkcjI6nuFkZGRZGZm1vqYzMzMWseXl5eTnZ1NdHR0nWMsz9mU6z777LPMmTPH+nfLSpCtWH7pXl4nqK4KoUII+xrdO5qbekbVWby0UdoNUhKmV05RmnW+fwvcOh/63WvzedtF9nHIPgpaD+jSzN5zzqhNvFI0Me8M6DOqHJN3TBBUtTbQhHj7JERb1XukveK+jP3Kn23i4eop0Hv8lfvjtdBTqQ5J/7+8063ZbK63+21t4y+/vyHP2Zjrent74+1t35YUNv2lK4RoNp1WY5NidYDSOPKB9fDFTEj+Gr76I5w/rFSZdvaTVpZeYXHXK/lOLU21ook7iQjsAcAFBx1GOZSu50hmPl4eWm69Ksa+F7vikfYKty+Evnc37rktp1JbELtuh4WFhaHT6WqsvmRlZdVYpbGIioqqdbyHhwehoaH1jrE8Z1Ou6yiWX7q39W1DQqdQCYCEaEm8/OGuD2DYs8rft7+tJJoWX1J1WldkORXWUgok1qZK0URH1wqyrALd1DOSYD/b1waqpqFH1XVe9p2Hi7BrEOTl5UV8fDwbN26sdv/GjRsZMqT2TPKEhIQa4zds2MCAAQPw9PSsd4zlOZtyXSGEsAmtVumofdcH4OELJ39UGrBmn1B7ZrXTp8O53YBG2e5oqSwnxM7ustYKcsR2WGm5yVobaIKdagNV09Cj6i56pN3W7H5Efs6cOSxZsoRly5aRnJzM7NmzSUtLY+bMmYCSizNt2jTr+JkzZ5KamsqcOXNITk5m2bJlLF26lCeeeMI65s9//jMbNmzg1Vdf5ciRI7z66qv88MMPzJo1q8HXFUIIu+p1O0xfD0FtIec4LLkBTv6k9qxqsqwCtb0GAh1zUkoVbSuLJkb6KSvwWQ5oorrpaBa5hUqRxsQu9qsNZGVptFwn1z7Sbmt236ieNGkSOTk5vPzyy2RkZNC7d2/Wrl1L+/btAcjIyKhWuycuLo61a9cye/Zs3n77bWJiYnjzzTcZP368dcyQIUNYuXIlf/3rX/nb3/5Gp06dWLVqFYMGDWrwdYUQwu6ir4aHNsHKe+DsTlg+AUb9S2nB4SzNSS0NU1tSgcTahHZSiiYW5xJjOA5AdoEBk8mM1o5pCdbaQP3a4OGIjgBaHdzwd/iytg/80mj5cnavE+SqGlNnQAgh6lVugG9nw/6Plb/3nwZj/600Z1VT8UV4vTOYyuFPe5VAoSX7eCIcX49x5Fw6fa18IN7z1xGEBtjnUExOgYFB//qRcpOZ9bOup1tUoF2uU8O2t2DD88ppP1N55f1BbZQAyIWPtDdEY96/nfzIghBCtAAe3nDb2xDRAzb+HfZ+qOQITfoI/B2wRVKXY+uVN8mIni0/AAIlOfr4enTndhHi34XcwlKy8g12C4K+PpBOucnMVW2DHRcAmYyw8x3l9th5ENq5RR1ptzXp1imEEI6g0cCQPyntNryDlI7t7w5XWhaoxXI0viWfCquqStHECAckR1tOhdmrWWqtjq6FS2nK1t/Vk6XR8hVIECSEEI7U5SalAWtIR8hLg6UjK6s1O1JpEZz4Ubnd0vOBLNr0txZN7OJXANivf1hyhp5D6Xo8dRrGXW3n2kBVba9oFTXgfvD0ddx1XZQEQUII4Wjh3WDGj9BxGJQVwqp7YMvrSid3Rzn5E5QXQ3A7iLrKcddVk3egsvUHxGuVkgX26iRvSYi+sXskrf0dlPuVcQBSf1Vyga6Z4ZhrujgJgoQQQg1+IXDPGhj4sPL3Tf+ENdOVFRpHqHoqzFlOqjlCRb2gHsYjgH2OyZcZTXy5v6I2kL3bZFS1fZHyZ687rnBMXlhIECSEEGrRecDY1+CW+cqn94Nr4L0xkHfOvtc1lsHR75Xb7pIPZBGr5AV1KDoE2Kdq9M/HLpBdYCDU34uh3cJt/vy1yj8PBz9Tbg96xDHXbAEkCBJCCLUNuB+mfaUks2bsh8XD4exu+10v9VcouQR+YdBusP2u44wqkqPD8g/jSTlZdugftmavshV2e782eDqiNhDA7mVgLFVeX9t4x1yzBZAgSAghnEGH65TCihE9lSPN742FA6vscy1LIna3Me53Yii0E/i2RmcqpafmtM1Ph10sLOWHw1mAA0+FlRtg91Ll9mBZBWoMCYKEEMJZtO4A0zdAt7FgNMAXDyl1hUxG213DZKpsldHjVts9r6vQaKx5Qf21x22+HfbNb+mUGk30jA6iZ4yDCu0eXAOFF5RiiO74/7QZJAgSQghn4h0Ikz6GxL8of//1v7BiCpTobfP86fsgPx28AiBuqG2e09VUbIn1056gqNRIgaH8Cg9oOMupsPGOSog2m2H7AuX2wAdBZ+cu9S2MBEFCCOFstFq48e9w5xLw8IHj62HpTZCb0vznPlJRILHLTeDp0/znc0WxykqQ5Zi8rWoFHT+fz4GzeXhoNdzW10Gns1J/hczfwcMX+t/nmGu2IBIECSGEs7rqLrh/LQREwYUjSsJ0ys/Ne05LPpC7nQqrqk08aLS00VwgnIs2ywv6rCIheli3CMLs1IqjBktxxL5TlLILolEkCBJCCGfWJh4e2gwx/ZWGpx/dAbuWNO25LhyDnOOg9VRWgtxVlaKJtsoLKjea+GKvUtrAYbWBclMq87sG1dY1XlyJBEFCCOHsgqKVFaE+dykNT7/7C3w7R6n30xiWrbCOQ8En2PbzdCVVkqNtsRL0y4lssvINtPbz5IbuEc1+vgbZuRgwQ6cblSrkotEkCBJCCFfg6Qt3LoYbXwA0ypHoj+6AotyGP4dshVWqFgQ1PyfI0iz1tr5t8PJwwFurIR/2faTcHvyo/a/XQkkQJIQQrkKjgcQ5MGWFcrrr9FYlTyjryJUfm3cO0vcCGuh+s92n6vQqKkf30aSQm1fQrKfKKy5jw+HzgAO3wvZ/AgY9hHaBTjc45potkARBQgjharqNgekboVU7uHgaloyAo+vqf4wldyR2EAQ4aLvGmYV2xuAZjI+mDN/c5GY91be/pVNabqJbZCC9HFEbyGSqTIgePFM5TSiaRP7LCSGEK4rsCQ9uhvbXQWk+rJgMv8yvuxO9JR+oh2yFAaDRUBDeD4Ao/W/NeipLbaAJ8W3ROKIZ7fH1cDFFyeu6eor9r9eCSRAkhBCuyj8Upn4B8fcDZvjhBfhiJpRdluNSlAunf1VuSz6QlanNAAA6lhxu8nOcvFDA3rRL6LQabuvnoNpAllWg/veBl79jrtlCSRAkhBCuzMMLbvkPjJ0HGh38thLevxnyM5V2Gylb4ad/gNkIEb0gJE7tGTsN77gEAHqbj1JabmrSc3xeURtoaNdwIgIdUHzy/CFI2aL8vx74kP2v18J5qD0BIYQQzaTRKC0TwrrA6vvg3G54ezDoPJSeUhaX0uDw19BznHpzdSIBcddgMmtoq8km83waUW06NOrxRpOZzytqAzmsWaplFajHrdAq1jHXbMFkJUgIIVqKjsPgwZ8gMBpKLlYPgEDJHVo9TQmEBFrfYE5p2wFQfGp7ox+fdDKHjLwSgn09ubGHA5LNC7Pht9XKbTkWbxMSBAkhREvSusOVx6x7xrad6V3YCe8eyo2zOxv92M/2nAHg1quj8fHU2XJatdvzHhgNENPPesRfNI8EQUII0ZKkboP8jHoGmEF/ThknSA/oA4B/1t5GPS6/pIx1hzIBmBDvgG2p8lLYWdEuZfCjyhaoaDYJgoQQoiUpOG/bcS3cpVDlmHxI3mEl0Gigtb9nUFJmolO4P1e3dUALksNfQkGm0ky35+32v56bkCBICCFakoBI245r4TShnbhk9sfDZIDzvzf4cWv2WJqlxtq/NpDZDNsXKLevmaGcCBQ2IUGQEEK0JO2HQFAMUNcbswaC2ijjBBHBvuwzdVb+cmZXgx6TmlPIztO5aDVwR782dpxdhTM7IX0f6LxhwP32v54bkSBICCFaEq0ORr9a8ZfLA6GKv49+RRkniAj0Ya+pi/KXsw0LgtZUHIu/rks4UcEOqA1kWQW6aiL4h9n/em5EgiAhhGhpeo6DiR9CUHT1+4NilPulTpBVRKA3e82WIOjKJ8RMJrO1Tcb4/g5YBbp0BpIrWp4MfsT+13MzUixRCCFaop7jlG7xqduUJOiASGULTFaAqgkP9OaAqRMmswbtpTTIPw+BdedL7UjJ5dylYgK9PRjVK8r+E9y1WKn2HXc9RPay//XcjARBQgjRUml1EJeo9iycWliANwX4cdTclh6aM8pqUI9b6xz/WcUq0C1Xx9i/NlBpIex5X7ktxRHtQrbDhBBCuC0vDy0h/l7sN3VS7tj7kdJvrZZikoWGcr4/qNRgmhDvgK2wAyugJA9ax0GXUfa/nhuSIEgIIYRbu8N7D2N0FUnRx9fDB7fA/N412ot8fzCTolIjcWH+9G/X2r6TMplg+yLl9qCZoJW3a3uw63/VixcvMnXqVIKDgwkODmbq1KlcunSp3seYzWZefPFFYmJi8PX1ZdiwYRw6dKjaGIPBwJ/+9CfCwsLw9/dn3LhxnD17ttqYDh06oNFoqn0988wztn6JQgghXNnhr/lr0VyCKax+vz6jRp+1qgnRdq8NdPInyDkO3kHQ7x77XsuN2TUIuvvuu9m/fz/r1q1j3bp17N+/n6lTp9b7mNdee4033niDt956i127dhEVFcVNN91Efn6+dcysWbP44osvWLlyJb/88gsFBQXccsstGI3Vly9ffvllMjIyrF9//etf7fI6hRBCuCCTEdY9DdTWhcKs/FHRZ+1MbhFJp3LQaOAOR3SMtxyL7zcVvAPtfz03ZbfE6OTkZNatW8f27dsZNGgQAIsXLyYhIYGjR4/SrVu3Go8xm83Mnz+f559/njvvvBOADz74gMjISD755BMefvhh8vLyWLp0KR999BEjRowAYPny5cTGxvLDDz8walTlvmlgYCBRUQ3L3jcYDBgMBuvf9Xp9k1+7EEIIF5C6DfTpdZaVrNpn7fOTynvJkE6htGnla995XTgKJ38ENDDwQftey83ZbSUoKSmJ4OBgawAEMHjwYIKDg9m2rfbGfSkpKWRmZjJy5Ejrfd7e3gwdOtT6mD179lBWVlZtTExMDL17967xvK+++iqhoaH07duX//u//6O0tO6+MHPnzrVu2wUHBxMb64CGeEIIIdTTwP5p5pyTrNmrbIVNiHfAKtCOilyg7jdDSJz9r+fG7BYEZWZmEhERUeP+iIgIMjMz63wMQGRk9RoNkZGR1u9lZmbi5eVF69at6xwD8Oc//5mVK1eyadMmHnvsMebPn8+jj9Z9xPDZZ58lLy/P+nXmzJmGvVAhhBCuqYH900zfP80k/TLaeBXavzZQUS7sX6HcluKIdtfo7bAXX3yRl156qd4xu3YpWfa1JY6ZzeYrJpRd/v2GPObyMbNnz7bevuqqq2jdujUTJkywrg5dztvbG29v73qvIYQQogWp6LNm1megseQAXU7ric5Ywh89vuZBzQa8Nv8GQx6HgJof8m1i7wdQXgxRfaD9tfa5hrBq9ErQY489RnJycr1fvXv3JioqivPnay41XrhwocZKj4Ulf+fylaKsrCzrY6KioigtLeXixYt1jqnN4MGDAThx4kTDX6wQQoiWq0qfNVONGEgDaDDcvpg/mZ/kN1McXuYS2PY/mN8Hvn8G9Om2nY+xDHYuVm4PeqS2bG1hY40OgsLCwujevXu9Xz4+PiQkJJCXl8fOnZW9WHbs2EFeXh5DhtTevTguLo6oqCg2btxova+0tJQtW7ZYHxMfH4+np2e1MRkZGRw8eLDO5wXYt28fANHR0XWOEUII4WZ6jsNw53tkElL9/oo+a98bB/KNoR+P+b+Bacqn0PYaKC+BHQvhv1fDt3OU/l62kPyNkojtHw69x9vmOUW97HY6rEePHowePZoHH3yQd955B4CHHnqIW265pdrJsO7duzN37lzuuOMONBoNs2bN4l//+hddunShS5cu/Otf/8LPz4+7774bgODgYKZPn85f/vIXQkNDCQkJ4YknnqBPnz7W02JJSUls376d4cOHExwczK5du5g9ezbjxo2jXbt29nrJQgghXJDPVXcw8jNvepcd4s1boomIbm/ts/bZkh0A3BnfFm23rtD1Jji1Gba8BmnbYPdS2Psh9J0C181pXiLz9oXKnwOmg6cDutML+/YO+/jjj3n88cetJ7nGjRvHW2+9VW3M0aNHycvLs/79qaeeori4mEcffZSLFy8yaNAgNmzYQGBgZZ2E//znP3h4eDBx4kSKi4u58cYbef/999HplD4u3t7erFq1ipdeegmDwUD79u158MEHeeqpp+z5coUQQriosEBftuf0JCVqMBFxSt5o+qVifj2ZDcB4S20gjQY6DVe+Tv+iBEMpW5RAaN/HcNUkSPwLhHVu3ATO7lb6lmk9YcADtnxpoh4as9lcRzaYe9Pr9QQHB5OXl0dQUJDa0xFCCGFHExclsfN0Lv+b0o9br44B4O1NJ3h9/VEGxYWw6uGEuh+ctgN+fg1O/KD8XaOFXnfC9U9CRPeGTeCz6XDwM7h6CtyxqJmvxr015v1bmpEIIYRwe+FByungrHylaK7ZbLa2ybhibaB2g+DeNfDgT9B1DJhNSkCzYLDSeiPz9/ofr0+Hw18qtwfNbM7LEI0kQZAQQgi3FxGoBEEXKoKgvWmXOJVdiJ+XjrF9Gnigpk083L0SHt4KPcYBZjj8FSy6DlbcDen7qo83GZWO9d/9BUzl0G4IxPS13YsSV2TXnCAhhBDCFYQHWlaCSgCsFaJH947C37uRb5XRV8Gkj+D8Ydg6Dw5+Dke/U766jITrn4L8DKVvWdVj9heOKA1be46zyWsSVyYrQUIIIdxeRKByGutCvoGSMiPfHFCCk2a1yYjsCROWwR93wlWTQaOD4xtg6QhYPbVmnaHiizU61wv7kiBICCGE27Nsh2XpDWw8fJ78knLatPJlcFzNDgONFt4V7nwH/rQb+t5Tz8DqneuF/UkQJIQQwu1FVCRGXygw8FlFQvT4/m3Qam1YtTmko3L6q16VneuF/UkQJIQQwu2F+HkBkFtYys/HLgBwZ387dIxvYOf6Bo8TzSJBkBBCCLe27mAG49761fp3M+Cp03AkU2/7izWwc32Dx4lmkSBICCGE21p3MINHlu8lU19S7f4yo5lHlu9l3cEM216wonO90qC1NhoIaqOME3YnQZAQQgi3ZDSZeembw9TXNuGlbw5jrNlivumqdK6vGQhV/H30K8o4YXcSBAkhhHBLO1NyycgrqfP7ZiAjr4SdKbm2vXDPcTDxQwi6rAhjRed6qRPkOFIsUQghhFuyFEa01bhG6TkOut+snAIrOK/kAFV0rheOI0GQEEIIt2QpkGircY2m1UFcon2eWzSIbIcJIYRwSwPjQogO9qkvRZnoYB8GxoU4clrCgSQIEkII4ZZ0Wg0v3NoTqDNFmRdu7YnOlgUThVORIEgIIYTbGt07moX39icquPqWV1SwDwvv7c/o3g3sIC9ckuQECSGEcGuje0dzU88odqbkkpVfQkSgsgUmK0AtnwRBQggh3J5OqyGhkw2apQqXItthQgghhHBLEgQJIYQQwi1JECSEEEIItyRBkBBCCCHckgRBQgghhHBLEgQJIYQQwi1JECSEEEIItyRBkBBCCCHckgRBQgghhHBLUjG6DmazGQC9Xq/yTIQQQgjRUJb3bcv7eH0kCKpDfn4+ALGxsSrPRAghhBCNlZ+fT3BwcL1jNOaGhEpuyGQykZ6eTmBgIAMHDmTXrl02e+5rrrmm2c+n1+uJjY3lzJkzBAUF2WhmQk22+HfRkrj6fw9nnL+ac3LUte11HVs/r7wP2I/ZbCY/P5+YmBi02vqzfmQlqA5arZa2bdsCoNPpbPoPzJbPFxQUJP/4Wwhb/ztzda7+38MZ56/mnBx1bXtdR94HXMuVVoAsJDG6Af74xz869fOJlkH+XVTn6v89nHH+as7JUde213XkfaBlku0wF6XX6wkODiYvL08+AQghhBuS94Hmk5UgF+Xt7c0LL7yAt7e32lMRQgihAnkfaD5ZCRJCCCGEW5KVICGEEEK4JQmChBBCCOGWJAgSQgghhFuSIEgIIYQQbkmCICGEEEK4JQmCWqBvv/2Wbt260aVLF5YsWaL2dIQQQjjYHXfcQevWrZkwYYLaU3FqckS+hSkvL6dnz55s2rSJoKAg+vfvz44dOwgJCVF7akIIIRxk06ZNFBQU8MEHH/DZZ5+pPR2nJStBLczOnTvp1asXbdq0ITAwkLFjx7J+/Xq1pyWEEMKBhg8fTmBgoNrTcHoSBDmZn3/+mVtvvZWYmBg0Gg1ffvlljTELFiwgLi4OHx8f4uPj2bp1q/V76enptGnTxvr3tm3bcu7cOUdMXQghhA00931ANJwEQU6msLCQq6++mrfeeqvW769atYpZs2bx/PPPs2/fPhITExkzZgxpaWkA1La7qdFo7DpnIYQQttPc9wHRcBIEOZkxY8bwz3/+kzvvvLPW77/xxhtMnz6dGTNm0KNHD+bPn09sbCwLFy4EoE2bNtVWfs6ePUt0dLRD5i6EEKL5mvs+IBpOgiAXUlpayp49exg5cmS1+0eOHMm2bdsAGDhwIAcPHuTcuXPk5+ezdu1aRo0apcZ0hRBC2FhD3gdEw3moPQHRcNnZ2RiNRiIjI6vdHxkZSWZmJgAeHh78+9//Zvjw4ZhMJp566ilCQ0PVmK4QQggba8j7AMCoUaPYu3cvhYWFtG3bli+++IJrrrnG0dN1ehIEuaDLc3zMZnO1+8aNG8e4ceMcPS0hhBAOcqX3ATkV3DCyHeZCwsLC0Ol01aJ9gKysrBqfCoQQQrQ88j5gWxIEuRAvLy/i4+PZuHFjtfs3btzIkCFDVJqVEEIIR5H3AduS7TAnU1BQwIkTJ6x/T0lJYf/+/YSEhNCuXTvmzJnD1KlTGTBgAAkJCbz77rukpaUxc+ZMFWcthBDCVuR9wHGkbYaT2bx5M8OHD69x/3333cf7778PKEWyXnvtNTIyMujduzf/+c9/uP766x08UyGEEPYg7wOOI0GQEEIIIdyS5AQJIYQQwi1JECSEEEIItyRBkBBCCCHckgRBQgghhHBLEgQJIYQQwi1JECSEEEIItyRBkBBCCCHckgRBQgghhHBLEgQJIYQQwi1JECSEEEIItyRBkBBCCCHckgRBQgghhHBL/w9QDs1j6ixhPAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.semilogx(prof['radius'], prof['p_1'],'o-')\n", + "plt.semilogx(prof['radius'], prof['p_2'],'o-')" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "43f6977b-2f1b-4cb8-8174-b89c49330129", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.semilogx(prof['radius'], prof['p_1'],'o-')\n", + "plt.semilogx(prof['radius'], prof['p_2'],'o-')" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "7be53728-cb36-475b-8e83-97218456259b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([0.0033342 , 0.00353476, 0.00012282, ..., 0.0023312 , 0.00338886,\n", + " 0.001035 ]),\n", + " array([-0.4730875 , 0.65235143, -0.47529549, ..., 0.00509239,\n", + " 0.00587522, -0.07689193]),\n", + " array([-1.10784107, 0.0594187 , 0.53015064, ..., 0.0030576 ,\n", + " 0.60804175, -0.2658378 ]))" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clmm.dataops.compute_tangential_and_cross_components(cluster_info['ra'], cluster_info['dec'],bg_cat['ra'],bg_cat['dec'],bg_cat['e1'], bg_cat['e2'], coordinate_system='celestial')" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "643ddc39-8c62-462f-9233-0fa025304f81", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(bg_cat['e1'], bg_cat['e2'],marker='.')" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "946bd648-b16a-4ab5-9488-dffac07040c3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGsCAYAAADg5swfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB18klEQVR4nO3de3wU1d0/8M/mfjFZCClsUCARUYlBboIgaCuCBamX2toHr6219KGFitjHIl5+4kMVtbZqi2KhSh+LQC9e8EoFoQoIQoGAMagQw0VIpEkgCQm5kJ3fH2HCXmZ2zszObXc/79eLlxI2O2dmZ2e+c873fI9HkiQJRERERA5IcroBRERElLgYiBAREZFjGIgQERGRYxiIEBERkWMYiBAREZFjGIgQERGRYxiIEBERkWMYiBAREZFjGIgQERGRYxiIEBERkWNiJhD58MMPcfXVV6N3797weDx4/fXXdf1+S0sLfvSjH2HQoEFISUnBddddF/aaf/3rX/B4PGF/PvvsM3N2goiIiILETCDS1NSEwYMHY8GCBYZ+v6OjA5mZmbjzzjsxfvz4iK/9/PPPUVVV1fVnwIABhrZJREREkaU43QBRkyZNwqRJk1T/va2tDQ888ABefvllHDt2DCUlJXj88cfxrW99CwCQnZ2NhQsXAgA2btyIY8eOqb5Xz5490a1bNxNbT0REREpipkdEy+23346NGzdixYoV2LVrF2644QZMnDgRe/bs0f1eQ4cORUFBAa644gqsW7fOgtYSERERECeBSEVFBZYvX46///3vuPTSS9G/f3/8z//8D8aOHYslS5YIv09BQQEWLVqEV155Ba+++irOO+88XHHFFfjwww8tbD0REVHiipmhmUi2b98OSZJw7rnnBv28tbUVPXr0EH6f8847D+edd17X30ePHo2DBw/iySefxGWXXWZae4mIiKhTXAQifr8fycnJ2LZtG5KTk4P+7YwzzojqvUeNGoWlS5dG9R5ERESkLC4CkaFDh6KjowNHjhzBpZdeaup779ixAwUFBaa+JxEREXWKmUDk+PHj2Lt3b9ffKysrUVpairy8PJx77rm4+eabcdttt+G3v/0thg4dipqaGqxduxaDBg3CVVddBQAoLy9HW1sb6urq0NjYiNLSUgDAkCFDAABPP/00CgsLccEFF6CtrQ1Lly7FK6+8gldeecXu3SUi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ISJXYllsimfMfTqNPSJE5Eosi03xirlPwRiIEJErcel6ikfMfQrHQISIXIllsSkeMfcpHAMRInItlsWmeMPcp3BMViUiV2NZbIonzH0Kx0CEiFyPZbEpXsi5T9X1LYp5Ih509vglUu4Th2aIiIhswtyncAxEiIiIbMTcp2AcmiEiIrIZc59OYyBCRETkAOY+deLQDBERETmGgQgRERE5hoEIEREROYaBCBERETmGgQgRERE5hoEIEREROYaBCBERETmGgQgRERE5hoEIEREROcbVlVUlqXNtwoaGBodbQkRERKLk+7Z8H4/E1YFIY2MjAKBPnz4Ot4SIiIj0amxshNfrjfgajyQSrjjE7/fj8OHDyMnJgcdj7kJADQ0N6NOnDw4ePIjc3FxT3zsWcP+5/4m8/wCPAfef+2/l/kuShMbGRvTu3RtJSZGzQFzdI5KUlISzzjrL0m3k5uYm5Eko4/5z/xN5/wEeA+4/99+q/dfqCZExWZWIiIgcw0CEiIiIHJOwgUh6ejoeeughpKenO90UR3D/uf+JvP8AjwH3n/vvlv13dbIqERERxbeE7REhIiIi5zEQISIiIscwECEiIiLHMBAhIiIixyRkIPLcc8+hqKgIGRkZGD58ONavX+90k2wzf/58jBgxAjk5OejZsyeuu+46fP755043yxHz58+Hx+PBXXfd5XRTbHXo0CHccsst6NGjB7KysjBkyBBs27bN6WbZ4uTJk3jggQdQVFSEzMxMnH322fjf//1f+P1+p5tmmQ8//BBXX301evfuDY/Hg9dffz3o3yVJwty5c9G7d29kZmbiW9/6Fj799FNnGmuBSPvf3t6O2bNnY9CgQcjOzkbv3r1x22234fDhw8412GRan3+g//7v/4bH48HTTz9tW/uABAxE/vrXv+Kuu+7C/fffjx07duDSSy/FpEmTcODAAaebZosPPvgA06dPx+bNm7F69WqcPHkSV155JZqampxumq22bt2KRYsW4cILL3S6KbY6evQoxowZg9TUVLz77rsoLy/Hb3/7W3Tr1s3pptni8ccfx/PPP48FCxZg9+7deOKJJ/Cb3/wGf/jDH5xummWampowePBgLFiwQPHfn3jiCfzud7/DggULsHXrVvh8PkyYMKFrra9YF2n/m5ubsX37djz44IPYvn07Xn31VXzxxRe45pprHGipNbQ+f9nrr7+Ojz/+GL1797apZQGkBDNy5Ehp2rRpQT87//zzpXvvvdehFjnryJEjEgDpgw8+cLoptmlsbJQGDBggrV69WvrmN78pzZw50+km2Wb27NnS2LFjnW6GYyZPniz9+Mc/DvrZ9ddfL91yyy0OtcheAKTXXnut6+9+v1/y+XzSY4891vWzlpYWyev1Ss8//7wDLbRW6P4r2bJliwRA2r9/vz2NspHa/n/11VfSmWeeKZWVlUn9+vWTnnrqKVvblVA9Im1tbdi2bRuuvPLKoJ9feeWV+OijjxxqlbPq6+sBAHl5eQ63xD7Tp0/H5MmTMX78eKebYrs33ngDF110EW644Qb07NkTQ4cOxeLFi51ulm3Gjh2L999/H1988QUAYOfOndiwYQOuuuoqh1vmjMrKSlRXVwddE9PT0/HNb34zoa+JHo8nYXoJ/X4/br31Vtxzzz244IILHGmDqxe9M1tNTQ06OjrQq1evoJ/36tUL1dXVDrXKOZIk4e6778bYsWNRUlLidHNssWLFCmzfvh1bt251uimO+PLLL7Fw4ULcfffduO+++7BlyxbceeedSE9Px2233eZ08yw3e/Zs1NfX4/zzz0dycjI6OjrwyCOP4MYbb3S6aY6Qr3tK18T9+/c70SRHtbS04N5778VNN92UMAvhPf7440hJScGdd97pWBsSKhCReTyeoL9LkhT2s0QwY8YM7Nq1Cxs2bHC6KbY4ePAgZs6ciffeew8ZGRlON8cRfr8fF110ER599FEAwNChQ/Hpp59i4cKFCRGI/PWvf8XSpUuxbNkyXHDBBSgtLcVdd92F3r1744c//KHTzXMMr4mdiatTpkyB3+/Hc88953RzbLFt2zY888wz2L59u6Ofd0INzeTn5yM5OTms9+PIkSNhTwTx7he/+AXeeOMNrFu3DmeddZbTzbHFtm3bcOTIEQwfPhwpKSlISUnBBx98gN///vdISUlBR0eH0020XEFBAYqLi4N+NnDgwIRJ1r7nnntw7733YsqUKRg0aBBuvfVWzJo1C/Pnz3e6aY7w+XwAkPDXxPb2dvzgBz9AZWUlVq9enTC9IevXr8eRI0fQt2/frmvi/v378ctf/hKFhYW2tSOhApG0tDQMHz4cq1evDvr56tWrcckllzjUKntJkoQZM2bg1Vdfxdq1a1FUVOR0k2xzxRVX4JNPPkFpaWnXn4suugg333wzSktLkZyc7HQTLTdmzJiw6dpffPEF+vXr51CL7NXc3IykpODLXnJyclxP342kqKgIPp8v6JrY1taGDz74IGGuiXIQsmfPHqxZswY9evRwukm2ufXWW7Fr166ga2Lv3r1xzz334J///Kdt7Ui4oZm7774bt956Ky666CKMHj0aixYtwoEDBzBt2jSnm2aL6dOnY9myZVi5ciVycnK6noS8Xi8yMzMdbp21cnJywnJhsrOz0aNHj4TJkZk1axYuueQSPProo/jBD36ALVu2YNGiRVi0aJHTTbPF1VdfjUceeQR9+/bFBRdcgB07duB3v/sdfvzjHzvdNMscP34ce/fu7fp7ZWUlSktLkZeXh759++Kuu+7Co48+igEDBmDAgAF49NFHkZWVhZtuusnBVpsn0v737t0b3//+97F9+3a89dZb6Ojo6Lom5uXlIS0tzalmm0br8w8NvFJTU+Hz+XDeeefZ10hb5+i4xLPPPiv169dPSktLk4YNG5ZQU1cBKP5ZsmSJ001zRKJN35UkSXrzzTelkpISKT09XTr//POlRYsWOd0k2zQ0NEgzZ86U+vbtK2VkZEhnn322dP/990utra1ON80y69atU/zO//CHP5QkqXMK70MPPST5fD4pPT1duuyyy6RPPvnE2UabKNL+V1ZWql4T161b53TTTaH1+YdyYvquR5IkyaaYh4iIiChIQuWIEBERkbswECEiIiLHMBAhIiIixzAQISIiIscwECEiIiLHMBAhIiIixzAQISIiIscwECEiIiLHMBAhIiIixzAQISIiIscwECEiIiLHMBAhIiIix/x/i4buILkzey8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(bg_cat['distance_arcmin'], bg_cat['tangential_comp_clmm'])" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "642c772f-6c46-49c8-ae8a-bf1a2e2a2b53", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(bg_cat['distance_arcmin'], bg_cat['cross_comp_clmm'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5342836a-4db9-46ff-b0db-752a7216dc52", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "txpipe", + "language": "python", + "name": "txpipe" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/Run_CL_pipeline.ipynb b/notebooks/cluster_counts/Run_CL_pipeline.ipynb similarity index 99% rename from notebooks/Run_CL_pipeline.ipynb rename to notebooks/cluster_counts/Run_CL_pipeline.ipynb index d5d36f83b..a601245f4 100644 --- a/notebooks/Run_CL_pipeline.ipynb +++ b/notebooks/cluster_counts/Run_CL_pipeline.ipynb @@ -36,7 +36,10 @@ "import numpy as np\n", "import yaml\n", "from IPython.display import Image\n", - "from astropy.table import Table" + "from astropy.table import Table\n", + "\n", + "import re\n", + "import sacc" ] }, { @@ -831,21 +834,13 @@ "\n", "plt.legend()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cbbb41db-bf84-4b71-a316-66d27ebcb293", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "TXPipe-2023-Jul-12", + "display_name": "Python (firecrown2.0)", "language": "python", - "name": "txpipe-2023-jul-12" + "name": "firecrown" }, "language_info": { "codemirror_mode": { @@ -857,7 +852,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.12.5" } }, "nbformat": 4, diff --git a/notebooks/cluster_counts/generate-20deg2-sample.ipynb b/notebooks/cluster_counts/generate-20deg2-sample.ipynb new file mode 100644 index 000000000..e2f11442e --- /dev/null +++ b/notebooks/cluster_counts/generate-20deg2-sample.ipynb @@ -0,0 +1,358 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "c0a6788b-58c9-4ab0-9be0-95951f8e7184", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import sys\n", + "import os\n", + "import ceci\n", + "# get current directory\n", + "import os\n", + "notebook_dir = os.path.abspath(\"\")\n", + "txpipe_dir = os.path.join(notebook_dir, \"../..\")\n", + "sys.path.append(txpipe_dir)\n", + "import txpipe" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "903b173a-6629-4e04-8bef-db8a2ad6a15c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# These six pixels come to about 23 deg^2\n", + "pixels = [8786, 8787, 8788, 8914, 8915, 9043]\n", + "outdir = \"./data/cosmodc2/inputs-20deg2\"\n", + "extra_cols=\"redshift_true\"\n", + "response_model=\"{txpipe_dir}/data/DESY1-R-model.hdf5\"\n", + "\n", + "# prepare to run\n", + "os.makedirs(outdir, exist_ok=True)\n", + "\n", + "# configure the stage\n", + "stage = txpipe.TXCosmoDC2Mock.make_stage(\n", + " response_model=response_model,\n", + " shear_catalog=f\"{outdir}/shear_catalog.hdf5\",\n", + " photometry_catalog=f\"{outdir}/photometry_catalog.hdf5\",\n", + " healpixels=pixels,\n", + " extra_cols=extra_cols\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5bf229ec-b92d-4275-92a2-b2a8e9a62dc7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading from catalog cosmoDC2\n", + "Rank 0 loaded: length = 103303103.\n", + "Loading chunk 1/18\n", + "Process 0 read chunk 0 - 2409001 of 103303103\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/pscratch/sd/z/zuntz/TXPipe/txpipe/ingest/mocks.py:1172: RuntimeWarning: invalid value encountered in log10\n", + " mag_obs = 25 - 2.5 * np.log10(n_obs / factor / t_b / n_visit)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removing 59 objects with identically zero shear in both terms\n", + "Detected 1451813 out of 2409001 objects (60.3%)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/pscratch/sd/z/zuntz/TXPipe/txpipe/ingest/mocks.py:490: RuntimeWarning: divide by zero encountered in log10\n", + " log10_snr = np.log10(snr)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- Rank 0 writing output to 0-1451813\n", + "Loading chunk 2/18\n", + "Process 0 read chunk 2409001 - 4800628 of 103303103\n", + "Removing 59 objects with identically zero shear in both terms\n", + "Detected 1433760 out of 2391627 objects (59.9%)\n", + "- Rank 0 writing output to 1451813-2885573\n", + "Loading chunk 3/18\n", + "Process 0 read chunk 4800628 - 7181747 of 103303103\n", + "Removing 66 objects with identically zero shear in both terms\n", + "Detected 1422957 out of 2381119 objects (59.8%)\n", + "- Rank 0 writing output to 2885573-4308530\n", + "Loading chunk 4/18\n", + "Process 0 read chunk 7181747 - 9575270 of 103303103\n", + "Removing 64 objects with identically zero shear in both terms\n", + "Detected 1435245 out of 2393523 objects (60.0%)\n", + "- Rank 0 writing output to 4308530-5743775\n", + "Loading chunk 5/18\n", + "Process 0 read chunk 9575270 - 11985392 of 103303103\n", + "Removing 61 objects with identically zero shear in both terms\n", + "Detected 1452481 out of 2410122 objects (60.3%)\n", + "- Rank 0 writing output to 5743775-7196256\n", + "Loading chunk 6/18\n", + "Process 0 read chunk 11985392 - 14358906 of 103303103\n", + "Removing 62 objects with identically zero shear in both terms\n", + "Detected 1415772 out of 2373514 objects (59.6%)\n", + "- Rank 0 writing output to 7196256-8612028\n", + "Loading chunk 7/18\n", + "Process 0 read chunk 14358906 - 20872507 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 2086773 out of 6513601 objects (32.0%)\n", + "- Rank 0 writing output to 8612028-10698801\n", + "Loading chunk 8/18\n", + "Process 0 read chunk 20872507 - 27294236 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 2005527 out of 6421729 objects (31.2%)\n", + "- Rank 0 writing output to 10698801-12704328\n", + "Loading chunk 9/18\n", + "Process 0 read chunk 27294236 - 33728144 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 2020810 out of 6433908 objects (31.4%)\n", + "- Rank 0 writing output to 12704328-14725138\n", + "Loading chunk 10/18\n", + "Process 0 read chunk 33728144 - 40196143 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 2045933 out of 6467999 objects (31.6%)\n", + "- Rank 0 writing output to 14725138-16771071\n", + "Loading chunk 11/18\n", + "Process 0 read chunk 40196143 - 46626501 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 2016340 out of 6430358 objects (31.4%)\n", + "- Rank 0 writing output to 16771071-18787411\n", + "Loading chunk 12/18\n", + "Process 0 read chunk 46626501 - 53042728 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 2007384 out of 6416227 objects (31.3%)\n", + "- Rank 0 writing output to 18787411-20794795\n", + "Loading chunk 13/18\n", + "Process 0 read chunk 53042728 - 61375656 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 754346 out of 8332928 objects (9.1%)\n", + "- Rank 0 writing output to 20794795-21549141\n", + "Loading chunk 14/18\n", + "Process 0 read chunk 61375656 - 69797162 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 790467 out of 8421506 objects (9.4%)\n", + "- Rank 0 writing output to 21549141-22339608\n", + "Loading chunk 15/18\n", + "Process 0 read chunk 69797162 - 78145829 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 762637 out of 8348667 objects (9.1%)\n", + "- Rank 0 writing output to 22339608-23102245\n", + "Loading chunk 16/18\n", + "Process 0 read chunk 78145829 - 86535724 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 773673 out of 8389895 objects (9.2%)\n", + "- Rank 0 writing output to 23102245-23875918\n", + "Loading chunk 17/18\n", + "Process 0 read chunk 86535724 - 94910785 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 767506 out of 8375061 objects (9.2%)\n", + "- Rank 0 writing output to 23875918-24643424\n", + "Loading chunk 18/18\n", + "Process 0 read chunk 94910785 - 103303103 of 103303103\n", + "Removing 0 objects with identically zero shear in both terms\n", + "Detected 775297 out of 8392318 objects (9.2%)\n", + "- Rank 0 writing output to 24643424-25418721\n", + "Resizing all outupts to size 25418721\n", + "Resizing dec\n", + "Resizing extendedness\n", + "Resizing id\n", + "Resizing mag_g\n", + "Resizing mag_g_err\n", + "Resizing mag_i\n", + "Resizing mag_i_err\n", + "Resizing mag_r\n", + "Resizing mag_r_err\n", + "Resizing mag_u\n", + "Resizing mag_u_err\n", + "Resizing mag_y\n", + "Resizing mag_y_err\n", + "Resizing mag_z\n", + "Resizing mag_z_err\n", + "Resizing ra\n", + "Resizing redshift_true\n", + "Resizing snr_g\n", + "Resizing snr_i\n", + "Resizing snr_r\n", + "Resizing snr_u\n", + "Resizing snr_y\n", + "Resizing snr_z\n", + "Resizing 00/T\n", + "Resizing 00/T_err\n", + "Resizing 00/dec\n", + "Resizing 00/flags\n", + "Resizing 00/g1\n", + "Resizing 00/g2\n", + "Resizing 00/id\n", + "Resizing 00/mag_err_i\n", + "Resizing 00/mag_err_r\n", + "Resizing 00/mag_err_z\n", + "Resizing 00/mag_i\n", + "Resizing 00/mag_r\n", + "Resizing 00/mag_z\n", + "Resizing 00/mcal_psf_T_mean\n", + "Resizing 00/mcal_psf_g1\n", + "Resizing 00/mcal_psf_g2\n", + "Resizing 00/psf_g1\n", + "Resizing 00/psf_g2\n", + "Resizing 00/ra\n", + "Resizing 00/redshift_true\n", + "Resizing 00/s2n\n", + "Resizing 00/true_g1\n", + "Resizing 00/true_g2\n", + "Resizing 00/weight\n", + "Resizing 1m/T\n", + "Resizing 1m/T_err\n", + "Resizing 1m/dec\n", + "Resizing 1m/flags\n", + "Resizing 1m/g1\n", + "Resizing 1m/g2\n", + "Resizing 1m/id\n", + "Resizing 1m/mag_err_i\n", + "Resizing 1m/mag_err_r\n", + "Resizing 1m/mag_err_z\n", + "Resizing 1m/mag_i\n", + "Resizing 1m/mag_r\n", + "Resizing 1m/mag_z\n", + "Resizing 1m/mcal_psf_T_mean\n", + "Resizing 1m/mcal_psf_g1\n", + "Resizing 1m/mcal_psf_g2\n", + "Resizing 1m/psf_g1\n", + "Resizing 1m/psf_g2\n", + "Resizing 1m/ra\n", + "Resizing 1m/s2n\n", + "Resizing 1m/weight\n", + "Resizing 1p/T\n", + "Resizing 1p/T_err\n", + "Resizing 1p/dec\n", + "Resizing 1p/flags\n", + "Resizing 1p/g1\n", + "Resizing 1p/g2\n", + "Resizing 1p/id\n", + "Resizing 1p/mag_err_i\n", + "Resizing 1p/mag_err_r\n", + "Resizing 1p/mag_err_z\n", + "Resizing 1p/mag_i\n", + "Resizing 1p/mag_r\n", + "Resizing 1p/mag_z\n", + "Resizing 1p/mcal_psf_T_mean\n", + "Resizing 1p/mcal_psf_g1\n", + "Resizing 1p/mcal_psf_g2\n", + "Resizing 1p/psf_g1\n", + "Resizing 1p/psf_g2\n", + "Resizing 1p/ra\n", + "Resizing 1p/s2n\n", + "Resizing 1p/weight\n", + "Resizing 2m/T\n", + "Resizing 2m/T_err\n", + "Resizing 2m/dec\n", + "Resizing 2m/flags\n", + "Resizing 2m/g1\n", + "Resizing 2m/g2\n", + "Resizing 2m/id\n", + "Resizing 2m/mag_err_i\n", + "Resizing 2m/mag_err_r\n", + "Resizing 2m/mag_err_z\n", + "Resizing 2m/mag_i\n", + "Resizing 2m/mag_r\n", + "Resizing 2m/mag_z\n", + "Resizing 2m/mcal_psf_T_mean\n", + "Resizing 2m/mcal_psf_g1\n", + "Resizing 2m/mcal_psf_g2\n", + "Resizing 2m/psf_g1\n", + "Resizing 2m/psf_g2\n", + "Resizing 2m/ra\n", + "Resizing 2m/s2n\n", + "Resizing 2m/weight\n", + "Resizing 2p/T\n", + "Resizing 2p/T_err\n", + "Resizing 2p/dec\n", + "Resizing 2p/flags\n", + "Resizing 2p/g1\n", + "Resizing 2p/g2\n", + "Resizing 2p/id\n", + "Resizing 2p/mag_err_i\n", + "Resizing 2p/mag_err_r\n", + "Resizing 2p/mag_err_z\n", + "Resizing 2p/mag_i\n", + "Resizing 2p/mag_r\n", + "Resizing 2p/mag_z\n", + "Resizing 2p/mcal_psf_T_mean\n", + "Resizing 2p/mcal_psf_g1\n", + "Resizing 2p/mcal_psf_g2\n", + "Resizing 2p/psf_g1\n", + "Resizing 2p/psf_g2\n", + "Resizing 2p/ra\n", + "Resizing 2p/s2n\n", + "Resizing 2p/weight\n" + ] + } + ], + "source": [ + "# run the stage\n", + "stage.run()\n", + "\n", + "# move the stage outputs to their final locations\n", + "stage.finalize()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "93596750-611a-4401-81d5-8d8a9fd84c77", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/cluster_counts/plot-clusters-and-shear-radec.ipynb b/notebooks/cluster_counts/plot-clusters-and-shear-radec.ipynb new file mode 100644 index 000000000..dde736da8 --- /dev/null +++ b/notebooks/cluster_counts/plot-clusters-and-shear-radec.ipynb @@ -0,0 +1,104 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import h5py\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# Get the path to the data files\n", + "data_dir = \"data/cosmodc2/20deg2\"\n", + "\n", + "# open the cluster and shear catalogs\n", + "clusters = h5py.File(os.path.join(data_dir, \"cluster_catalog.hdf5\"), \"r\")\n", + "shear = h5py.File(os.path.join(data_dir, \"shear_catalog.hdf5\"), \"r\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# Get the RAs and Decs of the clusters and galaxies\n", + "cluster_ra = clusters['clusters/ra'][:]\n", + "cluster_dec = clusters['clusters/dec'][:]\n", + "gal_ra = shear[\"shear/00/ra\"][:]\n", + "gal_dec = shear[\"shear/00/dec\"][:]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the galaxies and clusters\n", + "# Note the overspilling source galaxies!\n", + "plt.plot(gal_ra, gal_dec, ',', label=\"Galaxies\")\n", + "plt.plot(cluster_ra, cluster_dec, 'x', label=\"Clusters\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/txpipe_cluster_background_selection.ipynb b/notebooks/cluster_counts/txpipe_cluster_background_selection.ipynb similarity index 100% rename from notebooks/txpipe_cluster_background_selection.ipynb rename to notebooks/cluster_counts/txpipe_cluster_background_selection.ipynb diff --git a/notebooks/exploring-cluster-shear-cat.ipynb b/notebooks/exploring-cluster-shear-cat.ipynb deleted file mode 100644 index 67945285d..000000000 --- a/notebooks/exploring-cluster-shear-cat.ipynb +++ /dev/null @@ -1,170 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "22c8ad11", - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import numpy as np\n", - "import h5py\n", - "import matplotlib.pyplot as plt\n", - "\n", - "# Run this notebook from the directory above\n", - "import os\n", - "wd = os.getcwd()\n", - "if wd.endswith(\"notebooks\"):\n", - " os.chdir(\"..\")\n", - "\n", - "from txpipe.extensions.clmm import CombinedClusterCatalog" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "54afb11b", - "metadata": {}, - "outputs": [], - "source": [ - "ccc = CombinedClusterCatalog.from_pipeline_file(\"examples/clmm/pipeline.yml\", run_dir='.')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "b31336e0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'cluster_id': 11,\n", - " 'dec': -30.89586711375849,\n", - " 'ra': 60.69667268260482,\n", - " 'redshift': 0.49929956,\n", - " 'redshift_err': 0.0029379127,\n", - " 'richness': 167.65639,\n", - " 'richness_err': 2.9917574,\n", - " 'scaleval': 0.99996734}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ccc.get_cluster_info(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "4d6d30d1", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "GCData
defined by: cosmo=None
with columns: ra, dec, e1, e2, weight_clmm, distance_arcmin, weight_original
1694 objects
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
radece1e2weight_clmmdistance_arcminweight_original
float64float64float64float64float64float64float64
60.59635761053693-30.8260003779027370.275053932735129-0.53204889879811631.7164652598626878e-306.6534091711436351.0
60.55536189127804-30.95787168426982-0.043449147611295424-0.071002563416499921.5452863038940529e-308.1694353342982261.0
60.93676538239242-30.914970911680950.415554215210915570.52298225752796922.7602431944338706e-3112.413239084623731.0
60.769936503988525-30.803768581493113-0.16033480513831044-0.186010321313231171.5849370137814075e-306.6916280094932571.0
60.86507312308878-30.802725001246305-0.4049474464054218-0.124424284614785181.6708713604839428e-3010.3188427051036951.0
60.487871132381436-30.8809228736062950.74413518992592280.33995078181950111.669308058472855e-3010.7885440273610241.0
60.567256865482065-30.791502410292540.43188772652668567-0.084527650799590761.6450691479797577e-309.146400720758611.0
60.47921983167086-30.8723184483627660.068853818169173560.0114783689787723211.606989320020192e-3011.2859702999425851.0
60.601814131788956-30.7167204161699630.12677347513205434-0.490121796700681571.7206803962433668e-3011.808207044091891.0
60.6501947202916-30.76323680651739-0.093109901663921150.194094402405423081.4869337631204944e-308.3103008546809711.0
60.51496630723731-30.919116220467018-0.399711428720184340.52488315962180382.8107294511691644e-319.457657186931271.0
60.48391083451601-30.870347393457260.092887222498119050.4716617601589381.3854889601748336e-3011.0622212883854051.0
60.826482734690316-30.7195044596699670.3215442092227498-0.157542495551513781.7195266290896294e-3012.518937649075241.0
60.89048736961322-30.9142989442376330.25158514522400816-0.19681497972807622.0390206864659598e-3010.0389044665004761.0
60.7922375420297-30.947720139812493-0.13464390379138260.216885672339222931.2878917814267056e-305.8202513158249561.0
60.51944416087517-30.9842355413240680.48249217497360870.24510766936767691.677195789186886e-3010.5497642273428771.0
60.534800274815574-30.72886247187848-0.014267370133427180.145078422811704851.6065574378131178e-3013.0378489415095841.0
60.62267063540467-30.877483696112513-0.0893823798304657-0.117971787360013151.6489048136004793e-303.96687546512978931.0
60.543088424318725-30.9574371085162530.24209135092131610.44658226912378577.698135747726568e-318.7255227503220091.0
60.512584641054715-30.960723332798405-0.211750437137718540.0315987718947921.2917431543671695e-3010.2427512463691141.0
60.89644555657454-30.934400847846096-0.20442641758200586-0.07941094062867271.273738726662111e-3010.5401590764144861.0
60.673248734006016-30.751488072069765-0.30494416389410610.080491185922733291.0258387167753527e-308.7464137430608671.0
60.897465695413416-30.7471767922604470.08316732781744483-0.12056282000076141.6227087693545765e-3013.6613597448223151.0
60.75055298380179-30.9988728154037640.106797032683438510.0243655002701989551.5096522224513432e-306.7737657655597211.0
.....................
60.490967588416446-30.96790898901157-0.24893018137302525-0.371975006549324751.7261295904006743e-3011.4353831661923791.0
60.85626375792608-30.897541287643960.5098248612008727-0.187370541676561921.811147225281077e-308.217266198286571.0
60.683678693709155-30.850106451923950.077709607384510480.33740458700426871.6638312957643923e-302.82600878376989951.0
60.55862269598719-30.8053781921625070.0024909891306186226-0.0130652587803469151.8222540252175127e-308.946741015560161.0
60.54322273170663-30.96285974703345-0.13440965951388414-0.14283016494822991.7689813827201324e-308.8618114197613611.0
60.57337303672716-30.982990598112288-0.48485248653923896-0.175258762614653921.6925604736236124e-308.2212528213177941.0
60.64770936225752-30.939897311825682-0.155036032139984960.14365357802578521.5611230337078468e-303.65121083756102261.0
60.768838990407644-30.7738714105632350.053736885589125770.0300294885981332171.559496576978714e-308.2098478688864311.0
60.838550684433216-30.9250361313869850.21141700084444230.0052954428300441691.4052107906962137e-307.5103968495133931.0
60.527327617582564-30.8954179378393870.14562302441882577-0.064649976185407351.7068160723017843e-308.718981061885241.0
60.9115117267014-30.94948041158140.12458972641076539-0.044061597162267671.7653155231578795e-3011.5165087809500641.0
60.55363121868065-30.7854457231151670.149959520307821140.118390138033242971.7895727393510642e-309.9093348603136691.0
60.897248402873124-30.7885428201825280.056130195054040610.106645666690825441.667015491557549e-3012.174979928204711.0
60.77612131788987-30.96591015648950.02057241636251002-0.0555550197139896561.5723550202920559e-305.8635872547658661.0
60.88962933059886-30.96776464649485-0.0181837624036271620.082131662969378991.757684399953991e-3010.8273349237000561.0
60.897869333951746-30.86878457742644-0.221843165630452060.36736334237824741.77505643460347e-3010.4869552937219931.0
60.67871728218924-30.7019509609261260.0063410434094445980.110568938298444611.758588536559553e-3011.6717115293412641.0
60.616356137084765-30.7417472346082970.110089540413868220.033691527845487551.7663209955149514e-3010.1310328973815431.0
60.73588208876945-30.8628601891240850.140057331394783820.096896282045821261.5554116144802598e-302.8282081367438141.0
60.60436413626752-30.70565579909378-0.244163128086413520.1075378664327361.771912160588928e-3012.3645183503518071.0
60.605370571138735-30.858254453953330.165457645900371960.17295738800377051.5695443130942337e-305.2152734778973391.0
60.81411263548259-30.94973132696586-0.2807586435059206-0.0116538947415823681.723245684873587e-306.85454458859595751.0
60.74936867217333-30.817139638087130.182905513013108120.00066252008558411211.5955560261914923e-305.447924296291431.0
60.47917793738627-30.7869236380893840.261457591427542770.26506040123351481.7439843133192543e-3012.9716628821080491.0
60.897780800203-30.980243836581284-0.41340348327078020.15196891706420811.6481054330764e-3011.5215624788095321.0
" - ], - "text/plain": [ - "GCData(cosmo=None, columns: ra, dec, e1, e2, weight_clmm, distance_arcmin, weight_original)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ccc.get_background_shear_catalog(0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8afb8a42", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/txpipe/__init__.py b/txpipe/__init__.py index 7bc8b4277..1907096e4 100755 --- a/txpipe/__init__.py +++ b/txpipe/__init__.py @@ -43,5 +43,5 @@ # Here are the stages that mostly will be used for other projects # such as the self-calibration of Intrinsic alignment. from .extensions.twopoint_scia import TXSelfCalibrationIA -from .extensions.clmm import CLClusterShearCatalogs, CLClusterBinningRedshiftRichness +from .extensions.cluster_counts import CLClusterShearCatalogs, CLClusterBinningRedshiftRichness from .covariance_nmt import TXFourierNamasterCovariance, TXRealNamasterCovariance diff --git a/txpipe/data_types/types.py b/txpipe/data_types/types.py index c5d6d6bb4..4aae6351b 100755 --- a/txpipe/data_types/types.py +++ b/txpipe/data_types/types.py @@ -81,11 +81,22 @@ def get_primary_catalog_group(self): else: return "shear" + def get_true_redshift_column(self): + if self.catalog_type == "metadetect": + return "00/redshift_true" + else: + return "redshift_true" def get_primary_catalog_names(self, true_shear=False): if true_shear: - shear_cols = ["true_g1", "true_g2", "ra", "dec", "weight"] - rename = {"true_g1": "g1", "true_g2": "g2"} + if self.catalog_type == "metadetect": + shear_cols = ["00/true_g1", "00/true_g2", "00/ra", "00/dec", "00/weight"] + rename = {c: c[3:] for c in shear_cols} + rename["00/true_g1"] = "g1" + rename["00/true_g2"] = "g2" + else: + rename = {"true_g1": "g1", "true_g2": "g2"} + rename = {} elif self.catalog_type == "metacal": shear_cols = ["mcal_g1", "mcal_g2", "ra", "dec", "weight"] rename = {"mcal_g1": "g1", "mcal_g2": "g2"} diff --git a/txpipe/extensions/README.md b/txpipe/extensions/README.md index af0878f48..3a436a4e8 100644 --- a/txpipe/extensions/README.md +++ b/txpipe/extensions/README.md @@ -1,18 +1,10 @@ Contents ======== -clmm +cluster_counts ---- -These stages are for locating catalogs of background galaxies for mass modelling. It is designed to make inputs to CLMM. - - -cluster_mag ------------ - -These stages are for doing tangential shear measurements around clusters directly, not using CLMM. - -They are older and may not be useful, so are not imported automatically. +These stages are for cluster counts and lesing profile measurements. twopoint_scia diff --git a/txpipe/extensions/__init__.py b/txpipe/extensions/__init__.py index f92e86879..acaeeab78 100644 --- a/txpipe/extensions/__init__.py +++ b/txpipe/extensions/__init__.py @@ -1 +1 @@ -from .clmm import * +from .cluster_counts import * diff --git a/txpipe/extensions/clmm/select.py b/txpipe/extensions/clmm/select.py deleted file mode 100644 index 4427688fb..000000000 --- a/txpipe/extensions/clmm/select.py +++ /dev/null @@ -1,541 +0,0 @@ -import os -import gc -import numpy as np -from ...base_stage import PipelineStage -from ...data_types import ShearCatalog, HDFFile, PhotozPDFFile, FiducialCosmology, TomographyCatalog, ShearCatalog -from ...utils.calibrators import Calibrator -from collections import defaultdict -import yaml -import ceci - -class CLClusterShearCatalogsOld(PipelineStage): - name = "CLClusterShearCatalogsOld" - inputs = [ - ("cluster_catalog", HDFFile), - ("shear_catalog", ShearCatalog), - ("fiducial_cosmology", FiducialCosmology), - ("shear_tomography_catalog", TomographyCatalog), - ("source_photoz_pdfs", PhotozPDFFile), - ] - - outputs = [ - ("cluster_shear_catalogs", HDFFile), - ] - - config_options = { - "chunk_rows": 100_000, # rows to read at once from source cat - "max_radius": 10.0, # Mpc - "delta_z": 0.1, - "redshift_criterion": "mean", # might also need PDF - "subtract_mean_shear": True, - } - - def run(self): - import sklearn.neighbors - import astropy - import h5py - import clmm - import clmm.cosmology.ccl - - # load cluster catalog as an astropy table - clusters = self.load_cluster_catalog() - ncluster = len(clusters) - - # turn the physical scale max_radius to an angular scale at the redshift of each cluster - cluster_theta_max = self.compute_theta_max(clusters["redshift"]) - - # For the neighbour search, sklearn doesn't let us have - # a different distance per cluster. So we use the maximum - # distance over all the clusters and then filter down later. - max_theta_max = cluster_theta_max.max() - max_theta_max_arcmin = np.degrees(max_theta_max) * 60 - if self.rank == 0: - print(f"Max theta_max = {max_theta_max} radians = {max_theta_max_arcmin} arcmin") - - # make a Ball Tree that we can use to find out which objects - # are nearby any clusters - pos = np.radians([clusters["dec"], clusters["ra"]]).T - tree = sklearn.neighbors.BallTree(pos, metric="haversine") - - # Store the neighbours for each cluster - per_cluster_data = [list() for i in range(ncluster)] - - with self.open_input("fiducial_cosmology", wrapper=True) as f: - ccl_cosmo = f.to_ccl() - clmm_cosmo = clmm.cosmology.ccl.CCLCosmology() - clmm_cosmo.set_be_cosmo(ccl_cosmo) - - # Buffer in redshift behind each object - delta_z = self.config["delta_z"] - - # Loop through the source catalog. - for s, e, data in self.iterate_source_catalog(): - print(f"Process {self.rank} processing chunk {s:,} - {e:,}") - - nearby_gals, nearby_gal_dists = self.find_galaxies_near_each_cluster(data, clusters, tree, max_theta_max) - - # Now we have all the galaxies near each cluster - # We need to cut down to a specific radius for this - # cluster - for cluster_index, gal_index in nearby_gals.items(): - # gal_index is an index into this chunk of galaxy data - # pointing to all the galaxies near this cluster - gal_index = np.array(gal_index) - distance = np.array(nearby_gal_dists[cluster_index]) - - if gal_index.size == 0: - continue - - # Cut down to galaxies close enough to this cluster - dist_good = distance < cluster_theta_max[cluster_index] - gal_index = gal_index[dist_good] - distance = distance[dist_good] - - if gal_index.size == 0: - continue - - cluster_z = clusters[cluster_index]["redshift"] - # # Cut down to clusters that are in front of this galaxy - zgal = data["redshift"][gal_index] - z_good = zgal > cluster_z + delta_z - gal_index = gal_index[z_good] - distance = distance[z_good] - - if gal_index.size == 0: - continue - - # Compute weights - weights = self.compute_weights(clmm_cosmo, data, gal_index, cluster_z) - - # we want to save the index into the overall shear catalog, - # not just into this chunk of data - global_index = data["original_index"][gal_index] - per_cluster_data[cluster_index].append((global_index, distance, weights)) - - gc.collect() - - print(f"Process {self.rank} done reading") - - # The overall number of cluster-galaxy pairs - # Each item in per_cluster_data is a list of arrays. - # Flattening that list of arrays into a single array - # gives the entire galaxy sample for that cluster - my_counts = np.array([sum(len(x[0]) for x in d) for d in per_cluster_data]) - # This is now the number of cluster-galaxy pairs found by this - # process. We also want the sum from all the processes - my_total_count = my_counts.sum() - if self.comm is None: - total_count = my_total_count - else: - total_count = int(self.comm.allreduce(my_total_count)) - - # The root process saves all the data. First it setps up the output - # file here. - if self.rank == 0: - print("Overall pair count = ", total_count) - outfile = self.open_output("cluster_shear_catalogs") - # Create space for the catalog - catalog_group = outfile.create_group("catalog") - catalog_group.create_dataset("cluster_sample_start", shape=(ncluster,), dtype=np.int32) - catalog_group.create_dataset("cluster_sample_count", shape=(ncluster,), dtype=np.int32) - catalog_group.create_dataset("cluster_id", shape=(ncluster,), dtype=np.int64) - catalog_group.create_dataset("cluster_theta_max_arcmin", shape=(ncluster,), dtype=np.float64) - # and for the index into that catalog - index_group = outfile.create_group("index") - index_group.create_dataset("cluster_index", shape=(total_count,), dtype=np.int64) - index_group.create_dataset("source_index", shape=(total_count,), dtype=np.int64) - index_group.create_dataset("weight", shape=(total_count,), dtype=np.float64) - index_group.create_dataset("distance_arcmin", shape=(total_count,), dtype=np.float64) - - - # Now we loop through each cluster and collect all the galaxies - # behind it from all the different processes. - start = 0 - for i, c in enumerate(clusters): - - if (self.rank == 0) and (i%100 == 0): - print(f"Collecting data for cluster {i}") - - if len(per_cluster_data[i]) == 0: - indices = np.zeros(0, dtype=int) - weights = np.zeros(0) - distances = np.zeros(0) - else: - # Each process flattens the list of all the galaxies for this cluster - indices = np.concatenate([d[0] for d in per_cluster_data[i]]) - distances = np.concatenate([d[1] for d in per_cluster_data[i]]) - weights = np.concatenate([d[2] for d in per_cluster_data[i]]) - - - # If we are running in parallel then collect together the values from - # all the processes - if self.comm is not None: - indices, weights, distances = self.collect(indices, weights, distances) - - # Only the root process does the writing, so the others just - # go to the next set of clusters. - if self.rank != 0: - continue - - # Sort so the indices are montonic increasing - if indices.size != 0: - srt = indices.argsort() - indices = indices[srt] - weights = weights[srt] - distances = distances[srt] - - # And finally write out all the data from the root process. - n = indices.size - print(f"Found {n} total galaxies in catalog for cluster {c['id']}") - catalog_group["cluster_sample_start"][i] = start - catalog_group["cluster_sample_count"][i] = n - catalog_group["cluster_id"][i] = c["id"] - catalog_group["cluster_theta_max_arcmin"][i] = np.degrees(cluster_theta_max[i]) * 60 - - index_group["cluster_index"][start:start + n] = i - index_group["source_index"][start:start + n] = indices - index_group["weight"][start:start + n] = weights - index_group["distance_arcmin"][start:start + n] = np.degrees(distances) * 60 - - start += n - - if self.rank == 0: - outfile.close() - - def find_galaxies_near_each_cluster(self, galaxy_data, cluster_data, tree, max_theta_max): - # Get the location of the galaxies in this chunk of data, - # in the form that the tree requires - X = np.radians([galaxy_data["dec"], galaxy_data["ra"]]).T - - - # First we will get all the objects that - # are near each cluster using the maximum search radius for any cluster. - # Then in a moment we will cut down to the ones that are - # within the radius for each specific cluster. - nearby_clusters, cluster_distances1 = tree.query_radius(X, max_theta_max, return_distance=True) - nearby_galaxies = defaultdict(list) - nearby_galaxy_distances = defaultdict(list) - - # Now we invert our tree information. We currently have the list of - # all the clusters near each galaxy. Now we invert it to get the list - # of galaxies near this cluster. This strange pattern is because then - # we only have to make the tree object (which does fast searches for - # nearby objects once, for the cluster information. - for gal_i, (cluster_indices, cluster_distances) in enumerate(zip(nearby_clusters, cluster_distances1)): - for (cluster_i, cluster_distance) in zip(cluster_indices, cluster_distances): - nearby_galaxies[cluster_i].append(gal_i) - nearby_galaxy_distances[cluster_i].append(cluster_distance) - - return nearby_galaxies, nearby_galaxy_distances - - - def collect(self, indices, weights, distances): - # total number of background objects for t - - counts = np.array(self.comm.allgather(indices.size)) - total = counts.sum() - - # Early exit if nothing here - if total == 0: - indices = np.zeros(0, dtype=int) - weights = np.zeros(0) - distances = np.zeros(0) - return indices, weights, distances - - # This collects together all the results from different processes for this cluster - if self.rank == 0: - all_indices = np.empty(total, dtype=indices.dtype) - all_weights = np.empty(total, dtype=weights.dtype) - all_distances = np.empty(total, dtype=distances.dtype) - self.comm.Gatherv(sendbuf=distances, recvbuf=(all_distances, counts)) - self.comm.Gatherv(sendbuf=weights, recvbuf=(all_weights, counts)) - self.comm.Gatherv(sendbuf=indices, recvbuf=(all_indices, counts)) - indices = all_indices - weights = all_weights - distances = all_distances - else: - self.comm.Gatherv(sendbuf=distances, recvbuf=(None, counts)) - self.comm.Gatherv(sendbuf=weights, recvbuf=(None, counts)) - self.comm.Gatherv(sendbuf=indices, recvbuf=(None, counts)) - - return indices, weights, distances - - - def compute_theta_max(self, z): - """ - Convert the maximum radius into a maximum angle at the redshift - of each cluster. - """ - import pyccl - - # Load a fiducial cosmology and the the angular diameter distance - # to each redshift in it - with self.open_input("fiducial_cosmology", wrapper=True) as f: - cosmo = f.to_ccl() - a = 1.0 / (1 + z) - d_a = cosmo.angular_diameter_distance(a) - - - # Use this to convert the max radius in megaparsec to an angle. - # The d_a should also be in Mpc. - # This is in radians, which is what is expected by sklearn - theta_max = self.config["max_radius"] / d_a - - if self.rank == 0: - theta_max_arcmin = np.degrees(theta_max) * 60 - print("Min search angle = ", theta_max_arcmin.min(), "arcmin") - print("Mean search angle = ", theta_max_arcmin.mean(), "arcmin") - print("Max search angle = ", theta_max_arcmin.max(), "arcmin") - - return theta_max - - - def compute_weights(self, clmm_cosmo, data, index, z_cluster): - import clmm - - # Depending on whether we are using the PDF or not, choose - # some keywords to give to compute_galaxy_weights - if self.config["redshift_criterion"] == "pdf": - # We need the z and PDF(z) arrays in this case - pdf_z = data["pdf_z"] - pdf_pz = data["pdf_pz"][index] - redshift_keywords = { - "pzpdf":pdf_pz, - "pzbins":pdf_z, - "use_pdz":True - } - else: - # point-estimated redshift - z_source = data["redshift"][index] - redshift_keywords = { - "z_source":z_source, - "use_pdz":False - } - - weight = clmm.dataops.compute_galaxy_weights( - z_cluster, - clmm_cosmo, - is_deltasigma=True, - use_shape_noise=True, - use_shape_error=False, - validate_input=True, - shape_component1=data["g1"][index], - shape_component2=data["g2"][index], - **redshift_keywords - ) - - return weight - - - - def load_cluster_catalog(self): - from astropy.table import Table - with self.open_input("cluster_catalog") as f: - g = f["clusters/"] - ra = g["ra"][:] - dec = g["dec"][:] - redshift = g["redshift"][:] - rich = g["richness"][:] - ids = g["cluster_id"][:] - - return Table({"ra": ra, "dec": dec, "redshift": redshift, "richness": rich, "id": ids}) - - def iterate_source_catalog(self): - """ - Iterate through the shear catalog, loading the locations - of them and whether they are assigned to any tomographic bin. - """ - rows = self.config["chunk_rows"] - - # where and what to read from the shear catalog - with self.open_input("shear_catalog", wrapper=True) as f: - shear_group = "shear" - shear_cols, rename = f.get_primary_catalog_names() - - # load the shear calibration information - # for the moment, load the average overall shear calibrator, - # that applies to the collective 2D bin. This won't be high - # accuracy, but I'm not clear right now exactly what the right - # model is yet. Here this calibrator is just used for the - # weight information calculation, which needs g1 and g2 estimates. - # The same calibration should be used later for the actual shears. - if self.rank == 0: - print("Using single 2D shear calibration!") - _, shear_cal = Calibrator.load(self.get_input("shear_tomography_catalog")) - subtract_mean = self.config["subtract_mean_shear"] - - - # where and what to read rom the PZ catalog. This is in a QP - # format where the mode and mean are stored in a file called - # "ancil". The columns are called zmode and zmean. - # TODO: Support "pdf" option here and read from /data/yvals - redshift_criterion = self.config["redshift_criterion"] - - if redshift_criterion == "pdf": - # This is not actually a single column but an array - pz_group = "data" - pz_cols = ["yvals"] - - # we will also need the z axis values in this case - with self.open_input("source_photoz_pdfs") as f: - # this data seems to be 1D in my QP file. - # but that's the kind of thing they might change. - pdf_z = np.squeeze(f["/meta/xvals"][0]) - else: - pz_group = "ancil" - pz_col = "z" + self.config["redshift_criterion"] - pz_cols = [pz_col] - rename[pz_col] = "redshift" - - - # where and what to read from the tomography catalog. - # We just want the values from the source bin. We will use - # any selected object, so we just ask for bin >= 0. - # (bin = -1 means non-selected) - tomo_group = "tomography" - tomo_cols = ["bin"] - - # Loop through all these input files simultaneously. - for s, e, data in self.combined_iterators( - rows, - "shear_catalog", - shear_group, - shear_cols, - "source_photoz_pdfs", - pz_group, - pz_cols, - "shear_tomography_catalog", - tomo_group, - tomo_cols, - parallel=True - ): - # For each chunk of data we also want to store the original - # index. This comes in useful later because we will cut - # down here to just objects in the WL sample. - data["original_index"] = np.arange(s, e, dtype=int) - - # cut down to objects in the WL sample - wl_sample = data["bin"] >= 0 - data = {name: col[wl_sample] for name, col in data.items()} - - # give the shear columns a unified name, whether - # they are metacal, metadetect, etc., also rename - # zmean or zmode to "redshift" - for old, new in rename.items(): - data[new] = data.pop(old) - - # Apply the shear calibration to this sample. - # Optionally subtract the mean (of the whole WL sample, - # not the local mean) - data["g1"], data["g2"] = shear_cal.apply(data["g1"], - data["g2"], - subtract_mean=subtract_mean - ) - - # If we are in PDF mode then we need this extra info - if redshift_criterion == "pdf": - data["pdf_z"] = pdf_z - # also rename this for clarity - data["pdf_pz"] = data.pop("yvals") - - # Give this chunk of data to the main run function - yield s, e, data - - - -class CombinedClusterCatalog: - def __init__(self, shear_catalog, shear_tomography_catalog, cluster_catalog, cluster_shear_catalogs, photoz_pdfs): - _, self.calibrator = Calibrator.load(shear_tomography_catalog) - self.shear_cat = ShearCatalog(shear_catalog, "r") - self.pz_cat = PhotozPDFFile(photoz_pdfs,"r").file - self.cluster_catalog = HDFFile(cluster_catalog, "r").file - self.cluster_shear_catalogs = HDFFile(cluster_shear_catalogs, "r").file - self.cluster_cat_cols = list(self.cluster_catalog['clusters'].keys()) - self.ncluster = self.cluster_shear_catalogs['catalog/cluster_id'].size - self.pz_criterion = "z" + self.cluster_shear_catalogs['provenance'].attrs['config/redshift_criterion'] - self.pz_col = self.pz_cat[f'ancil/{self.pz_criterion}'] - @classmethod - def from_pipeline_file(cls, pipeline_file, run_dir='.'): - pipe_config = ceci.Pipeline.build_config( - pipeline_file, - dry_run=True - ) - - pipeline = ceci.Pipeline.create(pipe_config) - - outputs = {} - for stage in pipeline.stages: - outputs.update(stage.find_outputs(pipe_config["output_dir"])) - - - # make a list of files we need - tags = [ - "shear_catalog", - "cluster_catalog", - "cluster_shear_catalogs", - "shear_tomography_catalog", - "photoz_pdfs", - ] - - paths = pipeline.overall_inputs.copy() - for stage in pipeline.stages: - paths.update(stage.find_outputs(pipe_config["output_dir"])) - - files = {} - for tag in tags: - if tag not in paths: - raise ValueError(f"This pipeline did not generate or ingest {tag} needed for cluster WL") - path = paths[tag] - if not os.path.exists(path): - raise ValueError(f"File {path} does not exist - pipeline may not have run") - files[tag] = path - - return cls(**files) - - - def get_cluster_info(self, cluster_index): - return {k: self.cluster_catalog[f'clusters/{k}'][cluster_index] for k in self.cluster_cat_cols} - - - def get_background_catalog_indexing(self, cluster_index): - cat_group = self.cluster_shear_catalogs['catalog'] - index_group = self.cluster_shear_catalogs['index'] - - start = cat_group['cluster_sample_start'][cluster_index] - n = cat_group['cluster_sample_count'][cluster_index] - end = start + n - - index = index_group['source_index'][start:end] - weight = index_group['weight'][start:end] - distance = index_group['distance_arcmin'][start:end] - - return index, distance, weight - - def get_background_shear_catalog(self, cluster_index): - import clmm - index, distance, weight = self.get_background_catalog_indexing(cluster_index) - cat_names, rename = self.shear_cat.get_primary_catalog_names() - - cat = {} - for col_name in cat_names: - cat[col_name] = self.shear_cat.file[f'shear/{col_name}'][index] - - # rename so no matter what kind of shear catalog you - # have it's always the same names here - for old, new in rename.items(): - cat[new] = cat.pop(old) - - # Calibrate g1 and g2 - g1 = cat.pop("g1") - g2 = cat.pop("g2") - cat["e1"], cat["e2"] = self.calibrator.apply(g1, g2, subtract_mean=True) - - # Add some more columns and rename some others - cat["weight_clmm"] = weight - cat["distance_arcmin"] = distance - cat["weight_original"] = cat.pop("weight") - - cat[self.pz_criterion] = self.pz_col[index] - - - return clmm.GCData(data=cat) \ No newline at end of file diff --git a/txpipe/extensions/clmm/__init__.py b/txpipe/extensions/cluster_counts/__init__.py similarity index 74% rename from txpipe/extensions/clmm/__init__.py rename to txpipe/extensions/cluster_counts/__init__.py index 583a2438e..1a5365e68 100644 --- a/txpipe/extensions/clmm/__init__.py +++ b/txpipe/extensions/cluster_counts/__init__.py @@ -1,7 +1,8 @@ #from .ingest import * -from .rlens import TXTwoPointRLens +#from .rlens import TXTwoPointRLens #from .select import CLClusterShearCatalogs from .bin_cluster import CLClusterBinningRedshiftRichness from .sources_select_compute import * from .make_ensemble_profile import CLClusterEnsembleProfiles +from .convert_to_sacc import CLClusterSACC \ No newline at end of file diff --git a/txpipe/extensions/clmm/bin_cluster.py b/txpipe/extensions/cluster_counts/bin_cluster.py similarity index 100% rename from txpipe/extensions/clmm/bin_cluster.py rename to txpipe/extensions/cluster_counts/bin_cluster.py diff --git a/txpipe/extensions/cluster_counts/convert_to_sacc.py b/txpipe/extensions/cluster_counts/convert_to_sacc.py new file mode 100644 index 000000000..3984c82aa --- /dev/null +++ b/txpipe/extensions/cluster_counts/convert_to_sacc.py @@ -0,0 +1,135 @@ +import numpy as np +from ...base_stage import PipelineStage +from ...data_types import PickleFile, SACCFile +import pickle as pkl + +class CLClusterSACC(PipelineStage): + name = "CLClusterSACC" + inputs = [ + ("cluster_profiles", PickleFile), + ] + + outputs = [ + ("cluster_sacc_catalog", SACCFile), + ] + + config_options = { + #radial bin definition + "r_min" : 0.2, #in Mpc + "r_max" : 5.0, #in Mpc + } + + def run(self): + import sacc + print(self.get_input("cluster_profiles")) + data = pkl.load(open(self.get_input("cluster_profiles"), "rb")) + print(data) + my_configs = self.config + survey_name = my_configs['survey_name'] + area = my_configs['area'] + output_filename = self.get_output("cluster_sacc_catalog", final_name=True) + + sacc_obj = sacc.Sacc() + self.add_tracers(sacc_obj, data, survey_name, area) + self.add_counts_data(sacc_obj, data, survey_name) + self.add_deltasigma_data(sacc_obj, data, survey_name) + self.add_covariance_data(sacc_obj, data) + + sacc_obj.to_canonical_order() + sacc_obj.save_fits(output_filename, overwrite=True) + + def transform_bin_string(self, bin_string: str) -> tuple: + """ + Transforms a string like 'bin_zbin_X_richbin_Y' into ('bin_z_X', 'bin_rich_Y'). + """ + import re + zbin_match = re.search(r'zbin_(\d+)', bin_string) + richbin_match = re.search(r'richbin_(\d+)', bin_string) + + if zbin_match and richbin_match: + return f'bin_z_{zbin_match.group(1)}', f'bin_rich_{richbin_match.group(1)}' + + raise ValueError("Input string is not in the expected format.") + + def get_bins(self, data: dict): + """ + Retrieves and organizes the bin edges and centers. + Returns: + tuple: (z_bins, rich_bins, radius_bins) + """ + bin_z_dict, bin_rich_dict, bin_radius_dict = {}, {}, {} + + for bin_comb, bin_data in data.items(): + bin_z, bin_rich = self.transform_bin_string(bin_comb) + z_edges = (bin_data['cluster_bin_edges']['z_min'], bin_data['cluster_bin_edges']['z_max']) + rich_edges = (bin_data['cluster_bin_edges']['rich_min'], bin_data['cluster_bin_edges']['rich_max']) + bin_z_dict[bin_z] = z_edges + bin_rich_dict[bin_rich] = rich_edges + + radius_centers = np.array(data['bin_zbin_0_richbin_0']['clmm_cluster_ensemble'].stacked_data['radius']) + rmin = self.config_options['r_min'] + rmax = self.config_options['r_max'] + radius_edges = np.logspace(np.log10(rmin), np.log10(rmax), len(radius_centers) + 1) + for i in range(len(radius_edges) - 1): + bin_radius_dict[f'radius_{i}'] = (radius_edges[i], radius_edges[i+1], radius_centers[i]) + + return bin_z_dict, bin_rich_dict, bin_radius_dict + + def add_tracers(self, sacc_obj, data: dict, survey_name: str, area: float): + """ + Adds tracer data to the SACC object. + """ + import sacc + z_bins, rich_bins, radius_bins = self.get_bins(data) + + for bin_comb in data: + bin_z, bin_rich = self.transform_bin_string(bin_comb) + sacc_obj.add_tracer("bin_z", bin_z, *z_bins[bin_z]) + sacc_obj.add_tracer("bin_richness", bin_rich, np.log10(rich_bins[bin_rich][0]), np.log10(rich_bins[bin_rich][1])) + + for radius_bin, radius_edges in radius_bins.items(): + sacc_obj.add_tracer("bin_radius", radius_bin, *radius_edges) + + sacc_obj.add_tracer("survey", survey_name, area) + + def add_counts_data(self, sacc_obj, data: dict, survey_name: str): + """ + Adds cluster count data to the SACC object. + """ + import sacc + cluster_count = sacc.standard_types.cluster_counts + + for bin_comb, bin_data in data.items(): + bin_z, bin_rich = self.transform_bin_string(bin_comb) + sacc_obj.add_data_point(cluster_count, (survey_name, bin_rich, bin_z), int(bin_data['n_cl'])) + + def add_deltasigma_data(self, sacc_obj, data: dict, survey_name: str): + """ + Adds cluster shear (delta sigma) data to the SACC object. + """ + import sacc + cluster_shear = sacc.standard_types.cluster_shear + _, _, radius_bins = self.get_bins(data) + + for bin_comb, bin_data in data.items(): + bin_z, bin_rich = self.transform_bin_string(bin_comb) + for i, bin_radius in enumerate(radius_bins): + tangential_comp = bin_data['clmm_cluster_ensemble'].stacked_data[i]['tangential_comp'] + sacc_obj.add_data_point(cluster_shear, (survey_name, bin_rich, bin_z, bin_radius), tangential_comp) + + def add_covariance_data(self, sacc_obj, data: dict): + """ + Adds covariance data to the SACC object. + """ + import sacc + cluster_count = sacc.standard_types.cluster_counts + counts_points = np.array(sacc_obj.get_data_points(cluster_count)) + counts_cov = np.array([point.value for point in counts_points]) + + deltasigma_cov = [ + bin_data['clmm_cluster_ensemble'].cov['tan_sc'].diagonal() + for bin_data in data.values() + ] + + diag_cov_vector = np.concatenate([counts_cov.flatten(), np.array(deltasigma_cov).flatten()]) + sacc_obj.add_covariance(np.diag(diag_cov_vector)) diff --git a/txpipe/extensions/clmm/ingest.py b/txpipe/extensions/cluster_counts/ingest.py similarity index 100% rename from txpipe/extensions/clmm/ingest.py rename to txpipe/extensions/cluster_counts/ingest.py diff --git a/txpipe/extensions/clmm/make_ensemble_profile.py b/txpipe/extensions/cluster_counts/make_ensemble_profile.py similarity index 86% rename from txpipe/extensions/clmm/make_ensemble_profile.py rename to txpipe/extensions/cluster_counts/make_ensemble_profile.py index c9631cd0e..210dd7be3 100644 --- a/txpipe/extensions/clmm/make_ensemble_profile.py +++ b/txpipe/extensions/cluster_counts/make_ensemble_profile.py @@ -2,7 +2,7 @@ import gc import numpy as np from ...base_stage import PipelineStage -from .sources_select_compute import CLClusterShearCatalogs +from .sources_select_compute import CLClusterShearCatalogs, CombinedClusterCatalog from ...data_types import ShearCatalog, HDFFile, PhotozPDFFile, FiducialCosmology, TomographyCatalog, PickleFile from ...utils.calibrators import Calibrator from collections import defaultdict @@ -32,6 +32,8 @@ class CLClusterEnsembleProfiles(CLClusterShearCatalogs): "delta_sigma_profile" : True, "shear_profile" : False, "magnification_profile" : False, + #coordinate_system for shear + "coordinate_system" : 'euclidean' #Must be either 'celestial' or 'euclidean' } def run(self): @@ -68,9 +70,6 @@ def run(self): #clusters = self.load_cluster_list(group=bins[0]) #print(bins[0].keys()) - - - pickle.dump(cluster_stack_dict, open(self.get_output("cluster_profiles"), 'wb')) @@ -86,6 +85,7 @@ def load_cluster_shear_catalog(self) : with self.open_input("cluster_shear_catalogs") as f: g = f["index/"] cluster_index = g['cluster_index'][:] + cluster_id = g['cluster_id'][:] tangential_comp = g['tangential_comp'][:] cross_comp = g['cross_comp'][:] source_index = g['source_index'][:] @@ -93,10 +93,14 @@ def load_cluster_shear_catalog(self) : distance_arcmin = g['distance_arcmin'][:] print(len(cluster_index), len(tangential_comp), len(source_index)) - - return Table({"cluster_index": cluster_index, "tangential_comp_clmm": tangential_comp, + + tab = Table({"cluster_index": cluster_index, "cluster_id" : cluster_id, "tangential_comp_clmm": tangential_comp, "cross_comp_clmm": cross_comp, "source_index": source_index, "weight_clmm": weight, "distance_arcmin": distance_arcmin}) + + print(tab[0:4]) + + return tab @@ -108,21 +112,29 @@ def create_cluster_ensemble(self, radial_bins, clmm_cosmo, cluster_list, cluster # Loop through clusters and calculate the profiles ncluster = len(cluster_list) + print('Ncluster', ncluster) for cluster_index in range(ncluster) : # Select subset of background shear information for this particular cluster - - mask = (cluster_shears_cat["cluster_index"] == cluster_index) - bg_cat = cluster_shears_cat[mask] + print('cluster_index', cluster_index) + + #mask = (cluster_shears_cat["cluster_id"] == id_cl) #THERE IS A PROBLEM HERE !!! + z_cl = cluster_list[cluster_index]["redshift"] rich_cl = cluster_list[cluster_index]["richness"] ra_cl = cluster_list[cluster_index]["ra"] dec_cl = cluster_list[cluster_index]["dec"] id_cl = cluster_list[cluster_index]["id"] - print('theta_max', np.max(bg_cat["distance_arcmin"]), '=', clmm.utils.convert_units(np.max(bg_cat["distance_arcmin"]), 'arcmin', 'Mpc', z_cl, clmm_cosmo), 'Mpc') + + mask = (cluster_shears_cat['cluster_id'] == id_cl) + print(mask) + bg_cat = cluster_shears_cat[mask] + + print('For cluster', id_cl, 'at z=',z_cl, 'theta_max is', np.max(bg_cat["distance_arcmin"]), ' arcmin =', clmm.utils.convert_units(np.max(bg_cat["distance_arcmin"]), 'arcmin', 'Mpc', z_cl, clmm_cosmo), 'Mpc') + print(len(bg_cat), bg_cat[0:3]) # To use CLMM, need to have galaxy table in clmm.GCData type galcat = clmm.GCData(bg_cat) @@ -131,13 +143,13 @@ def create_cluster_ensemble(self, radial_bins, clmm_cosmo, cluster_list, cluster # in source_select_compute --> don't need it here, filling dummy array # Instantiating a CLMM galaxy cluster object - gc_object = clmm.GalaxyCluster(np.int(id_cl), ra_cl, dec_cl, z_cl, galcat) + gc_object = clmm.GalaxyCluster(np.int(id_cl), ra_cl, dec_cl, z_cl, galcat, coordinate_system = self.config["coordinate_system"] ) gc_object.richness = rich_cl if (clmm.utils.convert_units(np.max(bg_cat["distance_arcmin"]), 'arcmin', 'Mpc', z_cl, clmm_cosmo)< radial_bins[-1]): print ("!!! maximum radial distance of source smaller than radial_bins") - + # Compute radial profile for the current cluster gc_object.make_radial_profile( "Mpc", @@ -149,7 +161,7 @@ def create_cluster_ensemble(self, radial_bins, clmm_cosmo, cluster_list, cluster cross_component_out = "cross_comp", weights_in = "weight_clmm", # name given in the CLClusterShearCatalogs stage weights_out = "W_l", - include_empty_bins = True + include_empty_bins = True ) @@ -188,8 +200,8 @@ def load_cluster_catalog_tomography_group(self, radial_bins, clmm_cosmo, cluster for key in k : group = f["cluster_bin"][key] - clusters = self.load_cluster_list(group=group) - print(key, group, dict(group.attrs), len(clusters)) + clusters = self.load_cluster_list(group=group) #elf.get_cluster_indice( DOES THIS FUNCTION COMES FROM ? + print(key, group, dict(group.attrs), len(clusters), clusters) if len(clusters)>1: cluster_stack = self.create_cluster_ensemble(radial_bins, clmm_cosmo, clusters, cluster_shears_cat, cluster_ensemble_id=key) diff --git a/txpipe/extensions/clmm/rlens.py b/txpipe/extensions/cluster_counts/rlens.py similarity index 100% rename from txpipe/extensions/clmm/rlens.py rename to txpipe/extensions/cluster_counts/rlens.py diff --git a/txpipe/extensions/clmm/sources_select_compute.py b/txpipe/extensions/cluster_counts/sources_select_compute.py similarity index 78% rename from txpipe/extensions/clmm/sources_select_compute.py rename to txpipe/extensions/cluster_counts/sources_select_compute.py index 07dbf0a60..0aba1cb1a 100644 --- a/txpipe/extensions/clmm/sources_select_compute.py +++ b/txpipe/extensions/cluster_counts/sources_select_compute.py @@ -30,11 +30,12 @@ class CLClusterShearCatalogs(PipelineStage): "chunk_rows": 100_000, # rows to read at once from source cat "max_radius": 10.0, # Mpc "delta_z": 0.1, - "redshift_cut_criterion": "zmean", # pdf / mean / true / median - "redshift_weight_criterion": "zmean", # pdf or point + "redshift_cut_criterion": "zmode", # pdf / mean / true / median + "redshift_weight_criterion": "zmode", # pdf or point "redshift_cut_criterion_pdf_fraction": 0.9, # pdf / mean / true / median - "subtract_mean_shear": True, + "subtract_mean_shear": False, # Not clear if this is useful for clusters "coordinate_system": "celestial", + "use_true_shear": False, } def run(self): @@ -118,6 +119,9 @@ def run(self): pdf = data["pdf_pz"][gal_index] pdf_frac = pdf[:, pdf_z > cluster_z + delta_z].sum(axis=1) / pdf.sum(axis=1) z_good = pdf_frac > redshift_cut_criterion_pdf_fraction + elif redshift_cut_criterion == "ztrue": + zgal = data["redshift_true"][gal_index] + z_good = zgal > cluster_z + delta_z elif redshift_cut_criterion == "zmode": # otherwise if we are not using the PDF we do a simple cut zgal = data["redshift"][gal_index] @@ -133,11 +137,11 @@ def run(self): # Compute source quantities #weights = self.compute_weights(clmm_cosmo, data, gal_index, cluster_z) - weights, tangential_comp, cross_comp = self.compute_sources_quantities(clmm_cosmo, data, gal_index, cluster_z, cluster_ra, cluster_dec) + weights, tangential_comp, cross_comp, g1, g2 = self.compute_sources_quantities(clmm_cosmo, data, gal_index, cluster_z, cluster_ra, cluster_dec) # we want to save the index into the overall shear catalog, # not just into this chunk of data global_index = data["original_index"][gal_index] - per_cluster_data[cluster_index].append((global_index, distance, weights, tangential_comp, cross_comp)) + per_cluster_data[cluster_index].append((global_index, distance, weights, tangential_comp, cross_comp, g1, g2)) gc.collect() @@ -171,14 +175,20 @@ def run(self): index_group = outfile.create_group("index") index_group.create_dataset("cluster_index", shape=(total_count,), dtype=np.int64) index_group.create_dataset("source_index", shape=(total_count,), dtype=np.int64) + index_group.create_dataset("cluster_id", shape=(total_count,), dtype=np.int64) index_group.create_dataset("weight", shape=(total_count,), dtype=np.float64) index_group.create_dataset("tangential_comp", shape=(total_count,), dtype=np.float64) index_group.create_dataset("cross_comp", shape=(total_count,), dtype=np.float64) + index_group.create_dataset("g1", shape=(total_count,), dtype=np.float64) + index_group.create_dataset("g2", shape=(total_count,), dtype=np.float64) index_group.create_dataset("distance_arcmin", shape=(total_count,), dtype=np.float64) # Now we loop through each cluster and collect all the galaxies - # behind it from all the different processes. + # behind it from all the different processes. Each different + # process received a different chunk of the shear catalog, + # so we need to pull together all the shears relevant to each + # cluster start = 0 for i, c in enumerate(clusters): @@ -186,10 +196,15 @@ def run(self): print(f"Collecting data for cluster {i}") if len(per_cluster_data[i]) == 0: + # If there is no background data for this cluster + # for this particular processor then we just send + # an empty array indices = np.zeros(0, dtype=int) weights = np.zeros(0) tangential_comps = np.zeros(0) cross_comps = np.zeros(0) + g1 = np.zeros(0) + g2 = np.zeros(0) distances = np.zeros(0) else: # Each process flattens the list of all the galaxies for this cluster @@ -198,12 +213,14 @@ def run(self): weights = np.concatenate([d[2] for d in per_cluster_data[i]]) tangential_comps = np.concatenate([d[3] for d in per_cluster_data[i]]) cross_comps = np.concatenate([d[4] for d in per_cluster_data[i]]) + g1 = np.concatenate([d[5] for d in per_cluster_data[i]]) + g2 = np.concatenate([d[6] for d in per_cluster_data[i]]) # If we are running in parallel then collect together the values from # all the processes if self.comm is not None: - indices, weights, tangential_comps, cross_comps, distances = self.collect(indices, weights, tangential_comps, cross_comps, distances) + indices, weights, tangential_comps, cross_comps, g1, g2, distances = self.collect(indices, weights, tangential_comps, cross_comps, g1, g2, distances) # Only the root process does the writing, so the others just # go to the next set of clusters. @@ -218,21 +235,30 @@ def run(self): tangential_comps = tangential_comps[srt] cross_comps = cross_comps[srt] distances = distances[srt] + g1 = g1[srt] + g2 = g2[srt] # And finally write out all the data from the root process. n = indices.size + # First we write out the information about the clusters, + # and the index into the other index. print(f"Found {n} total galaxies in catalog for cluster {c['id']}") catalog_group["cluster_sample_start"][i] = start catalog_group["cluster_sample_count"][i] = n catalog_group["cluster_id"][i] = c["id"] catalog_group["cluster_theta_max_arcmin"][i] = np.degrees(cluster_theta_max[i]) * 60 + # Now we write out the per-cluster shear catalog information index_group["cluster_index"][start:start + n] = i index_group["source_index"][start:start + n] = indices + index_group["cluster_id"][start:start + n] = catalog_group["cluster_id"][i] index_group["weight"][start:start + n] = weights index_group["tangential_comp"][start:start + n] = tangential_comps index_group["cross_comp"][start:start + n] = cross_comps + index_group["g1"][start:start + n] = g1 + index_group["g2"][start:start + n] = g2 index_group["distance_arcmin"][start:start + n] = np.degrees(distances) * 60 + start += n @@ -266,7 +292,7 @@ def find_galaxies_near_each_cluster(self, galaxy_data, cluster_data, tree, max_t return nearby_galaxies, nearby_galaxy_distances - def collect(self, indices, weights, tangential_comps, cross_comps, distances): + def collect(self, indices, weights, tangential_comps, cross_comps, g1, g2, distances): # total number of background objects for t counts = np.array(self.comm.allgather(indices.size)) @@ -279,7 +305,9 @@ def collect(self, indices, weights, tangential_comps, cross_comps, distances): tangential_comps = np.zeros(0) cross_comps = np.zeros(0) distances = np.zeros(0) - return indices, weights, distances + g1 = np.zeros(0) + g2 = np.zeros(0) + return indices, weights, distances, g1, g2 # This collects together all the results from different processes for this cluster if self.rank == 0: @@ -287,10 +315,14 @@ def collect(self, indices, weights, tangential_comps, cross_comps, distances): all_weights = np.empty(total, dtype=weights.dtype) all_tangential_comps = np.empty(total, dtype=tangential_comps.dtype) all_cross_comps = np.empty(total, dtype=cross_comps.dtype) + all_g1 = np.empty(total, dtype=tangential_comps.dtype) + all_g2 = np.empty(total, dtype=cross_comps.dtype) all_distances = np.empty(total, dtype=distances.dtype) self.comm.Gatherv(sendbuf=distances, recvbuf=(all_distances, counts)) self.comm.Gatherv(sendbuf=cross_comps, recvbuf=(all_cross_comps, counts)) self.comm.Gatherv(sendbuf=tangential_comps, recvbuf=(all_tangential_comps, counts)) + self.comm.Gatherv(sendbuf=g1, recvbuf=(all_g1, counts)) + self.comm.Gatherv(sendbuf=g2, recvbuf=(all_g2, counts)) self.comm.Gatherv(sendbuf=weights, recvbuf=(all_weights, counts)) self.comm.Gatherv(sendbuf=indices, recvbuf=(all_indices, counts)) indices = all_indices @@ -298,14 +330,18 @@ def collect(self, indices, weights, tangential_comps, cross_comps, distances): tangential_comps = all_tangential_comps cross_comps = all_cross_comps distances = all_distances + g1 = all_g1 + g2 = all_g2 else: self.comm.Gatherv(sendbuf=distances, recvbuf=(None, counts)) self.comm.Gatherv(sendbuf=cross_comps, recvbuf=(None, counts)) self.comm.Gatherv(sendbuf=tangential_comps, recvbuf=(None, counts)) + self.comm.Gatherv(sendbuf=g1, recvbuf=(None, counts)) + self.comm.Gatherv(sendbuf=g2, recvbuf=(None, counts)) self.comm.Gatherv(sendbuf=weights, recvbuf=(None, counts)) self.comm.Gatherv(sendbuf=indices, recvbuf=(None, counts)) - return indices, weights, tangential_comps, cross_comps, distances + return indices, weights, tangential_comps, cross_comps, g1, g2, distances def compute_theta_max(self, z): @@ -313,8 +349,6 @@ def compute_theta_max(self, z): Convert the maximum radius into a maximum angle at the redshift of each cluster. """ - import pyccl - # Load a fiducial cosmology and the the angular diameter distance # to each redshift in it with self.open_input("fiducial_cosmology", wrapper=True) as f: @@ -340,7 +374,6 @@ def compute_theta_max(self, z): def compute_sources_quantities(self, clmm_cosmo, data, index, z_cluster, ra_cluster, dec_cluster): import clmm - # Depending on whether we are using the PDF or not, choose # some keywords to give to compute_galaxy_weights if self.config["redshift_weight_criterion"] == "pdf": @@ -361,6 +394,9 @@ def compute_sources_quantities(self, clmm_cosmo, data, index, z_cluster, ra_clus # point-estimated redshift z_source = data["redshift"][index] sigma_c = clmm_cosmo.eval_sigma_crit(z_cluster, z_source) + elif self.config["redshift_weight_criterion"] == "ztrue": + z_source = data["redshift_true"][index] + sigma_c = clmm_cosmo.eval_sigma_crit(z_cluster, z_source) else: raise NotImplementedError("Not implemented zmean weighting") @@ -372,13 +408,15 @@ def compute_sources_quantities(self, clmm_cosmo, data, index, z_cluster, ra_clus ) coordinate_system = self.config["coordinate_system"] + g1 = data["g1"][index] + g2 = data["g2"][index] _, tangential_comp, cross_comp = clmm.compute_tangential_and_cross_components( ra_cluster, dec_cluster, data['ra'][index], data['dec'][index], - data["g1"][index], - data["g2"][index], + g1, + g2, coordinate_system=coordinate_system, geometry="curve", is_deltasigma=True, @@ -386,7 +424,7 @@ def compute_sources_quantities(self, clmm_cosmo, data, index, z_cluster, ra_clus validate_input=True, ) - return weight, tangential_comp, cross_comp + return weight, tangential_comp, cross_comp, g1, g2 @@ -416,11 +454,12 @@ def iterate_source_catalog(self): of them and whether they are assigned to any tomographic bin. """ rows = self.config["chunk_rows"] + use_true_shear = self.config["use_true_shear"] # where and what to read from the shear catalog with self.open_input("shear_catalog", wrapper=True) as f: shear_group = "shear" - shear_cols, rename = f.get_primary_catalog_names() + shear_cols, rename = f.get_primary_catalog_names(true_shear=use_true_shear) # load the shear calibration information # for the moment, load the average overall shear calibrator, @@ -431,7 +470,7 @@ def iterate_source_catalog(self): # The same calibration should be used later for the actual shears. if self.rank == 0: print("Using single 2D shear calibration!") - _, shear_cal = Calibrator.load(self.get_input("shear_tomography_catalog")) + _, shear_cal = Calibrator.load(self.get_input("shear_tomography_catalog"), null=use_true_shear) subtract_mean = self.config["subtract_mean_shear"] @@ -442,6 +481,15 @@ def iterate_source_catalog(self): redshift_weight_criterion = self.config["redshift_cut_criterion"] want_pdf = (redshift_cut_criterion == "pdf") or (redshift_weight_criterion == "pdf") + # The truth redshifts are keps in the shear catalog not + # the p(z) catalog. If we ask for that column we need to load it + # here. + if redshift_cut_criterion == "ztrue" or redshift_weight_criterion == "ztrue": + with self.open_input("shear_catalog", wrapper=True) as f: + col = f.get_true_redshift_column() + shear_cols.append(col) + rename[col] = "redshift_true" + point_pz_group = "ancil" # TODO: We may extend this to use other options for the point redshift # in the cuts / weighting @@ -477,7 +525,6 @@ def iterate_source_catalog(self): # any selected object, so we just ask for bin >= 0. # (bin = -1 means non-selected) tomo_group = "tomography" -# tomo_cols = ["source_bin"] tomo_cols = ["bin"] # Loop through all these input files simultaneously. @@ -528,21 +575,58 @@ def iterate_source_catalog(self): # Give this chunk of data to the main run function yield s, e, data - +#def get_cluster_shear_catalogs_index_from_cluster_id(cluster_file, cluster_id): +# outfile = HDFFile(cluster_file, "r").file +# cond = outfile['catalog/cluster_id'][:] == cluster_id +# return np.where(cond)[0][0] + + class CombinedClusterCatalog: - def __init__(self, shear_catalog, shear_tomography_catalog, cluster_catalog, cluster_shear_catalogs, photoz_pdfs): - + """ + The CCC class collects together: + - a shear catalog + - a shear tomography catalog + - a cluster catalog + - a per-cluster shear catalog, which holds the delta-sigma information + for galaxies around a given cluster. + + It lets us pull together all the information from disparate sources + associated with a cluster. + """ + def __init__(self, shear_catalog, shear_tomography_catalog, cluster_catalog, cluster_shear_catalogs, source_photoz_pdfs): + """ + Initialise the CCC object by opening all the files. + """ _, self.calibrator = Calibrator.load(shear_tomography_catalog) self.shear_cat = ShearCatalog(shear_catalog, "r") - self.pz_cat = PhotozPDFFile(photoz_pdfs,"r").file + self.pz_cat = PhotozPDFFile(source_photoz_pdfs,"r").file self.cluster_catalog = HDFFile(cluster_catalog, "r").file self.cluster_shear_catalogs = HDFFile(cluster_shear_catalogs, "r").file self.cluster_cat_cols = list(self.cluster_catalog['clusters'].keys()) self.ncluster = self.cluster_shear_catalogs['catalog/cluster_id'].size - self.pz_criterion = "z" + self.cluster_shear_catalogs['provenance'].attrs['config/redshift_criterion'] - self.pz_col = self.pz_cat[f'ancil/{self.pz_criterion}'] + #self.pz_criterion = "z" + self.cluster_shear_catalogs['provenance'].attrs['config/ redshift_criterion'] ### TO UPDATE + #self.pz_col = self.pz_cat[f'ancil/{self.pz_criterion}'] + @classmethod def from_pipeline_file(cls, pipeline_file, run_dir='.'): + """ + Factory method to build a CombinedClusterCatalog from a pipeline file. + + Get the names of all the files that we need to load by looking into the pipeline file. + + Parameters + ---------- + pipeline_file : str + Path to the pipeline file + run_dir : str + Path to the directory where the pipeline was run (option, default='.') + + Returns + ------- + CombinedClusterCatalog + An instance of the CombinedClusterCatalog class + + """ pipe_config = ceci.Pipeline.build_config( pipeline_file, dry_run=True @@ -561,7 +645,7 @@ def from_pipeline_file(cls, pipeline_file, run_dir='.'): "cluster_catalog", "cluster_shear_catalogs", "shear_tomography_catalog", - "photoz_pdfs", + "source_photoz_pdfs", ] paths = pipeline.overall_inputs.copy() @@ -584,50 +668,42 @@ def get_cluster_info(self, cluster_index): return {k: self.cluster_catalog[f'clusters/{k}'][cluster_index] for k in self.cluster_cat_cols} - def get_background_catalog_indexing(self, cluster_index): + def get_background_shear_catalog(self, cluster_index): + import clmm + + # Find the index of this cluster in the collection of clusters cat_group = self.cluster_shear_catalogs['catalog'] index_group = self.cluster_shear_catalogs['index'] + # Now find the rows in the index that correspond to this cluster start = cat_group['cluster_sample_start'][cluster_index] n = cat_group['cluster_sample_count'][cluster_index] end = start + n - index = index_group['source_index'][start:end] - weight = index_group['weight'][start:end] - tangential_comp = index_group['tangential_comp'][start:end] - cross_comp = index_group['cross_comp'][start:end] - distance = index_group['distance_arcmin'][start:end] - - return index, distance, weight, tangential_comp, cross_comp - - def get_background_shear_catalog(self, cluster_index): - import clmm - index, distance, weight, tangential_comp, cross_comp = self.get_background_catalog_indexing(cluster_index) - cat_names, rename = self.shear_cat.get_primary_catalog_names() - + # Load all the information that is in the per-cluster shear catalog cat = {} - for col_name in cat_names: - cat[col_name] = self.shear_cat.file[f'shear/{col_name}'][index] - - # rename so no matter what kind of shear catalog you - # have it's always the same names here - for old, new in rename.items(): - cat[new] = cat.pop(old) - - # Calibrate g1 and g2 - g1 = cat.pop("g1") - g2 = cat.pop("g2") - cat["e1"], cat["e2"] = self.calibrator.apply(g1, g2, subtract_mean=True) - # Add some more columns and rename some others - cat["weight_clmm"] = weight - cat["tangential_comp_clmm"] = tangential_comp - cat["cross_comp_clmm"] = cross_comp - cat["distance_arcmin"] = distance - cat["weight_original"] = cat.pop("weight") - - cat[self.pz_criterion] = self.pz_col[index] + #for col in ["cluster_index", "source_index", "cluster_id", "weight", "tangential_comp", "cross_comp", "g1", "g2", "distance_arcmin"]: + for col in index_group.keys(): + cat[col] = index_group[col][start:end] + + # This is the index into the shear catalog that tells + # us where the galaxies behind this cluster are in that + # catalog. It is also the index to the shear photo-z PDF + # file, since they have the sme ordering. + source_index = cat["source_index"] + + # Different types of shear catalog file store the main shear + # information in different bits of the HDF file. This is because + # the metadetect catalogs has a bunch of variant catalogs, so + # we need to select the main one, which is called "shear/00". + # In other catalog formats this will just be called "shear" + group_name = self.shear_cat.get_primary_catalog_group() + group = self.shear_cat.file[group_name] + if "true_g1" in group.keys(): + cat["true_g1"] = group["true_g1"][source_index] + cat["true_g2"] = group["true_g2"][source_index] return clmm.GCData(data=cat) diff --git a/txpipe/extensions/cluster_mag/__init__.py b/txpipe/extensions/cluster_mag/__init__.py deleted file mode 100755 index 5f53efa3f..000000000 --- a/txpipe/extensions/cluster_mag/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from .select import CMSelectHalos, CMSelectBackground -from .ingest import CMIngestHalosCosmoDC2 -from .randoms import CMRandoms -from .redshift import CMRedshifts -from .correlations import CMCorrelations -from .plots import CMCorrelationsPlot - - -__all__ = ["CMSelectHalos", "CMSelectBackground", "CMIngestHalosCosmoDC2", "CMRandoms", "CMRedshifts", "CMCorrelations", "CMCorrelationsPlot"] diff --git a/txpipe/extensions/cluster_mag/buffer.py b/txpipe/extensions/cluster_mag/buffer.py deleted file mode 100755 index e87dfa7c7..000000000 --- a/txpipe/extensions/cluster_mag/buffer.py +++ /dev/null @@ -1,40 +0,0 @@ -import numpy as np - - -class Buffer: - """ - This is a helper for the randoms generation that buffers its output - so it's not trying to write loads of small chunks of data out. - - It stores a buffer of things to write out later of specified size. - - It's not trying to be more generally useful at this stage - it can only - be given sequentially contiguous chunks to write - """ - def __init__(self, size, ref, start=0, dtype=float): - self.ref = ref - self.start = start - self.buffered = 0 - self.size = size - self.buffer = [] - - def append(self, vals, verbose=False): - self.buffer.append(vals) - self.buffered += len(vals) - - if self.buffered > self.size: - self.write(verbose=verbose) - - def write(self, verbose=False): - if not self.buffer: - return - out = np.concatenate(self.buffer) - n = len(out) - if verbose: - print(f"Writing out range {self.start:,} : {self.start + n:,} to {self.ref.name}") - self.ref[self.start : self.start + n] = out - self.start += n - self.buffered = 0 - self.buffer = [] - - diff --git a/txpipe/extensions/cluster_mag/correlations.py b/txpipe/extensions/cluster_mag/correlations.py deleted file mode 100755 index d3bfc6a1c..000000000 --- a/txpipe/extensions/cluster_mag/correlations.py +++ /dev/null @@ -1,218 +0,0 @@ -import numpy as np -from ...base_stage import PipelineStage -from ...data_types import HDFFile, TextFile, SACCFile -import re -import time -import traceback -from ...twopoint import TXTwoPoint, POS_POS - - -class CMCorrelations(TXTwoPoint): - name = "CMCorrelations" - - inputs = [ - ("cluster_mag_halo_tomography", HDFFile), - ("cluster_mag_background", HDFFile), - ("patch_centers", TextFile), - ("random_cats", HDFFile), - ] - outputs = [ - ('cluster_mag_correlations', SACCFile), - ] - - config_options = { - 'calcs': [POS_POS], - 'min_sep': 0.5, - 'max_sep': 300., - 'nbins': 9, - 'bin_slop': 0.0, - 'sep_units': 'arcmin', - 'verbose': 1, - 'source_bins': [-1], - 'lens_bins': [-1], - 'reduce_randoms_size': 1.0, - 'do_shear_shear': False, - 'do_shear_pos': False, - 'do_pos_pos': True, - 'var_method': 'jackknife', - 'use_randoms': True, - 'low_mem': False, - 'do_halo_cross': False, - 'patch_dir': './cache/patches', - } - - - def read_nbin(self): - # Get the number of halo bins in each axis - with self.open_input("cluster_mag_halo_tomography") as f: - meta = f['lens'].attrs - nm = meta['nm'] - nz = meta['nz'] - - # Unlike regular TXPipe we have no source galaxies (i.e. galaxy shapes) - source_list = [] - - # but we do have two sets of density samples. The binned (in M and z) halos: - lens_list = [f"{i}_{j}" for i in range(nz) for j in range(nm)] - # and a single background sample: - lens_list.insert(0, "bg") - - return source_list, lens_list - - - def select_calculations(self, source_list, lens_list): - calcs = [] - - # In regular TXPipe this function selects all the three - # 3x2pt measurements, but here all our measurements are - # position-position. - k = POS_POS - - if self.config['do_halo_cross']: - # All the cross-correlations - takes ages - for b1 in lens_list[:]: - for b2 in lens_list: - # We don't want to do a pair twice - # The lenses in this list are actually - # strings, but we can still compare them like this. - if b1 <= b2: - calcs.append([b1, b2, k]) - else: - # If we are not doing correlations between halo bins - # then we just want the auto-correlation for the non-bg bins. - # We want bg x everything, including bg x bg - for b1 in lens_list[:]: - if b1 == "bg": - for b2 in lens_list: - calcs.append([b1, b2, k]) - else: - calcs.append([b1, b1, k]) - - - return calcs - - def read_metadata(self): - meta = {} - # Read per-bin inforation - with self.open_input("cluster_mag_halo_tomography") as f: - g = f['lens'] - for key in g.keys(): - meta[key] = dict(g[key].attrs) - - # And also general information - with self.open_input("cluster_mag_halo_tomography") as f: - meta['nm'] = f['lens'].attrs['nm'] - meta['nz'] = f['lens'].attrs['nz'] - - return meta - - - def get_lens_catalog(self, bins): - import treecorr - self.memory_report(f"get lens {bins}") - # We now have two different lens catalogs to choose from - if bins == "bg": - cat = treecorr.Catalog( - self.get_input("cluster_mag_background"), - ext = f"/sample", - ra_col = "ra", - dec_col = "dec", - ra_units='degree', - dec_units='degree', - patch_centers=self.get_input('patch_centers'), - save_patch_dir=self.get_patch_dir('cluster_mag_background', bins), - ) - else: - cat = treecorr.Catalog( - self.get_input("cluster_mag_halo_tomography"), - ext = f"/lens/bin_{bins}", - ra_col = "ra", - dec_col = "dec", - ra_units='degree', - dec_units='degree', - patch_centers=self.get_input('patch_centers'), - save_patch_dir=self.get_patch_dir('cluster_mag_halo_tomography', bins), - ) - - return cat - - - def get_random_catalog(self, bins): - import treecorr - # We get our randoms from cluster_mag_randoms, a single - # unbinned catalog - cat = treecorr.Catalog( - self.get_input("random_cats"), - ext = f"/randoms", - ra_col = "ra", - dec_col = "dec", - ra_units='degree', - dec_units='degree', - patch_centers=self.get_input('patch_centers'), - save_patch_dir=self.get_patch_dir('random_cats', bins), - ) - return cat - - def write_output(self, source_list, lens_list, meta, results): - import sacc - import treecorr - - # Create a sacc for our output data and - # save some metadata in it - S = sacc.Sacc() - S.metadata['nm'] = meta['nm'] - S.metadata['nz'] = meta['nz'] - - # Record the names of all our bins. At some point we may - # want to load the n(z) here and put it in the output too - for bins in lens_list: - bin_output_name = "background" if bins == "bg" else f'halo_{bins}' - S.add_tracer('misc', bin_output_name) - - - for d in results: - # Name of the pair of bins used here. Probably the same - # unless we have set do_halo_cross=True - tracer1 = f'background' if d.i == "bg" else f'halo_{d.i}' - tracer2 = f'background' if d.j == "bg" else f'halo_{d.j}' - - # select name of the data type, and any metadata to store - if d.i == "bg" and d.j == "bg": - corr_type = "galaxy_density_xi" - tags = {} - elif d.i == "bg": - corr_type = "halo_galaxy_density_xi" - tags = meta[f'bin_{d.j}'] - elif d.i == d.j: - corr_type = "halo_halo_density_xi" - tags = meta[f'bin_{d.i}'] - else: - corr_type = "halo_halo_density_xi" - # combined metadata for both - tags = { - **{"{k}_bin2": "{v}_bin2" for k, v in meta[f'bin_{d.i}'].items()}, - **{"{k}_bin2": "{v}_bin2" for k, v in meta[f'bin_{d.j}'].items()}, - } - - # Other numbers to save - theta = np.exp(d.object.meanlogr) - npair = d.object.npairs - weight = d.object.weight - xi = d.object.xi - err = np.sqrt(d.object.varxi) - n = len(xi) - - # Add all our data points to the output file - for i in range(n): - S.add_data_point(corr_type, (tracer1, tracer2), xi[i], - theta=theta[i], error=err[i], weight=weight[i], **tags) - - # Compute the covariance with treecorr and add it to the output - cov = treecorr.estimate_multi_cov( - [d.object for d in results], - self.config['var_method'] - ) - S.add_covariance(cov) - - # Save results to FITS format - S.save_fits(self.get_output("cluster_mag_correlations")) diff --git a/txpipe/extensions/cluster_mag/ingest.py b/txpipe/extensions/cluster_mag/ingest.py deleted file mode 100755 index 6614f8b5a..000000000 --- a/txpipe/extensions/cluster_mag/ingest.py +++ /dev/null @@ -1,194 +0,0 @@ -import numpy as np -from ...base_stage import PipelineStage -from ...data_types import HDFFile - - -class CMSkysimPhotometry(PipelineStage): - """ - Ingest noise-free photometry from SkySim GCR - - """ - name = "CMSkysimPhotometry" - inputs = [] - outputs = [("photometry_catalog", HDFFile)] - - config_options = { - # this is 10 year 5 sigma depth from https://www.lsst.org/scientists/keynumbers - "r_limit": 27.5, - # getting the catalog size takes ages in GCR, so - # if you know it alreay then better to put it here. - # this is a max size before cuts - "cat_size": 8_503_061_280, - # if you change this then remember to set cat_size above - "cat_name": "skysim5000_v1.1.1" - - } - - def run(self): - import GCRCatalogs - gc = GCRCatalogs.load_catalog(self.config["cat_name"]) - - # avoid measuring cat length if known - N = self.config['cat_size'] - if N == 0: - N = len(gc) - - - # Columns we need from the cosmo simulation, - # and the new names we give them - cols = { - 'mag_true_u_lsst': 'u_mag', - 'mag_true_g_lsst': 'g_mag', - 'mag_true_r_lsst': 'r_mag', - 'mag_true_i_lsst': 'i_mag', - 'mag_true_z_lsst': 'z_mag', - 'mag_true_y_lsst': 'y_mag', - 'ra': 'ra', - 'dec': 'dec', - 'galaxy_id': 'id', - 'redshift_true': 'redshift_true', - } - - photo_file = self.setup_output(cols, N) - photo_grp = photo_file["photometry"] - - # Set up the iterator to load catalog - r_limit = self.config["r_limit"] - filters = [f"mag_true_r_lsst < {r_limit}"] - it = gc.get_quantities(cols, filters = filters, return_iterator=True) - nfile = len(gc._file_list) if hasattr(gc, '_file_list') else "?" - - # Loop through the input data - s = 0 - for i, data in enumerate(it): - print(f"Loading chunk {i+1}/{nfile}") - # save each chunk of data to output - s = self.save_chunk(data, cols, photo_grp, s) - - # Resize all the columns because we filtered - # out some objects so the end of the catalog will - # be empty - for col in photo_grp.keys(): - photo_grp[col].resize((s,)) - - - def save_chunk(self, data, cols, photo_grp, s): - - # Range of this data chunk - n = len(data["ra"]) - e = s + n - - # rename columns - data = {new: data[old] for old, new in cols.items()} - - # Make zero error columns - zeros = np.zeros(n) - for b in "ugrizy": - data[f"{b}_mag_err"] = zeros - - # save outputs to file - for col in cols.values(): - photo_grp[f"{col}"][s:e] = data[col] - - # new index - return e - - - def setup_output(self, cols, N): - f = self.open_output('photometry_catalog') - g = f.create_group("photometry") - for col in cols.values(): - dtype = int if col == "id" else float - g.create_dataset(col, dtype=dtype, shape=(N,), maxshape=(N,)) - return f - - - - -class CMIngestHalosCosmoDC2(PipelineStage): - """ - Load halos from CosmoDC2, by querying the central galaxies. - """ - name = "CMIngestHalosCosmoDC2" - parallel = False - inputs = [] - outputs = [("cluster_mag_halo_catalog", HDFFile)] - config_options = { - "cat_name": "cosmoDC2_v1.1.4_image", - "halo_mass_min": 0.5e13, - "initial_size": 100_000, - "ra_range": [50.0, 73.1], - "dec_range": [-45.0, -27.0], - } - - def run(self): - import GCRCatalogs - - # Configuration options - mass_min = self.config["halo_mass_min"] - cat_name = self.config["cat_name"] - sz = self.config["initial_size"] - ra_range = self.config['ra_range'] - dec_range = self.config['dec_range'] - - # Open the cosmoDC2 catalog - overwrite = { - "check_md5": False, - "check_size": False, - "ensure_meta_consistent": False, - } - cat = GCRCatalogs.load_catalog(cat_name, config_overwrite=overwrite) - - # Selection of data we will read from it below - cols = ["halo_mass", "redshift", "ra", "dec", "halo_id"] - filters = [ - f"halo_mass > {mass_min}", - "is_central == True", - f"ra > {ra_range[0]}", - f"ra < {ra_range[1]}", - f"dec > {dec_range[0]}", - f"dec < {dec_range[1]}", - ] - - # Create output data file with extensible data sets - f = self.open_output("cluster_mag_halo_catalog") - g = f.create_group("halos") - g.create_dataset("halo_mass", (sz,), maxshape=(None,), dtype="f8", chunks=True) - g.create_dataset("redshift", (sz,), maxshape=(None,), dtype="f8", chunks=True) - g.create_dataset("ra", (sz,), maxshape=(None,), dtype="f8", chunks=True) - g.create_dataset("dec", (sz,), maxshape=(None,), dtype="f8", chunks=True) - g.create_dataset("halo_id", (sz,), maxshape=(None,), dtype="i8", chunks=True) - - # Prepare the iterator to loop through GCR - it = cat.get_quantities(cols, filters=filters, return_iterator=True) - - # s is the start index for the next data chunk - s = 0 - for data in it: - # e is the end index for this data chunk - e = s + data["ra"].size - print(f"Read data chunk {s:,} - {e:,}") - - # Expand the data sets if we are exceeding the current - # size. Grow by 50% each time. - if e > sz: - sz = int(1.5 * e) - print(f"Resizing data to {sz:,}") - for col in cols: - g[col].resize((sz,)) - - # Output this chunk of data to the file - for col in cols: - g[col][s:e] = data[col] - - # Update the starting index for the next chunk - s = e - - print(f"Ingestion complete. Resizing to final halo count {e:,}") - # Now we have finished we can truncate any - # excess space in the output data - for col in cols: - g[col].resize((e,)) - - # And that's all. - f.close() diff --git a/txpipe/extensions/cluster_mag/plots.py b/txpipe/extensions/cluster_mag/plots.py deleted file mode 100755 index ea3c978df..000000000 --- a/txpipe/extensions/cluster_mag/plots.py +++ /dev/null @@ -1,99 +0,0 @@ -import numpy as np -from ...base_stage import PipelineStage -from ...data_types import SACCFile, PNGFile - - -class CMCorrelationsPlot(PipelineStage): - name = "CMCorrelationsPlot" - inputs = [("cluster_mag_correlations", SACCFile),] - outputs = [ - ("cluster_mag_halo_halo_plot", PNGFile), - ("cluster_mag_halo_bg_plot", PNGFile) - - ] - config_options = {} - def run(self): - import sacc - import matplotlib - matplotlib.use('agg') - import matplotlib.pyplot as plt - S = sacc.Sacc.load_fits(self.get_input("cluster_mag_correlations")) - - nm = S.metadata['nm'] - nz = S.metadata['nz'] - - self.halo_halo_plot(S, nm, nz) - self.halo_bg_plot(S, nm, nz) - - - - def halo_halo_plot(self, S, nm, nz): - import matplotlib.pyplot as plt - - f = self.open_output('cluster_mag_halo_halo_plot', wrapper=True, figsize=(nm*5,nz*5)) - fig = f.file - axes = fig.subplots(nm, nz, sharex='col', sharey=False, squeeze=False) - for i in range(nz): - for j in range(nm): - ax = axes[i, j] - tracer = f'halo_{i}_{j}' - theta = S.get_tag('theta', 'halo_halo_density_xi', (tracer, tracer)) - error = S.get_tag('error', 'halo_halo_density_xi', (tracer, tracer)) - mmin = S.get_tag('mass_min', 'halo_halo_density_xi', (tracer, tracer))[0] / 1e13 - mmax = S.get_tag('mass_max', 'halo_halo_density_xi', (tracer, tracer))[0] / 1e13 - zmin = S.get_tag('z_min', 'halo_halo_density_xi', (tracer, tracer))[0] - zmax = S.get_tag('z_max', 'halo_halo_density_xi', (tracer, tracer))[0] - if not len(theta): - continue - xi = S.get_mean('halo_halo_density_xi', (tracer, tracer)) - - ax.errorbar(theta, xi, error, fmt='r.') - ax.set_xscale('log') - ax.axhline(0, color='k') - ax.text(0.5, 0.9, f'z = {zmin:.2f} -- {zmax:.2f}\nM = ({mmin:.2f} -- {mmax:.2f}) $\\times 10^{{13}}$', transform=ax.transAxes) - - ax.set_title(f"Halo bin {i} {j}") - - # Add axis labels for the edge plots - if j == 0: - ax.set_ylabel("xi") - if i == nm - 1: - ax.set_xlabel("theta") - plt.suptitle("Halo-Halo Autocorrelations") - plt.tight_layout(rect=[0, 0.03, 1, 0.95]) - f.close() - - def halo_bg_plot(self, S, nm, nz): - import matplotlib.pyplot as plt - - f = self.open_output('cluster_mag_halo_bg_plot', wrapper=True, figsize=(nm*5,nz*5)) - fig = f.file - axes = fig.subplots(nm, nz, sharex='col', sharey=False, squeeze=False) - for i in range(nz): - for j in range(nm): - ax = axes[i, j] - tracer = f'halo_{i}_{j}' - theta = S.get_tag('theta', 'halo_galaxy_density_xi', ('background', tracer)) - error = S.get_tag('error', 'halo_galaxy_density_xi', ('background', tracer)) - mmin = S.get_tag('mass_min', 'halo_halo_density_xi', (tracer, tracer))[0] / 1e13 - mmax = S.get_tag('mass_max', 'halo_halo_density_xi', (tracer, tracer))[0] / 1e13 - zmin = S.get_tag('z_min', 'halo_halo_density_xi', (tracer, tracer))[0] - zmax = S.get_tag('z_max', 'halo_halo_density_xi', (tracer, tracer))[0] - if not len(theta): - continue - xi = S.get_mean('halo_galaxy_density_xi', ('background', tracer)) - - ax.errorbar(theta, xi, error, fmt='r.') - ax.set_xscale('log') - ax.axhline(0, color='k') - ax.text(0.5, 0.9, f'z = {zmin:.2f} -- {zmax:.2f}\nM = ({mmin:.2f} -- {mmax:.2f}) $\\times 10^{{13}}$', transform=ax.transAxes) - - ax.set_title(f"Halo bin {i} {j}") - if j == 0: - ax.set_ylabel("xi") - if i == nm - 1: - ax.set_xlabel("theta") - plt.suptitle("Halo-Background Correlations") - plt.tight_layout(rect=[0, 0.03, 1, 0.95]) - f.close() - diff --git a/txpipe/extensions/cluster_mag/randoms.py b/txpipe/extensions/cluster_mag/randoms.py deleted file mode 100755 index 68c1f2191..000000000 --- a/txpipe/extensions/cluster_mag/randoms.py +++ /dev/null @@ -1,93 +0,0 @@ -import sys -import numpy as np -from ...base_stage import PipelineStage -from ...data_types import HDFFile, MapsFile -from ...utils import choose_pixelization -from .buffer import Buffer - -class CMRandoms(PipelineStage): - name = "CMRandoms" - inputs = [ - ("cluster_mag_footprint", MapsFile), - ] - outputs = [("random_cats", HDFFile)] - config_options = {"density": 30.0} #  per sq arcmin - - def run(self): - import scipy.stats - from ...randoms import random_points_in_quadrilateral - import healpy - - # open the footprint catalog and read in the things we need - # from it - the list of hit pixels, and the map scheme - with self.open_input("cluster_mag_footprint", wrapper=True) as f: - hit_map = f.read_map("footprint") - info = f.read_map_info("footprint") - nside = info["nside"] - scheme = choose_pixelization(**info) - - if self.rank == 0: - print(f"Generating randoms at nside = {nside}") - - #  Hit pixels and the coordinates of their vertices - pix = np.where(hit_map > 0)[0] - vertices = scheme.vertices(pix) - - # Randomly select the number of objects per pixel, using a poisson distribution with - #  the specified mean density, for now - area = scheme.pixel_area(degrees=True) * 60.0 * 60.0 - density = np.repeat(self.config["density"], pix.size) - counts = scipy.stats.poisson.rvs(density * area, 1) - - # Use the same counts for all the processors - if self.comm is not None: - self.comm.Bcast(counts) - - # total number of objects to be generated over all the pixels - total_count = counts.sum() - if self.rank == 0: - print(f"Generating a total of {total_count:,} randoms") - - # The starting index of each pixel in the array, so we can parallelize - starts = np.concatenate([[0], np.cumsum(counts)]) - - # Open the output data and create the necessary columns - output_file = self.open_output("random_cats", parallel=True) - group = output_file.create_group("randoms") - ra_out = group.create_dataset("ra", (total_count,), dtype=np.float64) - dec_out = group.create_dataset("dec", (total_count,), dtype=np.float64) - - # Each processor now does a subset of the pixels, generating and saving - #  points in each - my_indices = np.array_split(np.arange(len(vertices)), self.size)[self.rank] - my_vertices = vertices[my_indices] - my_start = starts[my_indices[0]] - - ra_buf = Buffer(1_000_000, ra_out, my_start) - dec_buf = Buffer(1_000_000, dec_out, my_start) - for j, (i, vertex) in enumerate(zip(my_indices, my_vertices)): - if j % 10_000 == 0: - print( - f"Rank {self.rank} done {j:,} of its {my_indices.size:,} pixels" - ) - sys.stdout.flush() - # Generate random points in this pixel - p1, p2, p3, p4 = vertex.T - N = counts[i] - P = random_points_in_quadrilateral(p1, p2, p3, p4, N) - - # This is not healpy-specific so we just use it as a convenience function - ra, dec = healpy.vec2ang(P, lonlat=True) - - # Buffer output for writing. We are writing contiguous chunks of data - # so shouldn't need output sizes - ra_buf.append(ra, verbose=True) - dec_buf.append(dec) - # Write any residual stuff - ra_buf.write(verbose=True) - dec_buf.write() - del ra_buf, dec_buf - - output_file.close() - - diff --git a/txpipe/extensions/cluster_mag/redshift.py b/txpipe/extensions/cluster_mag/redshift.py deleted file mode 100755 index 26d9499a1..000000000 --- a/txpipe/extensions/cluster_mag/redshift.py +++ /dev/null @@ -1,12 +0,0 @@ -import numpy as np -from ...base_stage import PipelineStage -from ...data_types import HDFFile - - - - -class CMRedshifts(PipelineStage): - name = "CMRedshifts" - pass - - diff --git a/txpipe/extensions/cluster_mag/select.py b/txpipe/extensions/cluster_mag/select.py deleted file mode 100755 index 33db8de9c..000000000 --- a/txpipe/extensions/cluster_mag/select.py +++ /dev/null @@ -1,208 +0,0 @@ -import numpy as np -import itertools -from ...base_stage import PipelineStage -from ...data_types import HDFFile, MapsFile -from ...utils import DynamicSplitter - -class CMSelectHalos(PipelineStage): - name = "CMSelectHalos" - parallel = False - inputs = [("cluster_mag_halo_catalog", HDFFile)] - outputs = [("cluster_mag_halo_tomography", HDFFile)] - config_options = { - "zedge": [0.2, 0.4, 0.6, 0.8, 1.0, 1.2], - "medge": [20, 30, 45, 70, 120, 220], - "initial_size": 100_000, - "chunk_rows": 100_000, - } - def run(self): - initial_size = self.config["initial_size"] - chunk_rows = self.config["chunk_rows"] - - zedge = np.array(self.config['zedge']) - - # TODO: where does this number 45 come from? - medge = np.array(self.config['medge']) * (1e14 / 45) - - nz = len(zedge) - 1 - nm = len(medge) - 1 - - # add infinities to either end to catch objects that spill out - zedge = np.concatenate([[-np.inf], zedge, [np.inf]]) - medge = np.concatenate([[-np.inf], medge, [np.inf]]) - - # all pairs of z bin, m bin indices - bins = list(itertools.product(range(nz), range(nm))) - bin_names = {f"{i}_{j}":initial_size for i,j in bins} - - # Columns we want to save for each object - cols = ["halo_mass", "redshift", "ra", "dec"] - - - f = self.open_output("cluster_mag_halo_tomography") - g = f.create_group("lens") - g.attrs['nm'] = nm - g.attrs['nz'] = nz - splitter = DynamicSplitter(g, "bin", cols, bin_names) - - # Make an iterator that will read a chunk of data at a time - it = self.iterate_hdf("cluster_mag_halo_catalog", "halos", cols, chunk_rows) - - # Loop through the chunks of data; each time `data` will be a - # dictionary of column names -> numpy arrays - for _, _, data in it: - n = len(data["redshift"]) - - # Figure out which bin each halo it in, if any - zbin = np.digitize(data['redshift'], zedge) - mbin = np.digitize(data['halo_mass'], medge) - - # Find which bin each object is in, or None - for zi in range(1, nz + 1): - for mi in range(1, nm + 1): - w = np.where((zbin == zi) & (mbin == mi)) - # if there are no objects in this bin in this chunk, - # then we skip the rest - if w[0].size == 0: - continue - - # Otherwise we extract the bit of this chunk of - # data that is in this bin and have our splitter - # object write it out. - d = {name:col[w] for name, col in data.items()} - bin_name = f"{zi - 1}_{mi - 1}" - splitter.write_bin(d, bin_name) - - # Truncate arrays to correct size - splitter.finish() - - # Save metadata - for (i, j), name in zip(bins, bin_names): - metadata = splitter.subgroups[name].attrs - metadata['mass_min'] = medge[i+1] - metadata['mass_max'] = medge[i+2] - metadata['z_min'] = zedge[i+1] - metadata['z_max'] = zedge[i+2] - - f.close() - - - -class CMSelectBackground(PipelineStage): - name = "CMSelectBackground" - parallel = False - inputs = [("photometry_catalog", HDFFile)] - outputs = [("cluster_mag_background", HDFFile), ("cluster_mag_footprint", MapsFile)] - - # Default configuration settings - config_options = { - "ra_range": [50.0, 73.1], - "dec_range": [-45.0, -27.0], - "mag_cut": 26.0, - "zmin": 1.5, - "nside": 2048, - "initial_size": 100_000, - "chunk_rows": 100_000, - } - - def run(self): - import healpy - - #  Count the max number of objects we will look at in total - with self.open_input("photometry_catalog") as f: - N = f["photometry/ra"].size - - #  Open and set up the columns in the output - f = self.open_output("cluster_mag_background") - g = f.create_group("sample") - sz = self.config["initial_size"] - ra = g.create_dataset("ra", (sz,), maxshape=(None,)) - dec = g.create_dataset("dec", (sz,), maxshape=(None,)) - - # Get values from the user configutation. - # These can be set on the command line, in the config file, - #  or use the default values above - ra_min, ra_max = self.config["ra_range"] - dec_min, dec_max = self.config["dec_range"] - mag_cut = self.config["mag_cut"] - zmin = self.config["zmin"] - nside = self.config["nside"] - chunk_rows = self.config["chunk_rows"] - - # We will keep track of a hit map to help us build the - #  random catalog later. Make it zero now; every time a pixel - #  hits it we will set a value to one - npix = healpy.nside2npix(nside) - hit_map = np.zeros(npix) - - # Prepare an iterator that will loop through the data - it = self.iterate_hdf( - "photometry_catalog", - "photometry", - ["ra", "dec", "mag_i", "redshift_true"], - chunk_rows, - ) - - s = 0 - # Loop through the data. The indices s1, e1 refer to the full catalog - # start/end, that we are selecting from. The indices s and e refer to - #  the data we have selected - for s1, e1, data in it: - #  make selection - sel = ( - (data["ra"] > ra_min) - & (data["ra"] < ra_max) - & (data["dec"] > dec_min) - & (data["dec"] < dec_max) - & (data["mag_i"] < mag_cut) - & (data["redshift_true"] > zmin) - ) - - #  Pull out the chunk of data we would like to select - ra_sel = data["ra"][sel] - dec_sel = data["dec"][sel] - - # Mark any hit pixels - pix = healpy.ang2pix(nside, ra_sel, dec_sel, lonlat=True) - hit_map[pix] = 1 - - #  Number of selected objects - n = ra_sel.size - - # Print out our progress - frac = n / (e1 - s1) - print( - f"Read data chunk {s1:,} - {e1:,} and selected {n:,} objects ({frac:.1%})" - ) - - e = s + n - if e > sz: - print(f"Resizing output to {sz}") - sz = int(1.5 * e) - ra.resize((sz,)) - dec.resize((sz,)) - - # write output. - ra[s:e] = ra_sel - dec[s:e] = dec_sel - - # update start for next point - s = e - - # Chop off any unused space - print(f"Final catalog size {e:,}") - ra.resize((e,)) - dec.resize((e,)) - f.close() - - #  Save the footprint map. Select all the non-zero pixels - pix = np.where(hit_map > 0)[0] - # We just want a binary map for now, but can upgrade this to - #  a depth map later - val = np.ones(pix.size, dtype=np.int8) - metadata = {"pixelization": "healpix", "nside": nside} - - with self.open_output("cluster_mag_footprint", wrapper=True) as f: - f.write_map("footprint", pix, val, metadata) - -