CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CSCTFSectorProcessor.cc
Go to the documentation of this file.
4 
6 
10 #include <stdlib.h>
11 #include <sstream>
12 #include <strings.h>
13 
14 const std::string CSCTFSectorProcessor::FPGAs[5] = {"F1","F2","F3","F4","F5"};
15 
17  const unsigned& sector,
18  const edm::ParameterSet& pset,
19  bool tmb07,
20  const L1MuTriggerScales* scales,
21  const L1MuTriggerPtScale* ptScale)
22 {
23  m_endcap = endcap;
24  m_sector = sector;
25  TMB07 = tmb07;
26 
27  // allows a configurable option to handle unganged ME1a
28  m_gangedME1a = pset.getUntrackedParameter<bool>("gangedME1a", true);
29 
30  // Parameter below should always present in ParameterSet:
31  m_latency = pset.getParameter<unsigned>("CoreLatency");
32  m_minBX = pset.getParameter<int>("MinBX");
33  m_maxBX = pset.getParameter<int>("MaxBX");
34  initializeFromPSet = pset.getParameter<bool>("initializeFromPSet");
35  if( m_maxBX-m_minBX >= 7 ) edm::LogWarning("CSCTFTrackBuilder::ctor")<<" BX window width >= 7BX. Resetting m_maxBX="<<(m_maxBX=m_minBX+6);
36 
37  // All following parameters may appear in either ParameterSet of in EventSetup; uninitialize:
38  m_bxa_depth = -1;
39  m_allowALCTonly = -1;
40  m_allowCLCTonly = -1;
41  m_preTrigger = -1;
42 
43  for(int index=0; index<7; index++) m_etawin[index] = -1;
44  for(int index=0; index<8; index++) m_etamin[index] = -1;
45  for(int index=0; index<8; index++) m_etamax[index] = -1;
46 
47  m_mindphip=-1;
48  m_mindetap=-1;
49 
53 
57 
61 
65  m_mindphip_halo=-1;
66  m_mindetap_halo=-1;
67 
68  m_widePhi=-1;
69 
70  m_straightp=-1;
71  m_curvedp=-1;
72 
73  m_mbaPhiOff=-1;
74  m_mbbPhiOff=-1;
75 
76  kill_fiber = -1;
77  QualityEnableME1a = -1;
78  QualityEnableME1b = -1;
79  QualityEnableME1c = -1;
80  QualityEnableME1d = -1;
81  QualityEnableME1e = -1;
82  QualityEnableME1f = -1;
83  QualityEnableME2a = -1;
84  QualityEnableME2b = -1;
85  QualityEnableME2c = -1;
86  QualityEnableME3a = -1;
87  QualityEnableME3b = -1;
88  QualityEnableME3c = -1;
89  QualityEnableME4a = -1;
90  QualityEnableME4b = -1;
91  QualityEnableME4c = -1;
92 
93  run_core = -1;
94  trigger_on_ME1a = -1;
95  trigger_on_ME1b = -1;
96  trigger_on_ME2 = -1;
97  trigger_on_ME3 = -1;
98  trigger_on_ME4 = -1;
99  trigger_on_MB1a = -1;
100  trigger_on_MB1d = -1;
101 
102  singlesTrackOutput = 999;
103  rescaleSinglesPhi = -1;
104 
105  m_firmSP = -1;
106  m_firmFA = -1;
107  m_firmDD = -1;
108  m_firmVM = -1;
109 
110  isCoreVerbose = pset.getParameter<bool>("isCoreVerbose");
111 
112  if(initializeFromPSet) readParameters(pset);
113 
114 
115  // Sector Receiver LUTs initialization
116  edm::ParameterSet srLUTset = pset.getParameter<edm::ParameterSet>("SRLUT");
117  for(int i = 1; i <= 4; ++i)
118  {
119  if(i == 1)
120  for(int j = 0; j < 2; j++)
121  {
122  srLUTs_[FPGAs[j]] = new CSCSectorReceiverLUT(endcap, sector, j+1, i, srLUTset, TMB07);
123  }
124  else
125  srLUTs_[FPGAs[i]] = new CSCSectorReceiverLUT(endcap, sector, 0, i, srLUTset, TMB07);
126  }
127 
128  core_ = new CSCTFSPCoreLogic();
129 
130  // Pt LUTs initialization
131  if(initializeFromPSet){
132  edm::ParameterSet ptLUTset = pset.getParameter<edm::ParameterSet>("PTLUT");
133  ptLUT_ = new CSCTFPtLUT(ptLUTset, scales, ptScale);
134  LogDebug("CSCTFSectorProcessor") << "Using stand-alone PT LUT for endcap="<<m_endcap<<", sector="<<m_sector;
135  } else {
136  ptLUT_=0;
137  LogDebug("CSCTFSectorProcessor") << "Looking for PT LUT in EventSetup for endcap="<<m_endcap<<", sector="<<m_sector;
138  }
139 
140  // firmware map initialization
141  // all the information are based on the firmware releases
142  // documented at http://www.phys.ufl.edu/~uvarov/SP05/SP05.htm
143 
144  // map is <m_firmSP, core_version>
145  // it may happen that the same core is used for different firmware
146  // versions, e.g. change in the wrapper only
147 
148  // this mapping accounts for runs starting from 132440
149  // schema is year+month+day
150  firmSP_Map.insert(std::pair<int,int>(20100210,20100122));
151  firmSP_Map.insert(std::pair<int,int>(20100617,20100122));
152  firmSP_Map.insert(std::pair<int,int>(20100629,20100122));
153 
154  firmSP_Map.insert(std::pair<int,int>(20100728,20100728));
155 
156  firmSP_Map.insert(std::pair<int,int>(20100901,20100901));
157 
158  firmSP_Map.insert(std::pair<int,int>(20101011,20101011));
159 }
160 
161 
163  if(!initializeFromPSet){
164  // Only pT lut can be initialized from EventSetup, all front LUTs are initialized locally from their parametrizations
165  LogDebug("CSCTFSectorProcessor") <<"Initializing endcap: "<<m_endcap<<" sector:"<<m_sector << "SP:" << (m_endcap-1)*6+(m_sector-1);
166  LogDebug("CSCTFSectorProcessor") << "Initializing pT LUT from EventSetup";
167 
168  ptLUT_ = new CSCTFPtLUT(c);
169 
170  // Extract from EventSetup alternative (to the one, used in constructor) ParameterSet
172  c.get<L1MuCSCTFConfigurationRcd>().get(config);
173  // And initialize only those parameters, which left uninitialized during construction
174  readParameters(config.product()->parameters((m_endcap-1)*6+(m_sector-1)));
175  }
176 
177  // ---------------------------------------------------------------------------
178  // This part is added per Vasile's request.
179  // It will help people understanding the emulator configuration
180  LogDebug("CSCTFSectorProcessor") << "\n !!! CSCTF EMULATOR CONFIGURATION !!!"
181  << "\n\nCORE CONFIGURATION"
182  << "\n Coincidence Trigger? " << run_core
183  << "\n Singles in ME1a? " << trigger_on_ME1a
184  << "\n Singles in ME1b? " << trigger_on_ME1b
185  << "\n Singles in ME2? " << trigger_on_ME2
186  << "\n Singles in ME3? " << trigger_on_ME3
187  << "\n Singles in ME4? " << trigger_on_ME4
188  << "\n Singles in MB1a? " << trigger_on_MB1a
189  << "\n Singles in MB1d? " << trigger_on_MB1d
190 
191  << "\n BX Analyzer depth: assemble coinc. track with stubs in +/-" << m_bxa_depth << " Bxs"
192  << "\n Is Wide Phi Extrapolation (DeltaPhi valid up to ~15 degrees, otherwise ~7.67 degrees)? " << m_widePhi
193  << "\n PreTrigger=" << m_preTrigger
194 
195  << "\n CoreLatency=" << m_latency
196  << "\n Is Phi for singles rescaled? " << rescaleSinglesPhi
197 
198  << "\n\nVARIOUS CONFIGURATION PARAMETERS"
199  << "\n Allow ALCT only? " << m_allowALCTonly
200  << "\n Allow CLCT only? " << m_allowCLCTonly
201 
202  << "\nQualityEnableME1a (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME1a
203  << "\nQualityEnableME1b (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME1b
204  << "\nQualityEnableME1c (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME1c
205  << "\nQualityEnableME1d (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME1d
206  << "\nQualityEnableME1e (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME1e
207  << "\nQualityEnableME1f (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME1f
208  << "\nQualityEnableME2a (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME2a
209  << "\nQualityEnableME2b (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME2b
210  << "\nQualityEnableME2c (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME2c
211  << "\nQualityEnableME3a (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME3a
212  << "\nQualityEnableME3b (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME3b
213  << "\nQualityEnableME3c (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME3c
214  << "\nQualityEnableME4a (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME4a
215  << "\nQualityEnableME4b (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME4b
216  << "\nQualityEnableME4c (in general accept all LCT qualities, i.e. 0xFFFF is expected)=" << QualityEnableME4c
217 
218  << "\nkill_fiber=" << kill_fiber
219  << "\nSingles Output Link=" << singlesTrackOutput
220 
221  //the DAT_ETA registers meaning are explained at Table 2 of
222  //http://www.phys.ufl.edu/~uvarov/SP05/LU-SP_ReferenceGuide_090915_Update.pdf
223 
224  << "\n\nDAT_ETA REGISTERS"
225  << "\nMinimum eta difference for track cancellation logic=" << m_mindetap
226  << "\nMinimum eta difference for halo track cancellation logic=" << m_mindetap_halo
227 
228  << "\nMinimum eta for ME1-ME2 collision tracks=" << m_etamin[0]
229  << "\nMinimum eta for ME1-ME3 collision tracks=" << m_etamin[1]
230  << "\nMinimum eta for ME2-ME3 collision tracks=" << m_etamin[2]
231  << "\nMinimum eta for ME2-ME4 collision tracks=" << m_etamin[3]
232  << "\nMinimum eta for ME3-ME4 collision tracks=" << m_etamin[4]
233  << "\nMinimum eta for ME1-ME2 collision tracks in overlap region=" << m_etamin[5]
234  << "\nMinimum eta for ME2-MB1 collision tracks=" << m_etamin[6]
235  << "\nMinimum eta for ME1-ME4 collision tracks=" << m_etamin[7]
236 
237  << "\nMinimum eta difference for ME1-ME2 (except ME1/1) halo tracks=" << m_mindeta12_accp
238  << "\nMinimum eta difference for ME1-ME3 (except ME1/1) halo tracks=" << m_mindeta13_accp
239  << "\nMinimum eta difference for ME1/1-ME2 halo tracks=" << m_mindeta112_accp
240  << "\nMinimum eta difference for ME1/1-ME3 halo tracks=" << m_mindeta113_accp
241 
242  << "\nMaximum eta for ME1-ME2 collision tracks=" << m_etamax[0]
243  << "\nMaximum eta for ME1-ME3 collision tracks=" << m_etamax[1]
244  << "\nMaximum eta for ME2-ME3 collision tracks=" << m_etamax[2]
245  << "\nMaximum eta for ME2-ME4 collision tracks=" << m_etamax[3]
246  << "\nMaximum eta for ME3-ME4 collision tracks=" << m_etamax[4]
247  << "\nMaximum eta for ME1-ME2 collision tracks in overlap region=" << m_etamax[5]
248  << "\nMaximum eta for ME2-MB1 collision tracks=" << m_etamax[6]
249  << "\nMaximum eta for ME1-ME4 collision tracks=" << m_etamax[7]
250 
251  << "\nMaximum eta difference for ME1-ME2 (except ME1/1) halo tracks=" << m_maxdeta12_accp
252  << "\nMaximum eta difference for ME1-ME3 (except ME1/1) halo tracks=" << m_maxdeta13_accp
253  << "\nMaximum eta difference for ME1/1-ME2 halo tracks=" << m_maxdeta112_accp
254  << "\nMaximum eta difference for ME1/1-ME3 halo tracks=" << m_maxdeta113_accp
255 
256  << "\nEta window for ME1-ME2 collision tracks=" << m_etawin[0]
257  << "\nEta window for ME1-ME3 collision tracks=" << m_etawin[1]
258  << "\nEta window for ME2-ME3 collision tracks=" << m_etawin[2]
259  << "\nEta window for ME2-ME4 collision tracks=" << m_etawin[3]
260  << "\nEta window for ME3-ME4 collision tracks=" << m_etawin[4]
261  << "\nEta window for ME1-ME2 collision tracks in overlap region=" << m_etawin[5]
262  << "\nEta window for ME1-ME4 collision tracks=" << m_etawin[6]
263 
264  << "\nMaximum phi difference for ME1-ME2 (except ME1/1) halo tracks=" << m_maxdphi12_accp
265  << "\nMaximum phi difference for ME1-ME3 (except ME1/1) halo tracks=" << m_maxdphi13_accp
266  << "\nMaximum phi difference for ME1/1-ME2 halo tracks=" << m_maxdphi112_accp
267  << "\nMaximum phi difference for ME1/1-ME3 halo tracks=" << m_maxdphi113_accp
268 
269  << "\nMinimum phi difference for track cancellation logic=" << m_mindphip
270  << "\nMinimum phi difference for halo track cancellation logic=" << m_mindphip_halo
271 
272  << "\nParameter for the correction of misaligned 1-2-3-4 straight tracks =" << m_straightp
273  << "\nParameter for the correction of misaligned 1-2-3-4 curved tracks=" << m_curvedp
274  << "\nPhi Offset for MB1A=" << m_mbaPhiOff
275  << "\nPhi Offset for MB1D=" << m_mbbPhiOff
276 
277  << "\nFirmware SP year+month+day:" << m_firmSP
278  << "\nFirmware FA year+month+day:" << m_firmFA
279  << "\nFirmware DD year+month+day:" << m_firmDD
280  << "\nFirmware VM year+month+day:" << m_firmVM;
281 
282 
284 
285  // set core verbosity: for debugging only purpouses
286  // in general the output is handled to Alex Madorsky
287  core_ -> SetVerbose(isCoreVerbose);
288 
289  // Set the SP firmware
290  core_ -> SetSPFirmwareVersion (m_firmSP);
291 
292  // Set the firmware for the CORE
293  int firmVersCore = firmSP_Map.find(m_firmSP)->second;
294  core_ -> SetCoreFirmwareVersion (firmVersCore);
295  edm::LogInfo( "CSCTFSectorProcessor" ) << "\nCore Firmware is set to " << core_ -> GetCoreFirmwareVersion();
296  // ---------------------------------------------------------------------------
297 
298  // Check if parameters were not initialized in both: constuctor (from .cf? file) and initialize method (from EventSetup)
299  if(m_bxa_depth<0) throw cms::Exception("CSCTFSectorProcessor")<<"BXAdepth parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
300  if(m_allowALCTonly<0) throw cms::Exception("CSCTFSectorProcessor")<<"AllowALCTonly parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
301  if(m_allowCLCTonly<0) throw cms::Exception("CSCTFSectorProcessor")<<"AllowCLCTonly parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
302  if(m_preTrigger<0) throw cms::Exception("CSCTFSectorProcessor")<<"PreTrigger parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
303  if(m_mindphip<0) throw cms::Exception("CSCTFSectorProcessor")<<"mindphip parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
304  if(m_mindetap<0) throw cms::Exception("CSCTFSectorProcessor")<<"mindeta parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
305  if(m_straightp<0) throw cms::Exception("CSCTFSectorProcessor")<<"straightp parameter left unitialized for endcap="<<m_endcap<<", sector="<<m_sector;
306  if(m_curvedp<0) throw cms::Exception("CSCTFSectorProcessor")<<"curvedp parameter left unitialized for endcap="<<m_endcap<<",sector="<<m_sector;
307  if(m_mbaPhiOff<0) throw cms::Exception("CSCTFSectorProcessor")<<"mbaPhiOff parameter left unitialized for endcap="<<m_endcap<<",sector="<<m_sector;
308  if(m_mbbPhiOff<0) throw cms::Exception("CSCTFSectorProcessor")<<"mbbPhiOff parameter left unitialized for endcap="<<m_endcap<<",sector="<<m_sector;
309  if(m_mindeta12_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"mindeta_accp12 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
310  if(m_maxdeta12_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"maxdeta_accp12 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
311  if(m_maxdphi12_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"maxdphi_accp12 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
312  if(m_mindeta13_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"mindeta_accp13 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
313  if(m_maxdeta13_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"maxdeta_accp13 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
314  if(m_maxdphi13_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"maxdphi_accp13 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
315  if(m_mindeta112_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"mindeta_accp112 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
316  if(m_maxdeta112_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"maxdeta_accp112 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
317  if(m_maxdphi112_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"maxdphi_accp112 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
318  if(m_mindeta113_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"mindeta_accp113 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
319  if(m_maxdeta113_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"maxdeta_accp113 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
320  if(m_maxdphi113_accp<0) throw cms::Exception("CSCTFSectorProcessor")<<"maxdphi_accp113 parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
321  if(m_mindphip_halo<0) throw cms::Exception("CSCTFSectorProcessor")<<"mindphip_halo parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
322  if(m_mindetap_halo<0) throw cms::Exception("CSCTFSectorProcessor")<<"mindetep_halo parameter left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
323 
324  if(m_widePhi<0) throw cms::Exception("CSCTFSectorProcessor")<<"widePhi parameter left unitialized for endcap="<<m_endcap<<", sector="<<m_sector;
325 
326  for(int index=0; index<8; index++) if(m_etamax[index]<0) throw cms::Exception("CSCTFSectorProcessor")<<"Some ("<<(8-index)<<") of EtaMax parameters left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
327  for(int index=0; index<8; index++) if(m_etamin[index]<0) throw cms::Exception("CSCTFSectorProcessor")<<"Some ("<<(8-index)<<") of EtaMin parameters left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
328  for(int index=0; index<7; index++) if(m_etawin[index]<0) throw cms::Exception("CSCTFSectorProcessor")<<"Some ("<<(6-index)<<") of EtaWindows parameters left uninitialized for endcap="<<m_endcap<<", sector="<<m_sector;
329  if(kill_fiber<0) throw cms::Exception("CSCTFTrackBuilder")<<"kill_fiber parameter left uninitialized";
330  if(run_core<0) throw cms::Exception("CSCTFTrackBuilder")<<"run_core parameter left uninitialized";
331  if(trigger_on_ME1a<0) throw cms::Exception("CSCTFTrackBuilder")<<"trigger_on_ME1a parameter left uninitialized";
332  if(trigger_on_ME1b<0) throw cms::Exception("CSCTFTrackBuilder")<<"trigger_on_ME1b parameter left uninitialized";
333  if(trigger_on_ME2 <0) throw cms::Exception("CSCTFTrackBuilder")<<"trigger_on_ME2 parameter left uninitialized";
334  if(trigger_on_ME3 <0) throw cms::Exception("CSCTFTrackBuilder")<<"trigger_on_ME3 parameter left uninitialized";
335  if(trigger_on_ME4 <0) throw cms::Exception("CSCTFTrackBuilder")<<"trigger_on_ME4 parameter left uninitialized";
336  if(trigger_on_MB1a<0) throw cms::Exception("CSCTFTrackBuilder")<<"trigger_on_MB1a parameter left uninitialized";
337  if(trigger_on_MB1d<0) throw cms::Exception("CSCTFTrackBuilder")<<"trigger_on_MB1d parameter left uninitialized";
340 
341  if(singlesTrackOutput==999) throw cms::Exception("CSCTFTrackBuilder")<<"singlesTrackOutput parameter left uninitialized";
342  if(rescaleSinglesPhi<0) throw cms::Exception("CSCTFTrackBuilder")<<"rescaleSinglesPhi parameter left uninitialized";
343  }
344  if(QualityEnableME1a<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME1a parameter left uninitialized";
345  if(QualityEnableME1b<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME1b parameter left uninitialized";
346  if(QualityEnableME1c<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME1c parameter left uninitialized";
347  if(QualityEnableME1d<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME1d parameter left uninitialized";
348  if(QualityEnableME1e<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME1e parameter left uninitialized";
349  if(QualityEnableME1f<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME1f parameter left uninitialized";
350  if(QualityEnableME2a<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME2a parameter left uninitialized";
351  if(QualityEnableME2b<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME2b parameter left uninitialized";
352  if(QualityEnableME2c<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME2c parameter left uninitialized";
353  if(QualityEnableME3a<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME3a parameter left uninitialized";
354  if(QualityEnableME3b<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME3b parameter left uninitialized";
355  if(QualityEnableME3c<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME3c parameter left uninitialized";
356  if(QualityEnableME4a<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME4a parameter left uninitialized";
357  if(QualityEnableME4b<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME4b parameter left uninitialized";
358  if(QualityEnableME4c<0) throw cms::Exception("CSCTFTrackBuilder")<<"QualityEnableME4c parameter left uninitialized";
359 
360  if (m_firmSP<1) throw cms::Exception("CSCTFSectorProcessor")<< " firmwareSP parameter left uninitialized!!!\n";
361  if (m_firmFA<1) throw cms::Exception("CSCTFSectorProcessor")<< " firmwareFA parameter left uninitialized!!!\n";
362  if (m_firmDD<1) throw cms::Exception("CSCTFSectorProcessor")<< " firmwareDD parameter left uninitialized!!!\n";
363  if (m_firmVM<1) throw cms::Exception("CSCTFSectorProcessor")<< " firmwareVM parameter left uninitialized!!!\n";
364 
365  if ( (m_firmFA != m_firmDD) ||
366  (m_firmFA != m_firmVM) ||
367  (m_firmDD != m_firmVM) )
368  throw cms::Exception("CSCTFSectorProcessor")<< " firmwareFA (=" << m_firmFA << "), "
369  << " firmwareDD (=" << m_firmDD << "), "
370  << " firmwareVM (=" << m_firmVM << ") are NOT identical: it shoultd NOT happen!";
371 
372 }
373 
375  m_bxa_depth = pset.getParameter<unsigned>("BXAdepth");
376  m_allowALCTonly = ( pset.getParameter<bool>("AllowALCTonly") ? 1 : 0 );
377  m_allowCLCTonly = ( pset.getParameter<bool>("AllowCLCTonly") ? 1 : 0 );
378  m_preTrigger = pset.getParameter<unsigned>("PreTrigger");
379 
380  std::vector<unsigned>::const_iterator iter;
381  int index=0;
382  std::vector<unsigned> etawins = pset.getParameter<std::vector<unsigned> >("EtaWindows");
383  for(iter=etawins.begin(),index=0; iter!=etawins.end()&&index<7; iter++,index++) m_etawin[index] = *iter;
384  std::vector<unsigned> etamins = pset.getParameter<std::vector<unsigned> >("EtaMin");
385  for(iter=etamins.begin(),index=0; iter!=etamins.end()&&index<8; iter++,index++) m_etamin[index] = *iter;
386  std::vector<unsigned> etamaxs = pset.getParameter<std::vector<unsigned> >("EtaMax");
387  for(iter=etamaxs.begin(),index=0; iter!=etamaxs.end()&&index<8; iter++,index++) m_etamax[index] = *iter;
388 
389  m_mindphip = pset.getParameter<unsigned>("mindphip");
390  m_mindetap = pset.getParameter<unsigned>("mindetap");
391  m_straightp = pset.getParameter<unsigned>("straightp");
392  m_curvedp = pset.getParameter<unsigned>("curvedp");
393  m_mbaPhiOff = pset.getParameter<unsigned>("mbaPhiOff");
394  m_mbbPhiOff = pset.getParameter<unsigned>("mbbPhiOff");
395  m_widePhi = pset.getParameter<unsigned>("widePhi");
396  m_mindeta12_accp = pset.getParameter<unsigned>("mindeta12_accp");
397  m_maxdeta12_accp = pset.getParameter<unsigned>("maxdeta12_accp");
398  m_maxdphi12_accp = pset.getParameter<unsigned>("maxdphi12_accp");
399  m_mindeta13_accp = pset.getParameter<unsigned>("mindeta13_accp");
400  m_maxdeta13_accp = pset.getParameter<unsigned>("maxdeta13_accp");
401  m_maxdphi13_accp = pset.getParameter<unsigned>("maxdphi13_accp");
402  m_mindeta112_accp = pset.getParameter<unsigned>("mindeta112_accp");
403  m_maxdeta112_accp = pset.getParameter<unsigned>("maxdeta112_accp");
404  m_maxdphi112_accp = pset.getParameter<unsigned>("maxdphi112_accp");
405  m_mindeta113_accp = pset.getParameter<unsigned>("mindeta113_accp");
406  m_maxdeta113_accp = pset.getParameter<unsigned>("maxdeta113_accp");
407  m_maxdphi113_accp = pset.getParameter<unsigned>("maxdphi113_accp");
408  m_mindphip_halo = pset.getParameter<unsigned>("mindphip_halo");
409  m_mindetap_halo = pset.getParameter<unsigned>("mindetap_halo");
410  kill_fiber = pset.getParameter<unsigned>("kill_fiber");
411  run_core = pset.getParameter<bool>("run_core");
412  trigger_on_ME1a = pset.getParameter<bool>("trigger_on_ME1a");
413  trigger_on_ME1b = pset.getParameter<bool>("trigger_on_ME1b");
414  trigger_on_ME2 = pset.getParameter<bool>("trigger_on_ME2");
415  trigger_on_ME3 = pset.getParameter<bool>("trigger_on_ME3");
416  trigger_on_ME4 = pset.getParameter<bool>("trigger_on_ME4");
417  trigger_on_MB1a = pset.getParameter<bool>("trigger_on_MB1a");
418  trigger_on_MB1d = pset.getParameter<bool>("trigger_on_MB1d");
419 
420  singlesTrackOutput = pset.getParameter<unsigned int>("singlesTrackOutput");
421  rescaleSinglesPhi = pset.getParameter<bool>("rescaleSinglesPhi");
422  QualityEnableME1a = pset.getParameter<unsigned int>("QualityEnableME1a");
423  QualityEnableME1b = pset.getParameter<unsigned int>("QualityEnableME1b");
424  QualityEnableME1c = pset.getParameter<unsigned int>("QualityEnableME1c");
425  QualityEnableME1d = pset.getParameter<unsigned int>("QualityEnableME1d");
426  QualityEnableME1e = pset.getParameter<unsigned int>("QualityEnableME1e");
427  QualityEnableME1f = pset.getParameter<unsigned int>("QualityEnableME1f");
428  QualityEnableME2a = pset.getParameter<unsigned int>("QualityEnableME2a");
429  QualityEnableME2b = pset.getParameter<unsigned int>("QualityEnableME2b");
430  QualityEnableME2c = pset.getParameter<unsigned int>("QualityEnableME2c");
431  QualityEnableME3a = pset.getParameter<unsigned int>("QualityEnableME3a");
432  QualityEnableME3b = pset.getParameter<unsigned int>("QualityEnableME3b");
433  QualityEnableME3c = pset.getParameter<unsigned int>("QualityEnableME3c");
434  QualityEnableME4a = pset.getParameter<unsigned int>("QualityEnableME4a");
435  QualityEnableME4b = pset.getParameter<unsigned int>("QualityEnableME4b");
436  QualityEnableME4c = pset.getParameter<unsigned int>("QualityEnableME4c");
437 
438  m_firmSP = pset.getParameter<unsigned int>("firmwareSP");
439  m_firmFA = pset.getParameter<unsigned int>("firmwareFA");
440  m_firmDD = pset.getParameter<unsigned int>("firmwareDD");
441  m_firmVM = pset.getParameter<unsigned int>("firmwareVM");
442 
443 }
444 
446 {
447  for(int i = 0; i < 5; ++i)
448  {
449  if(srLUTs_[FPGAs[i]]) delete srLUTs_[FPGAs[i]]; // delete the pointer
450  srLUTs_[FPGAs[i]] = NULL; // point it at a safe place
451  }
452 
453  delete core_;
454  core_ = NULL;
455 
456  if(ptLUT_) delete ptLUT_;
457  ptLUT_ = NULL;
458 }
459 
461 {
462 
463  if( !ptLUT_ )
464  throw cms::Exception("Initialize CSC TF LUTs first (missed call to CSCTFTrackProducer::beginJob?)")<<"CSCTFSectorProcessor::run";
465 
466 
467  l1_tracks.clear();
468  dt_stubs.clear();
469  stub_vec_filtered.clear();
470 
471  std::vector<csctf::TrackStub> stub_vec = stubs.get();
472 
476  for(std::vector<csctf::TrackStub>::const_iterator itr=stub_vec.begin(); itr!=stub_vec.end(); itr++)
477  switch( itr->station() ){
478  case 5: stub_vec_filtered.push_back(*itr); break; // DT stubs get filtered by the core controll register
479  case 4:
480  switch( itr->getMPCLink() ){
481  case 3: if( (kill_fiber&0x4000)==0 && QualityEnableME4c&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
482  case 2: if( (kill_fiber&0x2000)==0 && QualityEnableME4b&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
483  case 1: if( (kill_fiber&0x1000)==0 && QualityEnableME4a&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
484  default: edm::LogWarning("CSCTFSectorProcessor::run()") << "No MPC sorting for LCT: link="<<itr->getMPCLink()<<"\n";
485  }
486  break;
487  case 3:
488  switch( itr->getMPCLink() ){
489  case 3: if( (kill_fiber&0x0800)==0 && QualityEnableME3c&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
490  case 2: if( (kill_fiber&0x0400)==0 && QualityEnableME3b&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
491  case 1: if( (kill_fiber&0x0200)==0 && QualityEnableME3a&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
492  default: edm::LogWarning("CSCTFSectorProcessor::run()") << "No MPC sorting for LCT: link="<<itr->getMPCLink()<<"\n";
493  }
494  break;
495  case 2:
496  switch( itr->getMPCLink() ){
497  case 3: if( (kill_fiber&0x0100)==0 && QualityEnableME2c&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
498  case 2: if( (kill_fiber&0x0080)==0 && QualityEnableME2b&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
499  case 1: if( (kill_fiber&0x0040)==0 && QualityEnableME2a&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
500  default: edm::LogWarning("CSCTFSectorProcessor::run()") << "No MPC sorting for LCT: link="<<itr->getMPCLink()<<"\n";
501  }
502  break;
503  case 1:
504  switch( itr->getMPCLink() + (3*(CSCTriggerNumbering::triggerSubSectorFromLabels(CSCDetId(itr->getDetId().rawId())) - 1)) ){
505  case 6: if( (kill_fiber&0x0020)==0 && QualityEnableME1f&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
506  case 5: if( (kill_fiber&0x0010)==0 && QualityEnableME1e&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
507  case 4: if( (kill_fiber&0x0008)==0 && QualityEnableME1d&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
508  case 3: if( (kill_fiber&0x0004)==0 && QualityEnableME1c&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
509  case 2: if( (kill_fiber&0x0002)==0 && QualityEnableME1b&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
510  case 1: if( (kill_fiber&0x0001)==0 && QualityEnableME1a&(1<<itr->getQuality()) ) stub_vec_filtered.push_back(*itr); break;
511  default: edm::LogWarning("CSCTFSectorProcessor::run()") << "No MPC sorting for LCT: link="<<itr->getMPCLink()<<"\n";
512  }
513  break;
514  default: edm::LogWarning("CSCTFSectorProcessor::run()") << "Invalid station # encountered: "<<itr->station()<<"\n";
515  }
516 
525  for(std::vector<csctf::TrackStub>::iterator itr=stub_vec_filtered.begin(); itr!=stub_vec_filtered.end(); itr++)
526  {
527  if(itr->station() != 5)
528  {
529  CSCDetId id(itr->getDetId().rawId());
530  unsigned fpga = (id.station() == 1) ? CSCTriggerNumbering::triggerSubSectorFromLabels(id) - 1 : id.station();
531 
532  lclphidat lclPhi;
533  try {
534  lclPhi = srLUTs_[FPGAs[fpga]]->localPhi(itr->getStrip(), itr->getPattern(), itr->getQuality(), itr->getBend());
535  } catch( cms::Exception &e ) {
536  bzero(&lclPhi,sizeof(lclPhi));
537  edm::LogWarning("CSCTFSectorProcessor:run()") << "Exception from LocalPhi LUT in " << FPGAs[fpga]
538  << "(strip="<<itr->getStrip()<<",pattern="<<itr->getPattern()<<",quality="<<itr->getQuality()<<",bend="<<itr->getBend()<<")" <<std::endl;
539  }
540 
541  gblphidat gblPhi;
542  try {
543  unsigned csc_id = itr->cscid();
544  if (!m_gangedME1a) csc_id = itr->cscidSeparateME1a();
545  gblPhi = srLUTs_[FPGAs[fpga]]->globalPhiME(lclPhi.phi_local, itr->getKeyWG(), csc_id);
546 
547  } catch( cms::Exception &e ) {
548  bzero(&gblPhi,sizeof(gblPhi));
549  edm::LogWarning("CSCTFSectorProcessor:run()") << "Exception from GlobalPhi LUT in " << FPGAs[fpga]
550  << "(phi_local="<<lclPhi.phi_local<<",KeyWG="<<itr->getKeyWG()<<",csc="<<itr->cscid()<<")"<<std::endl;
551  }
552 
553  gbletadat gblEta;
554  try {
555  gblEta = srLUTs_[FPGAs[fpga]]->globalEtaME(lclPhi.phi_bend_local, lclPhi.phi_local, itr->getKeyWG(), itr->cscid());
556  } catch( cms::Exception &e ) {
557  bzero(&gblEta,sizeof(gblEta));
558  edm::LogWarning("CSCTFSectorProcessor:run()") << "Exception from GlobalEta LUT in " << FPGAs[fpga]
559  << "(phi_bend_local="<<lclPhi.phi_bend_local<<",phi_local="<<lclPhi.phi_local<<",KeyWG="<<itr->getKeyWG()<<",csc="<<itr->cscid()<<")"<<std::endl;
560  }
561 
562  gblphidat gblPhiDT;
563  try {
564  gblPhiDT = srLUTs_[FPGAs[fpga]]->globalPhiMB(lclPhi.phi_local, itr->getKeyWG(), itr->cscid());
565  } catch( cms::Exception &e ) {
566  bzero(&gblPhiDT,sizeof(gblPhiDT));
567  edm::LogWarning("CSCTFSectorProcessor:run()") << "Exception from GlobalPhi DT LUT in " << FPGAs[fpga]
568  << "(phi_local="<<lclPhi.phi_local<<",KeyWG="<<itr->getKeyWG()<<",csc="<<itr->cscid()<<")"<<std::endl;
569  }
570 
571  itr->setEtaPacked(gblEta.global_eta);
572 
573  if(itr->station() == 1 ) {
574  //&& itr->cscId() > 6) { //only ring 3
575  itr->setPhiPacked(gblPhiDT.global_phi);// convert the DT to convert
576  dt_stubs.push_back(*itr); // send stubs to DT
577  }
578 
579  //reconvert the ME1 LCT to the CSCTF units.
580  //the same iterator is used to fill two containers,
581  //the CSCTF one (stub_vec_filtered) and LCTs sent to DTTF (dt_stubs)
582  itr->setPhiPacked(gblPhi.global_phi);
583 
584  LogDebug("CSCTFSectorProcessor:run()") << "LCT found, processed by FPGA: " << FPGAs[fpga] << std::endl
585  << " LCT now has (eta, phi) of: (" << itr->etaValue() << "," << itr->phiValue() <<")\n";
586  }
587  }
588 
590 
597  std::vector<csc::L1Track> tftks;
598 
599  if(run_core){
600  core_->loadData(processedStubs, m_endcap, m_sector, m_minBX, m_maxBX);
602  m_etamin[0], m_etamin[1], m_etamin[2], m_etamin[3],
603  m_etamin[4], m_etamin[5], m_etamin[6], m_etamin[7],
604  m_etamax[0], m_etamax[1], m_etamax[2], m_etamax[3],
605  m_etamax[4], m_etamax[5], m_etamax[6], m_etamax[7],
606  m_etawin[0], m_etawin[1], m_etawin[2],
607  m_etawin[3], m_etawin[4], m_etawin[5], m_etawin[6],
617  m_minBX, m_maxBX) )
618  {
619  l1_tracks = core_->tracks();
620  }
621 
622  tftks = l1_tracks.get();
623 
629  std::vector<csc::L1Track>::iterator titr = tftks.begin();
630 
631  for(; titr != tftks.end(); titr++)
632  {
633  ptadd thePtAddress(titr->ptLUTAddress());
634  ptdat thePtData = ptLUT_->Pt(thePtAddress);
635 
636  if(thePtAddress.track_fr)
637  {
638  titr->setRank(thePtData.front_rank);
639  titr->setChargeValidPacked(thePtData.charge_valid_front);
640  }
641  else
642  {
643  titr->setRank(thePtData.rear_rank);
644  titr->setChargeValidPacked(thePtData.charge_valid_rear);
645  }
646 
647  if( ((titr->ptLUTAddress()>>16)&0xf)==15 )
648  {
649  int unmodBx = titr->bx();
650  titr->setBx(unmodBx+2);
651  }
652  }
653  } //end of if(run_core)
654 
655  l1_tracks = tftks;
656 
657 
658  // Add-on for singles:
659  CSCTriggerContainer<csctf::TrackStub> myStubContainer[7]; //[BX]
660  // Loop over CSC LCTs if triggering on them:
662  for(std::vector<csctf::TrackStub>::iterator itr=stub_vec_filtered.begin(); itr!=stub_vec_filtered.end(); itr++){
663  int station = itr->station()-1;
664  if(station != 4){
665  int subSector = CSCTriggerNumbering::triggerSubSectorFromLabels(CSCDetId(itr->getDetId().rawId()));
666  int mpc = ( subSector ? subSector-1 : station+1 );
667  if( (mpc==0&&trigger_on_ME1a) || (mpc==1&&trigger_on_ME1b) ||
668  (mpc==2&&trigger_on_ME2) || (mpc==3&&trigger_on_ME3) ||
669  (mpc==4&&trigger_on_ME4) ||
670  (mpc==5&& ( (trigger_on_MB1a&&subSector%2==1) || (trigger_on_MB1d&&subSector%2==0) ) ) ){
671  int bx = itr->getBX() - m_minBX;
672  if( bx<0 || bx>=7 ) edm::LogWarning("CSCTFTrackBuilder::buildTracks()") << " LCT BX is out of ["<<m_minBX<<","<<m_maxBX<<") range: "<<itr->getBX();
673  else
674  if( itr->isValid() ) myStubContainer[bx].push_back(*itr);
675  }
676  }
677  }
678 
679  // Core's input was loaded in a relative time window BX=[0-7)
680  // To relate it to time window of tracks (centred at BX=0) we introduce a shift:
681  int shift = (m_maxBX + m_minBX)/2 - m_minBX;
682 
683  // Now we put tracks from singles in a certain bx
684  // if there were no tracks from the core in this endcap/sector/bx
685  CSCTriggerContainer<csc::L1Track> tracksFromSingles;
686  for(int bx=0; bx<7; bx++)
687  if( myStubContainer[bx].get().size() ){ // VP in this bx
688  bool coreTrackExists = false;
689  // tracks are not ordered to be accessible by bx => loop them all
690  std::vector<csc::L1Track> tracks = l1_tracks.get();
691  for(std::vector<csc::L1Track>::iterator trk=tracks.begin(); trk<tracks.end(); trk++)
692  if( (trk->BX() == bx-shift && trk->outputLink() == singlesTrackOutput)
693  || (((trk->ptLUTAddress()>>16)&0xf)==15 && trk->BX()-2 == bx-shift) ){
694  coreTrackExists = true;
695  break;
696  }
697  if( coreTrackExists == false ){
699  csc::L1Track track(trackId);
700  track.setBx(bx-shift);
702  //CSCCorrelatedLCTDigiCollection singles;
703  std::vector<csctf::TrackStub> stubs = myStubContainer[bx].get();
704  // Select best quality stub, and assign its eta/phi coordinates to the track
705  int qualityME=0, qualityMB=0, ME=100, MB=100, linkME=7;
706  std::vector<csctf::TrackStub>::const_iterator bestStub=stubs.end();
707  for(std::vector<csctf::TrackStub>::const_iterator st_iter=stubs.begin(); st_iter!=stubs.end(); st_iter++){
708  int station = st_iter->station()-1;
709  int subSector = CSCTriggerNumbering::triggerSubSectorFromLabels(CSCDetId(st_iter->getDetId().rawId()));
710  int mpc = ( subSector ? subSector-1 : station+1 );
711  // Sort MB stubs first (priority: quality OR MB1a > MB1b for the same quality)
712  if( mpc==5 && (st_iter->getQuality()>qualityMB || (st_iter->getQuality()==qualityMB&&subSector<MB)) ){
713  qualityMB = st_iter->getQuality();
714  MB = subSector;
715  if(ME>4) bestStub = st_iter; // do not select this stub if ME already had any candidate
716  }
717  // Sort ME stubs (priority: quality OR ME1a > ME1b > ME2 > ME3 > ME4 for the same quality)
718  if( mpc<5 && (st_iter->getQuality()> qualityME
719  || (st_iter->getQuality()==qualityME && mpc< ME)
720  || (st_iter->getQuality()==qualityME && mpc==ME && st_iter->getMPCLink()<linkME))) {
721  qualityME = st_iter->getQuality();
722  ME = mpc;
723  linkME = st_iter->getMPCLink();
724  bestStub = st_iter;
725  }
726  }
727  unsigned rescaled_phi = 999;
728  if (m_firmSP <= 20100210) {
729  // buggy implementation of the phi for singles in the wrapper...
730  // at the end data/emulator have to agree: e.g. wrong in the same way
731  // BUG: getting the lowest 7 bits instead the 7 most significant ones.
732  rescaled_phi = unsigned(24*(bestStub->phiPacked()&0x7f)/128.);
733  }
734  else {
735  // correct implementation :-)
736  rescaled_phi = unsigned(24*(bestStub->phiPacked()>>5)/128.);
737  }
738 
739  unsigned unscaled_phi = bestStub->phiPacked()>>7 ;
740  track.setLocalPhi(rescaleSinglesPhi?rescaled_phi:unscaled_phi);
741  track.setEtaPacked((bestStub->etaPacked()>>2)&0x1f);
742  switch( bestStub->station() ){
743  case 1: track.setStationIds(bestStub->getMPCLink(),0,0,0,0); break;
744  case 2: track.setStationIds(0,bestStub->getMPCLink(),0,0,0); break;
745  case 3: track.setStationIds(0,0,bestStub->getMPCLink(),0,0); break;
746  case 4: track.setStationIds(0,0,0,bestStub->getMPCLink(),0); break;
747  case 5: track.setStationIds(0,0,0,0,bestStub->getMPCLink()); break;
748  default: edm::LogError("CSCTFSectorProcessor::run()") << "Illegal LCT link="<<bestStub->station()<<"\n"; break;
749  }
750  // singles.insertDigi(CSCDetId(st_iter->getDetId().rawId()),*st_iter);
751  //tracksFromSingles.push_back(L1CSCTrack(track,singles));
752  track.setPtLUTAddress( (11<<16) | ((bestStub->etaPacked()<<9)&0xf000) );
753  ptadd thePtAddress( track.ptLUTAddress() );
754  ptdat thePtData = ptLUT_->Pt(thePtAddress);
755  if( thePtAddress.track_fr ){
756  track.setRank(thePtData.front_rank);
757  track.setChargeValidPacked(thePtData.charge_valid_front);
758  } else {
759  track.setRank(thePtData.rear_rank);
760  track.setChargeValidPacked(thePtData.charge_valid_rear);
761  }
762  tracksFromSingles.push_back(track);
763  }
764  }
765  std::vector<csc::L1Track> single_tracks = tracksFromSingles.get();
766  if( single_tracks.size() ) l1_tracks.push_many(single_tracks);
767  // End of add-on for singles
768 
769  return (l1_tracks.get().size() > 0);
770 }
771 
772 // according to the firmware versions print some more information
773 void CSCTFSectorProcessor::printDisclaimer(int firmSP, int firmFA){
774 
775  edm::LogInfo( "CSCTFSectorProcessor" ) << "\n\n"
776  << "******************************* \n"
777  << "*** DISCLAIMER *** \n"
778  << "******************************* \n"
779  << "\n Firmware SP version (year+month+day)=" << firmSP
780  << "\n Firmware FA/VM/DD version (year+month+day)=" << firmFA;
781  if (firmSP==20100210)
782  edm::LogInfo( "CSCTFSectorProcessor" ) << " -> KNOWN BUGS IN THE FIRMWARE:\n"
783  << "\t * Wrong phi assignment for singles\n"
784  << "\t * Wrapper passes to the core only even quality DT stubs\n"
785  << "\n -> BUGS ARE GOING TO BE EMULATED BY THE SOFTWARE\n\n";
786 
787  else
788  edm::LogInfo( "CSCTFSectorProcessor" ) << "\t * Correct phi assignment for singles\n";
789 
790  if (firmSP==20100629){
791  edm::LogInfo( "CSCTFSectorProcessor" ) << "\t * Correct MB quality masking in the wrapper\n";
792  edm::LogInfo( "CSCTFSectorProcessor" ) << "\t * Core is 20100122\n";
793  }
794 
795  if (firmSP==20100728)
796  edm::LogInfo( "CSCTFSectorProcessor" ) << "\t * Inverted MB clocks\n";
797 
798  if (firmSP==20100901)
799  edm::LogInfo( "CSCTFSectorProcessor" ) << "\t * Inverted charge bit\n";
800 
801  if (firmSP==20101011)
802  edm::LogInfo( "CSCTFSectorProcessor" ) << "\t * Added CSC-DT assembling tracks ME1-MB2/1\n";
803 }
#define LogDebug(id)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void setLocalPhi(const unsigned &lphi)
Definition: L1Track.h:36
int i
Definition: DBlmapReader.cc:9
std::vector< T > get() const
ptdat Pt(const ptadd &) const
Definition: CSCTFPtLUT.cc:104
CSCTriggerContainer< csctf::TrackStub > dt_stubs
CSCTFSPCoreLogic * core_
void readParameters(const edm::ParameterSet &pset)
std::vector< csctf::TrackStub > stub_vec_filtered
void initialize(const edm::EventSetup &c)
KK.
void push_back(const T data)
#define NULL
Definition: scimark2.h:8
void setPtLUTAddress(const unsigned &adr)
Definition: L1Track.h:58
void printDisclaimer(int firmSP, int firmFA)
static const std::string FPGAs[5]
void setChargeValidPacked(unsigned valid)
Set Charge Valid.
void push_many(const std::vector< T > data)
void setRank(const unsigned &rank)
Definition: L1Track.h:33
Definition: ME.h:11
void setBx(int bx)
Set Bunch Crossing.
bool run(const unsigned &endcap, const unsigned &sector, const unsigned &latency, const unsigned &etamin1, const unsigned &etamin2, const unsigned &etamin3, const unsigned &etamin4, const unsigned &etamin5, const unsigned &etamin6, const unsigned &etamin7, const unsigned &etamin8, const unsigned &etamax1, const unsigned &etamax2, const unsigned &etamax3, const unsigned &etamax4, const unsigned &etamax5, const unsigned &etamax6, const unsigned &etamax7, const unsigned &etamax8, const unsigned &etawin1, const unsigned &etawin2, const unsigned &etawin3, const unsigned &etawin4, const unsigned &etawin5, const unsigned &etawin6, const unsigned &etawin7, const unsigned &mindphip, const unsigned &mindetap, const unsigned &mindeta12_accp, const unsigned &maxdeta12_accp, const unsigned &maxdphi12_accp, const unsigned &mindeta13_accp, const unsigned &maxdeta13_accp, const unsigned &maxdphi13_accp, const unsigned &mindeta112_accp, const unsigned &maxdeta112_accp, const unsigned &maxdphi112_accp, const unsigned &mindeta113_accp, const unsigned &maxdeta113_accp, const unsigned &maxdphi113_accp, const unsigned &mindphip_halo, const unsigned &mindetap_halo, const unsigned &straightp, const unsigned &curvedp, const unsigned &mbaPhiOff, const unsigned &mbbPhiOff, const unsigned &m_extend_length, const unsigned &m_allowALCTonly, const unsigned &m_allowCLCTonly, const unsigned &m_preTrigger, const unsigned &m_widePhi, const int &minBX, const int &maxBX)
unsigned ptLUTAddress() const
Definition: L1Track.h:56
int j
Definition: DBlmapReader.cc:9
CSCTriggerContainer< csc::L1Track > l1_tracks
tuple pset
Definition: CrabTask.py:85
std::map< std::string, CSCSectorReceiverLUT * > srLUTs_
class pt_address ptadd
class pt_data ptdat
CSCTFSectorProcessor(const unsigned &endcap, const unsigned &sector, const edm::ParameterSet &pset, bool tmb07, const L1MuTriggerScales *scales, const L1MuTriggerPtScale *ptScale)
class global_phi_data gblphidat
const T & get() const
Definition: EventSetup.h:55
void setOutputLink(unsigned oPL)
Definition: L1Track.h:62
T const * product() const
Definition: ESHandle.h:62
class local_phi_data lclphidat
Data Types.
static int triggerSubSectorFromLabels(int station, int chamber)
CSCTriggerContainer< csc::L1Track > tracks() const
MonitorElement ME
void setEtaPacked(unsigned eta)
Set Eta: 6-bit code.
tuple config
Definition: cmsDriver.py:17
static unsigned int const shift
bool run(const CSCTriggerContainer< csctf::TrackStub > &)
void setStationIds(const unsigned &me1, const unsigned &me2, const unsigned &me3, const unsigned &me4, const unsigned &mb1)
Definition: L1Track.cc:123
void loadData(const CSCTriggerContainer< csctf::TrackStub > &, const unsigned &endcap, const unsigned &sector, const int &minBX, const int &maxBX)
CSCTriggerContainer< csc::L1Track > tracks()
class global_eta_data gbletadat
std::map< int, int > firmSP_Map