CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Attributes
BeamSpotOnlineProducer Class Reference

#include <BeamSpotOnlineProducer.h>

Inheritance diagram for BeamSpotOnlineProducer:
edm::stream::EDProducer<>

Public Types

typedef std::vector< edm::ParameterSetParameters
 
- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Public Member Functions

 BeamSpotOnlineProducer (const edm::ParameterSet &iConf)
 constructor More...
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 produce a beam spot class More...
 
 ~BeamSpotOnlineProducer () override
 destructor More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Private Attributes

const bool changeFrame_
 
const edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecordl1GtEvmReadoutRecordToken_
 
const edm::EDGetTokenT< BeamSpotOnlineCollectionscalerToken_
 
const unsigned int theBeamShoutMode
 
double theMaxR2
 
const double theMaxZ
 
const double theSetSigmaZ
 

Detailed Description


class: BeamSpotOnlineProducer.h package: RecoVertex/BeamSpotProducer

author: Francisco Yumiceva, Fermilab (yumic.nosp@m.eva@.nosp@m.fnal..nosp@m.gov)


Definition at line 24 of file BeamSpotOnlineProducer.h.

Member Typedef Documentation

Definition at line 27 of file BeamSpotOnlineProducer.h.

Constructor & Destructor Documentation

BeamSpotOnlineProducer::BeamSpotOnlineProducer ( const edm::ParameterSet iConf)
explicit

constructor

Definition at line 17 of file BeamSpotOnlineProducer.cc.

References edm::ParameterSet::getParameter(), and theMaxR2.

18  : changeFrame_ ( iconf.getParameter<bool> ("changeToCMSCoordinates") )
19  , theMaxZ ( iconf.getParameter<double>("maxZ") )
20  , theSetSigmaZ ( iconf.getParameter<double>("setSigmaZ") )
21  , scalerToken_ ( consumes<BeamSpotOnlineCollection> ( iconf.getParameter<InputTag>("src") ) )
22  , l1GtEvmReadoutRecordToken_ ( consumes<L1GlobalTriggerEvmReadoutRecord>( iconf.getParameter<InputTag>("gtEvmLabel")) )
23  , theBeamShoutMode ( iconf.getUntrackedParameter<unsigned int> ("beamMode",11) )
24 {
25 
26  theMaxR2 = iconf.getParameter<double>("maxRadius");
28 
29  produces<reco::BeamSpot>();
30 
31 }
const edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecord > l1GtEvmReadoutRecordToken_
const edm::EDGetTokenT< BeamSpotOnlineCollection > scalerToken_
const unsigned int theBeamShoutMode
BeamSpotOnlineProducer::~BeamSpotOnlineProducer ( )
override

destructor

Definition at line 33 of file BeamSpotOnlineProducer.cc.

33 {}

Member Function Documentation

void BeamSpotOnlineProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

produce a beam spot class

Definition at line 36 of file BeamSpotOnlineProducer.cc.

References L1GtfeExtWord::beamMode(), align::BeamSpot, changeFrame_, DEFINE_FWK_MODULE, BeamSpotOnline::dxdz(), BeamSpotOnline::dydz(), BeamSpotOnline::err_sigma_z(), BeamSpotOnline::err_x(), BeamSpotOnline::err_y(), BeamSpotOnline::err_z(), f, edm::EventSetup::get(), BeamSpotObjects::GetBeamWidthX(), BeamSpotObjects::GetBeamWidthY(), BeamSpotObjects::GetBetaStar(), edm::Event::getByToken(), BeamSpotObjects::GetCovariance(), BeamSpotObjects::Getdxdz(), BeamSpotObjects::Getdydz(), BeamSpotObjects::GetEmittanceX(), BeamSpotObjects::GetEmittanceY(), BeamSpotObjects::GetSigmaZ(), BeamSpotObjects::GetX(), BeamSpotObjects::GetY(), BeamSpotObjects::GetZ(), L1GlobalTriggerEvmReadoutRecord::gtfeWord(), mps_fire::i, l1GtEvmReadoutRecordToken_, reco::BeamSpot::LHC, makeMuonMisalignmentScenario::matrix, eostools::move(), edm::ESHandle< T >::product(), edm::Event::put(), diffTwoXMLs::r2, mps_fire::result, scalerToken_, BeamSpotOnline::sigma_z(), fftjetvertexadder_cfi::sigmaZ, theBeamShoutMode, theMaxR2, theMaxZ, theSetSigmaZ, reco::BeamSpot::Tracker, BeamSpotOnline::width_x(), BeamSpotOnline::width_y(), BeamSpotOnline::x(), BeamSpotOnline::y(), and BeamSpotOnline::z().

37 {
38  //shout MODE only in stable beam
39  bool shoutMODE=false;
41  if (iEvent.getByToken(l1GtEvmReadoutRecordToken_, gtEvmReadoutRecord)){
42  if (gtEvmReadoutRecord->gtfeWord().beamMode() == theBeamShoutMode) shoutMODE=true;
43  }
44  else{
45  shoutMODE=true;
46  }
47 
48  // get scalar collection
50  iEvent.getByToken( scalerToken_, handleScaler);
51 
52  // beam spot scalar object
53  BeamSpotOnline spotOnline;
54 
55  // product is a reco::BeamSpot object
56  auto result = std::make_unique<reco::BeamSpot>();
57 
58  reco::BeamSpot aSpot;
59 
60  bool fallBackToDB=false;
61  if (!handleScaler->empty()){
62  // get one element
63  spotOnline = * ( handleScaler->begin() );
64 
65  // in case we need to switch to LHC reference frame
66  // ignore for the moment rotations, and translations
67  double f = 1.;
68  if (changeFrame_) f = -1.;
69 
70  reco::BeamSpot::Point apoint( f* spotOnline.x(), spotOnline.y(), f* spotOnline.z() );
71 
73  matrix(0,0) = spotOnline.err_x()*spotOnline.err_x();
74  matrix(1,1) = spotOnline.err_y()*spotOnline.err_y();
75  matrix(2,2) = spotOnline.err_z()*spotOnline.err_z();
76  matrix(3,3) = spotOnline.err_sigma_z()*spotOnline.err_sigma_z();
77 
78  double sigmaZ = spotOnline.sigma_z();
79  if (theSetSigmaZ>0)
80  sigmaZ = theSetSigmaZ;
81 
82  aSpot = reco::BeamSpot( apoint,
83  sigmaZ,
84  spotOnline.dxdz(),
85  f* spotOnline.dydz(),
86  spotOnline.width_x(),
87  matrix);
88 
89  aSpot.setBeamWidthY( spotOnline.width_y() );
90  aSpot.setEmittanceX( 0. );
91  aSpot.setEmittanceY( 0. );
92  aSpot.setbetaStar( 0.) ;
93  aSpot.setType( reco::BeamSpot::LHC ); // flag value from scalars
94 
95  // check if we have a valid beam spot fit result from online DQM
96  if ( spotOnline.x() == 0 &&
97  spotOnline.y() == 0 &&
98  spotOnline.z() == 0 &&
99  spotOnline.width_x() == 0 &&
100  spotOnline.width_y() == 0 )
101  {
102  if (shoutMODE){
103  edm::LogWarning("BeamSpotFromDB")
104  << "Online Beam Spot producer falls back to DB value because the scaler values are zero ";
105  }
106  fallBackToDB=true;
107  }
108  double r2=spotOnline.x()*spotOnline.x() + spotOnline.y()*spotOnline.y();
109  if (fabs(spotOnline.z())>=theMaxZ || r2>=theMaxR2){
110  if (shoutMODE){
111  edm::LogError("BeamSpotFromDB")
112  << "Online Beam Spot producer falls back to DB value because the scaler values are too big to be true :"
113  <<spotOnline.x()<<" "<<spotOnline.y()<<" "<<spotOnline.z();
114  }
115  fallBackToDB=true;
116  }
117  }
118  else{
119  //empty online beamspot collection: FED data was empty
120  //the error should probably have been send at unpacker level
121  fallBackToDB=true;
122  }
123 
124  if (fallBackToDB){
125 
127  iSetup.get<BeamSpotObjectsRcd>().get(beamhandle);
128  const BeamSpotObjects *spotDB = beamhandle.product();
129 
130  // translate from BeamSpotObjects to reco::BeamSpot
131  reco::BeamSpot::Point apoint( spotDB->GetX(), spotDB->GetY(), spotDB->GetZ() );
132 
134  for ( int i=0; i<7; ++i ) {
135  for ( int j=0; j<7; ++j ) {
136  matrix(i,j) = spotDB->GetCovariance(i,j);
137  }
138  }
139 
140  // this assume beam width same in x and y
141  aSpot = reco::BeamSpot( apoint,
142  spotDB->GetSigmaZ(),
143  spotDB->Getdxdz(),
144  spotDB->Getdydz(),
145  spotDB->GetBeamWidthX(),
146  matrix );
147  aSpot.setBeamWidthY( spotDB->GetBeamWidthY() );
148  aSpot.setEmittanceX( spotDB->GetEmittanceX() );
149  aSpot.setEmittanceY( spotDB->GetEmittanceY() );
150  aSpot.setbetaStar( spotDB->GetBetaStar() );
151  aSpot.setType( reco::BeamSpot::Tracker );
152 
153  }
154 
155  *result = aSpot;
156 
157  iEvent.put(std::move(result));
158 
159 }
double Getdydz() const
get dydz slope, crossing angle in YZ
math::Error< dimension >::type CovarianceMatrix
Definition: BeamSpot.h:31
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:136
float err_y() const
float dxdz() const
double GetY() const
get Y beam position
const edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecord > l1GtEvmReadoutRecordToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
float err_x() const
float dydz() const
const L1GtfeExtWord gtfeWord() const
get / set GTFE word (record) in the GT readout record
float sigma_z() const
const edm::EDGetTokenT< BeamSpotOnlineCollection > scalerToken_
float y() const
float x() const
double GetSigmaZ() const
get sigma Z, RMS bunch length
double GetBeamWidthX() const
get average transverse beam width
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
float z() const
float width_y() const
double GetBeamWidthY() const
get average transverse beam width
double GetEmittanceX() const
get emittance
double GetZ() const
get Z beam position
double f[11][100]
const unsigned int theBeamShoutMode
double Getdxdz() const
get dxdz slope, crossing angle in XZ
float err_z() const
double GetX() const
get X beam position
const T & get() const
Definition: EventSetup.h:59
double GetBetaStar() const
get beta star
double GetCovariance(int i, int j) const
get i,j element of the full covariance matrix 7x7
float width_x() const
double GetEmittanceY() const
get emittance
float err_sigma_z() const
const cms_uint16_t beamMode() const
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:510

Member Data Documentation

const bool BeamSpotOnlineProducer::changeFrame_
private

Definition at line 39 of file BeamSpotOnlineProducer.h.

Referenced by produce().

const edm::EDGetTokenT<L1GlobalTriggerEvmReadoutRecord> BeamSpotOnlineProducer::l1GtEvmReadoutRecordToken_
private

Definition at line 43 of file BeamSpotOnlineProducer.h.

Referenced by produce().

const edm::EDGetTokenT<BeamSpotOnlineCollection> BeamSpotOnlineProducer::scalerToken_
private

Definition at line 42 of file BeamSpotOnlineProducer.h.

Referenced by produce().

const unsigned int BeamSpotOnlineProducer::theBeamShoutMode
private

Definition at line 45 of file BeamSpotOnlineProducer.h.

Referenced by produce().

double BeamSpotOnlineProducer::theMaxR2
private

Definition at line 41 of file BeamSpotOnlineProducer.h.

Referenced by BeamSpotOnlineProducer(), and produce().

const double BeamSpotOnlineProducer::theMaxZ
private

Definition at line 40 of file BeamSpotOnlineProducer.h.

Referenced by produce().

const double BeamSpotOnlineProducer::theSetSigmaZ
private

Definition at line 40 of file BeamSpotOnlineProducer.h.

Referenced by produce().