Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-25 02:29:57

0001 import FWCore.ParameterSet.Config as cms
0002 
0003 
0004 def RemoveFlag(sevLevelComputer,flag="HFLongShort"):
0005     ''' Removes the specified flag from the Severity Level Computer,
0006     and returns the revised Computer.'''
0007     
0008     removeSeverity=-1 # Track which Severity Level has been modified
0009 
0010 
0011 
0012     # Loop over all levels
0013     for i in range(len(sevLevelComputer.SeverityLevels)):
0014         Flags=sevLevelComputer.SeverityLevels[i].RecHitFlags.value()
0015         if flag not in Flags:  # Flag not present for this level
0016             continue
0017         #Remove flag
0018         Flags.remove(flag)
0019         ChanStat=sevLevelComputer.SeverityLevels[i].ChannelStatus.value()
0020         # Check to see if Severity Level no longer contains any useful information
0021         if len(Flags)==0 and ChanStat==['']:
0022             removeSeverity=i
0023         else:
0024             # Set revised list of flags for this severity level
0025             sevLevelComputer.SeverityLevels[i].RecHitFlags=Flags
0026         break
0027 
0028     # Removing flag results in empty severity level; remove it
0029     if (removeSeverity>-1):
0030         sevLevelComputer.SeverityLevels.remove(sevLevelComputer.SeverityLevels[removeSeverity])
0031 
0032     return sevLevelComputer
0033 
0034 
0035 def PrintLevels(SLComp):
0036     print("Severity Level Computer Levels and associated flags/Channel Status values:")
0037     for i in SLComp.SeverityLevels:
0038         print("\t Level = %i"%i.Level.value())
0039         print("\t\t RecHit Flags = %s"%i.RecHitFlags.value())
0040         print("\t\t Channel Status = %s"%i.ChannelStatus.value())
0041         print()
0042     return
0043 
0044 
0045 def AddFlag(sevLevelComputer,flag="UserDefinedBit0",severity=10,verbose=True):
0046     ''' Adds specified flag to severity level computer using specified severity level.
0047         If flag already exists at another severity level, it is removed from that level.
0048         '''
0049     
0050     AddedSeverity=False
0051     removeSeverity=-1
0052 
0053     allowedflags=[]
0054     for i in sevLevelComputer.SeverityLevels:
0055         for j in i.RecHitFlags.value():
0056             if j=="":
0057                 continue
0058             allowedflags.append(j)
0059             
0060     #print "Allowed flags = ",allowedflags
0061     if flag not in allowedflags and verbose:
0062         print("\n\n")
0063         for j in range(0,3):
0064             print("###################################################")
0065         print("\nWARNING!!!!!! You are adding a flag \n\t'%s' \nthat is not defined in the Severity Level Computer!"%flag)
0066         print("This can be EXCEPTIONALLY dangerous if you do not \nknow what you are doing!\n")
0067         print("Proceed with EXTREME caution!\n")
0068         for j in range(0,3):
0069             print("###################################################")
0070         print("\n\n")
0071 
0072     #Loop over severity Levels
0073     for i in range(len(sevLevelComputer.SeverityLevels)):
0074         Level=sevLevelComputer.SeverityLevels[i].Level.value()
0075         Flags=sevLevelComputer.SeverityLevels[i].RecHitFlags.value()
0076         if Level==severity:  # Found the specified level
0077             if (Flags==['']):
0078                 Flags=[flag] # Create new vector for this flag
0079             else:
0080                 if flag not in Flags:  # don't need to add flag if it's already there
0081                     Flags.append(flag) # append flag to existing vector
0082             sevLevelComputer.SeverityLevels[i].RecHitFlags=Flags  # Set new RecHitFlags vector
0083             AddedSeverity=True
0084         else:  # Found some other level; be sure to remove flag from it
0085             if flag not in Flags:
0086                 continue
0087             else:
0088                 Flags.remove(flag)
0089                 ChanStat=sevLevelComputer.SeverityLevels[i].ChannelStatus.value()
0090                 # Removing flag leaves nothing else:  need to remove this level completely
0091                 if len(Flags)==0 and ChanStat==['']:
0092                     removeSeverity=i
0093                 else:
0094                     sevLevelComputer.SeverityLevels[i].RecHitFlags=Flags
0095 
0096     # Remove any newly-empty levels
0097     if (removeSeverity>-1):
0098         sevLevelComputer.SeverityLevels.remove(sevLevelComputer.SeverityLevels[removeSeverity])
0099 
0100     # No existing severity level for specified severity was found;
0101     # add a new one
0102     if (AddedSeverity==False):
0103         sevLevelComputer.SeverityLevels.append(cms.PSet(Level=cms.int32(severity),
0104                                                         RecHitFlags=cms.vstring(flag),
0105                                                         ChannelStatus=cms.vstring("")))
0106     return sevLevelComputer
0107 
0108 
0109     
0110 ##########################
0111 
0112 if __name__=="__main__":
0113     from . import hcalRecAlgoESProd_cfi as ES
0114     ES.hcalRecAlgos=RemoveFlag(ES.hcalRecAlgos)
0115     ES.hcalRecAlgos=AddFlag(ES.hcalRecAlgos,flag="HOBit",severity=5)
0116     PrintLevels(ES.hcalRecAlgos)
0117