ATLAS Offline Software
TileOFCorrelation.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 //
7 // Filename : TileOFCorrelation.cxx
8 //
9 // Author : Ximo Poveda, jpoveda@cern.ch
10 //
12 
13 
14 #include "TileOFCorrelation.h"
16 
17 #include "CLHEP/Matrix/Matrix.h"
18 #include <CLHEP/Matrix/Vector.h>
19 #include <fstream>
20 #include <iostream>
21 #include <iomanip>
22 #include <cmath>
23 
24 #include <TRobustEstimator.h>
25 #include <TMatrix.h>
26 
27 using namespace std;
28 using CLHEP::HepMatrix;
29 using CLHEP::HepVector;
30 
31 
32 
35  : m_ncorr(0.0)
36  , m_jentry(0)
37  , m_lag(0)
38  , m_N_d(0.0)
39 {
40  memset(m_corr2,0,sizeof(m_corr2));
41  memset(m_corr,0,sizeof(m_corr));
42 
46 
56 }
57 
58 
61 {
62  delete[] m_SS;
63  delete[] m_S;
64  delete[] m_R;
65  delete[] m_corr_sum;
66  delete[] m_corr_sum_sq;
67  delete[] m_N;
68  delete[] m_N_pairs;
69  delete[] m_S1;
70  delete[] m_S2;
71  delete[] m_S11;
72  delete[] m_S12;
73  delete[] m_S22;
74 }
75 
76 
78 void TileOFCorrelation::SetCorrelationZero(MsgStream & log, int dignum)
79 {
80 
81  log<<MSG::DEBUG<<"TileOFCorrelation::SetCorrelationZero(log)"<<endmsg;
82  for (int ros=0;ros<4;ros++)
83  for (int drawer=0;drawer<64;drawer++)
84  for (int channel=0;channel<48;channel++)
85  for (int gain=0;gain<2;gain++){
86  m_N[ros][drawer][channel][gain]=0;
87  //m_N[ros][drawer][channel][gain]=0;
88  for (int i=0;i<dignum;i++){
89  m_S[ros][drawer][channel][gain][i]=0.;
90  for (int j=0;j<dignum;j++){
91  m_SS[ros][drawer][channel][gain][i][j]=0.;
92  m_R[ros][drawer][channel][gain][i][j]=0.;
93  }
94  }
95 
96  for (m_lag=0;m_lag<9;m_lag++){
97  m_S1[ros][drawer][channel][gain][m_lag]=0.;
98  m_S2[ros][drawer][channel][gain][m_lag]=0.;
99  m_S11[ros][drawer][channel][gain][m_lag]=0.;
100  m_S12[ros][drawer][channel][gain][m_lag]=0.;
101  m_S22[ros][drawer][channel][gain][m_lag]=0.;
105  }
106  }
107 
108  for (m_lag=0;m_lag<9;m_lag++){
109  m_corr2[m_lag]=0.;
110  if(m_lag<8)
111  m_corr[m_lag]=0;
112  }
113 
114 }
115 
116 
118 void TileOFCorrelation::SetCorrelationDelta(MsgStream & log, int dignum)
119 {
120  log<<MSG::DEBUG<<"TileOFCorrelation::SetCorrelationDelta(log)"<<endmsg;
121 
122  for (int ros=0;ros<4;ros++)
123  for (int drawer=0;drawer<64;drawer++)
124  for (int channel=0;channel<48;channel++)
125  for (int gain=0;gain<2;gain++){
126  m_N[ros][drawer][channel][gain]=1;
127  for (int i=0;i<dignum;i++)
128  for (int j=0;j<dignum;j++)
129  if (i==j) m_R[ros][drawer][channel][gain][i][j]=1.;
130  else m_R[ros][drawer][channel][gain][i][j]=0.;
131  }
132 }
133 
134 
135 
137 void TileOFCorrelation::Sum(vector<float> &digits, int ros, int drawer, int channel, int gain, MsgStream & /*log*/, bool debug, int &dignum, bool doRobustCov)
138 {
139 
140  double N_d=0.;
141  dignum=digits.size();
142 
143  if (doRobustCov){
144  m_DataVector[ros][drawer][channel][gain].push_back(digits);
145  }
146 
147  m_N[ros][drawer][channel][gain]++;
148  N_d=double(m_N[ros][drawer][channel][gain]);
149  for (int i=0;i<dignum;i++){
150  m_S[ros][drawer][channel][gain][i]+=digits[i];
151  for (int j=0;j<dignum;j++) m_SS[ros][drawer][channel][gain][i][j]+=digits[i]*digits[j];
152  }
153 
154  if (debug){
155  cout
156  <<" TileOFCorrelation::Sum, ros="<<ros
157  <<" drawer="<<drawer
158  <<" channel="<<channel
159  <<" gain="<<gain
160  <<" N="<<m_N[ros][drawer][channel][gain]
161  <<" Sum[1]="<<m_S[ros][drawer][channel][gain][1]
162  <<" Sum[2]="<<m_S[ros][drawer][channel][gain][2]
163  <<" Sum[1][2]="<<m_SS[ros][drawer][channel][gain][1][2]
164  <<" Sum[1][1]="<<m_SS[ros][drawer][channel][gain][1][1]
165  <<" Sum[2][2]="<<m_SS[ros][drawer][channel][gain][2][2]
166  <<" B[1][2]="<<m_SS[ros][drawer][channel][gain][1][2]/N_d-m_S[ros][drawer][channel][gain][1]/N_d*m_S[ros][drawer][channel][gain][2]/N_d
167  <<" Correlation[1][2]="<<(N_d*m_SS[ros][drawer][channel][gain][1][2]-m_S[ros][drawer][channel][gain][1]*m_S[ros][drawer][channel][gain][2])/sqrt((N_d*m_SS[ros][drawer][channel][gain][1][1]-m_S[ros][drawer][channel][gain][1]*m_S[ros][drawer][channel][gain][1])*(N_d*m_SS[ros][drawer][channel][gain][2][2]-m_S[ros][drawer][channel][gain][2]*m_S[ros][drawer][channel][gain][2]))
168  <<endl;
169  }
170 
171 }
172 
173 
174 
176 void TileOFCorrelation::CalcCorrelation(MsgStream & log, int dignum, bool flag_7to9, bool doRobustCov)
177 {
178  log<<MSG::DEBUG<<"TileOFCorrelation::CalcCorrelation"<<endmsg;
179 
180  double denominator=0.;
181 
182  TMatrixDSym TempMatrix(dignum);
183 
184  double *Row = new double[dignum];
185  for (int ros=0;ros<4;ros++)
186  for (int drawer=0;drawer<64;drawer++)
187  for (int channel=0;channel<48;channel++)
188  for (int gain=0;gain<2;gain++){
189  double N_d=double(m_N[ros][drawer][channel][gain]);
190  //if (N_d>0.) cout<<" TileOFCorrelation::CalcCorrelation, ros="<<ros<<" drawer="<<drawer<<" channel="<<channel<<" gain="<<gain<<" N_d="<<N_d<<endl;
191  if (doRobustCov){
192  if (N_d>10){
193  TRobustEstimator REstimator(m_N[ros][drawer][channel][gain],dignum);
194  for (int i=0;i<m_N[ros][drawer][channel][gain];i++){
195  for (int j=0; j<dignum;j++){
196  Row[j]=m_DataVector[ros][drawer][channel][gain].at(i).at(j);
197  }
198  REstimator.AddRow(Row);
199  }
200  REstimator.Evaluate();
201  REstimator.GetCovariance(TempMatrix);
202  for (int i=0;i<dignum;i++)
203  for (int j=0;j<dignum;j++)
204  m_R[ros][drawer][channel][gain][i][j]= TempMatrix(i,j);
205 
206  } else {
207  if(dignum==7 && flag_7to9)
208  for (int j=0;j<9;j++)
209  m_R[ros][drawer][channel][gain][j][j]=1.;
210 
211  for (int i=0;i<dignum;i++){
212  for (int j=0;j<dignum;j++){
213  if (N_d>0.){
215  (N_d*m_SS[ros][drawer][channel][gain][j][j]-m_S[ros][drawer][channel][gain][j]*m_S[ros][drawer][channel][gain][j]);
216  if(denominator!=0){
217  m_R[ros][drawer][channel][gain][i][j]=
218  (N_d*m_SS[ros][drawer][channel][gain][i][j]-m_S[ros][drawer][channel][gain][i]*m_S[ros][drawer][channel][gain][j])/sqrt(denominator);
219  }else{
220  m_R[ros][drawer][channel][gain][i][j]=0.;
221  }
222  }
223  else m_R[ros][drawer][channel][gain][i][j]=-1234.;
224  }
225  }
226  }
227  } else {
228  if(dignum==7 && flag_7to9)
229  for (int j=0;j<9;j++)
230  m_R[ros][drawer][channel][gain][j][j]=1.;
231 
232  for (int i=0;i<dignum;i++){
233  for (int j=0;j<dignum;j++){
234  if (N_d>0.){
236  (N_d*m_SS[ros][drawer][channel][gain][j][j]-m_S[ros][drawer][channel][gain][j]*m_S[ros][drawer][channel][gain][j]);
237  if(denominator!=0){
238  m_R[ros][drawer][channel][gain][i][j]=
239  (N_d*m_SS[ros][drawer][channel][gain][i][j]-m_S[ros][drawer][channel][gain][i]*m_S[ros][drawer][channel][gain][j])/sqrt(denominator);
240  }else{
241  m_R[ros][drawer][channel][gain][i][j]=0.;
242  }
243  }
244  else m_R[ros][drawer][channel][gain][i][j]=-1234.;
245  }
246  }
247  }
248  }
249  delete [] Row;
250  for (int ros=0;ros<4;ros++)
251  for (int drawer=0;drawer<64;drawer++)
252  for (int channel=0;channel<48;channel++)
253  for (int gain=0;gain<2;gain++){
254  vector < vector <float> > x;
255  m_DataVector[ros][drawer][channel][gain].swap(x);
256  }
257 }
258 
259 
260 
262 void TileOFCorrelation::RunningCorrelation(vector<float> &digits, int ros, int drawer, int channel, int gain, MsgStream & log, bool /*debug*/, int &dignum, int chthres)
263 {
264  log<<MSG::VERBOSE<<"TileOFCorrelation::RunningCorrelation"<<endmsg;
265  dignum=digits.size();
266 
267  double denominator=0.;
268 
269  //chthres=10;
270  //update sums
271  m_N[ros][drawer][channel][gain]++;
274 
275  if (ros==1 && drawer==1 && channel==0 && gain==1)
276  log<<MSG::VERBOSE<<"Computing RunningCorrelation for jentry="<<m_jentry<<endmsg;
277 
278  for (m_lag=1;m_lag<dignum;m_lag++){
279  for (int i=0; i<dignum-m_lag; i++){
280  m_S1[ros][drawer][channel][gain][m_lag-1]+=digits[i];
281  m_S2[ros][drawer][channel][gain][m_lag-1]+=digits[i+m_lag];
282  m_S12[ros][drawer][channel][gain][m_lag-1]+=digits[i]*digits[i+m_lag];
283  m_S11[ros][drawer][channel][gain][m_lag-1]+=digits[i]*digits[i];
284  m_S22[ros][drawer][channel][gain][m_lag-1]+=digits[i+m_lag]*digits[i+m_lag];
285  m_N_pairs[ros][drawer][channel][gain][m_lag-1]++;
286  }
287  if (m_lag==1 && ros==1 && drawer==1 && channel==0 && gain==1)
288  log<<MSG::VERBOSE<<" jentry="<<m_jentry<<" m_N="<<m_N_pairs[ros][drawer][channel][gain][m_lag-1]<<" S1="<<m_S1[ros][drawer][channel][gain][m_lag-1]<<endmsg;
289 
290 
291  if (m_jentry>chthres){
293 
298 
299  if(denominator!=0){
300  m_corr2[m_lag-1]=
303  }else{
304  m_corr2[m_lag-1]=0.;
305  }
306 
307  if (m_lag==1 && ros==1 && drawer==1 && channel==0 && gain==1)
308  log<<MSG::DEBUG
309  <<" m_corr2="<<m_corr2[m_lag-1]
310  <<" m_corr_sum="<<m_corr_sum[ros][drawer][channel][gain][m_lag-1]
311  <<" m_corr_sum_sq="<<m_corr_sum_sq[ros][drawer][channel][gain][m_lag-1]
312  <<endmsg;
313 
316 
317  if (m_lag==1 && ros==1 && drawer==1 && channel==0 && gain==1)
318  log<<MSG::DEBUG
319  <<" jentry="<<m_jentry<<" jentry-chthres="<<m_jentry-chthres<<" m_lag=1, ros=1, drawer=1, channel=0, gain=1"
320  <<" m_corr2="<<m_corr2[m_lag-1]
321  <<" sum corr_mean="<<m_corr_sum[ros][drawer][channel][gain][m_lag-1]
322  <<" corr_mean="<<m_corr_sum[ros][drawer][channel][gain][m_lag-1]/(m_jentry-chthres)
323  <<" sum RMS="<<m_corr_sum_sq[ros][drawer][channel][gain][m_lag-1]
324  <<" RMS="<<sqrt(m_corr_sum_sq[ros][drawer][channel][gain][m_lag-1]*(m_jentry-chthres)
326  <<endmsg;
327  }
328  }
329 }
330 
331 
332 
334 void TileOFCorrelation::CalcRunningCorrelation(MsgStream & /*log*/, int dignum, int chthres, bool flag_7to9)
335 {
336  for (int ros=0;ros<4;ros++)
337  for (int drawer=0;drawer<64;drawer++)
338  for (int channel=0;channel<48;channel++)
339  for (int gain=0;gain<2;gain++){
341  m_ncorr=double(m_jentry-chthres);
342 
343  if (m_jentry>0){
344  if (flag_7to9 && dignum==7){
345  for (int i=0;i<9;i++)
346  m_R[ros][drawer][channel][gain][i][i]=1.;
347 
348  for (m_lag=1;m_lag<9;m_lag++)
349  for (int i=0;i<9-m_lag;i++){
350  if (m_lag<7){
353  }else{
354  m_R[ros][drawer][channel][gain][i][i+m_lag]=0.;
355  m_R[ros][drawer][channel][gain][i+m_lag][i]=0.;
356  }
357  if (-1.>m_R[ros][drawer][channel][gain][i][i+m_lag] || m_R[ros][drawer][channel][gain][i][i+m_lag]>1.)
358  m_R[ros][drawer][channel][gain][i][i+m_lag]=0.;
359 
360  if (-1.>m_R[ros][drawer][channel][gain][i+m_lag][i] || m_R[ros][drawer][channel][gain][i+m_lag][i]>1.)
361  m_R[ros][drawer][channel][gain][i+m_lag][i]=0.;
362 
363  }
364  }else{
365  for (int i=0;i<dignum;i++)
366  m_R[ros][drawer][channel][gain][i][i]=1.;
367 
368  for (m_lag=1;m_lag<dignum;m_lag++)
369  for (int i=0;i<dignum-m_lag;i++){
372 
373  if (-1.>m_R[ros][drawer][channel][gain][i][i+m_lag] || m_R[ros][drawer][channel][gain][i][i+m_lag]>1.)
374  m_R[ros][drawer][channel][gain][i][i+m_lag]=0.;
375  if (-1.>m_R[ros][drawer][channel][gain][i+m_lag][i] || m_R[ros][drawer][channel][gain][i+m_lag][i]>1.)
376  m_R[ros][drawer][channel][gain][i+m_lag][i]=0.;
377  }
378  }
379  }
380  }
381 }
382 
383 
385 void TileOFCorrelation::GetCorrelation(int dignum, float tmpCorr[][9],int ros,int drawer,int chan,int gain)
386 {
387 
388  for(int i=0;i<dignum;i++)
389  {
390  for(int j=0;j<dignum;j++)
391  {
392  tmpCorr[i][j] = m_R[ros][drawer][chan][gain][i][j];
393  }
394  }
395 }
396 
399 {
400 
401  cout<<" TileOFCorrelation::PrintCorrelation()..."<<endl;
402  for (int ros=3;ros<4;ros++){
403  cout<<" ros="<<ros<<endl;
404  for (int drawer=0;drawer<64;drawer++){
405  cout<<" drawer="<<drawer<<endl;
406  for (int channel=0;channel<48;channel++){
407  cout<<" channel="<<channel<<endl;
408  for (int gain=0;gain<2;gain++){
409  cout<<" gain="<<gain<<endl;
410  for (int i=0;i<dignum;i++){
411  for (int j=0;j<dignum;j++){
412  cout<<" "<<m_R[ros][drawer][channel][gain][i][j];
413  }
414  cout<<endl;
415  }
416  cout<<endl;
417  }
418  }
419  }
420  }
421 
422 }
423 
424 
425 
426 
428 void TileOFCorrelation::SaveCorrelationSumm(bool deltaCorrelation,
429  const string& OptFilterFile_CorrelationSumm,
430  const TileHWID *tileHWID,
431  MsgStream & log,
432  int dignum)
433 {
434  log<<MSG::DEBUG<<" TileOFCorrelation::SaveCorrelationSumm"<<endmsg;
435 
436  HepMatrix M_correlation(dignum,1,0);
437 
438  fstream *f_correlation = new fstream(OptFilterFile_CorrelationSumm.c_str(),fstream::out);
439  if (f_correlation->is_open()) log<<MSG::INFO<<OptFilterFile_CorrelationSumm<<" file open"<<endmsg;
440 
441  if (deltaCorrelation){
442  // for (int i=0;i<dignum;i++)
443  for (int j=0;j<dignum;j++){
444  int i=0;
445  if (m_R[0][0][0][0][i][j]>-100000. && m_R[0][0][0][0][i][j]<100000.)
446  M_correlation[i][j]=m_R[0][0][0][0][i][j];
447  else
448  M_correlation[i][j]=0.0;
449  }
450 
451 
452  *f_correlation<<M_correlation.T()<<endl;
453  }else{
454  for (int ros=0;ros<4;ros++)
455  for (int drawer=0;drawer<64;drawer++){
456  int frag= tileHWID->frag(ros+1,drawer);
457  for (int channel=0;channel<48;channel++)
458  for (int gain=0;gain<2;gain++){
460  <<"ros "<<ros
461  <<" drawer "<<drawer<<MSG::hex
462  <<" frag0x "<<frag<<MSG::dec
463  <<" channel "<<channel
464  <<" gain "<<gain
465  <<" m_N "<<m_N[ros][drawer][channel][gain]
466  <<endmsg;
467 
468  if (m_N[ros][drawer][channel][gain]>0){
469  //for (int i=0;i<dignum;i++)
470  for (int j=0;j<dignum;j++){
471  int i=0;
472  if (m_R[ros][drawer][channel][gain][i][j]>-100000.
473  && m_R[ros][drawer][channel][gain][i][j]<100000.)
474  M_correlation[i][j]=m_R[ros][drawer][channel][gain][i][j];
475  else
476  M_correlation[i][j]=0.0;
477  }
478 
479 
480 
481  *f_correlation<<"ros "<<ros
482  <<" drawer "<<drawer<<std::hex
483  <<" frag0x "<<frag<<std::dec
484  <<" channel "<<channel
485  <<" gain "<<gain
486  <<" m_N "<<m_N[ros][drawer][channel][gain]
487  <<M_correlation.T();
488 
489  }
490  }
491  }
492  }
493  f_correlation->close();
494 }
495 
497 float * TileOFCorrelation::getCorrelationSumm(bool deltaCorrelation,
498  int ros,
499  int drawer,
500  int channel,
501  int gain,
502  int dignum)
503 {
504 
505  if(!deltaCorrelation){
506 
507  if (m_N[ros][drawer][channel][gain]>0){
508  for (int i=1;i<dignum;i++){
509  if (m_R[ros][drawer][channel][gain][0][i]>-100000.
510  && m_R[ros][drawer][channel][gain][0][i]<100000.)
511  m_corr[i-1]=m_R[ros][drawer][channel][gain][0][i];
512  else
513  m_corr[i-1]=0.0;
514  }
515  }
516 
517  }
518 
519  return m_corr;
520 
521 }
522 
524 void TileOFCorrelation::SaveCorrelationMatrix(bool deltaCorrelation,
525  const string& OptFilterFile_CorrelationMatrix,
526  const TileHWID *tileHWID,
527  MsgStream & log,
528  int dignum)
529 {
530  log<<MSG::DEBUG<<" TileOFCorrelation::SaveCorrelationMatrix"<<endmsg;
531 
532  HepMatrix M_correlation(dignum,dignum,0);
533 
534  fstream *f_correlation = new fstream(OptFilterFile_CorrelationMatrix.c_str(),fstream::out);
535  if (f_correlation->is_open()) log<<MSG::INFO<<OptFilterFile_CorrelationMatrix<<" file open"<<endmsg;
536 
537  if (deltaCorrelation){
538  for (int i=0;i<dignum;i++)
539  for (int j=0;j<dignum;j++){
540  if (m_R[0][0][0][0][i][j]>-100000. && m_R[0][0][0][0][i][j]<100000.)
541  M_correlation[i][j]=m_R[0][0][0][0][i][j];
542  else
543  M_correlation[i][j]=0.0;
544  }
545 
546 
547  *f_correlation<<M_correlation<<endl;
548  }else{
549  for (int ros=0;ros<4;ros++)
550  for (int drawer=0;drawer<64;drawer++){
551  int frag= tileHWID->frag(ros+1,drawer);
552  for (int channel=0;channel<48;channel++)
553  for (int gain=0;gain<2;gain++){
555  <<"ros "<<ros
556  <<" drawer "<<drawer<<MSG::hex
557  <<" frag0x "<<frag<<MSG::dec
558  <<" channel "<<channel
559  <<" gain "<<gain
560  <<" m_N "<<m_N[ros][drawer][channel][gain]
561  <<endmsg;
562 
563  if (m_N[ros][drawer][channel][gain]>0){
564  for (int i=0;i<dignum;i++)
565  for (int j=0;j<dignum;j++){
566  if (m_R[ros][drawer][channel][gain][i][j]>-100000.
567  && m_R[ros][drawer][channel][gain][i][j]<100000.)
568  M_correlation[i][j]=m_R[ros][drawer][channel][gain][i][j];
569  else
570  M_correlation[i][j]=0.0;
571  }
572 
573 
574 
575  *f_correlation<<"ros "<<ros
576  <<" drawer "<<drawer<<std::hex
577  <<" frag0x "<<frag<<std::dec
578  <<" channel "<<channel
579  <<" gain "<<gain
580  <<" m_N "<<m_N[ros][drawer][channel][gain]
581  <<M_correlation<<endl;
582  }
583  }
584  }
585  }
586  f_correlation->close();
587 }
588 
589 
590 
593  bool deltaCorrelation,
594  const vector<double>& LshapeForm,
595  const vector<double>& HshapeForm,
596  const vector<double>& LdshapeForm,
597  const vector<double>& HdshapeForm,
598  MsgStream & log,
599  int ros,
600  int drawer,
601  int channel,
602  int gain,
603  int dignum)
604 {
605  log<<MSG::DEBUG<<" TileOFCorrelation::CalcWeights"<<endmsg;
606 
607  HepMatrix Correlation(dignum,dignum,0), Inverse(dignum,dignum,0), Zero(dignum,dignum,0);
608  HepMatrix PulseShape(dignum,1,0), DPulseShape(dignum,1,0);
609  HepMatrix a(dignum,1,0), b(dignum,1,0), WeightZero(dignum,1,0);
610 
611  int ierr=0;
612 
613  if(of2)
614  log<<MSG::INFO<<" Calculating OF2 weights ";
615  else
616  log<<MSG::INFO<<" Calculating OF1 weights ";
617  if (deltaCorrelation)
618  log<<MSG::INFO<<"with Delta correlation matrix "<<endmsg;
619  else
620  log<<MSG::INFO<<"with correlation matrix obtained from data "<<endmsg;
621  log<<MSG::INFO<<"for ros="<<ros<<" drawer="<<drawer<<" channel="<<channel<<
622  " gain="<<gain<<endmsg;
623 
624 
625 
626  if (deltaCorrelation){
627 
628  for (int i=0;i<dignum;i++)
629  for (int j=0;j<dignum;j++)
630  Correlation[i][j]=m_R[0][0][0][0][i][j];
631 
632  Inverse=Correlation.inverse(ierr);
633 
634  for (int pha=-100;pha<101;pha++){
635 
636  if (ierr==0){
637  for (int i=0;i<dignum;i++){
638  if (gain==0){
639  PulseShape[i][0]=LshapeForm[i*25+100+pha];
640  DPulseShape[i][0]=LdshapeForm[i*25+100+pha];
641  }else{
642  PulseShape[i][0]=HshapeForm[i*25+100+pha];
643  DPulseShape[i][0]=HdshapeForm[i*25+100+pha];
644  }
645  g[pha+100][i]=PulseShape[i][0];
646  }
647 
648  // Build System Matrix with Correlations and pulse function points
649 
650  if(!of2){ // OF1
651  HepMatrix SystemMatrix(dignum+2,dignum+2,0);
652  HepVector Result(dignum + 2,0);
653  HepVector IndependTermsAmp(dignum+2,0);
654  HepVector IndependTermsTime(dignum+2,0);
655  for (int i=0; i<dignum; i++){
656 
657  for (int j=0; j<dignum; j++){
658  SystemMatrix[i][j]=Correlation[i][j];
659  }
660  SystemMatrix[dignum][i] = PulseShape[i][0];
661  SystemMatrix[i][dignum] = PulseShape[i][0];
662 
663  SystemMatrix[dignum + 1][i] = DPulseShape[i][0];
664  SystemMatrix[i][dignum + 1] = DPulseShape[i][0];
665 
666  }
667 
668  IndependTermsAmp[dignum] = 1.;
669  IndependTermsTime[dignum+1] = -1.;
670 
671  Result = solve(SystemMatrix,IndependTermsAmp);
672 
673  for (int ismp=0; ismp<dignum; ismp++) {
674  w_a[pha+100][ismp] = (double)Result[ismp];
675  }
676 
677  Result = solve(SystemMatrix,IndependTermsTime);
678 
679  for (int ismp=0; ismp<dignum; ismp++){
680  w_b[pha+100][ismp] = (double)Result[ismp];
681  }
682 
683  }else{ // OF2
684  HepMatrix SystemMatrix(dignum+3,dignum+3,0);
685  HepVector Result(dignum+3,0);
686  HepVector IndependTermsAmp(dignum+3,0);
687  HepVector IndependTermsTime(dignum+3,0);
688  HepVector IndependTermsPed(dignum+3,0);
689 
690  for (int i=0; i<dignum; i++){
691  for (int j=0; j<dignum; j++){
692  SystemMatrix[i][j]=Correlation[i][j];
693  }
694  SystemMatrix[dignum][i] = PulseShape[i][0];
695  SystemMatrix[i][dignum] = PulseShape[i][0];
696 
697  SystemMatrix[dignum + 1][i] = DPulseShape[i][0];
698  SystemMatrix[i][dignum + 1] = DPulseShape[i][0];
699 
700 
701  SystemMatrix[dignum + 2][i] = 1.;
702  SystemMatrix[i][dignum + 2] = 1.;
703  }
704 
705  IndependTermsAmp[dignum] = 1.;
706  IndependTermsTime[dignum+1] = -1.;
707  IndependTermsPed[dignum+2] = 1.;
708 
709  Result = solve(SystemMatrix,IndependTermsAmp);
710 
711  for (int ismp=0; ismp<dignum; ismp++) {
712  w_a[pha+100][ismp] = (double)Result[ismp];
713  }
714 
715  Result = solve(SystemMatrix,IndependTermsTime);
716 
717  for (int ismp=0; ismp<dignum; ismp++){
718  w_b[pha+100][ismp] = (double)Result[ismp];
719  }
720 
721  Result = solve(SystemMatrix,IndependTermsPed);
722 
723  for (int ismp=0; ismp<dignum; ismp++){
724  w_c[pha+100][ismp] = (double)Result[ismp];
725  }
726 
727  }
728  }else{
729  for (int ismp=0; ismp<dignum; ismp++){
730  w_a[pha+100][ismp] = 0.;
731  w_b[pha+100][ismp] = 0.;
732  w_c[pha+100][ismp] = 0.;
733  }
734  }
735  }// Pha
736  }else{
737  printf("ros=%d drawer=%d channel=%d gain=%d N=%d \n",
739  if (m_N[ros][drawer][channel][gain]>0){
740 
741  for (int i=0;i<dignum;i++)
742  for (int j=0;j<dignum;j++)
743  Correlation[i][j]=m_R[ros][drawer][channel][gain][i][j];
744 
745  Inverse=Correlation.inverse(ierr);
746 
747  if(ierr!=0){
748  log<<MSG::WARNING<<" Correlation matrix cannot be inverted for ros="<<ros<<" drawer="<<drawer
749  <<" channel="<<channel<<" gain="<<gain<<endmsg;
750  log<<MSG::WARNING<<" Weights set to zero for this channel..."<<endmsg;
751  for (int i=0; i<dignum; i++){
752  for (int j=0; j<dignum; j++){
753  printf("%4.4f ",m_R[ros][drawer][channel][gain][i][j]);
754  }
755  printf("\n");
756  }
757  }
758 
759  for (int pha=-100;pha<101;pha++){
760 
761  if (ierr==0){
762  for (int i=0;i<dignum;i++){
763  if (gain==0){
764  PulseShape[i][0]=LshapeForm[i*25+100+pha];
765  DPulseShape[i][0]=LdshapeForm[i*25+100+pha];
766  }else{
767  PulseShape[i][0]=HshapeForm[i*25+100+pha];
768  DPulseShape[i][0]=HdshapeForm[i*25+100+pha];
769  }
770  g[pha+100][i]=PulseShape[i][0];
771  }
772 
773  // Build System Matrix with Correlations and pulse function points
774  if(!of2){ // OF1
775  HepMatrix SystemMatrix(dignum+2,dignum+2,0);
776  HepVector Result(dignum + 2,0);
777  HepVector IndependTermsAmp(dignum+2,0);
778  HepVector IndependTermsTime(dignum+2,0);
779 
780  for (int i=0; i<dignum; i++){
781  for (int j=0; j<dignum; j++){
782  SystemMatrix[i][j]=Correlation[i][j];
783  }
784  SystemMatrix[dignum][i] = PulseShape[i][0];
785  SystemMatrix[i][dignum] = PulseShape[i][0];
786 
787  SystemMatrix[dignum + 1][i] = DPulseShape[i][0];
788  SystemMatrix[i][dignum + 1] = DPulseShape[i][0];
789  }
790 
791  IndependTermsAmp[dignum] = 1.;
792  IndependTermsTime[dignum+1] = -1.;
793 
794  Result = solve(SystemMatrix,IndependTermsAmp);
795 
796  for (int ismp=0; ismp<dignum; ismp++) {
797  w_a[pha+100][ismp] = (double)Result[ismp];
798  }
799 
800  Result = solve(SystemMatrix,IndependTermsTime);
801 
802  for (int ismp=0; ismp<dignum; ismp++){
803  w_b[pha+100][ismp] = (double)Result[ismp];
804  }
805  }else{ // OF2
806 
807  HepMatrix SystemMatrix(dignum+3,dignum+3,0);
808  HepVector Result(dignum + 3,0);
809  HepVector IndependTermsAmp(dignum+3,0);
810  HepVector IndependTermsTime(dignum+3,0);
811  HepVector IndependTermsPed(dignum+3,0);
812 
813  for (int i=0; i<dignum; i++){
814  for (int j=0; j<dignum; j++){
815  SystemMatrix[i][j]=Correlation[i][j];
816  }
817  SystemMatrix[dignum][i] = PulseShape[i][0];
818  SystemMatrix[i][dignum] = PulseShape[i][0];
819 
820  SystemMatrix[dignum + 1][i] = DPulseShape[i][0];
821  SystemMatrix[i][dignum + 1] = DPulseShape[i][0];
822 
823  SystemMatrix[dignum + 2][i] = 1.;
824  SystemMatrix[i][dignum + 2] = 1.;
825  }
826 
827  IndependTermsAmp[dignum] = 1.;
828  IndependTermsTime[dignum+1] = -1.;
829  IndependTermsPed[dignum+2] = 1.;
830 
831  Result = solve(SystemMatrix,IndependTermsAmp);
832 
833  for (int ismp=0; ismp<dignum; ismp++) {
834  w_a[pha+100][ismp] = (double)Result[ismp];
835  }
836 
837  Result = solve(SystemMatrix,IndependTermsTime);
838 
839  for (int ismp=0; ismp<dignum; ismp++){
840  w_b[pha+100][ismp] = (double)Result[ismp];
841  }
842 
843  Result = solve(SystemMatrix,IndependTermsPed);
844 
845  for (int ismp=0; ismp<dignum; ismp++){
846  w_c[pha+100][ismp] = (double)Result[ismp];
847  }
848 
849  if(ros==1 && drawer==52 && channel==43 && gain==1){
850  printf("PHASE: %d deter=%f\n",pha,SystemMatrix.determinant());
851  for (int i=0; i<dignum+2; i++){
852  for (int j=0; j<dignum+2; j++){
853  printf("%4.4f ",SystemMatrix[i][j]);
854  }
855  printf("\n");
856  }
857  for (int i=0; i<dignum; i++){
858  for (int j=0; j<dignum; j++){
859  printf("%4.4f ",m_R[ros][drawer][channel][gain][i][j]);
860  }
861  printf("\n");
862  }
863  for (int ismp=0; ismp<dignum; ismp++)
864  printf("samp: %d ->w_a: %f w_b:%f\n",
865  ismp,w_a[pha+100][ismp],w_b[pha+100][ismp]);
866  }
867  }
868 
869  }else{
870  for (int ismp=0; ismp<dignum; ismp++){
871  w_a[pha+100][ismp] = 0.;
872  w_b[pha+100][ismp] = 0.;
873  w_c[pha+100][ismp] = 0.;
874  }
875  }
876  }// END pha
877  }// END ch + gain + if m_N>0
878 
879  }// IF delta
880 
881  log<<MSG::VERBOSE<<"...weights calculated"<<endmsg;
882 
883 }
884 
885 
886 
887 
889 void TileOFCorrelation::BuildPulseShape(vector<double> &pulseShape,
890  vector<double> &pulseShapeX,
891  vector<double> &pulseShapeT,
892  int dignum,
893  MsgStream &log)
894 {
895  log<<MSG::DEBUG<<"TileCalorimeter::BuildPulseShape"<<endmsg;
896 
897  //1: set pulseShape
898  int shape_size=(dignum-1)*25+200;
899  pulseShape.resize(shape_size);
900  log<<MSG::DEBUG<<"Set dimension of pulseShape to shape_sie="<<shape_size<<endmsg;
901 
902  //2: scan pulseShapeT for: tmin, tmax, nt0 and size: pulseShapeX[nt0]=1.0;
903  int nt0=0, size;
904  double tmin=10000., tmax=-10000.;
905  int ntmin=0, ntmax=0;
906  size=pulseShapeT.size();
907  for (int i=0; i<size;i++){
908  if (pulseShapeT[i]<tmin) {
909  tmin=pulseShapeT[i];
910  ntmin=i;
911  }
912  if (pulseShapeT[i]>tmax){
913  tmax=pulseShapeT[i];
914  ntmax=i;
915  }
916  if (pulseShapeT[i]==0) nt0=i;
917  }
918  log<<MSG::DEBUG<<"pulseShapeX & pulseShapeT size ="<<size<<", tmin="<<tmin<<", tmax="<<tmax<<" nt0="<<nt0<<" pulseShapeT[nt0]="<<pulseShapeT[nt0]<<" pulseShapeX[nt0]="<<pulseShapeX[nt0]<<endmsg;
919 
920  //3: fill pulseShape
921  bool exact;
922  int nminn, nminp;
923  double minn, minp, tdist;
924  pulseShape[(shape_size)/2]=pulseShapeX[nt0];
925  // for (int i=1;i<(shape_size)/2+1;i++){
926  for (int i=1;i<(shape_size)/2;i++){
927  // negative times: 0->(shape_size-1)/2
928  // if (-i<tmin) pulseShape[(shape_size)/2-i]=0.;
929  if (-i<tmin) pulseShape[(shape_size)/2-i]=pulseShapeX[ntmin];
930  else{
931  exact=false;
932  minn=-10000.;
933  minp=10000.;
934  nminn=0;
935  nminp=size-1;
936  for (int j=0;j<nt0+1&&!exact;j++){
937  if (pulseShapeT[j]==double(-i)){
938  pulseShape[(shape_size)/2-i]=pulseShapeX[j];
939  exact=true;
940  }else{
941  tdist=pulseShapeT[j]-double(-i);
942  if (tdist < 0. && tdist>minn){
943  minn=tdist;
944  nminn=j;
945  }
946  if (tdist>0. && tdist<minp){
947  minp=tdist;
948  nminp=j;
949  }
950  }
951  }
952 
953  if (exact)
954  log<<MSG::VERBOSE<<"exact value found for time="<<-i<<" pulseShape="<<pulseShape[(shape_size)/2-i]<<endmsg;
955  else{
956  // if (exact)
957  log<<MSG::VERBOSE<<"exact value NOT found for time="<<-i
958  <<" nminn="<<nminn<<" pulseShapeT="<<pulseShapeT[nminn]<<" pulseShapeX="<<pulseShapeX[nminn]<<std::endl
959  <<" nminp="<<nminp<<" pulseShapeT="<<pulseShapeT[nminp]<<" pulseShapeX="<<pulseShapeX[nminp]<<endmsg;
960  pulseShape[(shape_size)/2-i]=pulseShapeX[nminn]+(pulseShapeX[nminp]-pulseShapeX[nminn])/(pulseShapeT[nminp]-pulseShapeT[nminn])*(-i-pulseShapeT[nminn]);
961  }
962 
963  }
964 
965  // positive times: (shape_size-1)/2->shape_size
966  // if (i>tmax) pulseShape[(shape_size)/2+i]=0.;
967  if (i>tmax) pulseShape[(shape_size)/2+i]=pulseShapeX[ntmax];
968  else{
969  exact=false;
970  minn=-10000.;
971  minp=10000.;
972  nminn=0;
973  nminp=size;
974  for (int j=nt0;j<size&&!exact;j++){
975  if (pulseShapeT[j]==double(i)){
976  pulseShape[(shape_size)/2+i]=pulseShapeX[j];
977  exact=true;
978  }else{
979  tdist=pulseShapeT[j]-double(i);
980  if (tdist<0)
981  if (tdist>minn)
982  {
983  minn=tdist;
984  nminn=j;
985  }
986  if (tdist>0)
987  if (tdist<minp){
988  minp=tdist;
989  nminp=j;
990  }
991  }
992  }
993  if (exact)
994  log<<MSG::VERBOSE<<"exact value found for time="<<i<<" pulseShape="<<pulseShape[(shape_size)/2+i]<<endmsg;
995  else{
996  // if (exact)
997  log<<MSG::VERBOSE<<"exact value NOT found for time="<<i
998  <<" nminn="<<nminn<<" pulseShapeT="<<pulseShapeT[nminn]<<" pulseShapeX="<<pulseShapeX[nminn]<<std::endl
999  <<" nminp="<<nminp<<" pulseShapeT="<<pulseShapeT[nminp]<<" pulseShapeX="<<pulseShapeX[nminp]<<endmsg;
1000 
1001  pulseShape[(shape_size)/2+i]=pulseShapeX[nminn]+(pulseShapeX[nminp]-pulseShapeX[nminn])/(pulseShapeT[nminp]-pulseShapeT[nminn])*(i-pulseShapeT[nminn]);
1002  }
1003  }
1004  }
1005 
1006 }
1007 
1009 void TileOFCorrelation::WriteWeightsToFile(bool deltaCorrelation,
1010  int dignum,
1011  const string& OptFilterFile_ai_lo,
1012  const string& OptFilterFile_bi_lo,
1013  const string& OptFilterFile_ai_hi,
1014  const string& OptFilterFile_bi_hi,
1015  int ros,
1016  int drawer,
1017  int channel,
1018  int gain,
1019  const TileHWID *tileHWID,
1020  MsgStream & log)
1021 {
1022  log<<MSG::DEBUG<<" TileOFCorrelation::WriteWeightsToFile"<<endmsg;
1023  fstream *f_ai_lo = new fstream(OptFilterFile_ai_lo.c_str(), fstream::app| fstream::out);
1024  fstream *f_bi_lo = new fstream(OptFilterFile_bi_lo.c_str(), fstream::app|fstream::out);
1025  fstream *f_ai_hi = new fstream(OptFilterFile_ai_hi.c_str(), fstream::app|fstream::out);
1026  fstream *f_bi_hi = new fstream(OptFilterFile_bi_hi.c_str(), fstream::app|fstream::out);
1027 
1028  //Open Weights files
1029  if (f_ai_lo->is_open()&&f_ai_lo->is_open()&&f_ai_lo->is_open()&&f_ai_lo->is_open()) log<<MSG::INFO<<" Weights files open"<<endmsg;
1030  else log<<MSG::INFO<<" Weights files didn't open succesfully"<<endmsg;
1031 
1032  if(!deltaCorrelation && m_N[ros][drawer][channel][gain]>0){
1033  int frag= tileHWID->frag(ros+1,drawer);
1034  if (gain==0){
1035  std::cout<<"ros "<<ros
1036  <<" drawer "<<drawer<<std::hex
1037  <<" frag0x "<<frag<<std::dec
1038  <<" channel "<<channel
1039  <<" N "<<m_N[ros][drawer][channel][0]
1040  <<std::endl;
1041  *f_ai_lo<<"ros "<<ros
1042  <<" drawer "<<drawer<<std::hex
1043  <<" frag0x "<<frag<<std::dec
1044  <<" channel "<<channel
1045  <<" N "<<m_N[ros][drawer][channel][0]
1046  <<endl;
1047 
1048  *f_bi_lo<<"ros "<<ros
1049  <<" drawer "<<drawer<<std::hex
1050  <<" frag0x "<<frag<<std::dec
1051  <<" channel "<<channel
1052  <<" N "<<m_N[ros][drawer][channel][0]
1053  <<endl;
1054  }
1055  if (gain==1){
1056  *f_ai_hi<<"ros "<<ros
1057  <<" drawer "<<drawer<<std::hex
1058  <<" frag0x "<<frag<<std::dec
1059  <<" channel "<<channel
1060  <<" N "<<m_N[ros][drawer][channel][1]
1061  <<endl;
1062 
1063  *f_bi_hi<<"ros "<<ros
1064  <<" drawer "<<drawer<<std::hex
1065  <<" frag0x "<<frag<<std::dec
1066  <<" channel "<<channel
1067  <<" N "<<m_N[ros][drawer][channel][1]
1068  <<endl;
1069  }
1070 
1071  }
1072 
1073  if(deltaCorrelation || m_N[ros][drawer][channel][gain]>0){
1074  for (int pha=-100;pha<101;pha++){
1075  if (gain==0){
1076  *f_ai_lo<<std::setw(6)<<pha;
1077  for (int i=0;i<dignum;i++) *f_ai_lo<<std::setw(18)<<std::setprecision(10)<<w_a[pha+100][i];
1078  *f_ai_lo<<endl;
1079 
1080  *f_bi_lo<<std::setw(6)<<pha;
1081  for (int i=0;i<dignum;i++) *f_bi_lo<<std::setw(18)<<std::setprecision(10)<<w_b[pha+100][i];
1082  *f_bi_lo<<endl;
1083  }else{
1084  *f_ai_hi<<std::setw(6)<<pha;
1085  for (int i=0;i<dignum;i++) *f_ai_hi<<std::setw(18)<<std::setprecision(10)<<w_a[pha+100][i];
1086  *f_ai_hi<<endl;
1087 
1088  *f_bi_hi<<std::setw(6)<<pha;
1089  for (int i=0;i<dignum;i++) *f_bi_hi<<std::setw(18)<<std::setprecision(10)<<w_b[pha+100][i];
1090  *f_bi_hi<<endl;
1091  }
1092  }
1093 
1094  }
1095 
1096  f_ai_lo->close();
1097  f_bi_lo->close();
1098  f_ai_hi->close();
1099  f_bi_hi->close();
1100 
1101 }
1102 
1103 
1105 void TileOFCorrelation::OpenWeightsFile(const string& OptFilterFile_ai_lo,
1106  const string& OptFilterFile_bi_lo,
1107  const string& OptFilterFile_ai_hi,
1108  const string& OptFilterFile_bi_hi,
1109  MsgStream & log)
1110 {
1111  log<<MSG::DEBUG<<" TileOFCorrelation::OpenWeightsFile"<<endmsg;
1112  fstream *f_ai_lo = new fstream(OptFilterFile_ai_lo.c_str(), fstream::trunc|fstream::out);
1113  fstream *f_bi_lo = new fstream(OptFilterFile_bi_lo.c_str(), fstream::trunc|fstream::out);
1114  fstream *f_ai_hi = new fstream(OptFilterFile_ai_hi.c_str(), fstream::trunc|fstream::out);
1115  fstream *f_bi_hi = new fstream(OptFilterFile_bi_hi.c_str(), fstream::trunc|fstream::out);
1116 
1117  f_ai_lo->open(OptFilterFile_ai_hi.c_str(), fstream::trunc|fstream::out);
1118  f_bi_lo->open(OptFilterFile_ai_hi.c_str(), fstream::trunc|fstream::out);
1119  f_ai_hi->open(OptFilterFile_ai_hi.c_str(), fstream::trunc|fstream::out);
1120  f_bi_hi->open(OptFilterFile_ai_hi.c_str(), fstream::trunc|fstream::out);
1121 }
1122 
1123 
TileOFCorrelation::m_corr2
double m_corr2[NDIG]
Definition: TileOFCorrelation.h:106
TileOFCorrelation::BuildPulseShape
static void BuildPulseShape(std::vector< double > &pulseShape, std::vector< double > &pulseShapeX, std::vector< double > &pulseShapeT, int dignum, MsgStream &log)
Definition: TileOFCorrelation.cxx:889
TileOFCorrelation::m_S1
double(* m_S1)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:115
TileOFCorrelation::w_c
double w_c[201][9]
Definition: TileOFCorrelation.h:92
TileOFCorrelation::SetCorrelationZero
void SetCorrelationZero(MsgStream &log, int dignum)
Definition: TileOFCorrelation.cxx:78
TileOFCorrelation::CalcRunningCorrelation
void CalcRunningCorrelation(MsgStream &log, int dignum, int chthres, bool flag_7to9)
Definition: TileOFCorrelation.cxx:334
TileOFCorrelation::m_jentry
int m_jentry
Definition: TileOFCorrelation.h:112
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
TileOFCorrelation::m_S2
double(* m_S2)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:116
TileOFCorrelation::TileOFCorrelation
TileOFCorrelation()
Definition: TileOFCorrelation.cxx:34
TileOFCorrelation::m_S
double(* m_S)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:101
TileOFCorrelation::m_S22
double(* m_S22)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:119
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
TileOFCorrelation::GetCorrelation
void GetCorrelation(int dignum, float tmpCorr[][9], int ros, int drawer, int chan, int gain)
Definition: TileOFCorrelation.cxx:385
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
TileOFCorrelation::CalcCorrelation
void CalcCorrelation(MsgStream &log, int dignum, bool flag_7to9, bool doRobustCov)
Definition: TileOFCorrelation.cxx:176
TileOFCorrelation::m_corr_sum
double(* m_corr_sum)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:107
TileOFCorrelation::PrintCorrelation
void PrintCorrelation(int dignum)
Definition: TileOFCorrelation.cxx:398
TileOFCorrelation::RunningCorrelation
void RunningCorrelation(std::vector< float > &digits, int ros, int drawer, int channel, int gain, MsgStream &log, bool debug, int &dignum, int chthres)
Definition: TileOFCorrelation.cxx:262
TileHWID::frag
int frag(const HWIdentifier &id) const
extract frag field from HW identifier
Definition: TileHWID.h:181
TileOFCorrelation::getCorrelationSumm
float * getCorrelationSumm(bool deltaCorrelation, int ros, int drawer, int channel, int gain, int dignum)
Definition: TileOFCorrelation.cxx:497
TileOFCorrelation::m_R
double(* m_R)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG][NDIG]
Definition: TileOFCorrelation.h:102
TileOFCorrelation::m_SS
double(* m_SS)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG][NDIG]
Definition: TileOFCorrelation.h:100
x
#define x
TileOFCorrelation::m_S11
double(* m_S11)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:117
Example_ReadSampleNoise.drawer
drawer
Definition: Example_ReadSampleNoise.py:39
TileOFCorrelation::g
double g[201][9]
Definition: TileOFCorrelation.h:93
TileCalibUtils::MAX_DRAWER
static const unsigned int MAX_DRAWER
Number of drawers in ROS 1-4.
Definition: TileCalibUtils.h:139
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TileHWID
Helper class for TileCal online (hardware) identifiers.
Definition: TileHWID.h:49
NPARTITIONS
#define NPARTITIONS
Definition: TileLaserDefaultCalibTool.h:35
TileOFCorrelation.h
TileOFCorrelation::m_N_d
double m_N_d
Definition: TileOFCorrelation.h:114
TileOFCorrelation::m_corr
float m_corr[8]
Definition: TileOFCorrelation.h:110
NDIG
#define NDIG
Definition: TileOFCorrelation.h:27
TileHWID.h
TileOFCorrelation::OpenWeightsFile
static void OpenWeightsFile(const std::string &OptFilterFile_ai_lo, const std::string &OptFilterFile_bi_lo, const std::string &OptFilterFile_ai_hi, const std::string &OptFilterFile_bi_hi, MsgStream &log)
Definition: TileOFCorrelation.cxx:1105
TileOFCorrelation::w_a
double w_a[201][9]
Definition: TileOFCorrelation.h:90
lumiFormat.i
int i
Definition: lumiFormat.py:92
ReadCellNoiseFromCool.chan
chan
Definition: ReadCellNoiseFromCool.py:52
Result
ICscStripFitter::Result Result
Definition: CalibCscStripFitter.cxx:13
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
TileOFCorrelation::m_N
int(* m_N)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN]
Definition: TileOFCorrelation.h:111
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
maskDeadModules.ros
ros
Definition: maskDeadModules.py:35
ReadTripsProbsFromCool.denominator
denominator
Definition: ReadTripsProbsFromCool.py:96
TileOFCorrelation::~TileOFCorrelation
~TileOFCorrelation()
Definition: TileOFCorrelation.cxx:60
TileOFCorrelation::WriteWeightsToFile
void WriteWeightsToFile(bool deltaCorrelation, int dignum, const std::string &m_OptFilterFile_ai_lo, const std::string &m_OptFilterFile_bi_lo, const std::string &m_OptFilterFile_ai_hi, const std::string &m_OptFilterFile_bi_hi, int ros, int drawer, int channel, int gain, const TileHWID *tileHWID, MsgStream &log)
Definition: TileOFCorrelation.cxx:1009
TileOFCorrelation::m_ncorr
double m_ncorr
Definition: TileOFCorrelation.h:109
TileOFCorrelation::SetCorrelationDelta
void SetCorrelationDelta(MsgStream &log, int dignum)
Definition: TileOFCorrelation.cxx:118
Result
Definition: fbtTestBasics.cxx:47
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
TileOFCorrelation::m_S12
double(* m_S12)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:118
TileOFCorrelation::CalcWeights
void CalcWeights(bool of2, bool deltaCorrelation, const std::vector< double > &LshapeForm, const std::vector< double > &HshapeForm, const std::vector< double > &LdshapeForm, const std::vector< double > &HdshapeForm, MsgStream &log, int ros, int drawer, int channel, int gain, int dignum)
Definition: TileOFCorrelation.cxx:592
a
TList * a
Definition: liststreamerinfos.cxx:10
TileOFCorrelation::SaveCorrelationSumm
void SaveCorrelationSumm(bool deltaCorrelation, const std::string &OptFilterFile_CorrelationSumm, const TileHWID *tileHWID, MsgStream &log, int dignum)
Definition: TileOFCorrelation.cxx:428
TileOFCorrelation::SaveCorrelationMatrix
void SaveCorrelationMatrix(bool deltaCorrelation, const std::string &OptFilterFile_CorrelationMatrix, const TileHWID *tileHWID, MsgStream &log, int dignum)
Definition: TileOFCorrelation.cxx:524
DEBUG
#define DEBUG
Definition: page_access.h:11
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
TileOFCorrelation::m_N_pairs
int(* m_N_pairs)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:113
TileOFCorrelation::w_b
double w_b[201][9]
Definition: TileOFCorrelation.h:91
LB_AnalMapSplitter.of2
of2
Definition: LB_AnalMapSplitter.py:50
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
TileCalibUtils::MAX_CHAN
static const unsigned int MAX_CHAN
Number of channels in drawer.
Definition: TileCalibUtils.h:141
TileOFCorrelation::m_corr_sum_sq
double(* m_corr_sum_sq)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
Definition: TileOFCorrelation.h:108
TileOFCorrelation::Sum
void Sum(std::vector< float > &digits, int ros, int drawer, int channel, int gain, MsgStream &log, bool debug, int &dignum, bool doRobustCov)
Definition: TileOFCorrelation.cxx:137
TileOFCorrelation::m_DataVector
std::vector< std::vector< float > > m_DataVector[NPARTITIONS][Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN]
Definition: TileOFCorrelation.h:104
TileOFCorrelation::m_lag
int m_lag
Definition: TileOFCorrelation.h:112
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
TileCalibUtils::MAX_GAIN
static const unsigned int MAX_GAIN
Number of gains per channel
Definition: TileCalibUtils.h:142