File indexing completed on 2024-04-06 12:27:57
0001 #include "RecoTBCalo/EcalTBTDCReconstructor/interface/EcalTBTDCRecInfoAlgo.h"
0002 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0003
0004 #include <list>
0005 #include <iostream>
0006
0007 EcalTBTDCRecInfoAlgo::EcalTBTDCRecInfoAlgo(const std::vector<EcalTBTDCRanges>& tdcRanges)
0008 : tdcRanges_(tdcRanges), tdcRangeErrorMessageAlreadyDisplayed_(false), actualRun_(-1), actualRange_(-1) {}
0009
0010 EcalTBTDCRecInfo EcalTBTDCRecInfoAlgo::reconstruct(const EcalTBTDCRawInfo& TDCRawInfo,
0011 const EcalTBEventHeader& eventHeader,
0012 bool use2004OffsetConvention) const {
0013 if (actualRun_ != eventHeader.runNumber()) {
0014 actualRun_ = eventHeader.runNumber();
0015 actualRange_ = -1;
0016 for (unsigned int i = 0; i < tdcRanges_.size(); i++)
0017 if (eventHeader.runNumber() <= tdcRanges_[i].runRanges.second &&
0018 eventHeader.runNumber() >= tdcRanges_[i].runRanges.first)
0019 actualRange_ = i;
0020
0021 if (actualRange_ == -1) {
0022 edm::LogError("TDCRange not found") << "TDC range not found";
0023 return EcalTBTDCRecInfo(-1);
0024 }
0025 }
0026
0027 int eventType;
0028 eventType = ((eventHeader.dbEventType() == 0) ? 0 : (eventHeader.dbEventType() - 1));
0029
0030 int tdcd = TDCRawInfo[0].tdcValue();
0031
0032 if (!tdcRangeErrorMessageAlreadyDisplayed_ &&
0033 (tdcd < tdcRanges_[actualRange_].tdcMin[eventType] || tdcd > tdcRanges_[actualRange_].tdcMax[eventType])) {
0034 std::cout << " ============================" << std::endl;
0035 std::cout << " Event type: " << eventType << std::endl;
0036 std::cout << " TDC values not correctly set Raw TDC = " << tdcd
0037 << " (Min/Max = " << tdcRanges_[actualRange_].tdcMin[eventType] << "/"
0038 << tdcRanges_[actualRange_].tdcMax[eventType] << std::endl;
0039 std::cout << " ============================" << std::endl;
0040 tdcRangeErrorMessageAlreadyDisplayed_ = true;
0041 }
0042
0043 double offset =
0044 ((double)tdcd - (double)tdcRanges_[actualRange_].tdcMin[eventType]) /
0045 ((double)tdcRanges_[actualRange_].tdcMax[eventType] - (double)tdcRanges_[actualRange_].tdcMin[eventType]);
0046 if (use2004OffsetConvention)
0047 offset = (1. - offset);
0048 return EcalTBTDCRecInfo(offset);
0049 }