ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/CheckPrescales.py
Revision: 1.1
Committed: Thu Mar 22 17:37:23 2012 UTC (13 years, 1 month ago) by amott
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-00-18
Log Message:
initial commit

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