Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:04:40

0001 #include "DataFormats/Luminosity/interface/LumiInfoRunHeader.h"
0002 
0003 LumiInfoRunHeader::LumiInfoRunHeader(std::string& lumiProvider,
0004                                      std::string& fillingSchemeName,
0005                                      std::bitset<LumiConstants::numBX>& fillingScheme)
0006     : lumiProvider_(lumiProvider), fillingSchemeName_(fillingSchemeName), fillingScheme_(fillingScheme) {
0007   setBunchSpacing();
0008 }
0009 
0010 bool LumiInfoRunHeader::isProductEqual(LumiInfoRunHeader const& o) const {
0011   return (lumiProvider_ == o.lumiProvider_ && fillingSchemeName_ == o.fillingSchemeName_ &&
0012           fillingScheme_ == o.fillingScheme_);
0013 }
0014 
0015 //==============================================================================
0016 
0017 void LumiInfoRunHeader::setFillingScheme(const std::bitset<LumiConstants::numBX>& fillingScheme) {
0018   fillingScheme_ = fillingScheme;
0019   setBunchSpacing();
0020 }
0021 
0022 // This function determines the bunch spacing from the filling scheme
0023 // and sets bunchSpacing_ accordingly.
0024 
0025 void LumiInfoRunHeader::setBunchSpacing(void) {
0026   int lastFilledBunch = -1;
0027   int minimumSpacingFound = LumiConstants::numBX;
0028 
0029   for (unsigned int i = 0; i < LumiConstants::numBX; i++) {
0030     if (fillingScheme_[i]) {
0031       if (lastFilledBunch >= 0) {
0032         int thisSpacing = i - lastFilledBunch;
0033         if (thisSpacing < minimumSpacingFound)
0034           minimumSpacingFound = thisSpacing;
0035       }
0036       lastFilledBunch = i;
0037     }
0038   }
0039 
0040   // If no bunches are filled, then just leave bunchSpacing at 0
0041   if (lastFilledBunch == -1)
0042     bunchSpacing_ = 0;
0043   else
0044     bunchSpacing_ = LumiConstants::bxSpacingInt * minimumSpacingFound;
0045 }