ATLAS Offline Software
PixelChargeToTConversion.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // conditions
12 
13 PixelChargeToTConversion::PixelChargeToTConversion(const std::string& name, ISvcLocator* pSvcLocator) :
14  AthAlgorithm(name, pSvcLocator)
15 {
16 }
17 
18 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
19 
21 
22 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
23 
25 
26  ATH_MSG_INFO( "Initializing PixelChargeToTConversion" );
27 
28  if (!m_IBLParameterSvc.empty()) {
29  if (m_IBLParameterSvc.retrieve().isFailure()) {
30  ATH_MSG_FATAL("Could not retrieve IBLParameterSvc");
31  return StatusCode::FAILURE;
32  } else
33  ATH_MSG_INFO("Retrieved service " << m_IBLParameterSvc);
34  }
35 
36  m_doIBL = !m_IBLParameterSvc.empty() && m_IBLParameterSvc->containsIBL();
37 
38  ATH_CHECK(m_pixelReadout.retrieve());
42 
43  return StatusCode::SUCCESS;
44 }
45 
47  const EventContext &ctx = Gaudi::Hive::currentContext();
49  if (!pixel_container.isValid())
50  {
51  ATH_MSG_ERROR( "Pixel Cluster container " << m_pixelsClustersKey.key() << " not found" );
52  return StatusCode::RECOVERABLE;
53  }
54  ATH_MSG_DEBUG( "Pixel Cluster container found: " << pixel_container->size() << " collections" );
56  const PixelChargeCalibCondData *calibData = *calibDataHandle;
57 
58  int overflowIBLToT=0;
59  if(m_doIBL) {
60  overflowIBLToT = calibData->getFEI4OverflowToT();
61  }
62 
63  typedef InDet::PixelClusterContainer::const_iterator ClusterIter;
64  ClusterIter itrCluster;
65  ClusterIter itrClubeg=pixel_container->begin();
66  ClusterIter itrCluend=pixel_container->end();
67  for( itrCluster=itrClubeg;itrCluster!=itrCluend;++itrCluster){
68  const InDet::PixelClusterCollection* ClusterCollection(*itrCluster);
69  if (!ClusterCollection) continue;
70  for(DataVector<InDet::PixelCluster>::const_iterator p_clus=ClusterCollection->begin(); p_clus!=ClusterCollection->end(); ++p_clus){
71  const InDet::PixelCluster* theCluster = *p_clus;
72  const std::vector<Identifier>& RDOs = theCluster->rdoList();
73  const std::vector<int>& ToTs = theCluster->totList();
74  const std::vector<float>& Charges = theCluster->chargeList();
75  auto theNonConstCluster = const_cast<InDet::PixelCluster*> (theCluster);
76  ATH_MSG_DEBUG( "cluster RDOs , size, ToTs, size, Charges, size "<< RDOs <<" "<<RDOs.size()<<" "<< ToTs<<" " <<ToTs.size()<<" "<<Charges<<" "<<Charges.size());
77 
78  const InDetDD::SiDetectorElement* element=theCluster->detectorElement();
79  if (element==0) {
80  ATH_MSG_ERROR("Could not get detector element");
81  return StatusCode::FAILURE;
82  }
83  const AtlasDetectorID* aid = element->getIdHelper();
84  if (aid==0){
85  ATH_MSG_ERROR("Could not get ATLASDetectorID");
86  }
87  const PixelID* pixelIDp=dynamic_cast<const PixelID*>(aid);
88  if (!pixelIDp){
89  ATH_MSG_ERROR("Could not get PixelID pointer");
90  return StatusCode::FAILURE;
91  }
92  const PixelID& pixelID = *pixelIDp;
93 
94  int nRDO=RDOs.size();
95  // convert from Charge -> ToT
96  if(ToTs.size()==0 && Charges.size()!=0){
97  // safety check in case proper conddb is not used and vector of charges is filled with zeros
98  auto biggest_charge = std::max_element(std::begin(Charges), std::end(Charges));
99  ATH_MSG_DEBUG( "Max element of Charges is " << *biggest_charge);
100  if(*biggest_charge==0.) return StatusCode::SUCCESS;
101  //
102  int sumToT = 0;
103  std::vector<int> totList;
104 
105  for (int i=0; i<nRDO; i++) {
106  Identifier pixid=RDOs[i];
107  int Charge=Charges[i];
108 
109  Identifier moduleID = pixelID.wafer_id(pixid);
110  IdentifierHash moduleHash = pixelID.wafer_hash(moduleID);
111  unsigned int FE = m_pixelReadout->getFE(pixid, moduleID);
112  InDetDD::PixelDiodeType type = m_pixelReadout->getDiodeType(pixid);
113  int totInt = calibData->getToT(type, moduleHash, FE, Charges[i]);
114 
115  if( m_doIBL && pixelID.barrel_ec(pixid) == 0 && pixelID.layer_disk(pixid) == 0 ) {
116  int tot0 = totInt;
117  if ( totInt >= overflowIBLToT ) totInt = overflowIBLToT;
118  msg(MSG::DEBUG) << "barrel_ec = " << pixelID.barrel_ec(pixid) << " layer_disque = " << pixelID.layer_disk(pixid) << " ToT = " << tot0 << " Real ToT = " << totInt << endmsg;
119  }
120 
121  totList.push_back( totInt ) ; // Fudge to make sure we round to the correct number
122  ATH_MSG_DEBUG( "from Charge --> ToT " << Charge <<" "<< totInt);
123  sumToT += totInt;
124  }
125  ATH_MSG_DEBUG( "sumToT " << sumToT);
126  theNonConstCluster->setToTList (std::move (totList));
127  }
128 
129  }//loop over clusters
130 
131  }//loop over collections
132 
133 
134  return StatusCode::SUCCESS;
135 }
136 
137 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
138 
140  return StatusCode::SUCCESS;
141 }
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
PixelChargeCalibCondData::getToT
float getToT(InDetDD::PixelDiodeType type, unsigned int moduleHash, unsigned int FE, float Q) const
Definition: PixelChargeCalibCondData.cxx:174
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
CondAttrListCollection.h
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PixelCluster.h
PixelID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: PixelID.h:619
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
PixelChargeToTConversion::m_chargeDataKey
SG::ReadCondHandleKey< PixelChargeCalibCondData > m_chargeDataKey
Definition: PixelChargeToTConversion.h:45
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
InDetDD::PixelDiodeType
PixelDiodeType
Definition: PixelReadoutDefinitions.h:25
Trk::PrepRawData::rdoList
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
PixelChargeToTConversion::m_doIBL
bool m_doIBL
Definition: PixelChargeToTConversion.h:52
PixelChargeToTConversion::finalize
StatusCode finalize()
Definition: PixelChargeToTConversion.cxx:139
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
InDet::PixelCluster::totList
const std::vector< int > & totList() const
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:201
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:364
InDetDD::SolidStateDetectorElementBase::getIdHelper
const AtlasDetectorID * getIdHelper() const
Returns the id helper (inline)
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
PixelChargeToTConversion::~PixelChargeToTConversion
~PixelChargeToTConversion()
Definition: PixelChargeToTConversion.cxx:20
PixelID::wafer_hash
IdentifierHash wafer_hash(Identifier wafer_id) const
wafer hash from id
Definition: PixelID.h:387
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
PixelChargeToTConversion::execute
StatusCode execute()
Definition: PixelChargeToTConversion.cxx:46
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
PixelChargeCalibCondData
Definition: PixelChargeCalibCondData.h:24
PixelChargeToTConversion::m_pixelsClustersKey
SG::ReadHandleKey< InDet::PixelClusterContainer > m_pixelsClustersKey
Definition: PixelChargeToTConversion.h:38
PixelChargeToTConversion::m_IBLParameterSvc
ServiceHandle< IIBLParameterSvc > m_IBLParameterSvc
Definition: PixelChargeToTConversion.h:35
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
PixelChargeToTConversion::m_pixelReadout
ServiceHandle< InDetDD::IPixelReadoutManager > m_pixelReadout
Definition: PixelChargeToTConversion.h:41
PixelChargeToTConversion::initialize
StatusCode initialize()
Definition: PixelChargeToTConversion.cxx:24
InDet::SiCluster::detectorElement
virtual const InDetDD::SiDetectorElement * detectorElement() const override final
return the detector element corresponding to this PRD The pointer will be zero if the det el is not d...
AthAlgorithm
Definition: AthAlgorithm.h:47
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
PixelID::layer_disk
int layer_disk(const Identifier &id) const
Definition: PixelID.h:626
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
SiDetectorElement.h
PixelChargeToTConversion::PixelChargeToTConversion
PixelChargeToTConversion(const std::string &name, ISvcLocator *pSvcLocator)
Definition: PixelChargeToTConversion.cxx:13
InDet::PixelCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:49
PixelChargeToTConversion.h
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
PixelChargeCalibCondData::getFEI4OverflowToT
constexpr int getFEI4OverflowToT() const
Definition: PixelChargeCalibCondData.h:106
AthCommonMsg< Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
PixelChargeToTConversion::m_pixelDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_pixelDetEleCollKey
Definition: PixelChargeToTConversion.h:49
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
checker_macros.h
Define macros for attributes used to control the static checker.
PixelID
Definition: PixelID.h:67
AtlasDetectorID
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Definition: AtlasDetectorID.h:57
InDet::PixelClusterCollection
Trk::PrepRawDataCollection< PixelCluster > PixelClusterCollection
Definition: PixelClusterCollection.h:26
InDet::PixelCluster::chargeList
const std::vector< float > & chargeList() const
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:209
Identifier
Definition: IdentifierFieldParser.cxx:14