ATLAS Offline Software
Loading...
Searching...
No Matches
TileOFCorrelation Class Reference

#include <TileOFCorrelation.h>

Collaboration diagram for TileOFCorrelation:

Public Member Functions

 TileOFCorrelation ()
 ~TileOFCorrelation ()
 TileOFCorrelation (const TileOFCorrelation &)=delete
TileOFCorrelationoperator= (const TileOFCorrelation &)=delete
void SetCorrelationZero (MsgStream &log, int dignum)
void SetCorrelationDelta (MsgStream &log, int dignum)
void Sum (std::vector< float > &digits, int ros, int drawer, int channel, int gain, MsgStream &log, bool debug, int &dignum, bool doRobustCov)
void RunningCorrelation (std::vector< float > &digits, int ros, int drawer, int channel, int gain, MsgStream &log, bool debug, int &dignum, int chthres)
void CalcCorrelation (MsgStream &log, int dignum, bool flag_7to9, bool doRobustCov)
void CalcRunningCorrelation (MsgStream &log, int dignum, int chthres, bool flag_7to9)
void GetCorrelation (int dignum, float tmpCorr[][9], int ros, int drawer, int chan, int gain)
void PrintCorrelation (int dignum)
void SaveCorrelationSumm (bool deltaCorrelation, const std::string &OptFilterFile_CorrelationSumm, const TileHWID *tileHWID, MsgStream &log, int dignum)
void SaveCorrelationMatrix (bool deltaCorrelation, const std::string &OptFilterFile_CorrelationMatrix, const TileHWID *tileHWID, MsgStream &log, int dignum)
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)
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)
void CloseWeightsFile (std::string OptFilterFile_ai_lo, std::string OptFilterFile_bi_lo, std::string OptFilterFile_ai_hi, std::string OptFilterFile_bi_hi, MsgStream &log)
float * getCorrelationSumm (bool deltaCorrelation, int ros, int drawer, int channel, int gain, int dignum)

Static Public Member Functions

static void BuildPulseShape (std::vector< double > &pulseShape, std::vector< double > &pulseShapeX, std::vector< double > &pulseShapeT, int dignum, MsgStream &log)
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)

Public Attributes

double w_a [201][9] ={}
double w_b [201][9] ={}
double w_c [201][9] ={}
double g [201][9] ={}

Private Types

using Tile = TileCalibUtils

Private Attributes

double(* m_SS )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG][NDIG]
double(* m_S )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_R )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG][NDIG]
std::vector< std::vector< float > > m_DataVector [NPARTITIONS][Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN]
double m_corr2 [NDIG]
double(* m_corr_sum )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_corr_sum_sq )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double m_ncorr
float m_corr [8]
int(* m_N )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN]
int m_jentry
int m_lag
int(* m_N_pairs )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double m_N_d
double(* m_S1 )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_S2 )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_S11 )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_S12 )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_S22 )[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]

Detailed Description

Definition at line 31 of file TileOFCorrelation.h.

Member Typedef Documentation

◆ Tile

Definition at line 98 of file TileOFCorrelation.h.

Constructor & Destructor Documentation

◆ TileOFCorrelation() [1/2]

TileOFCorrelation::TileOFCorrelation ( )

Definition at line 34 of file TileOFCorrelation.cxx.

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}
#define NDIG
#define NPARTITIONS
static const unsigned int MAX_GAIN
Number of gains per channel.
static const unsigned int MAX_DRAWER
Number of drawers in ROS 1-4.
static const unsigned int MAX_CHAN
Number of channels in drawer.
double(* m_corr_sum_sq)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_S22)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_S)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_corr_sum)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_S11)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_SS)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG][NDIG]
double(* m_S1)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_S2)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
int(* m_N_pairs)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
double(* m_R)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG][NDIG]
double(* m_S12)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
int(* m_N)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN]

◆ ~TileOFCorrelation()

TileOFCorrelation::~TileOFCorrelation ( )

Definition at line 60 of file TileOFCorrelation.cxx.

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}

◆ TileOFCorrelation() [2/2]

TileOFCorrelation::TileOFCorrelation ( const TileOFCorrelation & )
delete

Member Function Documentation

◆ BuildPulseShape()

void TileOFCorrelation::BuildPulseShape ( std::vector< double > & pulseShape,
std::vector< double > & pulseShapeX,
std::vector< double > & pulseShapeT,
int dignum,
MsgStream & log )
static

Definition at line 889 of file TileOFCorrelation.cxx.

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}
#define endmsg

◆ CalcCorrelation()

void TileOFCorrelation::CalcCorrelation ( MsgStream & log,
int dignum,
bool flag_7to9,
bool doRobustCov )

Definition at line 176 of file TileOFCorrelation.cxx.

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;
256 }
257}
#define x
std::vector< std::vector< float > > m_DataVector[NPARTITIONS][Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN]

◆ CalcRunningCorrelation()

void TileOFCorrelation::CalcRunningCorrelation ( MsgStream & log,
int dignum,
int chthres,
bool flag_7to9 )

Definition at line 334 of file TileOFCorrelation.cxx.

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}

◆ CalcWeights()

void TileOFCorrelation::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 at line 592 of file TileOFCorrelation.cxx.

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",
738 ros,drawer,channel,gain,m_N[ros][drawer][channel][gain]);
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}
ICscStripFitter::Result Result
static Double_t a
void Zero(TH1D *hin)
Definition generate.cxx:32

◆ CloseWeightsFile()

void TileOFCorrelation::CloseWeightsFile ( std::string OptFilterFile_ai_lo,
std::string OptFilterFile_bi_lo,
std::string OptFilterFile_ai_hi,
std::string OptFilterFile_bi_hi,
MsgStream & log )

◆ GetCorrelation()

void TileOFCorrelation::GetCorrelation ( int dignum,
float tmpCorr[][9],
int ros,
int drawer,
int chan,
int gain )

Definition at line 385 of file TileOFCorrelation.cxx.

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}

◆ getCorrelationSumm()

float * TileOFCorrelation::getCorrelationSumm ( bool deltaCorrelation,
int ros,
int drawer,
int channel,
int gain,
int dignum )

Definition at line 497 of file TileOFCorrelation.cxx.

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}

◆ OpenWeightsFile()

void TileOFCorrelation::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 )
static

Definition at line 1105 of file TileOFCorrelation.cxx.

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}

◆ operator=()

TileOFCorrelation & TileOFCorrelation::operator= ( const TileOFCorrelation & )
delete

◆ PrintCorrelation()

void TileOFCorrelation::PrintCorrelation ( int dignum)

Definition at line 398 of file TileOFCorrelation.cxx.

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}

◆ RunningCorrelation()

void TileOFCorrelation::RunningCorrelation ( std::vector< float > & digits,
int ros,
int drawer,
int channel,
int gain,
MsgStream & log,
bool debug,
int & dignum,
int chthres )

Definition at line 262 of file TileOFCorrelation.cxx.

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];
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){
292 m_ncorr=double(m_N_pairs[ros][drawer][channel][gain][m_lag-1]);
293
296 (m_ncorr*m_S22[ros][drawer][channel][gain][m_lag-1]-
297 m_S2[ros][drawer][channel][gain][m_lag-1]*m_S2[ros][drawer][channel][gain][m_lag-1]);
298
299 if(denominator!=0){
300 m_corr2[m_lag-1]=
302 m_S1[ros][drawer][channel][gain][m_lag-1]*m_S2[ros][drawer][channel][gain][m_lag-1])/sqrt(denominator);
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)
325 -m_corr_sum[ros][drawer][channel][gain][m_lag-1]*m_corr_sum[ros][drawer][channel][gain][m_lag-1])/(m_jentry-chthres)
326 <<endmsg;
327 }
328 }
329}

◆ SaveCorrelationMatrix()

void TileOFCorrelation::SaveCorrelationMatrix ( bool deltaCorrelation,
const std::string & OptFilterFile_CorrelationMatrix,
const TileHWID * tileHWID,
MsgStream & log,
int dignum )

Definition at line 524 of file TileOFCorrelation.cxx.

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++){
554 log<<MSG::VERBOSE
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}
int frag(const HWIdentifier &id) const
extract frag field from HW identifier
Definition TileHWID.h:181

◆ SaveCorrelationSumm()

void TileOFCorrelation::SaveCorrelationSumm ( bool deltaCorrelation,
const std::string & OptFilterFile_CorrelationSumm,
const TileHWID * tileHWID,
MsgStream & log,
int dignum )

Definition at line 428 of file TileOFCorrelation.cxx.

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++){
459 log<<MSG::VERBOSE
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}

◆ SetCorrelationDelta()

void TileOFCorrelation::SetCorrelationDelta ( MsgStream & log,
int dignum )

Definition at line 118 of file TileOFCorrelation.cxx.

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}

◆ SetCorrelationZero()

void TileOFCorrelation::SetCorrelationZero ( MsgStream & log,
int dignum )

Definition at line 78 of file TileOFCorrelation.cxx.

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++){
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++){
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}

◆ Sum()

void TileOFCorrelation::Sum ( std::vector< float > & digits,
int ros,
int drawer,
int channel,
int gain,
MsgStream & log,
bool debug,
int & dignum,
bool doRobustCov )

Definition at line 137 of file TileOFCorrelation.cxx.

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}
const bool debug

◆ WriteWeightsToFile()

void TileOFCorrelation::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 at line 1009 of file TileOFCorrelation.cxx.

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}

Member Data Documentation

◆ g

double TileOFCorrelation::g[201][9] ={}

Definition at line 93 of file TileOFCorrelation.h.

93{};

◆ m_corr

float TileOFCorrelation::m_corr[8]
private

Definition at line 110 of file TileOFCorrelation.h.

◆ m_corr2

double TileOFCorrelation::m_corr2[NDIG]
private

Definition at line 106 of file TileOFCorrelation.h.

◆ m_corr_sum

double(* TileOFCorrelation::m_corr_sum)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 107 of file TileOFCorrelation.h.

◆ m_corr_sum_sq

double(* TileOFCorrelation::m_corr_sum_sq)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 108 of file TileOFCorrelation.h.

◆ m_DataVector

std::vector< std::vector <float> > TileOFCorrelation::m_DataVector[NPARTITIONS][Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN]
private

Definition at line 104 of file TileOFCorrelation.h.

◆ m_jentry

int TileOFCorrelation::m_jentry
private

Definition at line 112 of file TileOFCorrelation.h.

◆ m_lag

int TileOFCorrelation::m_lag
private

Definition at line 112 of file TileOFCorrelation.h.

◆ m_N

int(* TileOFCorrelation::m_N)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN]
private

Definition at line 111 of file TileOFCorrelation.h.

◆ m_N_d

double TileOFCorrelation::m_N_d
private

Definition at line 114 of file TileOFCorrelation.h.

◆ m_N_pairs

int(* TileOFCorrelation::m_N_pairs)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 113 of file TileOFCorrelation.h.

◆ m_ncorr

double TileOFCorrelation::m_ncorr
private

Definition at line 109 of file TileOFCorrelation.h.

◆ m_R

double(* TileOFCorrelation::m_R)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG][NDIG]
private

Definition at line 102 of file TileOFCorrelation.h.

◆ m_S

double(* TileOFCorrelation::m_S)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 101 of file TileOFCorrelation.h.

◆ m_S1

double(* TileOFCorrelation::m_S1)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 115 of file TileOFCorrelation.h.

◆ m_S11

double(* TileOFCorrelation::m_S11)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 117 of file TileOFCorrelation.h.

◆ m_S12

double(* TileOFCorrelation::m_S12)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 118 of file TileOFCorrelation.h.

◆ m_S2

double(* TileOFCorrelation::m_S2)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 116 of file TileOFCorrelation.h.

◆ m_S22

double(* TileOFCorrelation::m_S22)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG]
private

Definition at line 119 of file TileOFCorrelation.h.

◆ m_SS

double(* TileOFCorrelation::m_SS)[Tile::MAX_DRAWER][Tile::MAX_CHAN][Tile::MAX_GAIN][NDIG][NDIG]
private

Definition at line 100 of file TileOFCorrelation.h.

◆ w_a

double TileOFCorrelation::w_a[201][9] ={}

Definition at line 90 of file TileOFCorrelation.h.

90{};

◆ w_b

double TileOFCorrelation::w_b[201][9] ={}

Definition at line 91 of file TileOFCorrelation.h.

91{};

◆ w_c

double TileOFCorrelation::w_c[201][9] ={}

Definition at line 92 of file TileOFCorrelation.h.

92{};

The documentation for this class was generated from the following files: