CMS 3D CMS Logo

L1MuGMTConfig.cc
Go to the documentation of this file.
1 //-------------------------------------------------
2 //
3 // Class: L1MuGMTConfig
4 //
5 // Description: Configuration parameters for L1GlobalMuonTrigger
6 //
7 //
8 //
9 // Author :
10 // N. Neumeister CERN EP
11 //
12 // Migrated to CMSSW:
13 // I. Mikulec
14 //
15 //--------------------------------------------------
16 
17 //-----------------------
18 // This Class's Header --
19 //-----------------------
20 
22 
23 //---------------
24 // C++ Headers --
25 //---------------
26 
27 #include <iostream>
28 #include <fstream>
29 #include <string>
30 
31 //-------------------------------
32 // Collaborating Class Headers --
33 //-------------------------------
34 
61 
65 
67 
69 
70 // --------------------------------
71 // class L1MuGMTConfig
72 //---------------------------------
73 using namespace std;
74 
75 //----------------
76 // Constructors --
77 //----------------
78 
80  m_ps = &ps;
81 
82  m_DTInputTag = m_ps->getParameter<edm::InputTag>("DTCandidates");
83  m_CSCInputTag = m_ps->getParameter<edm::InputTag>("CSCCandidates");
84  m_RPCbInputTag = m_ps->getParameter<edm::InputTag>("RPCbCandidates");
85  m_RPCfInputTag = m_ps->getParameter<edm::InputTag>("RPCfCandidates");
86  m_MipIsoInputTag = m_ps->getParameter<edm::InputTag>("MipIsoData");
87 
88  m_debug = true;
89  m_dbgLevel = m_ps->getUntrackedParameter<int>("Debug", 0);
90 
91  // set min and max bunch crossing
92  m_BxMin = m_ps->getParameter<int>("BX_min");
93  m_BxMax = m_ps->getParameter<int>("BX_max");
94 
95  // set min and max bunch crossing for the readout
96  m_BxMinRo = m_ps->getParameter<int>("BX_min_readout");
97  m_BxMaxRo = m_ps->getParameter<int>("BX_max_readout");
98 }
99 
100 //--------------
101 // Destructor --
102 //--------------
104 
105 //--------------
106 // Operations --
107 //--------------
108 
110  // set weights for eta and phi
111  m_EtaWeight_barrel = m_GMTParams->getEtaWeight_barrel();
112  m_PhiWeight_barrel = m_GMTParams->getPhiWeight_barrel();
113  m_EtaPhiThreshold_barrel = m_GMTParams->getEtaPhiThreshold_barrel();
114 
115  m_EtaWeight_endcap = m_GMTParams->getEtaWeight_endcap();
116  m_PhiWeight_endcap = m_GMTParams->getPhiWeight_endcap();
117  m_EtaPhiThreshold_endcap = m_GMTParams->getEtaPhiThreshold_endcap();
118 
119  m_EtaWeight_COU = m_GMTParams->getEtaWeight_COU();
120  m_PhiWeight_COU = m_GMTParams->getPhiWeight_COU();
121  m_EtaPhiThreshold_COU = m_GMTParams->getEtaPhiThreshold_COU();
122 
123  m_CaloTrigger = m_GMTParams->getCaloTrigger();
124  m_IsolationCellSizeEta = m_GMTParams->getIsolationCellSizeEta();
125  m_IsolationCellSizePhi = m_GMTParams->getIsolationCellSizePhi();
126 
127  m_DoOvlRpcAnd = m_GMTParams->getDoOvlRpcAnd();
128 
129  m_PropagatePhi = m_GMTParams->getPropagatePhi();
130 
131  m_VersionSortRankEtaQLUT = m_GMTParams->getVersionSortRankEtaQLUT();
132  m_VersionLUTs = m_GMTParams->getVersionLUTs();
133 
134  if (Debug(1)) {
135  stringstream stdss;
136  stdss << endl
137  << "*******************************************" << endl
138  << "**** L1 Global Muon Trigger settings : ****" << endl
139  << "*******************************************" << endl
140  << endl
141 
142  << "L1 Global Muon Trigger : DTCandidates : " << m_DTInputTag << endl
143  << "L1 Global Muon Trigger : CSCCandidates : " << m_CSCInputTag << endl
144  << "L1 Global Muon Trigger : RPCbCandidates : " << m_RPCbInputTag << endl
145  << "L1 Global Muon Trigger : RPCfCandidates : " << m_RPCfInputTag << endl
146  << "L1 Global Muon Trigger : debug level : " << m_dbgLevel << endl
147  << "L1 Global Muon Trigger : minimal bunch-crossing : " << m_BxMin << endl
148  << "L1 Global Muon Trigger : maximal bunch-crossing : " << m_BxMax << endl
149  << "L1 Global Muon Trigger : barrel eta weight : " << m_EtaWeight_barrel << endl
150  << "L1 Global Muon Trigger : barrel phi weight : " << m_PhiWeight_barrel << endl
151  << "L1 Global Muon Trigger : barrel eta-phi threshold : " << m_EtaPhiThreshold_barrel << endl
152  << "L1 Global Muon Trigger : endcap eta weight : " << m_EtaWeight_endcap << endl
153  << "L1 Global Muon Trigger : endcap phi weight : " << m_PhiWeight_endcap << endl
154  << "L1 Global Muon Trigger : endcap eta-phi threshold : " << m_EtaPhiThreshold_endcap << endl
155  << "L1 Global Muon Trigger : cancel out unit eta weight : " << m_EtaWeight_COU << endl
156  << "L1 Global Muon Trigger : cancel out unit phi weight : " << m_PhiWeight_COU << endl
157  << "L1 Global Muon Trigger : cancel out unit eta-phi threshold : " << m_EtaPhiThreshold_COU << endl
158  << "L1 Global Muon Trigger : calorimeter trigger : " << m_CaloTrigger << endl
159  << "L1 Global Muon Trigger : muon isolation cell size (eta) : " << m_IsolationCellSizeEta << endl
160  << "L1 Global Muon Trigger : muon isolation cell size (phi) : " << m_IsolationCellSizePhi << endl
161  << "L1 Global Muon Trigger : require confirmation by RPC in overlap region : " << m_DoOvlRpcAnd << endl
162  << "L1 Global Muon Trigger : propagate phi to vertex : " << m_PropagatePhi << endl
163  << "L1 Global Muon Trigger : version of low quality assignment LUT : " << m_VersionSortRankEtaQLUT << endl
164  << "L1 Global Muon Trigger : general LUTs version : " << m_VersionLUTs << endl;
165  edm::LogVerbatim("GMT_Config_info") << stdss.str();
166  }
167 }
168 
170  // create Registers
171  m_RegCDLConfig = new L1MuGMTRegCDLConfig();
172  m_RegMMConfigPhi = new L1MuGMTRegMMConfigPhi();
173  m_RegMMConfigEta = new L1MuGMTRegMMConfigEta();
174  m_RegMMConfigPt = new L1MuGMTRegMMConfigPt();
175  m_RegMMConfigCharge = new L1MuGMTRegMMConfigCharge();
176  m_RegMMConfigMIP = new L1MuGMTRegMMConfigMIP();
177  m_RegMMConfigISO = new L1MuGMTRegMMConfigISO();
178  m_RegMMConfigSRK = new L1MuGMTRegMMConfigSRK();
179  m_RegSortRankOffset = new L1MuGMTRegSortRankOffset();
180 
181  // create LUTs
182  m_EtaLUT = new L1MuGMTEtaLUT();
183  m_LFCOUDeltaEtaLUT = new L1MuGMTLFCOUDeltaEtaLUT();
184  m_LFDeltaEtaLUT = new L1MuGMTLFDeltaEtaLUT();
185  m_LFDisableHotLUT = new L1MuGMTLFDisableHotLUT();
186  m_LFEtaConvLUT = new L1MuGMTLFEtaConvLUT();
187  m_LFMatchQualLUT = new L1MuGMTLFMatchQualLUT();
188  m_LFMergeRankCombineLUT = new L1MuGMTLFMergeRankCombineLUT();
189  m_LFMergeRankEtaPhiLUT = new L1MuGMTLFMergeRankEtaPhiLUT();
190  m_LFMergeRankEtaQLUT = new L1MuGMTLFMergeRankEtaQLUT();
191  m_LFMergeRankPtQLUT = new L1MuGMTLFMergeRankPtQLUT();
192  m_LFOvlEtaConvLUT = new L1MuGMTLFOvlEtaConvLUT();
193  m_LFPhiProEtaConvLUT = new L1MuGMTLFPhiProEtaConvLUT();
194  m_LFPhiProLUT = new L1MuGMTLFPhiProLUT();
195  m_LFPtMixLUT = new L1MuGMTLFPtMixLUT();
196  m_LFSortRankCombineLUT = new L1MuGMTLFSortRankCombineLUT();
197  m_LFSortRankEtaPhiLUT = new L1MuGMTLFSortRankEtaPhiLUT();
198  m_LFSortRankEtaQLUT = new L1MuGMTLFSortRankEtaQLUT();
199  m_LFSortRankPtQLUT = new L1MuGMTLFSortRankPtQLUT();
200  m_MIAUEtaConvLUT = new L1MuGMTMIAUEtaConvLUT();
201  m_MIAUEtaProLUT = new L1MuGMTMIAUEtaProLUT();
202  m_MIAUPhiPro1LUT = new L1MuGMTMIAUPhiPro1LUT();
203  m_MIAUPhiPro2LUT = new L1MuGMTMIAUPhiPro2LUT();
204  m_PhiLUT = new L1MuGMTPhiLUT();
205 }
206 
208  // delete Registers
209  delete m_RegCDLConfig;
210  delete m_RegMMConfigPhi;
211  delete m_RegMMConfigEta;
212  delete m_RegMMConfigPt;
213  delete m_RegMMConfigCharge;
214  delete m_RegMMConfigMIP;
215  delete m_RegMMConfigISO;
216  delete m_RegMMConfigSRK;
217  delete m_RegSortRankOffset;
218 
219  // delete LUTs
220  delete m_EtaLUT;
221  delete m_LFCOUDeltaEtaLUT;
222  delete m_LFDeltaEtaLUT;
223  delete m_LFDisableHotLUT;
224  delete m_LFEtaConvLUT;
225  delete m_LFMatchQualLUT;
226  delete m_LFMergeRankCombineLUT;
227  delete m_LFMergeRankEtaPhiLUT;
228  delete m_LFMergeRankEtaQLUT;
229  delete m_LFMergeRankPtQLUT;
230  delete m_LFOvlEtaConvLUT;
231  delete m_LFPhiProEtaConvLUT;
232  delete m_LFPhiProLUT;
233  delete m_LFPtMixLUT;
234  delete m_LFSortRankCombineLUT;
235  delete m_LFSortRankEtaPhiLUT;
236  delete m_LFSortRankEtaQLUT;
237  delete m_LFSortRankPtQLUT;
238  delete m_MIAUEtaConvLUT;
239  delete m_MIAUEtaProLUT;
240  delete m_MIAUPhiPro1LUT;
241  delete m_MIAUPhiPro2LUT;
242  delete m_PhiLUT;
243 }
244 
246  std::vector<L1MuGMTLUT*> theLUTs;
247 
248  theLUTs.push_back(m_LFSortRankEtaQLUT);
249  theLUTs.push_back(m_LFSortRankPtQLUT);
250  theLUTs.push_back(m_LFSortRankEtaPhiLUT);
251  theLUTs.push_back(m_LFSortRankCombineLUT);
252 
253  theLUTs.push_back(m_LFDisableHotLUT);
254 
255  theLUTs.push_back(m_LFMergeRankEtaQLUT);
256  theLUTs.push_back(m_LFMergeRankPtQLUT);
257  theLUTs.push_back(m_LFMergeRankEtaPhiLUT);
258  theLUTs.push_back(m_LFMergeRankCombineLUT);
259 
260  theLUTs.push_back(m_LFDeltaEtaLUT);
261  theLUTs.push_back(m_LFMatchQualLUT);
262  theLUTs.push_back(m_LFOvlEtaConvLUT);
263  theLUTs.push_back(m_LFCOUDeltaEtaLUT);
264 
265  theLUTs.push_back(m_LFEtaConvLUT);
266 
267  theLUTs.push_back(m_LFPtMixLUT);
268  theLUTs.push_back(m_LFPhiProLUT);
269  theLUTs.push_back(m_LFPhiProEtaConvLUT);
270 
271  theLUTs.push_back(m_MIAUEtaConvLUT);
272  theLUTs.push_back(m_MIAUPhiPro1LUT);
273  theLUTs.push_back(m_MIAUPhiPro2LUT);
274  theLUTs.push_back(m_MIAUEtaProLUT);
275 
276  std::vector<L1MuGMTLUT*>::iterator it = theLUTs.begin();
277  for (; it != theLUTs.end(); it++) {
278  edm::LogVerbatim("GMT_LUTGen_info") << "**** Generating " << (*it)->Name() << " LUT ****" << endl
279  << "saving" << endl;
280  std::string fn = dir + "/" + (*it)->Name() + ".lut";
281  (*it)->Save(fn.c_str());
282  }
283 
284  edm::LogVerbatim("GMT_LUTGen_info") << "Successfully created all GMT look-up tables in directory './" << dir << "'"
285  << endl
286  << endl;
287 }
288 
290  std::vector<L1MuGMTReg*> theRegs;
291 
292  theRegs.push_back(m_RegCDLConfig);
293  theRegs.push_back(m_RegMMConfigPhi);
294  theRegs.push_back(m_RegMMConfigEta);
295  theRegs.push_back(m_RegMMConfigPt);
296  theRegs.push_back(m_RegMMConfigCharge);
297  theRegs.push_back(m_RegMMConfigSRK);
298  theRegs.push_back(m_RegMMConfigMIP);
299  theRegs.push_back(m_RegMMConfigISO);
300  theRegs.push_back(m_RegSortRankOffset);
301 
302  ofstream of((dir + "/LogicFPGARegs.cfg").c_str());
303 
304  std::vector<L1MuGMTReg*>::iterator it = theRegs.begin();
305  for (; it != theRegs.end(); it++) {
306  for (unsigned int i = 0; i < (*it)->getNumberOfInstances(); i++)
307  of << (*it)->getName() << "[" << i << "] = " << (*it)->getValue(i) << endl;
308  }
309 }
310 
311 // static data members
312 
313 const edm::ParameterSet* L1MuGMTConfig::m_ps = nullptr;
314 
321 bool L1MuGMTConfig::m_debug = false;
322 int L1MuGMTConfig::m_BxMin = -4;
323 int L1MuGMTConfig::m_BxMax = 4;
324 int L1MuGMTConfig::m_BxMinRo = -2;
332 float L1MuGMTConfig::m_EtaWeight_COU = 0.316;
335 bool L1MuGMTConfig::m_CaloTrigger = true;
338 bool L1MuGMTConfig::m_DoOvlRpcAnd = false;
339 
340 bool L1MuGMTConfig::m_PropagatePhi = false;
342 unsigned L1MuGMTConfig::m_VersionLUTs = 0;
343 
353 
377 
383 
static L1MuGMTLFSortRankEtaPhiLUT * m_LFSortRankEtaPhiLUT
static edm::InputTag m_CSCInputTag
static L1MuGMTLFDeltaEtaLUT * m_LFDeltaEtaLUT
static float m_EtaPhiThreshold_COU
Log< level::Info, true > LogVerbatim
static L1MuGMTRegMMConfigCharge * m_RegMMConfigCharge
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
static L1MuGMTMIAUPhiPro2LUT * m_MIAUPhiPro2LUT
static edm::InputTag m_RPCbInputTag
static int m_BxMax
static bool m_DoOvlRpcAnd
static int m_IsolationCellSizePhi
GMT Merge Method Config Register Phi.
Definition: L1MuGMTReg.h:148
static L1MuGMTLFSortRankCombineLUT * m_LFSortRankCombineLUT
static const L1MuTriggerScales * m_TriggerScales
void dumpRegs(std::string dir)
static L1MuGMTEtaLUT * m_EtaLUT
static bool m_CaloTrigger
static int m_dbgLevel
static float m_PhiWeight_barrel
static L1MuGMTPhiLUT * m_PhiLUT
static int m_IsolationCellSizeEta
static L1MuGMTLFMergeRankEtaQLUT * m_LFMergeRankEtaQLUT
static L1MuGMTLFMatchQualLUT * m_LFMatchQualLUT
static L1MuGMTRegMMConfigISO * m_RegMMConfigISO
GMT Merge Method Config Register Charge.
Definition: L1MuGMTReg.h:178
static L1MuGMTMIAUEtaConvLUT * m_MIAUEtaConvLUT
GMT Merge Method Config Register ISO.
Definition: L1MuGMTReg.h:241
virtual ~L1MuGMTConfig()
destructor
static L1MuGMTLFDisableHotLUT * m_LFDisableHotLUT
static const L1MuTriggerPtScale * m_TriggerPtScale
static L1MuGMTRegMMConfigPhi * m_RegMMConfigPhi
static float m_EtaWeight_endcap
static const L1MuGMTChannelMask * m_GMTChanMask
static unsigned m_VersionSortRankEtaQLUT
static float m_PhiWeight_COU
static L1MuGMTLFMergeRankPtQLUT * m_LFMergeRankPtQLUT
static L1MuGMTLFMergeRankCombineLUT * m_LFMergeRankCombineLUT
static L1MuGMTRegSortRankOffset * m_RegSortRankOffset
static int m_BxMinRo
GMT Register that implements Rank offset for merged cands.
Definition: L1MuGMTReg.h:286
static L1MuGMTLFSortRankEtaQLUT * m_LFSortRankEtaQLUT
static unsigned m_VersionLUTs
static L1MuGMTRegMMConfigEta * m_RegMMConfigEta
GMT Register that implements Configuration of Cancel Decisison Logic.
Definition: L1MuGMTReg.h:312
void dumpLUTs(std::string dir)
static edm::InputTag m_MipIsoInputTag
static float m_EtaPhiThreshold_endcap
static L1MuGMTMIAUEtaProLUT * m_MIAUEtaProLUT
static float m_PhiWeight_endcap
static edm::InputTag m_RPCfInputTag
static L1MuGMTLFMergeRankEtaPhiLUT * m_LFMergeRankEtaPhiLUT
static float m_EtaWeight_barrel
GMT Register that implements additional Halo Overwrites Matched bit.
Definition: L1MuGMTReg.h:253
static const L1MuGMTScales * m_GMTScales
GMT Merge Method Config Register Eta.
Definition: L1MuGMTReg.h:158
L1MuGMTConfig(const edm::ParameterSet &ps)
constructor
static float m_EtaWeight_COU
static L1MuGMTRegMMConfigPt * m_RegMMConfigPt
static L1MuGMTLFPhiProLUT * m_LFPhiProLUT
static bool m_PropagatePhi
static const L1MuGMTParameters * m_GMTParams
static L1MuGMTRegMMConfigMIP * m_RegMMConfigMIP
static L1MuGMTLFEtaConvLUT * m_LFEtaConvLUT
static L1MuGMTLFSortRankPtQLUT * m_LFSortRankPtQLUT
void clearLUTsRegs()
GMT Merge Method Config Register Pt.
Definition: L1MuGMTReg.h:168
static L1MuGMTMIAUPhiPro1LUT * m_MIAUPhiPro1LUT
static L1MuGMTLFOvlEtaConvLUT * m_LFOvlEtaConvLUT
static float m_EtaPhiThreshold_barrel
static int m_BxMin
static const L1CaloGeometry * m_caloGeom
GMT Merge Method Config Register MIP.
Definition: L1MuGMTReg.h:230
static int m_BxMaxRo
static L1MuGMTLFCOUDeltaEtaLUT * m_LFCOUDeltaEtaLUT
void createLUTsRegs()
static const edm::ParameterSet * m_ps
static L1MuGMTLFPtMixLUT * m_LFPtMixLUT
static L1MuGMTLFPhiProEtaConvLUT * m_LFPhiProEtaConvLUT
static L1MuGMTRegCDLConfig * m_RegCDLConfig
const bool Debug
static edm::InputTag m_DTInputTag
static L1MuGMTRegMMConfigSRK * m_RegMMConfigSRK
static bool m_debug