CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
l1GtPatternGenerator_cfi.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
3 
4 l1GtPatternGenerator = cms.EDAnalyzer("L1GtPatternGenerator",
5  # input tags for various records
6  GtInputTag = cms.InputTag("gtDigis"),
7  GmtInputTag = cms.InputTag("gmtDigis"),
8  GctInputTag = cms.InputTag("gctDigis"),
9  CscInputTag = cms.InputTag("gtDigis", "CSC"),
10  DtInputTag = cms.InputTag("gtDigis", "DT"),
11  RpcbInputTag = cms.InputTag("gtDigis", "RPCb"),
12  RpcfInputTag = cms.InputTag("gtDigis", "RPCf"),
13 
14  # file name
15  PatternFileName = cms.string("GT_GMT_patterns.txt"),
16 
17  # bunch crossing numbers to write
18  bx = cms.vint32(0),
19 
20  # header
21  PatternFileHeader = cms.string(
22 """#GT_GMT_patterns_VD
23 #
24 # editors - HB 220606
25 #
26 # remarks:
27 # values in this template are for version VD (same as VB) for the cond-chips of GTL9U (from IVAN)
28 #
29 # syntax:
30 # character "#" indicates a comment line
31 # header line 1 => hardware of sim- and spy-memories
32 # header line 2 => hardware location (FPGA-chip) of sim-memories
33 # header line 3 => channel number of sim-memories (PSB)
34 # header line 4 => hardware location (FPGA-chip) of spy-memories
35 # header line 5 => name of patterns
36 # header line 6 => number of objects (calos, muons) or other declarations
37 # (header line 7 => only graphics)
38 # (header line 8 => only text and graphics)
39 # header line 9 => number of columns, starting with 0
40 #
41 # patterns:
42 # values in column 0 are event numbers (decimal), starting with 0 (synchronisation data)
43 # patterns for 1024 events (memories of cond-chips on GTL9U can contain only 1024 events) are in this file
44 # values in columns 1-119 are the hexadecimal patterns, the rightmost digit in a string is LSB
45 #
46 # header:
47 # e |<--------------------------------------------------------------------------PSB/GTL9U(REC)------------------------------------------------------------------------------------------------------------->|<--------------------------------------------------------------------------PSB/GMT(AUF,AUB)--------------------------------------------------------------------------------------------------------------------------------------------------->|<----------------------------------------------------------------GMT REGIONAL MUONs----------------------------------------------------------->|<----GMT(SORT)/GTL9U(REC)----->|<--------------GTL9U(COND)/FDL(ALGO)---------------->|<-----------FDL----------->|
48 # v |PSB slot13/ch6+7 |PSB slot13/ch4+5 |PSB slot13/ch2+3 |PSB slot13/ch0+1 |PSB slot14/ch6+7 |PSB slot14/ch4+5 |PSB slot14/ch2+3 |PSB slot14/ch0+1 |PSB slot15/ch2+3 |PSB slot15/ch0+1 |PSB slot19/ch6+7 |PSB slot19/ch4+5 |PSB slot19/ch2+3 |PSB slot19/ch0+1 |PSB slot20/ch6+7 |PSB slot20/ch4+5 |PSB slot20/ch2+3 |PSB slot20/ch0+1 |PSB slot21/ch6+7 |PSB slot21/ch4+5 |PSB slot21/ch2+3 |PSB slot21/ch0+1 |GMT INF |GMT INC |GMT IND |GMT INB |GMT SORT |COND1 |COND2 |PSB slot9/ch0+1 |FINOR |
49 # e |ch6 ch7 ch6 ch7 |ch4 ch5 ch4 ch5 |ch2 ch3 ch2 ch3 |ch0 ch1 ch0 ch1 |ch6 ch7 ch6 ch7 |ch4 ch5 ch4 ch5 |ch2 ch3 ch2 ch3 |ch0 ch1 ch0 ch1 |ch2 ch3 ch2 ch3 |ch0 ch1 ch0 ch1 |ch6 ch7 ch6 ch7 |ch4 ch5 ch4 ch5 |ch2 ch3 ch2 ch3 |ch0 ch1 ch0 ch1 |ch6 ch7 ch6 ch7 |ch4 ch5 ch4 ch5 |ch2 ch3 ch2 ch3 |ch0 ch1 ch0 ch1 |ch6 ch7 ch6 ch7 |ch4 ch5 ch4 ch5 |ch2 ch3 ch2 ch3 |ch0 ch1 ch0 ch1 | | | | | | | |ch0 ch1 ch0 ch1 | |
50 # n |GTL9U REC1 |GTL9U REC1 |GTL9U REC2 |GTL9U REC2 |GTL9U REC2 |GTL9U REC2 |GTL9U REC3 |GTL9U REC3 |GTL9U REC3 |GTL9U REC3 |GMT AUF |GMT AUF |GMT AUB |GMT AUB |GMT AUF |GMT AUF |GMT AUB |GMT AUB |GMT AUF |GMT AUF |GMT AUB |GMT AUB | | | | |GTL9U REC1 |FDL ALGO |FDL ALGO |FDL ALGO | |
51 # t |calo1 (ieg) |calo2 (eg) |calo3 (jet) |calo4 (fwdjet) |calo5 (tau) |calo6 (esums) |calo7 (hfbc/etsums)|calo8 (free) |calo9 (totem) |calo10 (free) |MQF4 |MQF3 |MQB2 |MQB1 |MQF8 |MQF7 |MQB6 |MQB5 |MQF12 |MQF11 |MQB10 |MQB9 |RPC forward |CSC |DT |RPC barrel |muon (sorted four) |algo |algo |techtrigger | |
52 # | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 |45M 45Q 6M 6Q |45M 45Q 6M 6Q |01M 01Q 23M 23Q |01M 01Q 23M 23Q |45M 45Q 6M 6Q |45M 45Q 6M 6Q |01M 01Q 23M 23Q |01M 01Q 23M 23Q |45M 45Q 6M 6Q |45M 45Q 6M 6Q |01M 01Q 23M 23Q |01M 01Q 23M 23Q | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 | 1 2 3 4 |191--160 159--128 127---96|95----64 63----32 31-----0|15-0 47-32 31-16 63-48| |
53 # | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
54 # columns: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
55 # 0 | 1 2 3 4 | 5 6 7 8 | 9 10 11 12 | 13 14 15 16 | 17 18 19 20 | 21 22 23 24 | 25 26 27 28 | 29 30 31 32 | 33 34 35 36 | 37 38 39 40 | 41 42 43 44 | 45 46 47 48 | 49 50 51 52 | 53 54 55 56 | 57 58 59 60 | 61 62 63 64 | 65 66 67 68 | 69 70 71 72 | 73 74 75 76 | 77 78 79 80 | 81 82 83 84 | 85 86 87 88 | 89 90 91 92 | 93 94 95 96 | 97 98 99 100 | 101 102 103 104 | 105 106 107 108 | 109 110 111 | 112 113 114 | 115 116 117 118|119 |
56 """),
57 
58  # footer
59  PatternFileFooter = cms.string(""),
60 
61  # A vector of column names to be written for each pattern file line
62  PatternFileColumns = cms.vstring(),
63  # A vector of the lengths (in bits!) of each column
64  PatternFileLengths = cms.vuint32(),
65  # A vector of default values for each column
66  PatternFileDefaultValues = cms.vuint32(),
67 
68  # By default, do not add comments with detailed information
69  DebugOutput = cms.bool(False)
70 )
71 
72 def addBlock(analyzer, name, count, length, default):
73  for i in range(1,count+1):
74  analyzer.PatternFileColumns.append("%s%d" % (name, i))
75  analyzer.PatternFileLengths.append(length)
76  analyzer.PatternFileDefaultValues.append(default)
77 
78 def addPSB(analyzer, name):
79  addBlock(analyzer, name, 4, 16, 0)
80 
81 
82 def addRegionalMuons(analyzer, name):
83  # regional muons are different - they need to have a default of 0x0000ff00 when
84  # empty to make input cable disconnects recognizable
85  addBlock(analyzer, name, 4, 32, 0x0000ff00)
86 
87 def addGMTMuons(analyzer, name):
88  addBlock(analyzer, name, 4, 26, 0)
89 
90 # set up format:
91 fields = l1GtPatternGenerator.PatternFileColumns
92 lengths = l1GtPatternGenerator.PatternFileLengths
93 defaults = l1GtPatternGenerator.PatternFileDefaultValues
94 
95 # column 1..20: some fairly standard PSBs (calo1 - calo5)
96 for name in [ "gctIsoEm", "gctEm", "cenJet", "forJet", "tauJet" ]:
97  addPSB(l1GtPatternGenerator, name)
98 
99 # then the energy sums, which are slightly more complicated
100 # (calo6)
101 fields += ["etTotal1", "etMiss1", "etHad1", "etMissPhi1"]
102 lengths += [ 16, 16, 16, 16]
103 defaults += [ 0, 0, 0, 0]
104 
105 # HF bit counts / etsums (which are mangled in the C++ code)
106 # (calo7)
107 fields += [ "hfPsbValue1_l", "htMiss1", "hfPsbValue1_h", "unknown"]
108 lengths += [ 16, 16, 16, 16]
109 defaults += [ 0, 0, 0, 0]
110 
111 # calo8 - free
112 addPSB(l1GtPatternGenerator, "unknown")
113 
114 # calo9 - "totem", currently
115 addPSB(l1GtPatternGenerator, "unknown")
116 
117 # calo 10
118 # BPTX/Castor and TBD data - default to 0xffff to get BPTX triggers matching GT emulator
119 addBlock(l1GtPatternGenerator, "unknown", 4, 16, 0xffff)
120 
121 # 12 more PSBs we don't fill
122 for i in range(12):
123  addPSB(l1GtPatternGenerator, "unknown")
124 
125 # regional muons
126 addRegionalMuons(l1GtPatternGenerator, "fwdMuon")
127 addRegionalMuons(l1GtPatternGenerator, "cscMuon")
128 addRegionalMuons(l1GtPatternGenerator, "dtMuon")
129 addRegionalMuons(l1GtPatternGenerator, "brlMuon")
130 
131 # global muons
132 addGMTMuons(l1GtPatternGenerator, "gmtMuon")
133 
134 # GT stuff
135 addBlock(l1GtPatternGenerator, "gtDecisionExt", 2, 32, 0)
136 addBlock(l1GtPatternGenerator, "gtDecision", 4, 32, 0)
137 
138 # tech triggers: a bit complicated, since we like to mix up
139 # half-words (see header)
140 fields += ["gtTechTrigger1_l", "gtTechTrigger2_l", "gtTechTrigger1_h", "gtTechTrigger2_h"]
141 lengths += [ 16, 16, 16, 16]
142 defaults += [ 0, 0, 0, 0]
143 
144 fields += ["gtFinalOr"]
145 lengths += [ 9]
146 defaults += [ 0]
147 
148 # just to make sure the python magic adds up to the proper output format
149 if len(fields) != 119:
150  raise ValueError("Expecting 119 data fields (120 - event number) in pattern file format, got %d!" % len(fields) )
151 
152 # For debugging: Get an overview of your pattern file format
153 #print fields
154 #print lengths
155 #print defaults