isgri 0.6.1__tar.gz → 0.7.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {isgri-0.6.1 → isgri-0.7.1}/.gitignore +217 -217
  2. {isgri-0.6.1 → isgri-0.7.1}/.python-version +1 -1
  3. isgri-0.7.1/PKG-INFO +266 -0
  4. isgri-0.7.1/README.md +249 -0
  5. isgri-0.7.1/demo/lightcurve_walkthrough.ipynb +424 -0
  6. {isgri-0.6.1 → isgri-0.7.1}/demo/scwquery_walkthrough.ipynb +762 -762
  7. {isgri-0.6.1 → isgri-0.7.1}/pyproject.toml +2 -1
  8. isgri-0.7.1/src/isgri/__version__.py +1 -0
  9. isgri-0.7.1/src/isgri/catalog/__init__.py +4 -0
  10. isgri-0.7.1/src/isgri/catalog/builder.py +444 -0
  11. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/catalog/scwquery.py +5 -2
  12. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/cli/__init__.py +1 -1
  13. isgri-0.7.1/src/isgri/cli/builder.py +102 -0
  14. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/cli/main.py +188 -168
  15. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/cli/query.py +210 -164
  16. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/config.py +37 -9
  17. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/utils/file_loaders.py +171 -30
  18. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/utils/lightcurve.py +103 -13
  19. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/utils/pif.py +14 -0
  20. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/utils/quality.py +4 -3
  21. isgri-0.7.1/tests/catalog/test_builder.py +310 -0
  22. {isgri-0.6.1 → isgri-0.7.1}/tests/test_config.py +39 -13
  23. isgri-0.7.1/tests/utils/test_file_loaders.py +328 -0
  24. isgri-0.7.1/tests/utils/test_lightcurve.py +561 -0
  25. isgri-0.6.1/PKG-INFO +0 -147
  26. isgri-0.6.1/README.md +0 -131
  27. isgri-0.6.1/demo/lightcurve_walkthrough.ipynb +0 -398
  28. isgri-0.6.1/src/isgri/__version__.py +0 -1
  29. isgri-0.6.1/src/isgri/catalog/__init__.py +0 -3
  30. isgri-0.6.1/src/isgri/catalog/builder.py +0 -90
  31. isgri-0.6.1/tests/utils/test_file_loaders.py +0 -76
  32. isgri-0.6.1/tests/utils/test_lightcurve.py +0 -286
  33. {isgri-0.6.1 → isgri-0.7.1}/LICENSE +0 -0
  34. {isgri-0.6.1/demo/data → isgri-0.7.1/demo/data/PIFs/SGR1935/2559}/255900280010_isgri_model.fits.gz +0 -0
  35. {isgri-0.6.1/demo/data → isgri-0.7.1/demo/data/archive/2559/255900280010.001}/isgri_events.fits.gz +0 -0
  36. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/__init__.py +0 -0
  37. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/catalog/wcs.py +0 -0
  38. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/utils/__init__.py +0 -0
  39. {isgri-0.6.1 → isgri-0.7.1}/src/isgri/utils/time_conversion.py +0 -0
  40. {isgri-0.6.1 → isgri-0.7.1}/tests/__init__.py +0 -0
  41. {isgri-0.6.1 → isgri-0.7.1}/tests/catalog/test_scwquery.py +0 -0
  42. {isgri-0.6.1 → isgri-0.7.1}/tests/catalog/test_wcs.py +0 -0
  43. {isgri-0.6.1 → isgri-0.7.1}/tests/cli/test_main.py +0 -0
  44. {isgri-0.6.1 → isgri-0.7.1}/tests/utils/__init__.py +0 -0
  45. {isgri-0.6.1 → isgri-0.7.1}/tests/utils/test_pif.py +0 -0
  46. {isgri-0.6.1 → isgri-0.7.1}/tests/utils/test_quality.py +0 -0
  47. {isgri-0.6.1 → isgri-0.7.1}/tests/utils/test_time_conversion.py +0 -0
@@ -1,218 +1,218 @@
1
- # Byte-compiled / optimized / DLL files
2
- __pycache__/
3
- *.py[codz]
4
- *$py.class
5
-
6
- # C extensions
7
- *.so
8
-
9
- # Distribution / packaging
10
- .Python
11
- build/
12
- develop-eggs/
13
- dist/
14
- downloads/
15
- eggs/
16
- .eggs/
17
- lib/
18
- lib64/
19
- parts/
20
- sdist/
21
- var/
22
- wheels/
23
- share/python-wheels/
24
- *.egg-info/
25
- .installed.cfg
26
- *.egg
27
- MANIFEST
28
-
29
- # PyInstaller
30
- # Usually these files are written by a python script from a template
31
- # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
- *.manifest
33
- *.spec
34
-
35
- # Installer logs
36
- pip-log.txt
37
- pip-delete-this-directory.txt
38
-
39
- # Unit test / coverage reports
40
- htmlcov/
41
- .tox/
42
- .nox/
43
- .coverage
44
- .coverage.*
45
- .cache
46
- nosetests.xml
47
- coverage.xml
48
- *.cover
49
- *.py.cover
50
- .hypothesis/
51
- .pytest_cache/
52
- cover/
53
-
54
- # Translations
55
- *.mo
56
- *.pot
57
-
58
- # Django stuff:
59
- *.log
60
- local_settings.py
61
- db.sqlite3
62
- db.sqlite3-journal
63
-
64
- # Flask stuff:
65
- instance/
66
- .webassets-cache
67
-
68
- # Scrapy stuff:
69
- .scrapy
70
-
71
- # Sphinx documentation
72
- docs/_build/
73
-
74
- # PyBuilder
75
- .pybuilder/
76
- target/
77
-
78
- # Jupyter Notebook
79
- .ipynb_checkpoints
80
-
81
- # IPython
82
- profile_default/
83
- ipython_config.py
84
-
85
- # pyenv
86
- # For a library or package, you might want to ignore these files since the code is
87
- # intended to run in multiple environments; otherwise, check them in:
88
- # .python-version
89
-
90
- # pipenv
91
- # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
- # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
- # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
- # install all needed dependencies.
95
- # Pipfile.lock
96
-
97
- # UV
98
- # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
- # This is especially recommended for binary packages to ensure reproducibility, and is more
100
- # commonly ignored for libraries.
101
- # uv.lock
102
-
103
- # poetry
104
- # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
- # This is especially recommended for binary packages to ensure reproducibility, and is more
106
- # commonly ignored for libraries.
107
- # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
- # poetry.lock
109
- # poetry.toml
110
-
111
- # pdm
112
- # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
- # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
- # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
- # pdm.lock
116
- # pdm.toml
117
- .pdm-python
118
- .pdm-build/
119
-
120
- # pixi
121
- # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
- # pixi.lock
123
- # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
- # in the .venv directory. It is recommended not to include this directory in version control.
125
- .pixi
126
-
127
- # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
- __pypackages__/
129
-
130
- # Celery stuff
131
- celerybeat-schedule
132
- celerybeat.pid
133
-
134
- # Redis
135
- *.rdb
136
- *.aof
137
- *.pid
138
-
139
- # RabbitMQ
140
- mnesia/
141
- rabbitmq/
142
- rabbitmq-data/
143
-
144
- # ActiveMQ
145
- activemq-data/
146
-
147
- # SageMath parsed files
148
- *.sage.py
149
-
150
- # Environments
151
- .env
152
- .envrc
153
- .venv
154
- env/
155
- venv/
156
- ENV/
157
- env.bak/
158
- venv.bak/
159
-
160
- # Spyder project settings
161
- .spyderproject
162
- .spyproject
163
-
164
- # Rope project settings
165
- .ropeproject
166
-
167
- # mkdocs documentation
168
- /site
169
-
170
- # mypy
171
- .mypy_cache/
172
- .dmypy.json
173
- dmypy.json
174
-
175
- # Pyre type checker
176
- .pyre/
177
-
178
- # pytype static type analyzer
179
- .pytype/
180
-
181
- # Cython debug symbols
182
- cython_debug/
183
-
184
- # PyCharm
185
- # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
186
- # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
187
- # and can be added to the global gitignore or merged into this file. For a more nuclear
188
- # option (not recommended) you can uncomment the following to ignore the entire idea folder.
189
- # .idea/
190
-
191
- # Abstra
192
- # Abstra is an AI-powered process automation framework.
193
- # Ignore directories containing user credentials, local state, and settings.
194
- # Learn more at https://abstra.io/docs
195
- .abstra/
196
-
197
- # Visual Studio Code
198
- # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
- # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
- # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
- # you could uncomment the following to ignore the entire vscode folder
202
- .vscode/
203
-
204
- # Ruff stuff:
205
- .ruff_cache/
206
-
207
- # PyPI configuration file
208
- .pypirc
209
-
210
- # Marimo
211
- marimo/_static/
212
- marimo/_lsp/
213
- __marimo__/
214
-
215
- # Streamlit
216
- .streamlit/secrets.toml
217
-
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ # Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ # poetry.lock
109
+ # poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ # pdm.lock
116
+ # pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ # pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # Redis
135
+ *.rdb
136
+ *.aof
137
+ *.pid
138
+
139
+ # RabbitMQ
140
+ mnesia/
141
+ rabbitmq/
142
+ rabbitmq-data/
143
+
144
+ # ActiveMQ
145
+ activemq-data/
146
+
147
+ # SageMath parsed files
148
+ *.sage.py
149
+
150
+ # Environments
151
+ .env
152
+ .envrc
153
+ .venv
154
+ env/
155
+ venv/
156
+ ENV/
157
+ env.bak/
158
+ venv.bak/
159
+
160
+ # Spyder project settings
161
+ .spyderproject
162
+ .spyproject
163
+
164
+ # Rope project settings
165
+ .ropeproject
166
+
167
+ # mkdocs documentation
168
+ /site
169
+
170
+ # mypy
171
+ .mypy_cache/
172
+ .dmypy.json
173
+ dmypy.json
174
+
175
+ # Pyre type checker
176
+ .pyre/
177
+
178
+ # pytype static type analyzer
179
+ .pytype/
180
+
181
+ # Cython debug symbols
182
+ cython_debug/
183
+
184
+ # PyCharm
185
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
186
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
187
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
188
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
189
+ # .idea/
190
+
191
+ # Abstra
192
+ # Abstra is an AI-powered process automation framework.
193
+ # Ignore directories containing user credentials, local state, and settings.
194
+ # Learn more at https://abstra.io/docs
195
+ .abstra/
196
+
197
+ # Visual Studio Code
198
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
+ # you could uncomment the following to ignore the entire vscode folder
202
+ .vscode/
203
+
204
+ # Ruff stuff:
205
+ .ruff_cache/
206
+
207
+ # PyPI configuration file
208
+ .pypirc
209
+
210
+ # Marimo
211
+ marimo/_static/
212
+ marimo/_lsp/
213
+ __marimo__/
214
+
215
+ # Streamlit
216
+ .streamlit/secrets.toml
217
+
218
218
  docs/**
@@ -1 +1 @@
1
- 3.9
1
+ 3.9
isgri-0.7.1/PKG-INFO ADDED
@@ -0,0 +1,266 @@
1
+ Metadata-Version: 2.4
2
+ Name: isgri
3
+ Version: 0.7.1
4
+ Summary: Python package for INTEGRAL IBIS/ISGRI lightcurve analysis
5
+ Author: Dominik Patryk Pacholski
6
+ License: MIT
7
+ License-File: LICENSE
8
+ Requires-Python: >=3.9
9
+ Requires-Dist: astropy
10
+ Requires-Dist: click
11
+ Requires-Dist: joblib
12
+ Requires-Dist: numpy
13
+ Requires-Dist: platformdirs
14
+ Requires-Dist: tomli-w
15
+ Requires-Dist: tomli>=2.0.0; python_version < '3.11'
16
+ Description-Content-Type: text/markdown
17
+
18
+ # ISGRI
19
+
20
+ Python toolkit for INTEGRAL/ISGRI data analysis.
21
+
22
+ ## Features
23
+
24
+ ### Command Line Interface
25
+ Query catalogs directly from the terminal:
26
+ - Interactive and direct query modes
27
+ - Filter by time, position, quality, revolution
28
+ - Export results to FITS/CSV or SWID lists
29
+ - Update catalogs with new science windows from archive
30
+
31
+ ### SCW Catalog Query
32
+ Query INTEGRAL Science Window catalogs with a fluent Python API:
33
+ - Filter by time, position, quality, revolution
34
+ - Calculate detector offsets
35
+ - Export results to any auto detectable astropy table extension or in table aligned data for any other extension
36
+
37
+ ### Catalog Builder
38
+ Build and update INTEGRAL/ISGRI science window catalogs:
39
+ - Automatic discovery of new science windows in archive
40
+ - Parallel processing of quality metrics
41
+ - Optional light curve caching
42
+ - Incremental catalog updates
43
+
44
+ ### Light Curve Analysis
45
+ Extract and analyze ISGRI light curves:
46
+ - Load from file paths or SWID/source lookup
47
+ - PIF weighting with adjustable thresholds
48
+ - Custom time binning
49
+ - Module-by-module analysis
50
+ - Quality metrics (chi-squared tests)
51
+ - Time conversions (IJD to/from UTC)
52
+
53
+
54
+ ## Installation
55
+
56
+ ```bash
57
+ pip install isgri
58
+ ```
59
+
60
+ ## Quick Start
61
+
62
+ ### CLI Usage
63
+
64
+ ```bash
65
+ # Configure default paths (once)
66
+ isgri config-set --archive /path/to/archive --catalog ~/data/scw_catalog.fits --pif /path/to/pif
67
+
68
+ # View current config
69
+ isgri config
70
+
71
+ # Update catalog from archive
72
+ isgri update
73
+
74
+ # Interactive catalog query
75
+ isgri query
76
+ # query> time
77
+ # Start: 2010-01-01
78
+ # Stop: 2010-12-31
79
+ # → 1234 SCWs
80
+ # query> pos
81
+ # RA: 83.63
82
+ # Dec: 22.01
83
+ # ...
84
+
85
+ # Direct catalog query
86
+ isgri query --tstart 2010-01-01 --tstop 2010-12-31 --ra 83.63 --dec 22.01 --max-chi 2.0
87
+
88
+ # Get SWID list for batch processing
89
+ isgri query --tstart 3000 --tstop 3100 --list-swids > swids.txt
90
+
91
+ # Export results
92
+ isgri query --tstart 3000 --tstop 3100 --output results.fits
93
+ ```
94
+
95
+ ### Query SCW Catalog
96
+
97
+ ```python
98
+ from isgri.catalog import ScwQuery
99
+
100
+ # Load catalog
101
+ cat = ScwQuery("path_to_catalog.fits")
102
+
103
+ # Find Crab observations in 2010 with good quality
104
+ results = (cat
105
+ .time(tstart="2010-01-01", tstop="2010-12-31")
106
+ .quality(max_chi=2.0)
107
+ .position(ra=83.63, dec=22.01, fov_mode="full")
108
+ .get()
109
+ )
110
+
111
+ # Filter by revolution(s)
112
+ results = cat.revolution([1000, 1001, 1002]).get()
113
+
114
+ # Save selected columns
115
+ cat.write('results.fits', columns=['SWID', 'TSTART', 'TSTOP'])
116
+
117
+ # Get SWID list
118
+ swids = cat.get_swids()
119
+
120
+ print(f"Found {len(results)} observations")
121
+ ```
122
+
123
+ ### Build/Update SCW Catalog
124
+
125
+ #### Command Line
126
+
127
+ ```bash
128
+ # Update catalog using configured paths
129
+ isgri update
130
+
131
+ # Update with custom paths
132
+ isgri update --archive /anita/archivio/ --catalog ~/data/catalog.fits
133
+
134
+ # Enable light curve caching (15-1000 keV, 1s bins)
135
+ isgri update --cache ~/data/lightcurves/
136
+
137
+ # Limit CPU cores for parallel processing
138
+ isgri update --cores 4
139
+ ```
140
+
141
+ #### Python API
142
+
143
+ ```python
144
+ from isgri.catalog import CatalogBuilder
145
+
146
+ # Create builder instance
147
+ builder = CatalogBuilder(
148
+ archive_path="/path/to/archive",
149
+ catalog_path="scw_catalog.fits",
150
+ lightcurve_cache="/path/to/cache", # optional
151
+ n_cores=8
152
+ )
153
+
154
+ # Update catalog with new science windows
155
+ builder.update_catalog()
156
+
157
+ # Find all science windows in archive
158
+ swids, paths = builder.find_scws()
159
+ print(f"Found {len(swids)} science windows")
160
+ ```
161
+
162
+ The builder:
163
+ - Scans archive for new ScWs not in catalog
164
+ - Computes quality metrics (raw, sigma-clipped, GTI-filtered chi-squared)
165
+ - Processes in parallel by revolution
166
+ - Optionally caches 1s light curves (15-1000 keV)
167
+
168
+ ### Analyze Light Curves
169
+
170
+ ```python
171
+ from isgri.utils import LightCurve, QualityMetrics
172
+
173
+ # Method 1: Load from file paths
174
+ lc = LightCurve.load_data(
175
+ events_path="isgri_events.fits",
176
+ pif_path="source_model.fits",
177
+ use_pif=True,
178
+ pif_threshold=0.5
179
+ )
180
+
181
+ # Method 2: Load by SWID (requires config)
182
+ lc = LightCurve.load_data(swid="255900280010")
183
+
184
+ # Method 3: Load by SWID + source (auto-finds PIF)
185
+ lc = LightCurve.load_data(
186
+ swid="255900280010",
187
+ source="SGR1935",
188
+ use_pif=True,
189
+ pif_threshold=0.5
190
+ )
191
+
192
+ # Create binned lightcurve
193
+ time, counts = lc.rebin(binsize=1.0, emin=30, emax=100)
194
+
195
+ # Override PIF settings temporarily
196
+ time, counts = lc.rebin(binsize=1.0, emin=30, emax=100, use_pif=True, pif_threshold=0.8)
197
+
198
+ # Or change instance settings
199
+ lc.pif_threshold = 0.7
200
+ lc.use_pif = True
201
+ time, counts = lc.rebin(binsize=1.0, emin=30, emax=100)
202
+
203
+ # Module-by-module analysis
204
+ times, module_counts = lc.rebin_by_modules(binsize=1.0, emin=30, emax=300)
205
+
206
+ # Quality metrics
207
+ qm = QualityMetrics(lc, binsize=1.0, emin=30, emax=100)
208
+ chi_raw = qm.raw_chi_squared()
209
+ chi_clipped = qm.sigma_clip_chi_squared(sigma=1)
210
+ chi_gti = qm.gti_chi_squared()
211
+ print(f"Chisq/dof = {chi_raw:.2f}")
212
+
213
+ # Time conversions
214
+ from isgri.utils.time_conversion import ijd2utc, utc2ijd
215
+ print(f"Start time: {ijd2utc(lc.t0)}")
216
+ ```
217
+
218
+ ## Configuration
219
+
220
+ ISGRI stores configuration in default config folder for each system (see: platformdirs package)
221
+
222
+ ```bash
223
+ # View current config
224
+ isgri config
225
+
226
+ # Set paths
227
+ isgri config-set --archive /path/to/archive
228
+ isgri config-set --catalog /path/to/catalog.fits
229
+ isgri config-set --pif /path/to/pif
230
+
231
+ # Set all at once
232
+ isgri config-set --archive /path/to/archive --catalog /path/to/catalog.fits --pif /path/to/pif
233
+ ```
234
+
235
+ Config in Python:
236
+
237
+ ```python
238
+ from isgri.config import Config
239
+
240
+ cfg = Config()
241
+ print(cfg.archive_path)
242
+ print(cfg.catalog_path)
243
+ print(cfg.pif_path)
244
+
245
+ # Create new config programmatically
246
+ cfg.create_new(
247
+ archive_path="/path/to/archive",
248
+ catalog_path="/path/to/catalog.fits",
249
+ pif_path="/path/to/pif"
250
+ )
251
+ ```
252
+
253
+ Local config file `isgri_config.toml` in current directory overrides global config.
254
+
255
+
256
+ ## Documentation
257
+
258
+ - **CLI Reference**: Run `isgri --help` or `isgri <command> --help`
259
+ - **Catalog Tutorial**: [scwquery_walkthrough.ipynb](https://github.com/dominp/isgri/blob/main/demo/scwquery_walkthrough.ipynb)
260
+ - **Light Curve Tutorial**: [lightcurve_walkthrough.ipynb](https://github.com/dominp/isgri/blob/main/demo/lightcurve_walkthrough.ipynb)
261
+ - **API Reference**: Use `help()` in Python or see docstrings
262
+
263
+
264
+ ## License
265
+
266
+ MIT