ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/CheckPrescales.py
Revision: 1.4
Committed: Mon Mar 26 09:40:56 2012 UTC (13 years, 1 month ago) by amott
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-00-24, V00-00-23, V00-00-22, V00-00-21, V00-00-20
Changes since 1.3: +61 -14 lines
Log Message:
some improvements

File Contents

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