This repository contains the reconstruction and analysis code for the November 2024 polarized X-ray measurement performed with an optically read out gaseous time projection chamber prototype at INAF-IAPS.
The detector used Ar/CF4 60/40 at approximately 1000 mbar, with 440 V across
each GEM, 2.5 kV/cm transfer fields, and a 1 kV/cm drift field. Optical readout
used an ORCA-Quest camera and a 25 mm EHD F/0.85 lens. Measurements were taken
at two detector orientations separated by a clockwise rotation of
90 +/- 1 degrees.
| Path | Purpose |
|---|---|
Analyzer.cxx, Analyzer.h |
Track reconstruction and direction estimation. |
INAF_dir_MP.cxx |
Multiprocessing driver that reads CYGNO Events trees and writes reduced track_info trees. |
configs/directionality/ |
Organized reconstruction templates and fixed ROI configurations. |
analysis/stokes_modulation.py |
Final four-sample event-Stokes analysis and cosine-two cross-check. |
analysis/stokes_modulation_config.json |
Current polarized-sample configuration. |
analysis/review_cd109_control.py |
Unpolarized Cd-109 data-quality review. |
spectra-CdTe/ |
CdTe energy calibration and polarized-line fraction analysis. |
docs/README.md |
Documentation index. |
docs/measurement_and_analysis_overview.md |
Current measurement and result summary. |
docs/paper_readiness.md |
Frozen scope, limitations, and final writing inputs. |
analysis/make_paper_figures.py |
Reproducible vector-PDF paper figures. |
Legacy example programs, diffusion utilities, parameter scans, pixel-rotation studies, and the old ROOT modulation-fitting scripts have been removed because they are not part of the retained analysis chain.
Raw and reduced ROOT data, MCA spectra, reference PDFs, manuscript files, and generated figures/results are intentionally excluded from Git. Source code, analysis configurations, tests, and scientific Markdown are versioned.
The final local analysis expects the reconstructed cluster files:
Reco/INAF_Ar_2ndreco_0deg.root
Reco/INAF_Ar_2ndreco_90deg.root
Reco/109Cd_ArCF4.root
and the four final polarized directionality files under:
directionality_circle/0deg_low_circle_r75/
directionality_circle/90deg_low_circle_r75/
directionality_circle/0deg_high_circle_r75/
directionality_circle/90deg_high_circle_r75/
The valid run selections are:
- 0deg: 23934--24291;
- 90deg: 24294--24701.
This removes duplicated 0deg run 24291 and pedestal run 24293 from the reconstructed 90deg file.
The reconstruction requires CERN ROOT, including TProcessExecutor and
TSpectrum.
Compile with:
g++ Analyzer.cxx INAF_dir_MP.cxx -O3 -o INAF_MP \
$(root-config --libs --cflags) -lSpectrumCopy and edit configs/directionality/directionality_template.txt, then run:
./INAF_MP configs/directionality/directionality_template.txtDirectionality configurations are organized under configs/directionality/.
For the four-position-cut cross-check, the user runs:
bash ./run_directionality_position_crosscheck.shThe launcher accepts one or more configuration filenames when only a subset should be reconstructed. See the position-cut report for the geometry definitions and examples.
The Python analysis requires NumPy, SciPy, Matplotlib, awkward, and uproot. Run the final four-sample polarized analysis with:
python3 analysis/stokes_modulation.pyIt reads the common-circle outputs, calculates event Stokes parameters, propagates covariance, applies the measured CdTe line fractions, performs the first-order 0deg/90deg additive decomposition, and makes an independent Poisson cosine-two fit.
Review the unpolarized Cd-109 reconstructed clusters with:
python3 analysis/review_cd109_control.pyEstimate the CdTe line fractions with:
python3 spectra-CdTe/line_purity.pyRun all Python tests with:
cd analysis
python3 -m unittest discover -s . -p 'test_*.py'
cd ../spectra-CdTe
python3 -m unittest discover -s . -p 'test_*.py'Build the frozen vector-PDF paper figure set with:
python3 analysis/make_paper_figures.pySee analysis/README.md for analysis details and the measurement overview for the current physics result. The paper-readiness document records the frozen limitations and final collaboration inputs for writing.
The former standalone spettri-CdTe checkout has been flattened into this
repository. Its original remote was
fiorotto8/spettri-CdTe, at commit
d4a06a9 before flattening. Local analysis changes were retained.
The current paper analysis is line_purity.py. The older PyROOT scripts are
retained for provenance and diagnostic plots:
cd spectra-CdTe
python3 line_purity.pyThe measured MCA inputs and generated spectra are ignored by Git.