File indexing completed on 2024-04-06 11:59:39
0001 #include "CalibTracker/SiStripAPVAnalysis/interface/MedianCommonModeCalculator.h"
0002 #include <cmath>
0003
0004 using namespace std;
0005 MedianCommonModeCalculator::MedianCommonModeCalculator()
0006 :
0007
0008 alreadyUsedEvent(false) {
0009 if (false)
0010 cout << "Constructing MedianCommonMode Calculator ..." << endl;
0011
0012 }
0013
0014
0015
0016 MedianCommonModeCalculator::~MedianCommonModeCalculator() {
0017 if (false)
0018 cout << "Destructing TT6CommonModeCalculator " << endl;
0019 }
0020
0021
0022
0023 ApvAnalysis::PedestalType MedianCommonModeCalculator::doIt(const ApvAnalysis::PedestalType& _indat) {
0024 ApvAnalysis::PedestalType indat = _indat;
0025 ApvAnalysis::PedestalType out;
0026 calculateCommonMode(indat);
0027 int setNumber;
0028 if (!theCommonModeValues.empty()) {
0029 for (unsigned int i = 0; i < indat.size(); i++) {
0030 setNumber = theTkCommonMode->topology().setOfStrip(i);
0031 out.push_back(indat[i] - theCommonModeValues[setNumber]);
0032 }
0033 } else {
0034 out = indat;
0035 }
0036 return out;
0037 }
0038
0039
0040
0041 void MedianCommonModeCalculator::calculateCommonMode(ApvAnalysis::PedestalType& indat) {
0042 if (alreadyUsedEvent == false) {
0043 alreadyUsedEvent = true;
0044
0045 theCommonModeValues.clear();
0046
0047 double avVal = 0.0;
0048
0049 sort(indat.begin(), indat.end());
0050
0051 uint16_t index = indat.size() % 2 ? indat.size() / 2 : indat.size() / 2 - 1;
0052 if (!indat.empty()) {
0053 avVal = indat[index];
0054 }
0055
0056 theCommonModeValues.push_back(static_cast<float>(avVal));
0057
0058 MedianCommonModeCalculator::setCM(theCommonModeValues);
0059 }
0060 }
0061
0062
0063
0064
0065 void MedianCommonModeCalculator::newEvent() { alreadyUsedEvent = false; }