Back to home page

Project CMSSW displayed by LXR

 
 

    


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 //Comparison with the -1 value from LHC when crossing angle is not set
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 }