22 "List of input keys (normally the 'HIGH','MEDIUM','LOW')");
24 "Key of the pedestal object (to be subtracted)");
36 return StatusCode::SUCCESS;
48 return StatusCode::FAILURE;
53 ATH_MSG_ERROR(
"Do not have cabling object LArOnOffIdMapping");
54 return StatusCode::FAILURE;
60 if (bcCont->status(chid1).shortProblem()) {
64 for (;sit!=sit_e && sit->second!=chid1;++sit)
66 if (sit!=sit_e)
continue;
70 ATH_MSG_DEBUG (
"Channel " << chid1.get_compact() <<
" marked as short" );
72 std::vector<IdentifierHash> neighbors;
75 if (neighbors.empty()) {
77 return StatusCode::FAILURE;
83 std::vector<IdentifierHash>::const_iterator nbrit=neighbors.begin();
84 std::vector<IdentifierHash>::const_iterator nbrit_e=neighbors.end();
85 for (;nbrit!=nbrit_e;++nbrit) {
87 if (bcCont->status(chid_nbr).shortProblem()) {
89 ATH_MSG_ERROR (
"Found more than one neighbor with short bit set! Identifiers: "
93 return StatusCode::FAILURE;
102 ATH_MSG_ERROR (
"No neighbor with 'short' bit set for channel with id: " << chid1.get_compact() );
103 return StatusCode::FAILURE;
115 return StatusCode::SUCCESS;
136 ATH_MSG_WARNING (
"Cannot read LArAccumulatedCalibDigitContainer from StoreGate! key=" <<
key );
141 std::vector<std::pair<const LArAccumulatedCalibDigit*, const LArAccumulatedCalibDigit*> > shortedDigits;
142 shortedDigits.resize(nShorts);
147 ATH_MSG_VERBOSE (
"LArAccumulatedCalibDigitContainer with key = " <<
key <<
" is empty " );
151 ATH_MSG_DEBUG (
"Processing LArAccumulatedCalibDigitContainer with key = " <<
key
152 <<
". Size: " << larAccumulatedCalibDigitContainer->
size() );
155 for(;
it!=it_e;++
it) {
158 for (ii=0;ii<nShorts;ii++)
160 if (ii==nShorts)
continue;
163 if ((*it)->isPulsed())
164 shortedDigits[ii].first=*
it;
166 shortedDigits[ii].second=*
it;
170 for (
size_t ii=0;ii<nShorts;ii++) {
171 if (shortedDigits[ii].
first==NULL)
continue;
172 if (shortedDigits[ii].
second==NULL) {
173 ATH_MSG_WARNING (
"Second channel of a shorted pair not found in data. Try factor 2 correction." );
174 shortedDigits[ii].second=shortedDigits[ii].first;
177 const std::vector<uint64_t>& sampleSumsPulsed=shortedDigits[ii].first->sampleSum();
178 const std::vector<uint64_t>& sampleSumsNeighbor=shortedDigits[ii].second->sampleSum();
180 std::vector<uint64_t> newSampleSum(sampleSumsPulsed.size());
183 if (sampleSumsPulsed.size() != sampleSumsNeighbor.size()) {
185 return StatusCode::FAILURE;
188 if (shortedDigits[ii].
first->nTriggers() != shortedDigits[ii].second->nTriggers()) {
190 return StatusCode::FAILURE;
195 shortedDigits[ii].second->gain());
198 <<
", gain=" << shortedDigits[ii].second->gain() );
199 return StatusCode::FAILURE;
201 const unsigned int ped=(
unsigned)
round(
double(pedestal)*shortedDigits[ii].second->nTriggers());
204 for (
size_t is=0;is<sampleSumsPulsed.size();++is) {
206 newSampleSum[is]=sampleSumsPulsed[is]+(sampleSumsNeighbor[is]-
ped);
213 return StatusCode::SUCCESS;
219 return StatusCode::SUCCESS;