File indexing completed on 2023-03-17 11:12:38
0001 #include "CPPFCluster.h"
0002 #include <iostream>
0003 #include <fstream>
0004 #include <cmath>
0005
0006 using namespace std;
0007
0008 CPPFCluster::CPPFCluster()
0009 : fstrip(0), lstrip(0), bunchx(0), sumTime(0), sumTime2(0), nTime(0), sumY(0), sumY2(0), nY(0) {}
0010
0011 CPPFCluster::CPPFCluster(int fs, int ls, int bx)
0012 : fstrip(fs), lstrip(ls), bunchx(bx), sumTime(0), sumTime2(0), nTime(0), sumY(0), sumY2(0), nY(0) {}
0013
0014 CPPFCluster::~CPPFCluster() {}
0015
0016 int CPPFCluster::firstStrip() const { return fstrip; }
0017 int CPPFCluster::lastStrip() const { return lstrip; }
0018 int CPPFCluster::clusterSize() const { return lstrip - fstrip + 1; }
0019 int CPPFCluster::bx() const { return bunchx; }
0020
0021 bool CPPFCluster::hasTime() const { return nTime > 0; }
0022 float CPPFCluster::time() const { return hasTime() ? sumTime / nTime : 0; }
0023 float CPPFCluster::timeRMS() const {
0024 return hasTime() ? sqrt(max(0.F, sumTime2 * nTime - sumTime * sumTime)) / nTime : -1;
0025 }
0026
0027 bool CPPFCluster::hasY() const { return nY > 0; }
0028 float CPPFCluster::y() const { return hasY() ? sumY / nY : 0; }
0029 float CPPFCluster::yRMS() const { return hasY() ? sqrt(max(0.F, sumY2 * nY - sumY * sumY)) / nY : -1; }
0030
0031 bool CPPFCluster::isAdjacent(const CPPFCluster& cl) const {
0032 return ((cl.firstStrip() == this->firstStrip() - 1) && (cl.bx() == this->bx()));
0033 }
0034
0035 void CPPFCluster::addTime(const float time) {
0036 ++nTime;
0037 sumTime += time;
0038 sumTime2 += time * time;
0039 }
0040
0041 void CPPFCluster::addY(const float y) {
0042 ++nY;
0043 sumY += y;
0044 sumY2 += y * y;
0045 }
0046
0047 void CPPFCluster::merge(const CPPFCluster& cl) {
0048 if (!this->isAdjacent(cl))
0049 return;
0050
0051 fstrip = cl.firstStrip();
0052
0053 nTime += cl.nTime;
0054 sumTime += cl.sumTime;
0055 sumTime2 += cl.sumTime2;
0056
0057 nY += cl.nY;
0058 sumY += cl.sumY;
0059 sumY2 += cl.sumY2;
0060 }
0061
0062 bool CPPFCluster::operator<(const CPPFCluster& cl) const {
0063 if (cl.bx() == this->bx())
0064 return cl.firstStrip() < this->firstStrip();
0065
0066 return cl.bx() < this->bx();
0067 }
0068
0069 bool CPPFCluster::operator==(const CPPFCluster& cl) const {
0070 return ((this->clusterSize() == cl.clusterSize()) && (this->bx() == cl.bx()) &&
0071 (this->firstStrip() == cl.firstStrip()));
0072 }