classy

A tool to explore, download, analyse, and classify asteroid reflectance spectra. Originally designed for classification in the taxonomy of Mahlke, Carry, and Mattei 2022, it now offers multiple taxonomic systems and a suite of quality-of-life features for spectroscopic analysis.[1]


Classify Your Observation →

Using the classy web interface.

Get started →

Install and use classy on your machine.


Showcase

Things that classy tries to do well.


Explore and compare.

Quickly find and download spectra in public repositories.

Example: List all spectra of asteroids in the Themis family with albedos up to 0.06 that cover the 0.45-1.8μm range.

$ classy spectra --wave_min 0.45 --wave_max 1.8 --family Themis --albedo ,0.06
+-----------+--------+----------+----------+--------+---------------------+--------+--------+-----------------+
| name      | number | wave_min | wave_max | phase  | date_obs            | family | albedo | shortbib        |
+-----------+--------+----------+----------+--------+---------------------+--------+--------+-----------------+
| Themis    | 24     | 0.435    | 2.49     | 12.917 | 2005-10-08T05:28:30 | Themis | 0.051  | MITHNEOS Unpub. |
| Themis    | 24     | 0.45     | 2.4      | -      | -                   | Themis | 0.051  | Fornasier+ 2016 |
| Themis    | 24     | 0.435    | 2.49     | 12.876 | 2005-10-08T00:00:00 | Themis | 0.051  | DeMeo+ 2009     |
| Adorea    | 268    | 0.44     | 2.4      | -      | -                   | Themis | 0.039  | Fornasier+ 2016 |
| Lipperta  | 846    | 0.45     | 2.39     | -      | -                   | Themis | 0.05   | Fornasier+ 2016 |
| Lermontov | 2222   | 0.45     | 2.38     | -      | -                   | Themis | 0.051  | Fornasier+ 2016 |
+-----------+--------+----------+----------+--------+---------------------+--------+--------+-----------------+
                                                     6 Spectra
>>> import classy
>>> spectra = classy.Spectra(wave_min=0.45, wave_max=1.8, family="Themis", albedo=",0.06")
>>> print(f"Found {len(spectra)} spectra from {[spec.shortbib for spec in spectra]}.")
Found 6 spectra from ['MITHNEOS Unpub.', 'Fornasier+ 2016', 'DeMeo+ 2009', 'Fornasier+ 2016', 'Fornasier+ 2016', 'Fornasier+ 2016'].

Coming soon.

Analyse and classify.

Persistent preprocessing and feature recognition for quick classification.

Example: Classify the spectra above following Mahlke+ 2022, DeMeo+ 2009, and Tholen 1984.

$ classy classify --wave_min 0.45 --wave_max 1.8 --family Themis --albedo ,0.06
+-----------+--------+----------+----------+--------+--------------+-------------+--------------+-----------------+
| name      | number | wave_min | wave_max | albedo | class_mahlke | class_demeo | class_tholen | shortbib        |
+-----------+--------+----------+----------+--------+--------------+-------------+--------------+-----------------+
| Themis    | 24     | 0.435    | 2.490    | 0.0507 | C            | C           | G            | MITHNEOS Unpub. |
| Themis    | 24     | 0.450    | 2.400    | 0.0507 | C            | C           |              | Fornasier+ 2016 |
| Themis    | 24     | 0.435    | 2.490    | 0.0507 | C            | C           | G            | DeMeo+ 2009     |
| Adorea    | 268    | 0.440    | 2.400    | 0.0389 | S            |             |              | Fornasier+ 2016 |
| Lipperta  | 846    | 0.450    | 2.390    | 0.0504 | P            | X           |              | Fornasier+ 2016 |
| Lermontov | 2222   | 0.450    | 2.380    | 0.0513 | P            | C           |              | Fornasier+ 2016 |
+-----------+--------+----------+----------+--------+--------------+-------------+--------------+-----------------+
                                                     6 Spectra
>>> spectra.classify(taxonomy="mahlke")
>>> spectra.classify(taxonomy="demeo")
>>> spectra.classify(taxonomy="tholen")
>>> for spec in spectra:
...     print(f"{spec.name} is {spec.class_mahlke} in Mahlke+ 2022, {spec.class_demeo} in DeMeo+ 2009, and {spec.class_tholen} in Tholen 1984")
MITHNEOS/Themis is C in Mahlke+ 2022, C in DeMeo+ 2009, and G in Tholen 1984
M4AST/Themis is C in Mahlke+ 2022, C in DeMeo+ 2009, and  in Tholen 1984
DM09/Themis is C in Mahlke+ 2022, C in DeMeo+ 2009, and G in Tholen 1984
M4AST/Adorea is S in Mahlke+ 2022,  in DeMeo+ 2009, and  in Tholen 1984
M4AST/Lipperta is P in Mahlke+ 2022, X in DeMeo+ 2009, and  in Tholen 1984
M4AST/Lermontov is P in Mahlke+ 2022, C in DeMeo+ 2009, and  in Tholen 1984

Coming soon.

Visualise and export.

Quick-look plots at any step to verify your analysis.

Example: Show the spectra and the classification results.

$ classy classify --wave_min 0.45 --wave_max 1.8 --family Themis --albedo ,0.06 --plot
>>> spectra.plot(taxonomy='mahlke')

Coming soon.

_images/spectra_classified.png _images/spectra_classified_dark.png