11#include "CaloDetDescr/CaloDetDescrElement.h"
19#include "GaudiKernel/ThreadLocalContext.h"
21using Athena::Units::GeV;
38 return StatusCode::SUCCESS;
61 return StatusCode::SUCCESS;
72 const EventContext& ctx = Gaudi::Hive::currentContext();
80 DataVect channel; channel.reserve(cellContainer->
size());
81 DataVect feedThrough; feedThrough.reserve(cellContainer->
size());
84 DataVect cellTimeVec; cellTimeVec.reserve(cellContainer->
size());
85 DataVect cellGain; cellGain.reserve(cellContainer->
size());
86 DataVect cellPedestal; cellPedestal.reserve(cellContainer->
size());
87 DataVect adc2Mev; adc2Mev.reserve(cellContainer->
size());
88 DataVect BadCell; BadCell.reserve(cellContainer->
size());
98 if( detStore()->
retrieve(larPedestal).isFailure() ){
99 ATH_MSG_ERROR(
"in getLArData(), Could not retrieve LAr Pedestal" );
104 if ( detStore()->
retrieve(onlineId,
"LArOnlineID").isFailure()) {
105 ATH_MSG_ERROR(
"in getLArData(),Could not get LArOnlineID!" );
114 double energyGeV,cellTime;
115 double energyAllLArBarrel = 0.;
127 for(;it1!=it2;++it1){
130 if((*it1)->badcell()){ BadCell.push_back(1); }
131 else{ BadCell.push_back(-1); }
136 HWIdentifier LArhwid = cabling->createSignalChannelIDFromHash((*it1)->caloDDE()->calo_hash());
140 bool maskChannel =
false;
147 if (maskChannel)
continue;
149 energyGeV = (*it1)->energy()*(1./
GeV);
150 if (energyGeV == 0) energyGeV = 0.001;
152 energyAllLArBarrel += energyGeV;
154 idVec.emplace_back((Identifier::value_type)(*it1)->ID().get_compact() );
155 phi.emplace_back((*it1)->phi());
156 eta.emplace_back((*it1)->eta());
157 channel.emplace_back(onlineId->
channel(LArhwid));
158 feedThrough.emplace_back(onlineId->
feedthrough(LArhwid));
159 slot.emplace_back(onlineId->
slot(LArhwid));
162 cellTime = (*it1)->time();
163 cellTimeVec.emplace_back( gcvt( cellTime,
m_cellTimePrec, rndStr) );
164 cellGain.emplace_back( (*it1)->gain() );
166 int largain = (*it1)->gain();
167 float pedestal=larPedestal->
pedestal(LArhwid,largain);
171 cellPedestal.emplace_back(pedvalue);
173 if (polynom_adc2mev.size()==0){ adc2Mev.emplace_back(-1); }
174 else{ adc2Mev.emplace_back(polynom_adc2mev[1]); }
178 ATH_MSG_DEBUG(
" Total energy in LAr barrel in GeV : " << energyAllLArBarrel );
181 const auto nEntries =
phi.size() ;
182 dataMap[
"phi"] = std::move(
phi);
183 dataMap[
"eta"] = std::move(
eta);
184 dataMap[
"energy"] = std::move(energy);
185 dataMap[
"id"] = std::move(idVec);
186 dataMap[
"channel"] = std::move(channel);
187 dataMap[
"feedThrough"] = std::move(feedThrough);
188 dataMap[
"slot"] = std::move(slot);
192 dataMap[
"BadCell"] = std::move(BadCell);
197 dataMap[
"cellTime"] = std::move(cellTimeVec);
198 dataMap[
"cellGain"] = std::move(cellGain);
199 dataMap[
"cellPedestal"] = std::move(cellPedestal);
200 dataMap[
"adc2Mev"] = std::move(adc2Mev);
204 <<
" retrieved with " << nEntries <<
" entries" );
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
char data[hepevt_bytes_allocation_ATLAS]
Wrapper to avoid constant divisions when using units.
Container class for CaloCell.
CaloCellContainer::const_iterator beginConstCalo(CaloCell_ID::SUBCALO caloNum) const
get const iterators on cell of just one calo
CaloCellContainer::const_iterator endConstCalo(CaloCell_ID::SUBCALO caloNum) const
DataModel_detail::const_iterator< DataVector > const_iterator
size_type size() const noexcept
Returns the number of elements in the collection.
virtual float pedestal(const HWIdentifier &id, int gain) const =0
Gaudi::Property< int > m_cellEnergyPrec
Gaudi::Property< int > m_cellTimePrec
SG::ReadHandleKey< CaloCellContainer > m_sgKey
for properties
virtual StatusCode initialize() override
Default AthAlgTool methods.
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
const CaloCell_ID * m_calocell_id
virtual std::string dataTypeName() const override
Return the name of the data type.
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool) override
Retrieve all the data.
SG::ReadCondHandleKey< LArADC2MeV > m_adc2mevKey
Gaudi::Property< double > m_cellThreshold
Gaudi::Property< bool > m_doMaskLArChannelsM5
Gaudi::Property< bool > m_doBadLAr
Gaudi::Property< std::vector< Identifier::value_type > > m_LArChannelsToIgnoreM5
Gaudi::Property< bool > m_doLArCellDetails
const DataMap getLArData(const CaloCellContainer *cellContainer)
Retrieve LAr cell location and details.
Gaudi::Property< bool > m_cellConditionCut
Gaudi::Property< bool > m_lar
const LArVectorProxy ADC2MEV(const HWIdentifier &id, int gain) const
int feedthrough(const HWIdentifier id) const
Return the feedthrough of a hardware cell identifier : feedthrough = [0,31] Barrel - A/C side or H/...
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...
int channel(const HWIdentifier id) const
Return the channel number of a hardware cell identifier channel = [0,127] in all FEB.
Proxy for accessing a range of float values like a vector.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
std::map< std::string, DataVect > DataMap
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.