Back to home page

Project CMSSW displayed by LXR

 
 

    


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   //double tdcd = TDCRawInfo.ttcL1Atime() - TDCRawInfo.beamCoincidence();
0040   double tdcd = TDCRawInfo.ttcL1Atime() - TDCRawInfo.BeamCoincidenceHits(0);
0041 
0042   if (  //!tdcRangeErrorMessageAlreadyDisplayed_  &&
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   //   if (use2004OffsetConvention)
0055   //  offset = (1. - offset) ;
0056   return EcalTBTDCRecInfo(offset);
0057 }