CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/CalibTracker/SiStripAPVAnalysis/src/MedianCommonModeCalculator.cc

Go to the documentation of this file.
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 }