File indexing completed on 2024-04-06 12:27:56
0001 #include "RecoTBCalo/EcalTBTDCReconstructor/interface/EcalTBH2TDCRecInfoAlgo.h"
0002 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0003
0004 #include <list>
0005 #include <vector>
0006 #include <iostream>
0007
0008 EcalTBH2TDCRecInfoAlgo::EcalTBH2TDCRecInfoAlgo(const std::vector<EcalTBH2TDCRanges>& tdcZeros)
0009 : tdcZeros_(tdcZeros), actualRun_(-1), actualRange_(-1) {}
0010
0011 EcalTBTDCRecInfo EcalTBH2TDCRecInfoAlgo::reconstruct(const int& runNumber, const HcalTBTiming& TDCRawInfo) const {
0012 if (actualRun_ != runNumber) {
0013 actualRun_ = runNumber;
0014 actualRange_ = -1;
0015 for (unsigned int i = 0; i < tdcZeros_.size(); i++)
0016 if (runNumber <= tdcZeros_[i].runRanges.second && runNumber >= tdcZeros_[i].runRanges.first)
0017 actualRange_ = i;
0018
0019 if (actualRange_ == -1) {
0020 edm::LogError("TDCRange not found") << "TDC range not found";
0021 return EcalTBTDCRecInfo(-1);
0022 }
0023 }
0024
0025 int ntdc = TDCRawInfo.BeamCoincidenceCount();
0026 edm::LogInfo("") << "EcalTBH2TDCRecInfoAlgo::reconstruct # tdc hits: " << ntdc << std::endl;
0027 ;
0028 if (ntdc > 1) {
0029 for (int i = 0; i < ntdc; ++i) {
0030 edm::LogInfo("") << "hit i: " << i << " tdc: " << TDCRawInfo.BeamCoincidenceHits(i) << std::endl;
0031 }
0032 }
0033
0034 if (ntdc == 0) {
0035 edm::LogError("NoTDCHits") << "no TDC hits. TDC info not reliable" << std::endl;
0036 return EcalTBTDCRecInfo(-999.);
0037 }
0038
0039
0040 double tdcd = TDCRawInfo.ttcL1Atime() - TDCRawInfo.BeamCoincidenceHits(0);
0041
0042 if (
0043 (tdcd < tdcZeros_[actualRange_].tdcZero - 1 || tdcd > tdcZeros_[actualRange_].tdcZero + 26)) {
0044 edm::LogError("TDCOutOfRange") << " ============================\n"
0045 << " tdc value out of range = " << tdcd
0046 << " tdcZero = " << tdcZeros_[actualRange_].tdcZero << "\n"
0047 << " ============================\n"
0048 << std::endl;
0049 tdcRangeErrorMessageAlreadyDisplayed_ = true;
0050 return EcalTBTDCRecInfo(-999.);
0051 }
0052
0053 double offset = ((double)tdcd - (double)tdcZeros_[actualRange_].tdcZero) / 25.;
0054
0055
0056 return EcalTBTDCRecInfo(offset);
0057 }