![]() |
![]() |
00001 #include "CalibTracker/SiStripAPVAnalysis/interface/MedianCommonModeCalculator.h" 00002 #include <cmath> 00003 00004 using namespace std; 00005 MedianCommonModeCalculator::MedianCommonModeCalculator() : 00006 // theNoiseCalculator(noise_calc), 00007 // theApvMask(mask_calc), 00008 alreadyUsedEvent(false) 00009 { 00010 if (0) cout << "Constructing MedianCommonMode Calculator ..." << endl; 00011 // cutToAvoidSignal = sig_cut; 00012 } 00013 // 00014 // Destructor 00015 // 00016 MedianCommonModeCalculator::~MedianCommonModeCalculator() { 00017 if (0) cout << "Destructing TT6CommonModeCalculator " << endl; 00018 } 00019 // 00020 // Action : 00021 // 00022 ApvAnalysis::PedestalType MedianCommonModeCalculator::doIt 00023 (const ApvAnalysis::PedestalType& _indat) 00024 { 00025 ApvAnalysis::PedestalType indat = _indat; 00026 ApvAnalysis::PedestalType out; 00027 calculateCommonMode(indat); 00028 int setNumber; 00029 if(theCommonModeValues.size() >0) { 00030 for (unsigned int i=0; i<indat.size(); i++){ 00031 setNumber = theTkCommonMode->topology().setOfStrip(i); 00032 out.push_back(indat[i] - theCommonModeValues[setNumber]); 00033 } 00034 }else{ 00035 out = indat; 00036 } 00037 return out; 00038 } 00039 // 00040 // Calculation of Common Mode Values : 00041 // 00042 void MedianCommonModeCalculator::calculateCommonMode(ApvAnalysis::PedestalType& indat) 00043 { 00044 if (alreadyUsedEvent == false) { 00045 alreadyUsedEvent = true; 00046 00047 theCommonModeValues.clear(); 00048 00049 00050 double avVal = 0.0; 00051 00052 sort(indat.begin(),indat.end()); 00053 00054 uint16_t index = indat.size()%2 ? indat.size()/2 : indat.size()/2-1; 00055 if ( !indat.empty() ) { avVal = indat[index]; } 00056 00057 theCommonModeValues.push_back(static_cast<float>(avVal)); 00058 00059 MedianCommonModeCalculator::setCM(theCommonModeValues); 00060 00061 } 00062 00063 } 00064 00065 // 00066 // Define New Event 00067 // 00068 void MedianCommonModeCalculator::newEvent() { 00069 alreadyUsedEvent = false; 00070 }