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;
}