91 const std::string& datatype,
97 const EventContext& ctx = Gaudi::Hive::currentContext();
111 DataVect channel; channel.reserve(cellContainer->
size());
112 DataVect feedThrough; feedThrough.reserve(cellContainer->
size());
113 DataVect slotVec; slotVec.reserve(cellContainer->
size());
115 DataVect cellTimeVec; cellTimeVec.reserve(cellContainer->
size());
116 DataVect cellGain; cellGain.reserve(cellContainer->
size());
117 DataVect cellPedestal; cellPedestal.reserve(cellContainer->
size());
118 DataVect adc2Mev; adc2Mev.reserve(cellContainer->
size());
123 DataVect LArSampleIndexVec; LArSampleIndexVec.reserve(cellContainer->
size());
125 std::string LArSampleIndexStr=
"adcCounts multiple=\"0\"";
130 if (LArDigitCnt_raw_handle.
isValid()) {
131 LArDigitCnt = &(*LArDigitCnt_raw_handle);
133 else if (LArDigitCnt_esd_handle.
isValid()) {
134 LArDigitCnt = &(*LArDigitCnt_esd_handle);
142 if ( detStore()->
retrieve(larPedestal).isFailure()){
143 ATH_MSG_ERROR(
"in getLArDigitData(), Could not retrieve LAr Pedestal" );
147 if ( detStore()->
retrieve(onlineId,
"LArOnlineID").isFailure()) {
148 ATH_MSG_ERROR(
"in getLArDigitData(),Could not get LArOnlineID!" );
167 auto pCellIndex = std::make_unique<std::array<int, 200000>>();
173 double energyGeV,cellTime;
175 for (
const LArDigit* digit : *LArDigitCnt) {
177 LArHardwareId = digit->hardwareID();
178 if (!cabling->isOnlineConnected(LArHardwareId))
continue;
180 LArId = cabling->cnvToIdentifier(LArHardwareId);
187 nLArSamples = digit->nsamples();
188 std::vector<short>
LArSamples = digit->samples();
189 int largain = digit->gain();
191 int slot = onlineId->
slot(LArHardwareId);
192 int larchan = onlineId->
channel(LArHardwareId);
193 float pedestal=larPedestal->
pedestal(LArHardwareId,largain);
207 bool maskChannel =
false;
214 if (maskChannel)
continue;
222 energyGeV = (*cellContainer)[
Index]->energy() * (1./
GeV);
224 idVec.push_back(
DataType((*cellContainer)[
Index]->ID().get_compact() ));
228 cellTime = (*cellContainer)[
Index]->time();
230 cellPedestal.push_back(
DataType(pedvalue));
231 cellGain.push_back(
DataType(largain));
232 channel.push_back(
DataType(larchan));
233 feedThrough.push_back(
DataType(FT));
235 if (polynom_adc2mev.size()==0){
238 adc2Mev.push_back(
DataType(polynom_adc2mev[1]));
241 LArSampleIndexStr=
"adcCounts multiple=\""+
DataType(nLArSamples).toString()+
"\"";
242 for(
int i=0; i<nLArSamples; i++) LArSampleIndexVec.push_back(
DataType(
LArSamples[i]));
249 energyGeV = (*cellContainer)[
Index]->energy() * (1./
GeV);
251 idVec.push_back(
DataType((*cellContainer)[
Index]->ID().get_compact() ));
256 cellTime = (*cellContainer)[
Index]->time();
258 cellPedestal.push_back(
DataType(pedvalue));
259 cellGain.push_back(
DataType(largain));
260 channel.push_back(
DataType(larchan));
261 feedThrough.push_back(
DataType(FT));
263 if (polynom_adc2mev.size()==0)
266 adc2Mev.push_back(
DataType(polynom_adc2mev[1]));
268 LArSampleIndexStr=
"adcCounts multiple=\""+
DataType(nLArSamples).toString()+
"\"";
269 for(
int i=0; i<nLArSamples; i++) LArSampleIndexVec.push_back(
DataType(
LArSamples[i]));
273 else if(datatype ==
"FCAL" &&
m_calocell_id->is_fcal(LArId)) {
275 energyGeV = (*cellContainer)[
Index]->energy() * (1./
GeV);
277 idVec.push_back(
DataType((*cellContainer)[
Index]->ID().get_compact() ));
290 cellTime = (*cellContainer)[
Index]->time();
292 cellPedestal.push_back(
DataType(pedvalue));
293 cellGain.push_back(
DataType(largain));
294 channel.push_back(
DataType(larchan));
295 feedThrough.push_back(
DataType(FT));
297 if (polynom_adc2mev.size()==0)
300 adc2Mev.push_back(
DataType(polynom_adc2mev[1]));
302 LArSampleIndexStr=
"adcCounts multiple=\""+
DataType(nLArSamples).toString()+
"\"";
303 for(
int i=0; i<nLArSamples; i++) LArSampleIndexVec.push_back(
DataType(
LArSamples[i]));
319 for (;it1!=it2;++it1) {
331 HWIdentifier LArhwid = cabling->createSignalChannelIDFromHash((*it1)->caloDDE()->calo_hash());
338 bool maskChannel =
false;
345 if (maskChannel)
continue;
348 energyGeV = (*it1)->energy()*(1./
GeV);
350 idVec.push_back(
DataType((*it1)->ID().get_compact() ));
355 cellTime = (*it1)->time();
357 cellGain.push_back(
DataType((*it1)->gain()));
358 int largain = (*it1)->gain();
360 float pedestal=larPedestal->
pedestal(LArhwid,largain);
363 cellPedestal.push_back(
DataType(pedvalue));
365 LArVectorProxy polynom_adc2mev = adc2mev->ADC2MEV(cellid,largain);
366 if (polynom_adc2mev.size()==0){
369 adc2Mev.push_back(
DataType(polynom_adc2mev[1]));
373 if (datatype ==
"LAr") {
378 LArSampleIndexStr=
"adcCounts multiple=\""+
DataType(nLArSamples).toString()+
"\"";
379 for(
int i=0; i<nLArSamples; i++) LArSampleIndexVec.push_back(
DataType(0)); }
382 else if (datatype ==
"HEC") {
387 LArSampleIndexStr=
"adcCounts multiple=\""+
DataType(nLArSamples).toString()+
"\"";
388 for(
int i=0; i<nLArSamples; i++) LArSampleIndexVec.push_back(
DataType(0)); }
391 else if (datatype ==
"FCAL") {
393 x.push_back(
DataType( (*it1)->x()*0.1 ));
394 y.push_back(
DataType( (*it1)->y()*0.1 ));
403 LArSampleIndexStr=
"adcCounts multiple=\""+
DataType(nLArSamples).toString()+
"\"";
404 for(
int i=0; i<nLArSamples; i++) LArSampleIndexVec.push_back(
DataType(0));
415 const auto nEntries =
phi.size();
416 if(!(datatype==
"FCAL")){
426 DataMap[
"energy"] = std::move(energy);
427 DataMap[
"id"] = std::move(idVec);
428 DataMap[
"channel"] = std::move(channel);
429 DataMap[
"feedThrough"] = std::move(feedThrough);
430 DataMap[
"slot"] = std::move(slotVec);
433 DataMap[
"cellTime"] = std::move(cellTimeVec);
434 DataMap[
"cellGain"] = std::move(cellGain);
435 DataMap[
"cellPedestal"] = std::move(cellPedestal);
436 DataMap[
"adc2Mev"] = std::move(adc2Mev);
438 DataMap[LArSampleIndexStr] = std::move(LArSampleIndexVec);