ATLAS Offline Software
Loading...
Searching...
No Matches
ITkPixelCsvWaferIdAlg.h
Go to the documentation of this file.
1/*
2Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ITKPIXELBYTESTREAMCNV_ITKPIXELCSVWAFERIDALG_H
6#define ITKPIXELBYTESTREAMCNV_ITKPIXELCSVWAFERIDALG_H
7
9#include "GaudiKernel/EventContext.h"
10#include "GaudiKernel/ISvcLocator.h"
11#include "Identifier/Identifier.h"
13
14#include <atomic>
15#include <string>
16#include <vector>
17#include <utility>
18#include <tuple>
19#include <bitset>
20
21
22class PixelID;
23
25public:
26 struct CsvRow {
27 std::string spChain;
28 std::string md;
29 int fe{-1};
30 std::string flx_card_device;
31 unsigned int fiber{};
32 };
33 struct FelixCsvRow {
34 std::string host;
35 unsigned int card1{999};
36 unsigned int card2{999};
37 };
38 struct OutputCsvRow {
39 std::bitset<32> detResId;
40 std::bitset<32> tdetResId;
41 std::string card_dev;
42 unsigned int fiber{};
43 unsigned int dma{};
44 std::bitset<32> sourceId;
45 };
46
47 ITkPixelCsvWaferIdAlg(const std::string& name, ISvcLocator* pSvcLocator);
48 virtual ~ITkPixelCsvWaferIdAlg() = default;
49
50 virtual StatusCode initialize() override;
51 virtual StatusCode execute(const EventContext& ctx) const override;
52
53 const std::vector<CsvRow>& rows() const { return m_rows; }
54
55 StatusCode loadCsv();
56
57
58 std::tuple<Identifier,int,std::bitset<32>> waferId(const CsvRow& row) const;
59 std::bitset<32> onlineId(const std::vector<std::string>& spchain, const std::string& mod, int fe, bool legacy = false) const;
60
61private:
62 static std::string trim(const std::string& input);
63 static std::vector<std::string> splitCsvLine(const std::string& line);
64 static std::vector<std::string> parseSPChain(const std::string& spChain);
65 const StatusCode sanityCheck(const std::string & s, bool legacy = false) const;
66 void bitcheck(std::bitset<32> b, uint32_t lsb_lim, uint32_t msb_lim , std::string_view s = "") const;
67 std::pair<unsigned int, unsigned int> flxHost(unsigned int card) const ;
68
69
70 std::vector<int> DmaBuffer() const;
71 std::bitset<32> sourceID(const std::vector<std::string>& spchain, const std::string& mod, int fe, const std::string& flx, const unsigned int dma) const;
72 std::vector<std::string> splitFLX_card_device(const std::string& s) const;
73 std::bitset<32> subDetID(int barrel_endcap, int layer_disk, int eta) const;
74
75
76 // Helper functions implemented in the .cxx file
77 int barrel_ec(const std::vector<std::string>& spchain) const;
78 int layer_disk(const std::vector<std::string>& spchain) const;
79 int phi_module(const std::vector<std::string>& spchain, const std::string& mod, int fe) const;
80 int eta_module(const std::vector<std::string>& spchain, const std::string& mod, int fe) const;
81 int feID(const std::vector<std::string>& spchain, int fe) const;
82
83 Gaudi::Property<std::string> m_csvFile{this,
84 "CsvFile",
85 "AT2-IP-ES-0016_v1.41_INCOMPLETE-ModuleA_slim.csv",
86 "CSV file containing SP chain, Module and FE columns"};
87 Gaudi::Property<std::string> m_FelixCardFile{this,
88 "FelixCardFile",
89 "FELIXRackAllocation_20260709_slim.csv",
90 "CSV file containing SP chain, Module and FE columns"};
91 Gaudi::Property<std::string> m_outputFile{this,
92 "OutputFile",
93 "ITkPixelWaferIds.txt",
94 "Output text file for one 32-bit waferID per line"};
95
96 const PixelID* m_pixIdHelper{nullptr};
97 std::vector<CsvRow> m_rows;
98 std::vector<FelixCsvRow> m_felix_rows;
99
100 mutable std::atomic<bool> m_done{false};
101};
102
103#endif // ITKPIXELBYTESTREAMCNV_ITKPIXELCSVWAFERIDALG_H
Scalar eta() const
pseudorapidity method
This is an Identifier helper class for the Pixel subdetector.
An algorithm that can be simultaneously executed in multiple threads.
virtual ~ITkPixelCsvWaferIdAlg()=default
virtual StatusCode initialize() override
virtual StatusCode execute(const EventContext &ctx) const override
static std::string trim(const std::string &input)
std::vector< std::string > splitFLX_card_device(const std::string &s) const
static std::vector< std::string > splitCsvLine(const std::string &line)
void bitcheck(std::bitset< 32 > b, uint32_t lsb_lim, uint32_t msb_lim, std::string_view s="") const
std::vector< int > DmaBuffer() const
std::pair< unsigned int, unsigned int > flxHost(unsigned int card) const
Gaudi::Property< std::string > m_FelixCardFile
std::vector< CsvRow > m_rows
int phi_module(const std::vector< std::string > &spchain, const std::string &mod, int fe) const
Gaudi::Property< std::string > m_outputFile
static std::vector< std::string > parseSPChain(const std::string &spChain)
int feID(const std::vector< std::string > &spchain, int fe) const
Gaudi::Property< std::string > m_csvFile
std::bitset< 32 > onlineId(const std::vector< std::string > &spchain, const std::string &mod, int fe, bool legacy=false) const
std::vector< FelixCsvRow > m_felix_rows
int barrel_ec(const std::vector< std::string > &spchain) const
std::tuple< Identifier, int, std::bitset< 32 > > waferId(const CsvRow &row) const
std::bitset< 32 > subDetID(int barrel_endcap, int layer_disk, int eta) const
const StatusCode sanityCheck(const std::string &s, bool legacy=false) const
std::bitset< 32 > sourceID(const std::vector< std::string > &spchain, const std::string &mod, int fe, const std::string &flx, const unsigned int dma) const
int eta_module(const std::vector< std::string > &spchain, const std::string &mod, int fe) const
ITkPixelCsvWaferIdAlg(const std::string &name, ISvcLocator *pSvcLocator)
int layer_disk(const std::vector< std::string > &spchain) const
const std::vector< CsvRow > & rows() const
This is an Identifier helper class for the Pixel subdetector.
Definition PixelID.h:69