Cytometry has evolved as a crucial technique in clinical diagnostics, clinical studies, and research. However, batch effects due to technical variation complicate the analysis of cytometry data in clinical and fundamental research settings and have to be accounted for. Here, we present a Python implementation of the widely used CytoNorm algorithm for the removal of batch effects, implementing the complete feature set of the recently published CytoNorm 2.0. Our implementation ran up to 85% faster than its R counterpart while being fully compatible with common single-cell data structures and frameworks of Python. We extend the previous functionality by adding common clustering algorithms and provide key visualizations of the algorithm and its evaluation. The CytoNormPy implementation is freely available on GitHub: https://github.com/TarikExner/CytoNormPy.
{"title":"CytoNormPy Enables a Fast and Scalable Removal of Batch Effects in Cytometry Datasets","authors":"Tarik Exner, Nicolaj Hackert, Luca Leomazzi, Sofie Van Gassen, Yvan Saeys, Hanns-Martin Lorenz, Ricardo Grieshaber-Bouyer","doi":"10.1002/cyto.a.24953","DOIUrl":"10.1002/cyto.a.24953","url":null,"abstract":"<p>Cytometry has evolved as a crucial technique in clinical diagnostics, clinical studies, and research. However, batch effects due to technical variation complicate the analysis of cytometry data in clinical and fundamental research settings and have to be accounted for. Here, we present a Python implementation of the widely used CytoNorm algorithm for the removal of batch effects, implementing the complete feature set of the recently published CytoNorm 2.0. Our implementation ran up to 85% faster than its R counterpart while being fully compatible with common single-cell data structures and frameworks of Python. We extend the previous functionality by adding common clustering algorithms and provide key visualizations of the algorithm and its evaluation. The CytoNormPy implementation is freely available on GitHub: https://github.com/TarikExner/CytoNormPy.</p>","PeriodicalId":11068,"journal":{"name":"Cytometry Part A","volume":"107 9","pages":"629-635"},"PeriodicalIF":2.1,"publicationDate":"2025-08-29","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://onlinelibrary.wiley.com/doi/epdf/10.1002/cyto.a.24953","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"144946173","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":4,"RegionCategory":"生物学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"OA","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}