BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EmcBhaCalibData Class Reference

#include <EmcBhaCalibData.h>

Public Member Functions

 EmcBhaCalibData (int numxtals)
 EmcBhaCalibData (int numxtals, int MsgFlag)
 ~EmcBhaCalibData ()
double & matrixMEle (int row, int column)
EmcLSSMatrixgetMatrixM ()
double & vectorR (int ind)
double * getVectorR ()
int xtalInd (int ind)
int & nXtals ()
int & nXtalsHit ()
int & xtalHits (int ind)
int & xtalHitsDir (int ind)
bool reduce ()
void reset ()
void writeOut (ostream &OutM, ostream &outV)
void readIn (istream &InM, istream &InV)
void printVec (int number)

Detailed Description

This class holds the information that is needed to do the calibration of the EMC with Bhabha events. It stores the accumulated matrix, the accumulated vector, the number of hits percrystal and other stuff.

The data are filled in the method EmcMCBhaEvent::CollectBhabha().

This software was developed for the BesIII collaboration. If you use all or part of it, please give an appropriate acknowledgement.

Copyright (C) 2005 IHEP

See also
Author
(Chunxiu Liu) (originator/contributor etc.);

Definition at line 61 of file EmcBhaCalibData.h.

Constructor & Destructor Documentation

◆ EmcBhaCalibData() [1/2]

EmcBhaCalibData::EmcBhaCalibData ( int numxtals)

Definition at line 47 of file EmcBhaCalibData.cxx.

47 : _nXtals( numxtals ), _nXtalsHit( 0 ) {
48 // _matrixM = new EmcLSSMatrix(_nXtals,600);
49 _matrixM = new EmcLSSMatrix( _nXtals, _nXtals );
50 _vectorR = new double[_nXtals];
51 _xtalInd = new int[_nXtals];
52 _xtalHits = new int[_nXtals];
53 _xtalHitsMax = new int[_nXtals];
54 for ( int i = 0; i < _nXtals; i++ )
55 {
56 _vectorR[i] = 0.;
57 _xtalInd[i] = i;
58 _xtalHits[i] = 0;
59 _xtalHitsMax[i] = 0;
60 }
61 _MsgFlag = 0;
62}

◆ EmcBhaCalibData() [2/2]

EmcBhaCalibData::EmcBhaCalibData ( int numxtals,
int MsgFlag )

Definition at line 67 of file EmcBhaCalibData.cxx.

68 : _nXtals( numxtals ), _nXtalsHit( 0 ) {
69 // _matrixM = new EmcLSSMatrix(_nXtals,600);
70 _matrixM = new EmcLSSMatrix( _nXtals, _nXtals, MsgFlag );
71 _vectorR = new double[_nXtals];
72 _xtalInd = new int[_nXtals];
73 _xtalHits = new int[_nXtals];
74 _xtalHitsMax = new int[_nXtals];
75 for ( int i = 0; i < _nXtals; i++ )
76 {
77 _vectorR[i] = 0.;
78 _xtalInd[i] = i;
79 _xtalHits[i] = 0;
80 _xtalHitsMax[i] = 0;
81 }
82
83 _MsgFlag = MsgFlag;
84}

◆ ~EmcBhaCalibData()

EmcBhaCalibData::~EmcBhaCalibData ( )

Definition at line 89 of file EmcBhaCalibData.cxx.

89 {
90 if ( 0 != _matrixM )
91 {
92 delete _matrixM;
93 _matrixM = 0;
94 }
95 if ( 0 != _vectorR )
96 {
97 delete[] _vectorR;
98 _vectorR = 0;
99 }
100 if ( 0 != _xtalInd )
101 {
102 delete[] _xtalInd;
103 _xtalInd = 0;
104 }
105 if ( 0 != _xtalHits )
106 {
107 delete[] _xtalHits;
108 _xtalHits = 0;
109 }
110 if ( 0 != _xtalHitsMax )
111 {
112 delete[] _xtalHitsMax;
113 _xtalHitsMax = 0;
114 }
115}

Member Function Documentation

◆ getMatrixM()

EmcLSSMatrix * EmcBhaCalibData::getMatrixM ( )
inline

Definition at line 78 of file EmcBhaCalibData.h.

78{ return _matrixM; }

◆ getVectorR()

double * EmcBhaCalibData::getVectorR ( )
inline

Definition at line 84 of file EmcBhaCalibData.h.

84{ return _vectorR; }

◆ matrixMEle()

double & EmcBhaCalibData::matrixMEle ( int row,
int column )
inline

Definition at line 74 of file EmcBhaCalibData.h.

74{ return ( ( *_matrixM )( row, column ) ); }

◆ nXtals()

int & EmcBhaCalibData::nXtals ( )
inline

Definition at line 90 of file EmcBhaCalibData.h.

90{ return _nXtals; }

◆ nXtalsHit()

int & EmcBhaCalibData::nXtalsHit ( )
inline

Definition at line 92 of file EmcBhaCalibData.h.

92{ return _nXtalsHit; }

◆ printVec()

void EmcBhaCalibData::printVec ( int number)

Definition at line 249 of file EmcBhaCalibData.cxx.

249 {
250
251 if ( _MsgFlag <= 3 )
252 {
253 std::cout << "EmcBhaCalibData:: INFO "
254 << "R ( " << number << " ): " << _vectorR[number]
255 << " hits: " << _xtalHits[number] << " direct hits: " << _xtalHitsMax[number]
256 << endl;
257 }
258}

◆ readIn()

void EmcBhaCalibData::readIn ( istream & InM,
istream & InV )

Definition at line 167 of file EmcBhaCalibData.cxx.

167 {
168
169 _matrixM->readIn( InM );
170
171 _matrixM->print_NonZeros();
172
173 // cout<<"num_filled_rows(48)="<<_matrixM->num_filled_rows(48)<<endl;
174 // cout<<"num_filled_cols(48)="<<_matrixM->num_filled_cols(48)<<endl;
175
176 // cout<<"matrix(47,47)"<<_matrixM->operator()(47,47)<<endl;
177
178 double vect_ele;
179 int nr_ele;
180 int xtal_ind;
181 int hits;
182 int hits_max;
183
184 InV >> nr_ele;
185
186 for ( int i = 0; i < nr_ele; i++ )
187 {
188
189 InV >> xtal_ind >> hits >> hits_max >> vect_ele;
190
191 if ( _vectorR[xtal_ind] == 0. ) { _nXtalsHit++; }
192
193 _vectorR[xtal_ind] += vect_ele;
194 _xtalInd[xtal_ind] = xtal_ind;
195 _xtalHits[xtal_ind] += hits;
196 _xtalHitsMax[xtal_ind] += hits_max;
197 }
198}
const double hits_max

◆ reduce()

bool EmcBhaCalibData::reduce ( )

Definition at line 200 of file EmcBhaCalibData.cxx.

200 {
201
202 bool successful = true;
203
204 // delete all zero elements in matrix and vector R
205 // save only non zero elements (this format is needed by slap),
206 // keep the original xtal index in array xtalInd
207
208 // array to store the new row/column reference for later matrix reduction
209 int* xRef = new int[_nXtals];
210 memset( xRef, -1, ( _nXtals * sizeof( int ) ) );
211
212 _nXtalsHit = 0;
213 for ( int _arrayIndx = 0; _arrayIndx < _nXtals; _arrayIndx++ )
214 {
215
216 if ( _vectorR[_arrayIndx] > 0. )
217 {
218
219 _vectorR[_nXtalsHit] = _vectorR[_arrayIndx];
220 _xtalInd[_nXtalsHit] = _xtalInd[_arrayIndx];
221 _xtalHits[_nXtalsHit] = _xtalHits[_arrayIndx];
222 _xtalHitsMax[_nXtalsHit] = _xtalHitsMax[_arrayIndx];
223 xRef[_arrayIndx] = _nXtalsHit;
224
225 _nXtalsHit++;
226 }
227 }
228
229 successful = _matrixM->reduce_Matrix( xRef );
230
231 delete[] xRef;
232
233 return successful;
234}

◆ reset()

void EmcBhaCalibData::reset ( )

Definition at line 236 of file EmcBhaCalibData.cxx.

236 {
237 _nXtalsHit = 0;
238 _matrixM->reset();
239
240 for ( int i = 0; i < _nXtals; i++ )
241 {
242 _vectorR[i] = 0.;
243 _xtalInd[i] = i;
244 _xtalHits[i] = 0;
245 _xtalHitsMax[i] = 0;
246 }
247}

◆ vectorR()

double & EmcBhaCalibData::vectorR ( int ind)
inline

Definition at line 81 of file EmcBhaCalibData.h.

81{ return ( _vectorR[ind] ); }

◆ writeOut()

void EmcBhaCalibData::writeOut ( ostream & OutM,
ostream & outV )

Definition at line 128 of file EmcBhaCalibData.cxx.

128 {
129
130 // write only non zero elements to file
131 OutM.setf( ios::scientific, ios::floatfield );
132 OutV.setf( ios::scientific, ios::floatfield );
133 OutV.precision( 12 );
134 OutM.precision( 12 );
135
136 _matrixM->writeOut( OutM );
137
138 _nXtalsHit = 0;
139
140 double* vect_ele = _vectorR;
141 double* vect_end = _vectorR + _nXtals;
142 int* xtal_ind = _xtalInd;
143 int* hits_max = _xtalHitsMax;
144 int* hits = _xtalHits;
145
146 while ( vect_ele < vect_end )
147 {
148 if ( *vect_ele != 0. ) { _nXtalsHit++; }
149 vect_ele++;
150 }
151
152 OutV << _nXtalsHit << " ";
153
154 vect_ele = _vectorR;
155
156 while ( vect_ele < vect_end )
157 {
158 if ( *vect_ele != 0. )
159 { OutV << *xtal_ind << " " << *hits << " " << *hits_max << " " << *vect_ele << " "; }
160 xtal_ind++;
161 vect_ele++;
162 hits_max++;
163 hits++;
164 }
165}

◆ xtalHits()

int & EmcBhaCalibData::xtalHits ( int ind)
inline

Definition at line 94 of file EmcBhaCalibData.h.

94{ return ( _xtalHits[ind] ); }

◆ xtalHitsDir()

int & EmcBhaCalibData::xtalHitsDir ( int ind)
inline

Definition at line 96 of file EmcBhaCalibData.h.

96{ return ( _xtalHitsMax[ind] ); }

◆ xtalInd()

int EmcBhaCalibData::xtalInd ( int ind)
inline

Definition at line 87 of file EmcBhaCalibData.h.

87{ return ( _xtalInd[ind] ); }

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