80 return StatusCode::FAILURE;
85 ATH_MSG_INFO (
" Got computed Autocorrelation from physics " );
89 ATH_MSG_INFO (
" Got electronics noise autocorrelation from database " );
101 if ( bfCont ==
nullptr) {
107 std::vector<HWIdentifier>::const_iterator it =
m_onlineId->channel_begin();
108 std::vector<HWIdentifier>::const_iterator it_e =
m_onlineId->channel_end();
109 for (;it!=it_e;++it) {
114 if (!(cabling->isOnlineConnected(hwid)))
continue;
125 ATH_MSG_VERBOSE (
" hwid,gain0,gain1,gain2 " <<
m_onlineId->channel_name(hwid) <<
" " << gain0 <<
" " << gain1 <<
" " << gain2 );
134 sigma0_elec = larPedestalElec->
pedestalRMS(hwid,gain0);
140 ATH_MSG_VERBOSE (
" sigma0_elec " << sigma0_elec <<
" corr0_ele.size() " << corr0_elec.size() );
141 if (corr0_elec.size()==0) {
147 msg() << MSG::VERBOSE <<
" corr0_elec ";
149 for (;ii<corr0_elec.size();ii++)
150 msg() << MSG::VERBOSE << corr0_elec[ii] <<
" ";
154 float sigma0_elec2 = sigma0_elec*sigma0_elec;
157 std::vector<float> corr2;
158 bool recovered=
false;
159 if (corr.size()==0) {
162 ATH_MSG_DEBUG (
" Known missing Feb, no physics autocorr " <<
m_onlineId->channel_name(hwid) <<
"... use electronics from db " );
164 ATH_MSG_WARNING (
" No physics autocorr for channel " <<
m_onlineId->channel_name(hwid) <<
" .. use electronics from db" );
166 if (corr0_elec.size()==0) {
171 if (corr0_elec.size()<(
unsigned int)(n-1)) n = corr0_elec.size()+1;
172 unsigned int size = n*(n+1)/2;
173 std::vector<float> corr2;
174 corr2.resize(size,0.);
176 for (
int i=0;i<n;i++) {
177 for (
int j=i;j<n;j++,k++) {
178 if (i==j) corr2[k]=sigma0_elec2;
179 else corr2[k]=corr0_elec[j-i-1]*sigma0_elec2;
182 larAutoCorrComplete->
set(hwid,gain0,corr2);
188 for (
int gain=gain1;gain<=gain2;gain++) {
195 if (corr_elec.size()==0) {
200 msg() << MSG::VERBOSE <<
" corr_elec ";
202 for (;ii<corr_elec.size();ii++)
203 msg() << MSG::VERBOSE << corr_elec[ii] <<
" ";
211 sigma_elec = larPedestalElec->
pedestalRMS(hwid,gain);
216 ATH_MSG_VERBOSE (
" sigma_elec " << sigma_elec <<
" corr_elec.size() " << corr_elec.size() );
217 float sigma_elec2 = sigma_elec*sigma_elec;
224 if (rampcoeff.size()>1 && rampcoeff0.size()>1) {
225 float ramp1 = rampcoeff[1];
226 float ramp0 = rampcoeff0[1];
227 if (ramp1>0.01 && ramp0>0.01 && ramp1<1e4 && ramp0<1e4) ratio = ramp0/ramp1;
234 std::vector<float> new_corr;
235 if (!recovered) new_corr.reserve(corr.size());
236 else new_corr.reserve(corr2.size());
243 if (k<corr.size()) rij_0 = corr[k];
246 if (k<corr2.size()) rij_0 = corr2[k];
256 unsigned int index = j-i-1;
257 if (
index<corr0_elec.size()) corre0=corr0_elec[
index];
258 if (
index<corr_elec.size()) corre=corr_elec[
index];
260 float rij_tot = rij_0*ratio - sigma0_elec2*corre0*ratio + sigma_elec2*corre;
261 new_corr.push_back(rij_tot);
266 msg() << MSG::VERBOSE <<
" old corr ";
271 msg() << MSG::VERBOSE << corr[k] <<
" ";
277 msg() << MSG::VERBOSE <<
" new corr ";
281 msg() << MSG::VERBOSE << new_corr[k] <<
" ";
287 larAutoCorrComplete->
set(hwid,gain,new_corr);
294 return StatusCode::SUCCESS;