ATLAS Offline Software
BadLArRetriever.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "BadLArRetriever.h"
6 
7 #include "AthenaKernel/Units.h"
8 
10 
11 #include "CaloDetDescr/CaloDetDescrElement.h"
18 
19 using Athena::Units::GeV;
20 
21 namespace JiveXML {
22 
29  BadLArRetriever::BadLArRetriever(const std::string& type,const std::string& name,const IInterface* parent):
31  m_calocell_id(nullptr)
32  {
33  //Only declare the interface
34  declareInterface<IDataRetriever>(this);
35 
36  declareInterface<IDataRetriever>(this);
37  declareProperty("LArlCellThreshold", m_cellThreshold = 50.);
38  declareProperty("RetrieveLAr" , m_lar = true);
39  declareProperty("DoBadLAr", m_doBadLAr = false);
40  declareProperty("CellConditionCut", m_cellConditionCut = false);
41 
42  declareProperty("CellEnergyPrec", m_cellEnergyPrec = 3);
43  }
44 
50 
51  ATH_MSG_DEBUG( "Initialising Tool" );
52  ATH_CHECK( detStore()->retrieve (m_calocell_id, "CaloCell_ID") );
53 
56 
57  return StatusCode::SUCCESS;
58  }
59 
63  StatusCode BadLArRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
64 
65  ATH_MSG_DEBUG( "in retrieve()" );
66 
68  if (!cellContainer.isValid()){
69  ATH_MSG_WARNING( "Could not retrieve Calorimeter Cells " );
70  }
71  else{
72  if(m_lar){
73  DataMap data = getBadLArData(&(*cellContainer));
74  ATH_CHECK( FormatTool->AddToEvent(dataTypeName(), m_sgKey.key(), &data) );
75  ATH_MSG_DEBUG( "Bad LAr retrieved" );
76  }
77  }
78 
79  //LAr cells retrieved okay
80  return StatusCode::SUCCESS;
81  }
82 
83 
89 
90  ATH_MSG_DEBUG( "getBadLArData()" );
91 
93 
94  DataVect phi; phi.reserve(cellContainer->size());
95  DataVect eta; eta.reserve(cellContainer->size());
96  DataVect energy; energy.reserve(cellContainer->size());
97  DataVect idVec; idVec.reserve(cellContainer->size());
98  DataVect channel; channel.reserve(cellContainer->size());
99  DataVect feedThrough; feedThrough.reserve(cellContainer->size());
100  DataVect slot; slot.reserve(cellContainer->size());
101 
102  char rndStr[30]; // for rounding (3 digit precision)
103 
106 
107 
109  const LArOnOffIdMapping* cabling{*cablingHdl};
110 
111  const LArOnlineID* onlineId = nullptr;
112  if ( detStore()->retrieve(onlineId, "LArOnlineID").isFailure()) {
113  ATH_MSG_ERROR( "in getBadLArData(),Could not get LArOnlineID!" );
114  }
115 
116  if (m_doBadLAr && cabling) {
117 
118  double energyGeV;
119 
120  ATH_MSG_DEBUG( "Start iterator loop over cells" );
121 
122  for(;it1!=it2;++it1){
123 
124  if( !(*it1)->badcell() ) continue;
125  //if( (*it1)->energy() < m_cellThreshold) continue;
126 
127  if ((((*it1)->provenance()&0xFF)!=0xA5)&&m_cellConditionCut) continue; // check full conditions for LAr
128  //Identifier cellid = (*it1)->ID();
129 
130  HWIdentifier LArhwid = cabling->createSignalChannelIDFromHash((*it1)->caloDDE()->calo_hash());
131 
132  energyGeV = (*it1)->energy()*(1./GeV);
133  if (energyGeV == 0) energyGeV = 0.001; // 1 MeV due to LegoCut > 0.0 (couldn't be >= 0.0)
134  energy.push_back(DataType( gcvt( energyGeV, m_cellEnergyPrec, rndStr) ));
135 
136  idVec.push_back(DataType((Identifier::value_type)(*it1)->ID().get_compact() ));
137  phi.push_back(DataType((*it1)->phi()));
138  eta.push_back(DataType((*it1)->eta()));
139  channel.push_back(DataType(onlineId->channel(LArhwid)));
140  feedThrough.push_back(DataType(onlineId->feedthrough(LArhwid)));
141  slot.push_back(DataType(onlineId->slot(LArhwid)));
142 
143  } // end cell iterator
144 
145  } // doBadLAr
146 
147  // write values into DataMap
148  DataMap["phi"] = phi;
149  DataMap["eta"] = eta;
150  DataMap["energy"] = energy;
151  DataMap["id"] = idVec;
152  DataMap["channel"] = channel;
153  DataMap["feedThrough"] = feedThrough;
154  DataMap["slot"] = slot;
155  //Be verbose
156  ATH_MSG_DEBUG( dataTypeName() << " , collection: " << dataTypeName()
157  << " retrieved with " << phi.size() << " entries" );
158 
159  //All collections retrieved okay
160  return DataMap;
161 
162  } // getBadLArData
163 
164  //--------------------------------------------------------------------------
165 
166 } // JiveXML namespace
Identifier::value_type
IDENTIFIER_TYPE value_type
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:39
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
JiveXML::BadLArRetriever::m_cellEnergyPrec
int m_cellEnergyPrec
Definition: BadLArRetriever.h:70
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
JiveXML::DataVect
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition: DataType.h:58
JiveXML::BadLArRetriever::m_cellThreshold
double m_cellThreshold
Definition: BadLArRetriever.h:69
DataType
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
Definition: RoIBResultByteStreamTool.cxx:25
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
CaloCellContainer::beginConstCalo
CaloCellContainer::const_iterator beginConstCalo(CaloCell_ID::SUBCALO caloNum) const
get const iterators on cell of just one calo
Definition: CaloCellContainer.cxx:119
LArOnlineID_Base::slot
int slot(const HWIdentifier id) const
Return the slot number of a hardware cell identifier: slot = [1,15] Slot-ID in top part of the crat...
Definition: LArOnlineID_Base.cxx:1961
JiveXML::BadLArRetriever::getBadLArData
const DataMap getBadLArData(const CaloCellContainer *cellContainer)
Retrieve LAr bad cell location and details.
Definition: BadLArRetriever.cxx:88
JiveXML::BadLArRetriever::m_calocell_id
const CaloCell_ID * m_calocell_id
Definition: BadLArRetriever.h:64
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
HWIdentifier
Definition: HWIdentifier.h:13
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
LArOnlineID_Base::channel
int channel(const HWIdentifier id) const
Return the channel number of a hardware cell identifier channel = [0,127] in all FEB.
Definition: LArOnlineID_Base.cxx:1967
JiveXML::BadLArRetriever::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: BadLArRetriever.h:65
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
JiveXML::BadLArRetriever::m_cellConditionCut
bool m_cellConditionCut
Definition: BadLArRetriever.h:73
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
JiveXML::BadLArRetriever::BadLArRetriever
BadLArRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: BadLArRetriever.cxx:29
DetDescrDictionaryDict::it1
std::vector< HWIdentifier >::iterator it1
Definition: DetDescrDictionaryDict.h:17
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
test_pyathena.parent
parent
Definition: test_pyathena.py:15
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
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
JiveXML
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
Definition: BadLArRetriever.cxx:21
LArRawChannel.h
HWIdentifier.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
LArOnlineID
Definition: LArOnlineID.h:20
Units.h
Wrapper to avoid constant divisions when using units.
JiveXML::BadLArRetriever::m_sgKey
SG::ReadHandleKey< CaloCellContainer > m_sgKey
for properties
Definition: BadLArRetriever.h:68
LArDigitContainer.h
CaloCellContainer
Container class for CaloCell.
Definition: CaloCellContainer.h:55
JiveXML::BadLArRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type.
Definition: BadLArRetriever.h:57
JiveXML::BadLArRetriever::m_lar
bool m_lar
Definition: BadLArRetriever.h:71
LArOnlineID_Base::feedthrough
int feedthrough(const HWIdentifier id) const
Return the feedthrough of a hardware cell identifier : feedthrough = [0,31] Barrel - A/C side or H/...
Definition: LArOnlineID_Base.cxx:1948
JiveXML::BadLArRetriever::m_doBadLAr
bool m_doBadLAr
Definition: BadLArRetriever.h:72
ILArPedestal.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
JiveXML::BadLArRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
Definition: BadLArRetriever.cxx:63
CaloCellContainer::endConstCalo
CaloCellContainer::const_iterator endConstCalo(CaloCell_ID::SUBCALO caloNum) const
Definition: CaloCellContainer.cxx:133
SelectAllObject.h
AthAlgTool
Definition: AthAlgTool.h:26
CaloCell_Base_ID::LAREM
@ LAREM
Definition: CaloCell_Base_ID.h:46
BadLArRetriever.h
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
LArRawChannelContainer.h
LArOnlineID.h
JiveXML::BadLArRetriever::initialize
StatusCode initialize()
Default AthAlgTool methods.
Definition: BadLArRetriever.cxx:49
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20