Back to index

CRichGainCalibrator.C

 
//----------------------------------------------------------------------------- 
//  $Header: /tmp_mnt/asis/offline/ceres/cool/project/RCS/CRichGainCalibrator.C,v 2.1 1996/10/04 08:45:17 voigt Exp $ 
// 
//  COOL Program Library   
//  Copyright (C) CERES collaboration, 1996 
// 
//  Implementation of class CRichGainCalibrator 
// 
//----------------------------------------------------------------------------- 
#include <math.h>   
#include "CRichGainCalibrator.h"  
#include "CRich.h"  
#include "CFittedRing.h" 
#include "CList.h" 
#include "CListIterator.h" 
 
CRichGainCalibrator::CRichGainCalibrator(CRich* newRich)  
{ 
   // 
   // hold pointer to the rich 
   // 
   rich = newRich; 
    
   // 
   // initialize parameters 
   // 
   amplitudeBinsInVector = 100; 
   minAmplitude = 50.0; 
   maxAmplitude = 800.0; 
   minHitsOnRing = 7; 
   maxHitsOnRing = 14; 
    
   // 
   // initialize histogram 
   // 
   amplitudeBinVector.reshape(amplitudeBinsInVector); 
   binWidth = (maxAmplitude - minAmplitude) / amplitudeBinsInVector; 
   reset();    
} 
 
CRichGainCalibrator::~CRichGainCalibrator() { /* nop */ } 
 
void CRichGainCalibrator::update() 
{ 
   // 
   // hits on all rings... 
   // 
   CFittedRing *thisRing; 
   CListIterator<CFittedRing> ringIter(*(rich->getRingList())); 
   int iHit; 
   double index; 
   while (thisRing = ringIter()) { 
      if (isGoodRing(thisRing)) { 
	 for (iHit=0; iHit<thisRing->getHits().length(); iHit++) { 
	    index = (thisRing->getHits()(iHit)->getAmp() - minAmplitude) / binWidth; 
	    if (index >= 0 && index < amplitudeBinsInVector) 
	       amplitudeBinVector(int(index)) += 1.0; 
	 } 
      } 
   } 
   numberOfEvents++; 
} 
 
CBoolean CRichGainCalibrator::isGoodRing(CFittedRing *ring) 
{ 
   if (ring->getHits().length() < minHitsOnRing) return False; 
   if (ring->getHits().length() > maxHitsOnRing) return False; 
    
   return True; 
} 
 
double CRichGainCalibrator::getMeanGain() 
{ 
   double amplitudeInThisBin; 
   double amplitudeSum = 0.0, entrySum = 0.0; 
    
   for (int index=0; index<amplitudeBinsInVector; index++) { 
      amplitudeInThisBin = index * binWidth + minAmplitude; 
      amplitudeSum += amplitudeInThisBin * amplitudeBinVector(int(index)); 
      entrySum += amplitudeBinVector(int(index)); 
   } 
    
   return (amplitudeSum / entrySum - minAmplitude); 
} 
 
void CRichGainCalibrator::reset() 
{ 
   numberOfEvents = 0; 
   amplitudeBinVector = 0.0; 
} 

Back to index