EmcBhaCalibData Class Reference

#include <EmcBhaCalibData.h>

List of all members.

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)

Private Attributes

EmcLSSMatrix_matrixM
double * _vectorR
int * _xtalInd
int _nXtals
int _nXtalsHit
int * _xtalHits
int * _xtalHitsMax
int _MsgFlag


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 63 of file EmcBhaCalibData.h.


Constructor & Destructor Documentation

EmcBhaCalibData::EmcBhaCalibData ( int  numxtals  ) 

Definition at line 48 of file EmcBhaCalibData.cxx.

References _matrixM, _MsgFlag, _nXtals, _vectorR, _xtalHits, _xtalHitsMax, _xtalInd, and genRecEmupikp::i.

00049   : _nXtals(numxtals),
00050     _nXtalsHit(0)
00051 {
00052   //  _matrixM = new EmcLSSMatrix(_nXtals,600);
00053   _matrixM = new EmcLSSMatrix(_nXtals,_nXtals);
00054   _vectorR = new double[_nXtals];
00055   _xtalInd = new int[_nXtals];
00056   _xtalHits = new int[_nXtals];
00057   _xtalHitsMax = new int[_nXtals];
00058   for (int i=0;i<_nXtals;i++) {
00059     _vectorR[i] = 0.;
00060     _xtalInd[i] = i;  
00061     _xtalHits[i] = 0;
00062     _xtalHitsMax[i] = 0;
00063   }
00064   _MsgFlag =0;
00065 }

EmcBhaCalibData::EmcBhaCalibData ( int  numxtals,
int  MsgFlag 
)

Definition at line 70 of file EmcBhaCalibData.cxx.

References _matrixM, _MsgFlag, _nXtals, _vectorR, _xtalHits, _xtalHitsMax, _xtalInd, and genRecEmupikp::i.

00071   : _nXtals(numxtals),
00072     _nXtalsHit(0)
00073 {
00074   //  _matrixM = new EmcLSSMatrix(_nXtals,600);
00075   _matrixM = new EmcLSSMatrix(_nXtals,_nXtals, MsgFlag);
00076   _vectorR = new double[_nXtals];
00077   _xtalInd = new int[_nXtals];
00078   _xtalHits = new int[_nXtals];
00079   _xtalHitsMax = new int[_nXtals];
00080   for (int i=0;i<_nXtals;i++) {
00081     _vectorR[i] = 0.;
00082     _xtalInd[i] = i;
00083     _xtalHits[i] = 0;
00084     _xtalHitsMax[i] = 0;
00085   }
00086 
00087   _MsgFlag = MsgFlag;
00088 }

EmcBhaCalibData::~EmcBhaCalibData (  ) 

Definition at line 93 of file EmcBhaCalibData.cxx.

References _matrixM, _vectorR, _xtalHits, _xtalHitsMax, and _xtalInd.

00093                                   {
00094   if ( 0 != _matrixM) {
00095     delete _matrixM; 
00096     _matrixM = 0;
00097   }
00098   if ( 0 != _vectorR) {
00099     delete[] _vectorR;
00100     _vectorR = 0;
00101   }
00102   if ( 0 != _xtalInd) {
00103     delete[] _xtalInd;
00104     _xtalInd = 0;
00105   }
00106   if ( 0 != _xtalHits) {
00107     delete[] _xtalHits;
00108     _xtalHits = 0;
00109   }
00110   if ( 0 != _xtalHitsMax) {
00111     delete[] _xtalHitsMax;
00112     _xtalHitsMax = 0;
00113   }
00114 }


Member Function Documentation

EmcLSSMatrix* EmcBhaCalibData::getMatrixM (  )  [inline]

Definition at line 81 of file EmcBhaCalibData.h.

References _matrixM.

Referenced by EmcBhaCalib::readInFromFile(), and EmcBhaCalib::solveEqua().

00081 { return _matrixM; }

double* EmcBhaCalibData::getVectorR (  )  [inline]

Definition at line 87 of file EmcBhaCalibData.h.

References _vectorR.

Referenced by EmcBhaCalib::solveEqua().

00087 { return _vectorR; }

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

Definition at line 77 of file EmcBhaCalibData.h.

References _matrixM.

Referenced by EmcSelBhaEvent::fillMatrix().

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

int& EmcBhaCalibData::nXtals (  )  [inline]

Definition at line 93 of file EmcBhaCalibData.h.

References _nXtals.

Referenced by EmcBhaCalib::digiConstCor(), EmcBhaCalib::execute(), EmcBhaCalib::initCalibConst(), EmcBhaCalib::prepareConstants(), EmcBhaCalib::readInFromFile(), EmcBhaCalib::solveEqua(), and EmcBhaCalib::writeOutConst().

00093 { return _nXtals; }

int& EmcBhaCalibData::nXtalsHit (  )  [inline]

Definition at line 95 of file EmcBhaCalibData.h.

References _nXtalsHit.

Referenced by EmcBhaCalib::execute(), EmcBhaCalib::ntupleOut(), EmcBhaCalib::prepareConstants(), EmcBhaCalib::printInfo(), EmcBhaCalib::readInFromFile(), EmcBhaCalib::solveEqua(), and EmcBhaCalib::writeOutConst().

00095 { return _nXtalsHit; }

void EmcBhaCalibData::printVec ( int  number  ) 

Definition at line 265 of file EmcBhaCalibData.cxx.

References _MsgFlag, _vectorR, _xtalHits, and _xtalHitsMax.

Referenced by EmcBhaCalib::execute().

00265                                     {
00266 
00267   if (_MsgFlag <= 3) {
00268     std::cout << "EmcBhaCalibData:: INFO "<< "R ( " << number << " ): " << _vectorR[number] 
00269         << "  hits: " << _xtalHits[number] 
00270         << "  direct hits: " << _xtalHitsMax[number]
00271         << endl;
00272   }
00273 }

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

Definition at line 174 of file EmcBhaCalibData.cxx.

References _matrixM, _nXtalsHit, _vectorR, _xtalHits, _xtalHitsMax, _xtalInd, hits_max, genRecEmupikp::i, EmcLSSMatrix::print_NonZeros(), and EmcLSSMatrix::readIn().

Referenced by EmcBhaCalib::readInFromFile().

00174                                                    {
00175 
00176   _matrixM->readIn( InM );
00177   
00178   _matrixM->print_NonZeros();
00179 
00180   //cout<<"num_filled_rows(48)="<<_matrixM->num_filled_rows(48)<<endl;
00181   //cout<<"num_filled_cols(48)="<<_matrixM->num_filled_cols(48)<<endl;
00182 
00183   //cout<<"matrix(47,47)"<<_matrixM->operator()(47,47)<<endl;
00184 
00185   double vect_ele;
00186   int nr_ele;
00187   int xtal_ind;
00188   int hits;
00189   int hits_max;
00190 
00191   InV >> nr_ele;
00192 
00193   for (int i=0; i<nr_ele; i++) {
00194 
00195     InV >> xtal_ind >> hits >> hits_max
00196         >> vect_ele ;
00197 
00198     if (_vectorR[xtal_ind] == 0. ) {
00199       _nXtalsHit++;
00200     }
00201     
00202     _vectorR[xtal_ind] += vect_ele ;
00203     _xtalInd[xtal_ind] = xtal_ind;
00204     _xtalHits[xtal_ind] += hits;
00205     _xtalHitsMax[xtal_ind] += hits_max;
00206 
00207  }
00208 
00209 }

bool EmcBhaCalibData::reduce (  ) 

Definition at line 212 of file EmcBhaCalibData.cxx.

References _matrixM, _nXtals, _nXtalsHit, _vectorR, _xtalHits, _xtalHitsMax, _xtalInd, and EmcLSSMatrix::reduce_Matrix().

Referenced by EmcBhaCalib::execute().

00212                         {
00213 
00214   bool successful = true;
00215 
00216   //delete all zero elements in matrix and vector R
00217   //save only non zero elements (this format is needed by slap),
00218   //keep the original xtal index in array xtalInd
00219 
00220   //array to store the new row/column reference for later matrix reduction 
00221   int* xRef = new int[_nXtals];
00222   memset(xRef, -1, (_nXtals*sizeof(int)));
00223 
00224   _nXtalsHit = 0;
00225   for ( int _arrayIndx = 0; 
00226         _arrayIndx < _nXtals; _arrayIndx++) {
00227 
00228     if ( _vectorR[_arrayIndx] > 0. ) {
00229 
00230       _vectorR[_nXtalsHit] = _vectorR[_arrayIndx];
00231       _xtalInd[_nXtalsHit] = _xtalInd[_arrayIndx];
00232       _xtalHits[_nXtalsHit] = _xtalHits[_arrayIndx];
00233       _xtalHitsMax[_nXtalsHit] = _xtalHitsMax[_arrayIndx];
00234       xRef[_arrayIndx] = _nXtalsHit;
00235 
00236       _nXtalsHit++;
00237     }
00238   }
00239 
00240   successful = _matrixM->reduce_Matrix( xRef );
00241 
00242   delete [] xRef;
00243 
00244   return successful;
00245 }

void EmcBhaCalibData::reset (  ) 

Definition at line 249 of file EmcBhaCalibData.cxx.

References _matrixM, _nXtals, _nXtalsHit, _vectorR, _xtalHits, _xtalHitsMax, _xtalInd, genRecEmupikp::i, and EmcLSSMatrix::reset().

00250 {
00251   _nXtalsHit = 0;
00252   _matrixM->reset();
00253 
00254   for (int i=0;i<_nXtals;i++) {
00255     _vectorR[i]= 0.;
00256     _xtalInd[i] = i;
00257     _xtalHits[i] = 0;
00258     _xtalHitsMax[i] = 0;
00259   }
00260 
00261 }

double& EmcBhaCalibData::vectorR ( int  ind  )  [inline]

Definition at line 84 of file EmcBhaCalibData.h.

References _vectorR.

Referenced by EmcSelBhaEvent::fillMatrix().

00084 { return (_vectorR[ind]); }

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

Definition at line 130 of file EmcBhaCalibData.cxx.

References _matrixM, _nXtals, _nXtalsHit, _vectorR, _xtalHits, _xtalHitsMax, _xtalInd, hits_max, and EmcLSSMatrix::writeOut().

Referenced by EmcSelBhaEvent::OutputMV(), and EmcBhaCalib::writeOut().

00130                                                        {
00131 
00132   //write only non zero elements to file
00133   OutM.setf(ios::scientific,ios::floatfield);
00134   OutV.setf(ios::scientific,ios::floatfield);
00135   OutV.precision(12);
00136   OutM.precision(12);
00137 
00138   _matrixM->writeOut( OutM );
00139 
00140   _nXtalsHit = 0;
00141 
00142   double* vect_ele = _vectorR;
00143   double* vect_end = _vectorR + _nXtals;
00144   int* xtal_ind = _xtalInd;
00145   int* hits_max = _xtalHitsMax;
00146   int* hits = _xtalHits;
00147 
00148   while ( vect_ele < vect_end ) {
00149     if ( *vect_ele != 0.  ){
00150       _nXtalsHit++;
00151     }
00152     vect_ele++;
00153   }
00154 
00155   OutV << _nXtalsHit << " ";
00156 
00157   vect_ele = _vectorR;
00158 
00159   while ( vect_ele < vect_end ) {
00160     if ( *vect_ele != 0. ) {
00161       OutV << *xtal_ind << " " << *hits << " " << *hits_max << " " 
00162            << *vect_ele << " ";
00163     }
00164     xtal_ind++;
00165     vect_ele++;
00166     hits_max++;
00167     hits++;
00168   }
00169 
00170 }

int& EmcBhaCalibData::xtalHits ( int  ind  )  [inline]

Definition at line 97 of file EmcBhaCalibData.h.

References _xtalHits.

Referenced by EmcSelBhaEvent::fillMatrix().

00097 { return (_xtalHits[ind]); }

int& EmcBhaCalibData::xtalHitsDir ( int  ind  )  [inline]

Definition at line 99 of file EmcBhaCalibData.h.

References _xtalHitsMax.

Referenced by EmcSelBhaEvent::fillMatrix(), EmcBhaCalib::ntupleOut(), EmcBhaCalib::prepareConstants(), EmcBhaCalib::printInfo(), EmcBhaCalib::readInFromFile(), and EmcBhaCalib::writeOutConst().

00099 { return (_xtalHitsMax[ind]); }

int EmcBhaCalibData::xtalInd ( int  ind  )  [inline]

Definition at line 90 of file EmcBhaCalibData.h.

References _xtalInd.

Referenced by EmcBhaCalib::execute(), EmcBhaCalib::ntupleOut(), EmcBhaCalib::prepareConstants(), EmcBhaCalib::printInfo(), and EmcBhaCalib::writeOutConst().

00090 { return (_xtalInd[ind]); }


Member Data Documentation

EmcLSSMatrix* EmcBhaCalibData::_matrixM [private]

Definition at line 122 of file EmcBhaCalibData.h.

Referenced by EmcBhaCalibData(), getMatrixM(), matrixMEle(), readIn(), reduce(), reset(), writeOut(), and ~EmcBhaCalibData().

int EmcBhaCalibData::_MsgFlag [private]

Definition at line 137 of file EmcBhaCalibData.h.

Referenced by EmcBhaCalibData(), and printVec().

int EmcBhaCalibData::_nXtals [private]

Definition at line 129 of file EmcBhaCalibData.h.

Referenced by EmcBhaCalibData(), nXtals(), reduce(), reset(), and writeOut().

int EmcBhaCalibData::_nXtalsHit [private]

Definition at line 131 of file EmcBhaCalibData.h.

Referenced by nXtalsHit(), readIn(), reduce(), reset(), and writeOut().

double* EmcBhaCalibData::_vectorR [private]

Definition at line 124 of file EmcBhaCalibData.h.

Referenced by EmcBhaCalibData(), getVectorR(), printVec(), readIn(), reduce(), reset(), vectorR(), writeOut(), and ~EmcBhaCalibData().

int* EmcBhaCalibData::_xtalHits [private]

Definition at line 133 of file EmcBhaCalibData.h.

Referenced by EmcBhaCalibData(), printVec(), readIn(), reduce(), reset(), writeOut(), xtalHits(), and ~EmcBhaCalibData().

int* EmcBhaCalibData::_xtalHitsMax [private]

Definition at line 135 of file EmcBhaCalibData.h.

Referenced by EmcBhaCalibData(), printVec(), readIn(), reduce(), reset(), writeOut(), xtalHitsDir(), and ~EmcBhaCalibData().

int* EmcBhaCalibData::_xtalInd [private]

Definition at line 126 of file EmcBhaCalibData.h.

Referenced by EmcBhaCalibData(), readIn(), reduce(), reset(), writeOut(), xtalInd(), and ~EmcBhaCalibData().


Generated on Tue Nov 29 23:18:38 2016 for BOSS_7.0.2 by  doxygen 1.4.7