Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

EmcBhaCalibData Class Reference

#include <EmcBhaCalibData.h>

List of all members.

Public Member Functions

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

Private Attributes

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


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.);


Constructor & Destructor Documentation

EmcBhaCalibData::EmcBhaCalibData int  numxtals  ) 
 

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
 

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  ) 
 

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 }

EmcBhaCalibData::EmcBhaCalibData int  numxtals  ) 
 

EmcBhaCalibData::EmcBhaCalibData int  numxtals,
int  MsgFlag
 

EmcBhaCalibData::~EmcBhaCalibData  ) 
 


Member Function Documentation

EmcLSSMatrix* EmcBhaCalibData::getMatrixM  )  [inline]
 

00081 { return _matrixM; }

EmcLSSMatrix* EmcBhaCalibData::getMatrixM  )  [inline]
 

00081 { return _matrixM; }

double* EmcBhaCalibData::getVectorR  )  [inline]
 

00087 { return _vectorR; }

double* EmcBhaCalibData::getVectorR  )  [inline]
 

00087 { return _vectorR; }

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

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

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

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

int& EmcBhaCalibData::nXtals  )  [inline]
 

00093 { return _nXtals; }

int& EmcBhaCalibData::nXtals  )  [inline]
 

00093 { return _nXtals; }

int& EmcBhaCalibData::nXtalsHit  )  [inline]
 

00095 { return _nXtalsHit; }

int& EmcBhaCalibData::nXtalsHit  )  [inline]
 

00095 { return _nXtalsHit; }

void EmcBhaCalibData::printVec int  number  ) 
 

void EmcBhaCalibData::printVec int  number  ) 
 

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
 

void EmcBhaCalibData::readIn istream InM,
istream InV
 

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  ) 
 

bool EmcBhaCalibData::reduce  ) 
 

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  ) 
 

void EmcBhaCalibData::reset  ) 
 

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

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

00084 { return (_vectorR[ind]); }

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

00084 { return (_vectorR[ind]); }

void EmcBhaCalibData::writeOut ostream OutM,
ostream outV
 

void EmcBhaCalibData::writeOut ostream OutM,
ostream outV
 

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]
 

00097 { return (_xtalHits[ind]); }

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

00097 { return (_xtalHits[ind]); }

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

00099 { return (_xtalHitsMax[ind]); }

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

00099 { return (_xtalHitsMax[ind]); }

int EmcBhaCalibData::xtalInd int  ind  )  [inline]
 

00090 { return (_xtalInd[ind]); }

int EmcBhaCalibData::xtalInd int  ind  )  [inline]
 

00090 { return (_xtalInd[ind]); }


Member Data Documentation

EmcLSSMatrix* EmcBhaCalibData::_matrixM [private]
 

EmcLSSMatrix* EmcBhaCalibData::_matrixM [private]
 

int EmcBhaCalibData::_MsgFlag [private]
 

int EmcBhaCalibData::_nXtals [private]
 

int EmcBhaCalibData::_nXtalsHit [private]
 

double* EmcBhaCalibData::_vectorR [private]
 

double* EmcBhaCalibData::_vectorR [private]
 

int* EmcBhaCalibData::_xtalHits [private]
 

int* EmcBhaCalibData::_xtalHits [private]
 

int* EmcBhaCalibData::_xtalHitsMax [private]
 

int* EmcBhaCalibData::_xtalHitsMax [private]
 

int* EmcBhaCalibData::_xtalInd [private]
 

int* EmcBhaCalibData::_xtalInd [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:01:08 2011 for BOSS6.5.5 by  doxygen 1.3.9.1