File indexing completed on 2024-04-06 12:03:19
0001 #include "CondTools/RunInfo/interface/LHCInfoCombined.h"
0002 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0003
0004 LHCInfoCombined::LHCInfoCombined(const LHCInfo& lhcInfo) { setFromLHCInfo(lhcInfo); }
0005
0006 LHCInfoCombined::LHCInfoCombined(const LHCInfoPerLS& infoPerLS, const LHCInfoPerFill& infoPerFill) {
0007 setFromPerLS(infoPerLS);
0008 setFromPerFill(infoPerFill);
0009 }
0010
0011 LHCInfoCombined::LHCInfoCombined(const edm::EventSetup& iSetup,
0012 const edm::ESGetToken<LHCInfoPerLS, LHCInfoPerLSRcd>& tokenInfoPerLS,
0013 const edm::ESGetToken<LHCInfoPerFill, LHCInfoPerFillRcd>& tokenInfoPerFill,
0014 const edm::ESGetToken<LHCInfo, LHCInfoRcd>& tokenInfo,
0015 bool useNewLHCInfo) {
0016 if (useNewLHCInfo) {
0017 edm::ESHandle<LHCInfoPerLS> hLHCInfoPerLS = iSetup.getHandle(tokenInfoPerLS);
0018 edm::ESHandle<LHCInfoPerFill> hLHCInfoFill = iSetup.getHandle(tokenInfoPerFill);
0019 setFromPerLS(*hLHCInfoPerLS);
0020 setFromPerFill(*hLHCInfoFill);
0021 } else {
0022 edm::ESHandle<LHCInfo> hLHCInfo = iSetup.getHandle(tokenInfo);
0023 setFromLHCInfo(*hLHCInfo);
0024 }
0025 }
0026
0027 void LHCInfoCombined::setFromLHCInfo(const LHCInfo& lhcInfo) {
0028 crossingAngleX = lhcInfo.crossingAngle();
0029 crossingAngleY = 0;
0030 betaStarX = lhcInfo.betaStar();
0031 betaStarY = lhcInfo.betaStar();
0032 energy = lhcInfo.energy();
0033 fillNumber = lhcInfo.fillNumber();
0034 }
0035 void LHCInfoCombined::setFromPerLS(const LHCInfoPerLS& infoPerLS) {
0036 crossingAngleX = infoPerLS.crossingAngleX();
0037 crossingAngleY = infoPerLS.crossingAngleY();
0038 betaStarX = infoPerLS.betaStarX();
0039 betaStarY = infoPerLS.betaStarY();
0040 }
0041 void LHCInfoCombined::setFromPerFill(const LHCInfoPerFill& infoPerFill) {
0042 energy = infoPerFill.energy();
0043 fillNumber = infoPerFill.fillNumber();
0044 }
0045
0046 float LHCInfoCombined::crossingAngle() const {
0047 if (crossingAngleX == 0. && crossingAngleY == 0.) {
0048 return crossingAngleInvalid;
0049 }
0050 if (crossingAngleX != 0. && crossingAngleY != 0.) {
0051 edm::LogWarning("LHCInfoCombined") << "crossingAngleX and crossingAngleY are both different from 0";
0052 return crossingAngleInvalid;
0053 }
0054 return crossingAngleX == 0. ? crossingAngleY : crossingAngleX;
0055 }
0056
0057
0058 bool LHCInfoCombined::isCrossingAngleInvalid() {
0059 float comparisonTolerance = 1e-6;
0060 return fabs(crossingAngle() - crossingAngleInvalid) <= comparisonTolerance;
0061 }
0062
0063 void LHCInfoCombined::print(std::ostream& os) const {
0064 os << "Crossing angle x (urad): " << crossingAngleX << std::endl
0065 << "Crossing angle y (urad): " << crossingAngleY << std::endl
0066 << "Beta star x (m): " << betaStarX << std::endl
0067 << "Beta star y (m): " << betaStarY << std::endl
0068 << "Energy (GeV): " << energy << std::endl;
0069 }
0070
0071 std::ostream& operator<<(std::ostream& os, LHCInfoCombined beamInfo) {
0072 beamInfo.print(os);
0073 return os;
0074 }