CMS 3D CMS Logo

BeamSpotOnlineProducer.cc
Go to the documentation of this file.
1 
29 
31 public:
33  explicit BeamSpotOnlineProducer(const edm::ParameterSet& iConf);
34 
36  void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override;
37 
40 
41 private:
42  const bool changeFrame_;
43  const double theMaxZ, theSetSigmaZ;
44  double theMaxR2;
45  const bool useTransientRecord_;
50 
51  const unsigned int theBeamShoutMode;
52 };
53 
54 using namespace edm;
55 
57  : changeFrame_(iconf.getParameter<bool>("changeToCMSCoordinates")),
58  theMaxZ(iconf.getParameter<double>("maxZ")),
59  theSetSigmaZ(iconf.getParameter<double>("setSigmaZ")),
60  useTransientRecord_(iconf.getParameter<bool>("useTransientRecord")),
61  scalerToken_(consumes<BeamSpotOnlineCollection>(iconf.getParameter<InputTag>("src"))),
62  l1GtEvmReadoutRecordToken_(consumes<L1GlobalTriggerEvmReadoutRecord>(iconf.getParameter<InputTag>("gtEvmLabel"))),
65  theBeamShoutMode(iconf.getUntrackedParameter<unsigned int>("beamMode", 11)) {
66  theMaxR2 = iconf.getParameter<double>("maxRadius");
67  theMaxR2 *= theMaxR2;
68 
69  produces<reco::BeamSpot>();
70 }
71 
74  ps.add<bool>("changeToCMSCoordinates", false);
75  ps.add<double>("maxZ", 40.);
76  ps.add<double>("setSigmaZ", -1.);
77  ps.addUntracked<unsigned int>("beamMode", 11);
78  ps.add<InputTag>("src", InputTag("hltScalersRawToDigi"));
79  ps.add<InputTag>("gtEvmLabel", InputTag(""));
80  ps.add<double>("maxRadius", 2.0);
81  ps.add<bool>("useTransientRecord", false);
82  iDesc.addWithDefaultLabel(ps);
83 }
84 
86  // product is a reco::BeamSpot object
87  auto result = std::make_unique<reco::BeamSpot>();
88  reco::BeamSpot aSpot;
89  //shout MODE only in stable beam
90  bool shoutMODE = false;
92  if (iEvent.getByToken(l1GtEvmReadoutRecordToken_, gtEvmReadoutRecord)) {
93  if (gtEvmReadoutRecord->gtfeWord().beamMode() == theBeamShoutMode)
94  shoutMODE = true;
95  } else {
96  shoutMODE = true;
97  }
98  bool fallBackToDB = false;
99  if (useTransientRecord_) {
100  auto const& spotDB = iSetup.getData(beamTransientToken_);
101  if (spotDB.GetBeamType() != 2) {
102  if (shoutMODE) {
103  edm::LogWarning("BeamSpotFromDB")
104  << "Online Beam Spot producer falls back to DB value because the ESProducer returned a fake beamspot ";
105  }
106  fallBackToDB = true;
107  } else {
108  // translate from BeamSpotObjects to reco::BeamSpot
109  // in case we need to switch to LHC reference frame
110  // ignore for the moment rotations, and translations
111  double f = 1.;
112  if (changeFrame_)
113  f = -1.;
114  reco::BeamSpot::Point apoint(f * spotDB.GetX(), f * spotDB.GetY(), f * spotDB.GetZ());
115 
117  for (int i = 0; i < 7; ++i) {
118  for (int j = 0; j < 7; ++j) {
119  matrix(i, j) = spotDB.GetCovariance(i, j);
120  }
121  }
122  double sigmaZ = spotDB.GetSigmaZ();
123  if (theSetSigmaZ > 0)
125 
126  // this assume beam width same in x and y
127  aSpot = reco::BeamSpot(apoint, sigmaZ, spotDB.Getdxdz(), spotDB.Getdydz(), spotDB.GetBeamWidthX(), matrix);
128  aSpot.setBeamWidthY(spotDB.GetBeamWidthY());
129  aSpot.setEmittanceX(spotDB.GetEmittanceX());
130  aSpot.setEmittanceY(spotDB.GetEmittanceY());
131  aSpot.setbetaStar(spotDB.GetBetaStar());
133  }
134  } else {
135  // get scalar collection
137  iEvent.getByToken(scalerToken_, handleScaler);
138 
139  // beam spot scalar object
140  BeamSpotOnline spotOnline;
141 
142  // product is a reco::BeamSpot object
143  auto result = std::make_unique<reco::BeamSpot>();
144 
145  if (!handleScaler->empty()) {
146  // get one element
147  spotOnline = *(handleScaler->begin());
148 
149  // in case we need to switch to LHC reference frame
150  // ignore for the moment rotations, and translations
151  double f = 1.;
152  if (changeFrame_)
153  f = -1.;
154 
155  reco::BeamSpot::Point apoint(f * spotOnline.x(), spotOnline.y(), f * spotOnline.z());
156 
158  matrix(0, 0) = spotOnline.err_x() * spotOnline.err_x();
159  matrix(1, 1) = spotOnline.err_y() * spotOnline.err_y();
160  matrix(2, 2) = spotOnline.err_z() * spotOnline.err_z();
161  matrix(3, 3) = spotOnline.err_sigma_z() * spotOnline.err_sigma_z();
162 
163  double sigmaZ = spotOnline.sigma_z();
164  if (theSetSigmaZ > 0)
166 
167  aSpot = reco::BeamSpot(apoint, sigmaZ, spotOnline.dxdz(), f * spotOnline.dydz(), spotOnline.width_x(), matrix);
168 
169  aSpot.setBeamWidthY(spotOnline.width_y());
170  aSpot.setEmittanceX(0.);
171  aSpot.setEmittanceY(0.);
172  aSpot.setbetaStar(0.);
173  aSpot.setType(reco::BeamSpot::LHC); // flag value from scalars
174 
175  // check if we have a valid beam spot fit result from online DQM
176  if (spotOnline.x() == 0 && spotOnline.y() == 0 && spotOnline.z() == 0 && spotOnline.width_x() == 0 &&
177  spotOnline.width_y() == 0) {
178  if (shoutMODE) {
179  edm::LogWarning("BeamSpotFromDB")
180  << "Online Beam Spot producer falls back to DB value because the scaler values are zero ";
181  }
182  fallBackToDB = true;
183  }
184  double r2 = spotOnline.x() * spotOnline.x() + spotOnline.y() * spotOnline.y();
185  if (std::abs(spotOnline.z()) >= theMaxZ || r2 >= theMaxR2) {
186  if (shoutMODE) {
187  edm::LogError("BeamSpotFromDB")
188  << "Online Beam Spot producer falls back to DB value because the scaler values are too big to be true :"
189  << spotOnline.x() << " " << spotOnline.y() << " " << spotOnline.z();
190  }
191  fallBackToDB = true;
192  }
193  } else {
194  //empty online beamspot collection: FED data was empty
195  //the error should probably have been send at unpacker level
196  fallBackToDB = true;
197  }
198  }
199  if (fallBackToDB) {
201  const BeamSpotObjects* spotDB = beamhandle.product();
202 
203  // translate from BeamSpotObjects to reco::BeamSpot
204  reco::BeamSpot::Point apoint(spotDB->GetX(), spotDB->GetY(), spotDB->GetZ());
205 
207  for (int i = 0; i < 7; ++i) {
208  for (int j = 0; j < 7; ++j) {
209  matrix(i, j) = spotDB->GetCovariance(i, j);
210  }
211  }
212 
213  // this assume beam width same in x and y
214  aSpot = reco::BeamSpot(
215  apoint, spotDB->GetSigmaZ(), spotDB->Getdxdz(), spotDB->Getdydz(), spotDB->GetBeamWidthX(), matrix);
216  aSpot.setBeamWidthY(spotDB->GetBeamWidthY());
217  aSpot.setEmittanceX(spotDB->GetEmittanceX());
218  aSpot.setEmittanceY(spotDB->GetEmittanceY());
219  aSpot.setbetaStar(spotDB->GetBetaStar());
221  }
222 
223  *result = aSpot;
224 
225  iEvent.put(std::move(result));
226 }
227 
ConfigurationDescriptions.h
BeamSpotOnline::x
float x() const
Definition: BeamSpotOnline.h:48
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
BeamSpotObjects::GetBeamWidthY
double GetBeamWidthY() const
get average transverse beam width
Definition: BeamSpotObjects.h:77
BeamSpotObjects::Getdxdz
double Getdxdz() const
get dxdz slope, crossing angle in XZ
Definition: BeamSpotObjects.h:79
BeamSpotOnlineProducer::beamToken_
const edm::ESGetToken< BeamSpotObjects, BeamSpotObjectsRcd > beamToken_
Definition: BeamSpotOnlineProducer.cc:48
BeamSpotOnlineProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &iDesc)
Fill descriptor.
Definition: BeamSpotOnlineProducer.cc:72
Handle.h
electrons_cff.bool
bool
Definition: electrons_cff.py:366
mps_fire.i
i
Definition: mps_fire.py:428
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
reco::BeamSpot::setBeamWidthY
void setBeamWidthY(double v)
Definition: BeamSpot.h:105
MessageLogger.h
BeamSpotPI::sigmaZ
Definition: BeamSpotPayloadInspectorHelper.h:36
makeMuonMisalignmentScenario.matrix
list matrix
Definition: makeMuonMisalignmentScenario.py:141
BeamSpotOnline::err_y
float err_y() const
Definition: BeamSpotOnline.h:54
reco::BeamSpot::setEmittanceY
void setEmittanceY(double v)
Definition: BeamSpot.h:137
ESHandle.h
align::BeamSpot
Definition: StructureType.h:95
BeamSpotTransientObjectsRcd
Definition: BeamSpotTransientObjectsRcd.h:27
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
BeamSpotOnline::err_z
float err_z() const
Definition: BeamSpotOnline.h:55
BeamSpotOnline::dxdz
float dxdz() const
Definition: BeamSpotOnline.h:51
BeamSpotOnline::y
float y() const
Definition: BeamSpotOnline.h:49
edm::EDGetTokenT< BeamSpotOnlineCollection >
BeamSpotObjects::GetSigmaZ
double GetSigmaZ() const
get sigma Z, RMS bunch length
Definition: BeamSpotObjects.h:73
edm
HLT enums.
Definition: AlignableModifier.h:19
L1GlobalTriggerEvmReadoutRecord::gtfeWord
const L1GtfeExtWord gtfeWord() const
get / set GTFE word (record) in the GT readout record
Definition: L1GlobalTriggerEvmReadoutRecord.cc:249
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89285
BeamSpotObjects::GetZ
double GetZ() const
get Z beam position
Definition: BeamSpotObjects.h:71
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
BeamSpotOnline::dydz
float dydz() const
Definition: BeamSpotOnline.h:52
EDProducer.h
BeamSpotOnline.h
reco::BeamSpot::LHC
Definition: BeamSpot.h:24
BeamSpotOnline::err_sigma_z
float err_sigma_z() const
Definition: BeamSpotOnline.h:63
BeamSpotOnline::width_x
float width_x() const
Definition: BeamSpotOnline.h:58
BeamSpotOnlineProducer::useTransientRecord_
const bool useTransientRecord_
Definition: BeamSpotOnlineProducer.cc:45
edm::Handle
Definition: AssociativeIterator.h:50
ESGetToken.h
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
BeamSpotOnlineProducer::theMaxR2
double theMaxR2
Definition: BeamSpotOnlineProducer.cc:44
MakerMacros.h
BeamSpotOnline::err_x
float err_x() const
Definition: BeamSpotOnline.h:53
BeamSpotObjects.h
L1GlobalTriggerEvmReadoutRecord.h
BeamSpotOnlineProducer
Definition: BeamSpotOnlineProducer.cc:30
BeamSpotObjectsRcd.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
BeamSpot.h
BeamSpotOnlineProducer::changeFrame_
const bool changeFrame_
Definition: BeamSpotOnlineProducer.cc:42
L1GlobalTriggerEvmReadoutRecord
Definition: L1GlobalTriggerEvmReadoutRecord.h:36
BeamSpotOnline::sigma_z
float sigma_z() const
Definition: BeamSpotOnline.h:60
reco::BeamSpot
Definition: BeamSpot.h:21
BeamSpotOnlineProducer::beamTransientToken_
const edm::ESGetToken< BeamSpotObjects, BeamSpotTransientObjectsRcd > beamTransientToken_
Definition: BeamSpotOnlineProducer.cc:49
reco::BeamSpot::Tracker
Definition: BeamSpot.h:24
edm::ESHandle
Definition: DTSurvey.h:22
BeamSpotObjects::GetCovariance
double GetCovariance(int i, int j) const
get i,j element of the full covariance matrix 7x7
Definition: BeamSpotObjects.h:83
reco::BeamSpot::setEmittanceX
void setEmittanceX(double v)
Definition: BeamSpot.h:136
ParameterSetDescription.h
BeamSpotOnlineProducer::theSetSigmaZ
const double theSetSigmaZ
Definition: BeamSpotOnlineProducer.cc:43
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
BeamSpotObjects::GetBetaStar
double GetBetaStar() const
get beta star
Definition: BeamSpotObjects.h:107
edm::ParameterSetDescription::addUntracked
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:100
BeamSpotObjects::GetEmittanceX
double GetEmittanceX() const
get emittance
Definition: BeamSpotObjects.h:103
BeamSpotOnlineProducer::produce
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
produce a beam spot class
Definition: BeamSpotOnlineProducer.cc:85
edm::ParameterSet
Definition: ParameterSet.h:47
BeamSpotObjects::GetY
double GetY() const
get Y beam position
Definition: BeamSpotObjects.h:69
Event.h
reco::BeamSpot::setbetaStar
void setbetaStar(double v)
Definition: BeamSpot.h:138
diffTwoXMLs.r2
r2
Definition: diffTwoXMLs.py:73
BeamSpotTransientObjectsRcd.h
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
edm::stream::EDProducer
Definition: EDProducer.h:38
BeamSpotOnlineProducer::BeamSpotOnlineProducer
BeamSpotOnlineProducer(const edm::ParameterSet &iConf)
constructor
Definition: BeamSpotOnlineProducer.cc:56
BeamSpotObjectsRcd
Definition: BeamSpotObjectsRcd.h:24
BeamSpotObjects
Definition: BeamSpotObjects.h:20
edm::EventSetup
Definition: EventSetup.h:58
reco::BeamSpot::CovarianceMatrix
math::Error< dimension >::type CovarianceMatrix
Definition: BeamSpot.h:29
BeamSpotOnlineProducer::scalerToken_
const edm::EDGetTokenT< BeamSpotOnlineCollection > scalerToken_
Definition: BeamSpotOnlineProducer.cc:46
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
edm::ESGetToken< BeamSpotObjects, BeamSpotObjectsRcd >
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
BeamSpotOnline
Definition: BeamSpotOnline.h:28
BeamSpotObjects::GetBeamWidthX
double GetBeamWidthX() const
get average transverse beam width
Definition: BeamSpotObjects.h:75
eostools.move
def move(src, dest)
Definition: eostools.py:511
BeamSpotOnline::width_y
float width_y() const
Definition: BeamSpotOnline.h:59
BeamSpotObjects::GetEmittanceY
double GetEmittanceY() const
get emittance
Definition: BeamSpotObjects.h:105
BeamSpotObjects::Getdydz
double Getdydz() const
get dydz slope, crossing angle in YZ
Definition: BeamSpotObjects.h:81
BeamSpotOnlineProducer::l1GtEvmReadoutRecordToken_
const edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecord > l1GtEvmReadoutRecordToken_
Definition: BeamSpotOnlineProducer.cc:47
BeamSpotOnlineCollection
std::vector< BeamSpotOnline > BeamSpotOnlineCollection
Definition: BeamSpotOnline.h:101
BeamSpotOnlineProducer::theMaxZ
const double theMaxZ
Definition: BeamSpotOnlineProducer.cc:43
TrackEfficiencyMonitor_cfi.theMaxZ
theMaxZ
Definition: TrackEfficiencyMonitor_cfi.py:11
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
mps_fire.result
result
Definition: mps_fire.py:311
reco::BeamSpot::Point
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:27
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ParameterSet.h
BeamSpotOnlineProducer::theBeamShoutMode
const unsigned int theBeamShoutMode
Definition: BeamSpotOnlineProducer.cc:51
reco::BeamSpot::setType
void setType(BeamType type)
set beam type
Definition: BeamSpot.h:124
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
BeamSpotOnline::z
float z() const
Definition: BeamSpotOnline.h:50
edm::Event
Definition: Event.h:73
BeamSpotObjects::GetX
double GetX() const
get X beam position
Definition: BeamSpotObjects.h:67
L1GtfeExtWord::beamMode
const cms_uint16_t beamMode() const
Definition: L1GtfeExtWord.cc:215
edm::InputTag
Definition: InputTag.h:15
edm::ConfigurationDescriptions::addWithDefaultLabel
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:87