File indexing completed on 2024-04-06 11:57:53
0001
0002
0003
0004
0005
0006
0007 #include <CalibCalorimetry/EcalLaserAnalyzer/interface/TPNPulse.h>
0008
0009 #include <TMath.h>
0010 #include <iostream>
0011 #include <cassert>
0012 using namespace std;
0013
0014
0015
0016
0017 TPNPulse::TPNPulse() { init(50, 6); }
0018
0019
0020 TPNPulse::TPNPulse(int nsamples, int presample) { init(nsamples, presample); }
0021
0022
0023 TPNPulse::~TPNPulse() {}
0024
0025 void TPNPulse::init(int nsamples, int presample) {
0026 _nsamples = 50;
0027 assert(nsamples == _nsamples);
0028 assert(presample != 0);
0029 adc_ = new double[50];
0030
0031 _presample = presample;
0032
0033 for (int i = 0; i < _nsamples; i++) {
0034 adc_[i] = 0.0;
0035 }
0036
0037 adcMax_ = 0;
0038 iadcMax_ = 0;
0039 pedestal_ = 0;
0040
0041 isMaxFound_ = false;
0042 isPedCalc_ = false;
0043 }
0044
0045 bool TPNPulse::setPulse(double *adc) {
0046 bool done = false;
0047 adc_ = adc;
0048 done = true;
0049 isMaxFound_ = false;
0050 isPedCalc_ = false;
0051 return done;
0052 }
0053 double TPNPulse::getMax() {
0054 if (isMaxFound_)
0055 return adcMax_;
0056
0057 int iadcmax = 0;
0058 double adcmax = 0.0;
0059 for (int i = 0; i < _nsamples; i++) {
0060 if (adc_[i] > adcmax) {
0061 iadcmax = i;
0062 adcmax = adc_[i];
0063 }
0064 }
0065 iadcMax_ = iadcmax;
0066 adcMax_ = adcmax;
0067 return adcMax_;
0068 }
0069
0070 int TPNPulse::getMaxSample() {
0071 if (!isMaxFound_)
0072 getMax();
0073 return iadcMax_;
0074 }
0075
0076 double TPNPulse::getPedestal() {
0077 if (isPedCalc_)
0078 return pedestal_;
0079 double ped = 0;
0080 for (int i = 0; i < _presample; i++) {
0081 ped += adc_[i];
0082 }
0083 ped /= double(_presample);
0084 pedestal_ = ped;
0085 isPedCalc_ = true;
0086 return pedestal_;
0087 }
0088
0089 double *TPNPulse::getAdcWithoutPedestal() {
0090 double ped;
0091 if (!isPedCalc_)
0092 ped = getPedestal();
0093 else
0094 ped = pedestal_;
0095
0096 double *adcNoPed = new double[50];
0097 for (int i = 0; i < _nsamples; i++) {
0098 adcNoPed[i] = adc_[i] - ped;
0099 }
0100 return adcNoPed;
0101 }
0102
0103 void TPNPulse::setPresamples(int presample) {
0104 isPedCalc_ = false;
0105 _presample = presample;
0106 }