ATLAS Offline Software
Loading...
Searching...
No Matches
PixelChargeCalib::LUTChargeCalibParser Class Reference

#include <LUTChargeCalibParser.h>

Inheritance diagram for PixelChargeCalib::LUTChargeCalibParser:
Collaboration diagram for PixelChargeCalib::LUTChargeCalibParser:

Public Member Functions

 LUTChargeCalibParser (const PixelModuleData *pModData, const InDetDD::SiDetectorElementCollection *pElements, const PixelID *pId)
template<class T>
ChargeCalibrationBundle parse (unsigned int hash, const T &data)
template<class T>
ChargeCalibrationBundle parse (unsigned int hash, const T &data, int inputSource)

Protected Member Functions

template<typename T, typename b = std::is_integral<T>>
std::function< T(size_t)> getFunc (const std::vector< std::string > &data)
 Return function converting a string to number type T at index i of data vector.
template<typename T>
std::function< T(size_t)> getFunc (const nlohmann::json &data)
 Return function converting an item to number type T at index i of json data.

Protected Attributes

const PixelModuleDatam_configData {}
const InDetDD::SiDetectorElementCollectionm_elements {}
const PixelIDm_pixelID {}

Static Protected Attributes

static constexpr float m_chargeLimit = 1e5
 If the calculated charge exceeds this limit, a linear extrapolation is used at this point.

Private Member Functions

virtual ChargeCalibrationBundle parseImpl (unsigned int moduleHash, const nlohmann::json &data, int inputSource) override final
virtual ChargeCalibrationBundle parseImpl (unsigned int, const nlohmann::json &) override final
virtual ChargeCalibrationBundle parseImpl (unsigned int, const std::string &) override final

Detailed Description

Definition at line 23 of file LUTChargeCalibParser.h.

Constructor & Destructor Documentation

◆ LUTChargeCalibParser()

PixelChargeCalib::LUTChargeCalibParser::LUTChargeCalibParser ( const PixelModuleData * pModData,
const InDetDD::SiDetectorElementCollection * pElements,
const PixelID * pId )
inline

Definition at line 25 of file LUTChargeCalibParser.h.

27 :IChargeCalibrationParser(pModData,pElements, pId){
28 //nop
29 }
IChargeCalibrationParser(const PixelModuleData *pModData, const InDetDD::SiDetectorElementCollection *pElements, const PixelID *pId)

Member Function Documentation

◆ getFunc() [1/2]

template<typename T>
std::function< T(size_t)> PixelChargeCalib::IChargeCalibrationParser::getFunc ( const nlohmann::json & data)
inlineprotectedinherited

Return function converting an item to number type T at index i of json data.

Definition at line 69 of file IChargeCalibrationParser.h.

69 {
70 auto f = [&data](size_t i)->T {
71 return data[i].get<T>();
72 };
73 return f;
74 }
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
unsigned long long T

◆ getFunc() [2/2]

template<typename T, typename b = std::is_integral<T>>
std::function< T(size_t)> PixelChargeCalib::IChargeCalibrationParser::getFunc ( const std::vector< std::string > & data)
inlineprotectedinherited

Return function converting a string to number type T at index i of data vector.

Definition at line 59 of file IChargeCalibrationParser.h.

59 {
60 auto f = [&data](size_t i)->T {
61 return b::value ? std::stoi(data[i]) : std::stof(data[i]);
62 };
63 return f;
64 }

◆ parse() [1/2]

template<class T>
ChargeCalibrationBundle PixelChargeCalib::IChargeCalibrationParser::parse ( unsigned int hash,
const T & data )
inlineinherited

Definition at line 41 of file IChargeCalibrationParser.h.

41 {
42 return parseImpl(hash, data);
43 }
virtual ChargeCalibrationBundle parseImpl(unsigned int, const nlohmann::json &, int)=0

◆ parse() [2/2]

template<class T>
ChargeCalibrationBundle PixelChargeCalib::IChargeCalibrationParser::parse ( unsigned int hash,
const T & data,
int inputSource )
inlineinherited

Definition at line 45 of file IChargeCalibrationParser.h.

45 {
46 return parseImpl(hash, data, inputSource);
47 }

◆ parseImpl() [1/3]

ChargeCalibrationBundle PixelChargeCalib::LUTChargeCalibParser::parseImpl ( unsigned int moduleHash,
const nlohmann::json & data,
int inputSource )
finaloverrideprivatevirtual

Implements PixelChargeCalib::IChargeCalibrationParser.

Definition at line 23 of file LUTChargeCalibParser.cxx.

23 {
24 IdentifierHash wafer_hash = IdentifierHash(moduleHash);
25 const InDetDD::SiDetectorElement *element = m_elements->getDetectorElement(wafer_hash);
26 const auto & [numFE, technology] = numChipsAndTechnology(element);
27 bool isLUTEnabled = (inputSource == 1);
28 bool isChargeCalibrationFromJson = (inputSource == 2);
29 //
30 ChargeCalibrationBundle b(numFE,isLUTEnabled,isChargeCalibrationFromJson);
31 //
32 for (unsigned int j{}; j < numFE; j++) {
33 //Retrieve calibArrays in different formats for Run4 (based on ITKPixV2 chip settings) and Run3
34 const auto &calibArray = (isLUTEnabled || isChargeCalibrationFromJson) ? data.at(0) : data.at(j);
35 if (!calibArray.empty()) {
36 // new charge calibration for RUN-3
37 if ((technology == InDetDD::PixelReadoutTechnology::FEI4 && !(element->isDBM())) || ((b.useLUT || b.useTXT) && technology == InDetDD::PixelReadoutTechnology::RD53)) {
38 if (calibArray.size() != FEStringSize) {
39 std::cout<<"Parameter size is not consistent(" << FEStringSize << ") " << calibArray.size() << " at (i,j)=(" << moduleHash << "," << j << ")\n";
40 b.isValid = false;
41 return b;
42 }
43 auto getInt = getFunc<int>(calibArray);
44 auto getFloat = getFunc<float>(calibArray);
45 auto &charges = b.tot2Charges.emplace_back(PixelChargeCalibCondData::IBLCalibration());
46 for (size_t k{}; k < PixelChargeCalibCondData::IBLCalibrationSize; k++) {
47 charges[k] = getFloat(k + 4ul);
48 }
50 b.threshold.emplace_back(getInt(0), 0.f, getInt(1), 0.f);
51 b.thresholdLong.emplace_back(getInt(2), 0.f, getInt(3), 0.f);
52 b.thresholdGanged.emplace_back(getInt(2), 0.f, getInt(3), 0.f);
53 b.params.emplace_back(0.f, 0.f, 0.f, LegacyFitParameters::defaultOverflow);
54 b.paramsGanged.emplace_back(0.f, 0.f, 0.f, LegacyFitParameters::defaultOverflow);
55 b.totRes.emplace_back(0.f, 0.f);
56 } else { //normal CalibrationStrategy used by ITk
57 if (calibArray.size() != FEStringSize) {
58 std::cout<<"Parameter size is not consistent(" << FEStringSize << ") " << calibArray.size() << " at (i,j)=(" << moduleHash << "," << j << ")\n";
59 b.isValid = false;
60 return b;
61 }
62 auto getInt = getFunc<int>(calibArray);
63 auto getFloat = getFunc<float>(calibArray);
64 b.threshold.emplace_back(getInt(0), getInt(1), getInt(2), getInt(3));
65 b.thresholdLong.emplace_back(getInt(4), getInt(5), getInt(6), getInt(7));
66 b.thresholdGanged.emplace_back(getInt(8), getInt(9), getInt(10), getInt(11));
67 //note: for ITk, setting the first parameter to the constructor (A) less than totlimit
68 //will result in pathological behaviour for the 'Q' method on LegacyFitParameters
69 const auto totLimit = (technology == InDetDD::PixelReadoutTechnology::RD53) ? 14: LegacyFitParameters::defaultOverflow;
70 b.params.emplace_back(getFloat(12), getFloat(13), getFloat(14), totLimit);
71 b.paramsGanged.emplace_back(getFloat(15), getFloat(16), getFloat(17), totLimit);
72 b.totRes.emplace_back(getFloat(18), getFloat(19));
73
74 // Linear extrapolation above large charge
75 if (m_configData->getPIXLinearExtrapolation()) {
77 const auto & [barrel_ec, layer] = getBecAndLayer(m_pixelID, wafer_hash);
78 // search for ToT when charge exceeds threshold
79 if (!(element->isDBM())) {
80 //charge threshold beyond which linear fit will be used
81 const int totIdxStart = m_configData->getToTThreshold(barrel_ec,layer);
82 const int totIdxEnd = m_configData->getFEI3Latency(barrel_ec,layer);
83 // Normal pixels
84 int totlimit = b.idxAtChargeLimit(m_chargeLimit, InDetDD::PixelDiodeType::NORMAL, totIdxStart, totIdxEnd);
85 b.insertLinearParams( InDetDD::PixelDiodeType::NORMAL, totlimit);
86 // Ganged pixels
87 totlimit = b.idxAtChargeLimit(m_chargeLimit, InDetDD::PixelDiodeType::GANGED, totIdxStart, totIdxEnd);
88 b.insertLinearParams( InDetDD::PixelDiodeType::GANGED, totlimit);
89 } else { // DBM
90 b.lin.emplace_back(0.f, 0.f);
91 b.linGanged.emplace_back(0.f, 0.f);
92 }
93 } else {
95 b.lin.emplace_back(0.f, 0.f);
96 b.linGanged.emplace_back(0.f, 0.f);
97 }
98 }
99 } else {
100 std::cout<<"Array size is zero in " << calibArray << " at (i,j)=(" << moduleHash << "," << j << ")\n";
101 b.isValid = false;
102 return b;
103 }
104 }
105 return b;
106 }
static constexpr size_t IBLCalibrationSize
std::array< float, IBLCalibrationSize > IBLCalibration
std::function< T(size_t)> getFunc(const std::vector< std::string > &data)
Return function converting a string to number type T at index i of data vector.
static constexpr float m_chargeLimit
If the calculated charge exceeds this limit, a linear extrapolation is used at this point.
const InDetDD::SiDetectorElementCollection * m_elements
std::pair< size_t, InDetDD::PixelReadoutTechnology > numChipsAndTechnology(const InDetDD::SiDetectorElement *element)
std::pair< int, int > getBecAndLayer(const PixelID *pPixelId, IdentifierHash hash)
@ layer
Definition HitInfo.h:79

◆ parseImpl() [2/3]

virtual ChargeCalibrationBundle PixelChargeCalib::LUTChargeCalibParser::parseImpl ( unsigned int ,
const nlohmann::json &  )
inlinefinaloverrideprivatevirtual

Implements PixelChargeCalib::IChargeCalibrationParser.

Definition at line 36 of file LUTChargeCalibParser.h.

36 {
37 PixelChargeCalib::ChargeCalibrationBundle b(0);
38 b.isValid=false;
39 return b;
40 }

◆ parseImpl() [3/3]

virtual ChargeCalibrationBundle PixelChargeCalib::LUTChargeCalibParser::parseImpl ( unsigned int ,
const std::string &  )
inlinefinaloverrideprivatevirtual

Implements PixelChargeCalib::IChargeCalibrationParser.

Definition at line 43 of file LUTChargeCalibParser.h.

43 {
44 PixelChargeCalib::ChargeCalibrationBundle b(0);
45 b.isValid=false;
46 return b;
47 }

Member Data Documentation

◆ m_chargeLimit

float PixelChargeCalib::IChargeCalibrationParser::m_chargeLimit = 1e5
staticconstexprprotectedinherited

If the calculated charge exceeds this limit, a linear extrapolation is used at this point.

Definition at line 55 of file IChargeCalibrationParser.h.

◆ m_configData

const PixelModuleData* PixelChargeCalib::IChargeCalibrationParser::m_configData {}
protectedinherited

Definition at line 51 of file IChargeCalibrationParser.h.

51{};

◆ m_elements

const InDetDD::SiDetectorElementCollection* PixelChargeCalib::IChargeCalibrationParser::m_elements {}
protectedinherited

Definition at line 52 of file IChargeCalibrationParser.h.

52{};

◆ m_pixelID

const PixelID* PixelChargeCalib::IChargeCalibrationParser::m_pixelID {}
protectedinherited

Definition at line 53 of file IChargeCalibrationParser.h.

53{};

The documentation for this class was generated from the following files: