ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/CheckPrescales.py
Revision: 1.3
Committed: Sat Mar 24 21:24:55 2012 UTC (13 years, 1 month ago) by amott
Content type: text/x-python
Branch: MAIN
Changes since 1.2: +8 -4 lines
Log Message:
Update to work with JSON maker

File Contents

# User Rev Content
1 amott 1.1 #!/usr/bin/env python
2    
3     import sys
4     import os
5     from DatabaseParser import ConnectDB
6    
7     def usage():
8 amott 1.2 print sys.argv[0] + " HLTKey GTKey GTRS Key [PSColsToIgnore]"
9 amott 1.1
10     def main():
11    
12 amott 1.2 if len(sys.argv) < 4 or len(sys.argv)>5:
13 amott 1.1 usage()
14     sys.exit(0)
15    
16     HLT_Key = sys.argv[1]
17     GT_Key = sys.argv[2]
18 amott 1.2 GTRS_Key = sys.argv[3]
19     PSColsToIgnore = []
20     if len(sys.argv)==5:
21     for c in sys.argv[4].split(','):
22     try:
23     PSColsToIgnore.append(int(c))
24     except:
25     print "ERROR: %s is not a valid prescale column" % c
26 amott 1.3 GetPrescaleTable(HLT_Key,GT_Key,GTRS_Key,PSColsToIgnore,True)
27    
28     def GetPrescaleTable(HLT_Key,GT_Key,GTRS_Key,PSColsToIgnore,doPrint):
29 amott 1.1 curs = ConnectDB('hlt')
30    
31     ## Get the HLT seeds
32     sqlquery ="""
33     SELECT I.NAME,A.VALUE
34     FROM
35     CMS_HLT.STRINGPARAMVALUES A,
36     CMS_HLT.PARAMETERS B,
37     CMS_HLT.SUPERIDPARAMETERASSOC C,
38     CMS_HLT.MODULETEMPLATES D,
39     CMS_HLT.MODULES E,
40     CMS_HLT.PATHMODULEASSOC F,
41     CMS_HLT.CONFIGURATIONPATHASSOC G,
42     CMS_HLT.CONFIGURATIONS H,
43     CMS_HLT.PATHS I
44     WHERE
45     A.PARAMID = C.PARAMID AND
46     B.PARAMID = C.PARAMID AND
47     B.NAME = 'L1SeedsLogicalExpression' AND
48     C.SUPERID = F.MODULEID AND
49     D.NAME = 'HLTLevel1GTSeed' AND
50     E.TEMPLATEID = D.SUPERID AND
51     F.MODULEID = E.SUPERID AND
52     F.PATHID=G.PATHID AND
53     I.PATHID=G.PATHID AND
54     G.CONFIGID=H.CONFIGID AND
55     H.CONFIGDESCRIPTOR='%s'
56     ORDER BY A.VALUE
57     """ % (HLT_Key,)
58     curs.execute(sqlquery)
59     HLTSeed = {}
60     for HLTPath,L1Seed in curs.fetchall():
61     if not HLTSeed.has_key(HLTPath): ## this should protect us from L1_SingleMuOpen
62     HLTSeed[HLTPath] = L1Seed.lstrip('"').rstrip('"')
63    
64     HLTPrescales = GetHLTPrescaleMatrix(curs,HLT_Key)
65    
66     L1Names = {}
67     ## get the L1 algo names associated with each algo bit
68     AlgoNameQuery = """SELECT ALGO_INDEX, ALIAS FROM CMS_GT.L1T_MENU_ALGO_VIEW
69     WHERE MENU_IMPLEMENTATION IN (SELECT L1T_MENU_FK FROM CMS_GT.GT_SETUP WHERE ID='%s')
70     ORDER BY ALGO_INDEX""" % (GT_Key,)
71     curs.execute(AlgoNameQuery)
72     for index,name in curs.fetchall():
73     L1Names[name] = index
74    
75     L1Prescales = GetL1AlgoPrescales(curs,GTRS_Key)
76    
77     FullPrescales = {}
78     formatString = "%60s%30s%50s%50s%50s"
79 amott 1.3 if doPrint:
80     print "List of triggers with non-sequential prescales:"
81     print formatString % ("HLT Name","L1 Name","Total","HLT","L1",)
82 amott 1.1 for HLTName,L1Seeds in HLTSeed.iteritems():
83     if HLTName.startswith('AlCa'): ## the results don't make sense for AlCa paths
84     continue
85     if L1Seeds.isdigit(): ## skip TT seeded paths
86     continue
87     thisL1PS = []
88     for seed in L1Seeds.split(' OR '): ## unwind the OR of multiple seeds
89     if seed.isdigit():
90     continue
91     if not L1Names.has_key(seed):
92     print "WARNING: %s uses non-existant L1 seed: %s" % (HLTName,seed,)
93     tmp = L1Prescales[L1Names[seed]]
94     if len(thisL1PS)==0:
95     thisL1PS = tmp ## just set it for the first one
96     else:
97     for i,a,b in zip(range(len(tmp)),thisL1PS,tmp):
98     if b<a:
99     thisL1PS[i] = b # choose the minimum PS for each column
100     if len(thisL1PS)==0:
101     continue ## this probably means that the seeding was an OR of TTs
102     if HLTPrescales.has_key(HLTName): ## if the HLT path is totally unprescaled it won't be listed in the PS service
103     thisHLTPS = HLTPrescales[HLTName]
104     else:
105     thisHLTPS = [1]*len(thisL1PS)
106     if not len(thisHLTPS) == len(thisL1PS):
107     print "Incompatible number of prescales columns for trigger %s" % HLTName
108     continue
109     prescales = []
110     for hlt,l1 in zip(thisHLTPS,thisL1PS):
111     prescales.append(hlt*l1)
112     #print HLTName+" HLT: "+str(thisHLTPS)+" L1: "+str(thisL1PS)+" Total: "+str(prescales)
113 amott 1.3 if not isSequential(prescales,PSColsToIgnore) and doPrint:
114 amott 1.1 print formatString % (HLTName,L1Seeds,prescales,thisHLTPS,thisL1PS,)
115     FullPrescales[HLTName] = prescales
116 amott 1.3 return FullPrescales
117 amott 1.1
118     def GetHLTPrescaleMatrix(cursor,HLT_Key):
119     ## Get the config ID
120     configIDQuery = "SELECT CONFIGID FROM CMS_HLT.CONFIGURATIONS WHERE CONFIGDESCRIPTOR='%s'" % (HLT_Key,)
121     cursor.execute(configIDQuery)
122     ConfigId, = cursor.fetchone()
123    
124     SequencePathQuery ="""
125     SELECT F.SEQUENCENB,J.VALUE TRIGGERNAME
126     FROM CMS_HLT.CONFIGURATIONSERVICEASSOC A
127     , CMS_HLT.SERVICES B
128     , CMS_HLT.SERVICETEMPLATES C
129     , CMS_HLT.SUPERIDVECPARAMSETASSOC D
130     , CMS_HLT.VECPARAMETERSETS E
131     , CMS_HLT.SUPERIDPARAMSETASSOC F
132     , CMS_HLT.PARAMETERSETS G
133     , CMS_HLT.SUPERIDPARAMETERASSOC H
134     , CMS_HLT.PARAMETERS I
135     , CMS_HLT.STRINGPARAMVALUES J
136     WHERE A.CONFIGID= %d
137     AND A.SERVICEID=B.SUPERID
138     AND B.TEMPLATEID=C.SUPERID
139     AND C.NAME='PrescaleService'
140     AND B.SUPERID=D.SUPERID
141     AND D.VPSETID=E.SUPERID
142     AND E.NAME='prescaleTable'
143     AND D.VPSETID=F.SUPERID
144     AND F.PSETID=G.SUPERID
145     AND G.SUPERID=H.SUPERID
146     AND I.PARAMID=H.PARAMID
147     AND I.NAME='pathName'
148     AND J.PARAMID=H.PARAMID
149     ORDER BY F.SEQUENCENB
150     """ % (ConfigId,)
151    
152     cursor.execute(SequencePathQuery)
153     HLTSequenceMap = {}
154     for seq,name in cursor.fetchall():
155     name = name.lstrip('"').rstrip('"')
156     HLTSequenceMap[seq]=name
157    
158     SequencePrescaleQuery="""
159     SELECT F.SEQUENCENB,J.SEQUENCENB,J.VALUE
160     FROM CMS_HLT.CONFIGURATIONSERVICEASSOC A
161     , CMS_HLT.SERVICES B
162     , CMS_HLT.SERVICETEMPLATES C
163     , CMS_HLT.SUPERIDVECPARAMSETASSOC D
164     , CMS_HLT.VECPARAMETERSETS E
165     , CMS_HLT.SUPERIDPARAMSETASSOC F
166     , CMS_HLT.PARAMETERSETS G
167     , CMS_HLT.SUPERIDPARAMETERASSOC H
168     , CMS_HLT.PARAMETERS I
169     , CMS_HLT.VUINT32PARAMVALUES J
170     WHERE A.CONFIGID=%d
171     AND A.SERVICEID=B.SUPERID
172     AND B.TEMPLATEID=C.SUPERID
173     AND C.NAME='PrescaleService'
174     AND B.SUPERID=D.SUPERID
175     AND D.VPSETID=E.SUPERID
176     AND E.NAME='prescaleTable'
177     AND D.VPSETID=F.SUPERID
178     AND F.PSETID=G.SUPERID
179     AND G.SUPERID=H.SUPERID
180     AND I.PARAMID=H.PARAMID
181     AND I.NAME='prescales'
182     AND J.PARAMID=H.PARAMID
183     ORDER BY F.SEQUENCENB,J.SEQUENCENB
184     """ % (ConfigId,)
185    
186     #print HLTSequenceMap
187     cursor.execute(SequencePrescaleQuery)
188     HLTPrescaleTable= {}
189     lastIndex=-1
190     lastSeq=-1
191     row = []
192     for seq,index,val in cursor.fetchall():
193     if lastIndex!=index-1:
194     HLTPrescaleTable[HLTSequenceMap[seq-1]] = row
195     row=[]
196     lastSeq=seq
197     lastIndex=index
198     row.append(val)
199    
200     return HLTPrescaleTable
201    
202     def GetL1AlgoPrescales(curs, GTRS_Key):
203     L1PrescalesQuery= """
204     SELECT
205     PRESCALE_FACTOR_ALGO_000,PRESCALE_FACTOR_ALGO_001,PRESCALE_FACTOR_ALGO_002,PRESCALE_FACTOR_ALGO_003,PRESCALE_FACTOR_ALGO_004,PRESCALE_FACTOR_ALGO_005,
206     PRESCALE_FACTOR_ALGO_006,PRESCALE_FACTOR_ALGO_007,PRESCALE_FACTOR_ALGO_008,PRESCALE_FACTOR_ALGO_009,PRESCALE_FACTOR_ALGO_010,PRESCALE_FACTOR_ALGO_011,
207     PRESCALE_FACTOR_ALGO_012,PRESCALE_FACTOR_ALGO_013,PRESCALE_FACTOR_ALGO_014,PRESCALE_FACTOR_ALGO_015,PRESCALE_FACTOR_ALGO_016,PRESCALE_FACTOR_ALGO_017,
208     PRESCALE_FACTOR_ALGO_018,PRESCALE_FACTOR_ALGO_019,PRESCALE_FACTOR_ALGO_020,PRESCALE_FACTOR_ALGO_021,PRESCALE_FACTOR_ALGO_022,PRESCALE_FACTOR_ALGO_023,
209     PRESCALE_FACTOR_ALGO_024,PRESCALE_FACTOR_ALGO_025,PRESCALE_FACTOR_ALGO_026,PRESCALE_FACTOR_ALGO_027,PRESCALE_FACTOR_ALGO_028,PRESCALE_FACTOR_ALGO_029,
210     PRESCALE_FACTOR_ALGO_030,PRESCALE_FACTOR_ALGO_031,PRESCALE_FACTOR_ALGO_032,PRESCALE_FACTOR_ALGO_033,PRESCALE_FACTOR_ALGO_034,PRESCALE_FACTOR_ALGO_035,
211     PRESCALE_FACTOR_ALGO_036,PRESCALE_FACTOR_ALGO_037,PRESCALE_FACTOR_ALGO_038,PRESCALE_FACTOR_ALGO_039,PRESCALE_FACTOR_ALGO_040,PRESCALE_FACTOR_ALGO_041,
212     PRESCALE_FACTOR_ALGO_042,PRESCALE_FACTOR_ALGO_043,PRESCALE_FACTOR_ALGO_044,PRESCALE_FACTOR_ALGO_045,PRESCALE_FACTOR_ALGO_046,PRESCALE_FACTOR_ALGO_047,
213     PRESCALE_FACTOR_ALGO_048,PRESCALE_FACTOR_ALGO_049,PRESCALE_FACTOR_ALGO_050,PRESCALE_FACTOR_ALGO_051,PRESCALE_FACTOR_ALGO_052,PRESCALE_FACTOR_ALGO_053,
214     PRESCALE_FACTOR_ALGO_054,PRESCALE_FACTOR_ALGO_055,PRESCALE_FACTOR_ALGO_056,PRESCALE_FACTOR_ALGO_057,PRESCALE_FACTOR_ALGO_058,PRESCALE_FACTOR_ALGO_059,
215     PRESCALE_FACTOR_ALGO_060,PRESCALE_FACTOR_ALGO_061,PRESCALE_FACTOR_ALGO_062,PRESCALE_FACTOR_ALGO_063,PRESCALE_FACTOR_ALGO_064,PRESCALE_FACTOR_ALGO_065,
216     PRESCALE_FACTOR_ALGO_066,PRESCALE_FACTOR_ALGO_067,PRESCALE_FACTOR_ALGO_068,PRESCALE_FACTOR_ALGO_069,PRESCALE_FACTOR_ALGO_070,PRESCALE_FACTOR_ALGO_071,
217     PRESCALE_FACTOR_ALGO_072,PRESCALE_FACTOR_ALGO_073,PRESCALE_FACTOR_ALGO_074,PRESCALE_FACTOR_ALGO_075,PRESCALE_FACTOR_ALGO_076,PRESCALE_FACTOR_ALGO_077,
218     PRESCALE_FACTOR_ALGO_078,PRESCALE_FACTOR_ALGO_079,PRESCALE_FACTOR_ALGO_080,PRESCALE_FACTOR_ALGO_081,PRESCALE_FACTOR_ALGO_082,PRESCALE_FACTOR_ALGO_083,
219     PRESCALE_FACTOR_ALGO_084,PRESCALE_FACTOR_ALGO_085,PRESCALE_FACTOR_ALGO_086,PRESCALE_FACTOR_ALGO_087,PRESCALE_FACTOR_ALGO_088,PRESCALE_FACTOR_ALGO_089,
220     PRESCALE_FACTOR_ALGO_090,PRESCALE_FACTOR_ALGO_091,PRESCALE_FACTOR_ALGO_092,PRESCALE_FACTOR_ALGO_093,PRESCALE_FACTOR_ALGO_094,PRESCALE_FACTOR_ALGO_095,
221     PRESCALE_FACTOR_ALGO_096,PRESCALE_FACTOR_ALGO_097,PRESCALE_FACTOR_ALGO_098,PRESCALE_FACTOR_ALGO_099,PRESCALE_FACTOR_ALGO_100,PRESCALE_FACTOR_ALGO_101,
222     PRESCALE_FACTOR_ALGO_102,PRESCALE_FACTOR_ALGO_103,PRESCALE_FACTOR_ALGO_104,PRESCALE_FACTOR_ALGO_105,PRESCALE_FACTOR_ALGO_106,PRESCALE_FACTOR_ALGO_107,
223     PRESCALE_FACTOR_ALGO_108,PRESCALE_FACTOR_ALGO_109,PRESCALE_FACTOR_ALGO_110,PRESCALE_FACTOR_ALGO_111,PRESCALE_FACTOR_ALGO_112,PRESCALE_FACTOR_ALGO_113,
224     PRESCALE_FACTOR_ALGO_114,PRESCALE_FACTOR_ALGO_115,PRESCALE_FACTOR_ALGO_116,PRESCALE_FACTOR_ALGO_117,PRESCALE_FACTOR_ALGO_118,PRESCALE_FACTOR_ALGO_119,
225     PRESCALE_FACTOR_ALGO_120,PRESCALE_FACTOR_ALGO_121,PRESCALE_FACTOR_ALGO_122,PRESCALE_FACTOR_ALGO_123,PRESCALE_FACTOR_ALGO_124,PRESCALE_FACTOR_ALGO_125,
226     PRESCALE_FACTOR_ALGO_126,PRESCALE_FACTOR_ALGO_127
227     FROM CMS_GT.GT_FDL_PRESCALE_FACTORS_ALGO A, CMS_GT.GT_RUN_SETTINGS_PRESC_VIEW B
228     WHERE A.ID=B.PRESCALE_FACTORS_ALGO_FK AND B.ID='%s'
229     """ % (GTRS_Key,)
230     curs.execute(L1PrescalesQuery)
231     ## This is pretty horrible, but this how you get them!!
232     tmp = curs.fetchall()
233     L1PrescaleTable = []
234     for ps in tmp[0]: #build the prescale table initially
235     L1PrescaleTable.append([ps])
236     for line in tmp[1:]: # now fill it
237     for ps,index in zip(line,range(len(line))):
238     L1PrescaleTable[index].append(ps)
239     return L1PrescaleTable
240    
241 amott 1.2 def isSequential(row,ignore):
242 amott 1.1 seq = True
243 amott 1.2 lastEntry=999999999999
244     for i,entry in enumerate(row):
245     if i in ignore:
246     continue
247 amott 1.1 if entry > lastEntry and lastEntry!=0:
248     seq = False
249     break
250     lastEntry = entry
251     return seq
252    
253     if __name__=='__main__':
254     main()