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

#include <Run3ChargeCalibParser.h>

Inheritance diagram for PixelChargeCalib::Run3ChargeCalibParser:
Collaboration diagram for PixelChargeCalib::Run3ChargeCalibParser:

Public Member Functions

 Run3ChargeCalibParser (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) override final
virtual ChargeCalibrationBundle parseImpl (unsigned int, const nlohmann::json &, int) override final
virtual ChargeCalibrationBundle parseImpl (unsigned int, const std::string &) override final

Detailed Description

Definition at line 23 of file Run3ChargeCalibParser.h.

Constructor & Destructor Documentation

◆ Run3ChargeCalibParser()

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

Definition at line 25 of file Run3ChargeCalibParser.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::Run3ChargeCalibParser::parseImpl ( unsigned int moduleHash,
const nlohmann::json & data )
finaloverrideprivatevirtual

Implements PixelChargeCalib::IChargeCalibrationParser.

Definition at line 23 of file Run3ChargeCalibParser.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 //
28 ChargeCalibrationBundle b(numFE);
29 //
30 for (unsigned int j{}; j < numFE; j++) {
31 const auto &calibArray = data.at(j);
32 if (!calibArray.empty()) {
33 // conventional calibration
34 if (calibArray.size() != FEStringSize-1) {
35 std::cout<<"Parameter size is not consistent(" << FEStringSize << ") " << calibArray.size() << " at (i,j)=(" << moduleHash << "," << j << ")\n";
36 b.isValid = false;
37 return b;
38 }
39 auto getInt = getFunc<int>(calibArray);
40 auto getFloat = getFunc<float>(calibArray);
41 b.threshold.emplace_back(getInt(0), getInt(1), getInt(2), getInt(3));
42 b.thresholdLong.emplace_back(getInt(4), getInt(5), getInt(6), getInt(7));
43 b.thresholdGanged.emplace_back(getInt(8), getInt(9), getInt(10), getInt(11));
44 b.params.emplace_back(getFloat(12), getFloat(13), getFloat(14), LegacyFitParameters::defaultOverflow);
45 b.paramsGanged.emplace_back(getFloat(15), getFloat(16), getFloat(17), LegacyFitParameters::defaultOverflow);
46 b.totRes.emplace_back(getFloat(18), getFloat(19));
47
48 // Linear extrapolation above large charge
49 if (m_configData->getPIXLinearExtrapolation() && technology==InDetDD::PixelReadoutTechnology::FEI3) {
51 const auto & [barrel_ec, layer] = getBecAndLayer(m_pixelID, wafer_hash);
52 // search for ToT when charge exceeds threshold
53 if (!(element->isDBM())) {
54 //charge threshold beyond which linear fit will be used
55 const int totIdxStart = m_configData->getToTThreshold(barrel_ec,layer);
56 const int totIdxEnd = m_configData->getFEI3Latency(barrel_ec,layer);
57 // Normal pixels
58 int totlimit = b.idxAtChargeLimit(m_chargeLimit, InDetDD::PixelDiodeType::NORMAL, totIdxStart, totIdxEnd);
59 b.insertLinearParams( InDetDD::PixelDiodeType::NORMAL, totlimit);
60 // Ganged pixels
61 totlimit = b.idxAtChargeLimit(m_chargeLimit, InDetDD::PixelDiodeType::GANGED, totIdxStart, totIdxEnd);
62 b.insertLinearParams( InDetDD::PixelDiodeType::GANGED, totlimit);
63 } else { // DBM
64 b.lin.emplace_back(0.f, 0.f);
65 b.linGanged.emplace_back(0.f, 0.f);
66 }
67 } else {
68 b.lin.emplace_back(0.f, 0.f);
69 b.linGanged.emplace_back(0.f, 0.f);
70 }
71 } else {
72 std::cout<<"Array size is zero in " << calibArray << " at (i,j)=(" << moduleHash << "," << j << ")\n";
73 b.isValid = false;
74 return b;
75 }
76 }
77 return b;
78 }
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::Run3ChargeCalibParser::parseImpl ( unsigned int ,
const nlohmann::json & ,
int  )
inlinefinaloverrideprivatevirtual

Implements PixelChargeCalib::IChargeCalibrationParser.

Definition at line 36 of file Run3ChargeCalibParser.h.

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

◆ parseImpl() [3/3]

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

Implements PixelChargeCalib::IChargeCalibrationParser.

Definition at line 43 of file Run3ChargeCalibParser.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: