Пример #1
0
def generateChainDefs(chainDict):

    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    myProvider = TauHypoProvider()

    for subChainDict in listOfChainDicts:
        if "IdTest" in subChainDict["chainParts"]["addInfo"]:
            Tau = L2EFChain_tau_IdTest(subChainDict, myProvider)
        else:
            Tau = L2EFChain_tau(subChainDict, myProvider)

        listOfChainDefs += [Tau.generateHLTChainDef()]

    if len(listOfChainDefs) > 1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    #add support for topological algorithms
    if chainDict["topo"]:
        log.info("Adding Tau Topological Algorithm(s) to chain")
        theChainDef = _addTopoInfo(theChainDef, chainDict)

    return theChainDef
Пример #2
0
def generateChainDefs(chainDict):
    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:

        Monitoring = L2EFChain_Monitoring(subChainDict)
        listOfChainDefs += [Monitoring.generateHLTChainDef()]

    if len(listOfChainDefs) > 1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    return theChainDef
Пример #3
0
def generateChainDefs(chainDict):
    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:

        Beamspot = L2EFChain_Beamspot(subChainDict)
        listOfChainDefs += [Beamspot.generateHLTChainDef()]

    if len(listOfChainDefs) > 1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    return theChainDef
Пример #4
0
def generateChainDefs(chainDict):
    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:

        Calib = L2EFChain_CalibTemplate(subChainDict)

        listOfChainDefs += [Calib.generateHLTChainDef()]

    if len(listOfChainDefs) > 1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    return theChainDef
Пример #5
0
def generateChainDefs(chainDict):
    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:

        EnhancedBias = L2EFChain_EnhancedBiasTemplate(subChainDict)

        listOfChainDefs += [EnhancedBias.generateHLTChainDef()]

    if len(listOfChainDefs) > 1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    return theChainDef
Пример #6
0
def generateChainDefs(chainDict):

    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:

        Streaming = L2EFChain_SeededStreamerTemplate(subChainDict)

        listOfChainDefs += [Streaming.generateHLTChainDef()]

    if len(listOfChainDefs) > 1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    return theChainDef
Пример #7
0
def generateChainDefs(chainDict):

    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:

        MissingET = L2EFChain_met(subChainDict)

        listOfChainDefs += [MissingET.generateHLTChainDef()]

    if len(listOfChainDefs) > 1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    return theChainDef
Пример #8
0
def generateChainDefs(chainDict):

    print 'generateHeavyIonChainDefs, input dict', chainDict

    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []
    
    for subChainDict in listOfChainDicts:      
        HeavyIon = L2EFChain_HI(subChainDict)
        
        listOfChainDefs += [HeavyIon.generateHLTChainDef()]
        
    if len(listOfChainDefs)>1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]        
    
    return theChainDef
Пример #9
0
def generateChainDefs(chainDict):

    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:
        AFP = L2EFChain_afp(subChainDict)

        listOfChainDefs += [AFP.generateHLTChainDef()]

    if len(listOfChainDefs) > 1:
        listOfChainDefs = [mergeChainDefs(listOfChainDefs)]
    else:
        listOfChainDefs = [listOfChainDefs[0]]

    listOfChainDefs.reverse()

    return listOfChainDefs
Пример #10
0
def generateChainDefs(chainDict):
    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:      
        Cosmic = L2EFChain_CosmicTemplate(subChainDict)
            
        listOfChainDefs += [Cosmic.generateHLTChainDef()]
    
    if len(listOfChainDefs)>1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    #if chainDict["topo"]:
    #    theChainDef = _addTopoInfo(theChainDef,chainDict)    

    return theChainDef
Пример #11
0
def generateChainDefs(chainDict):

    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:
        electron_seq = EgammaSequence(subChainDict)
        log.debug('Egamma Sequence: %s', electron_seq)
        Electron = L2EFChain_e(subChainDict, electron_seq)

        listOfChainDefs += [Electron.generateHLTChainDef()]
    if len(listOfChainDefs) > 1:
        theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    if chainDict["topo"]:
        theChainDef = _addTopoInfo(theChainDef, chainDict)

    return theChainDef
Пример #12
0
def generateChainDefs(chainDict):

    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    for subChainDict in listOfChainDicts:

        MissingET = L2EFChain_met(subChainDict)

        listOfChainDefs += [MissingET.generateHLTChainDef()]

    if "v6" in TriggerFlags.triggerMenuSetup(
    ) or "v5" in TriggerFlags.triggerMenuSetup():
        if len(listOfChainDefs) > 1:
            listOfChainDefs = [mergeChainDefs(listOfChainDefs)]
        else:
            listOfChainDefs = [listOfChainDefs[0]]

    listOfChainDefs.reverse()

    return listOfChainDefs
Пример #13
0
def generateChainDefs(chainDict, thisIsBphysChain=False):

    listOfChainDicts = splitChainDict(chainDict)
    listOfChainDefs = []

    asymDiMuonChain = False
    if (len(listOfChainDicts) > 1): asymDiMuonChain = True
    else: asymDiMuonChain = False

    asymMultiMuonChain = False
    if (len(listOfChainDicts) > 1 and "noL1" not in chainDict["chainName"]
            and sum(
                map(int, [
                    subChainDict["chainParts"]["multiplicity"]
                    for subChainDict in listOfChainDicts
                ])) > 1):
        asymMultiMuonChain = True

    modifyNscanInputTE = False
    modifyCalotagInputTE = False

    for subChainDict in listOfChainDicts:
        if "IdTest" in subChainDict["chainParts"]["addInfo"]:
            Muon = L2EFChain_mu_IdTest(subChainDict, asymDiMuonChain)
        else:
            #If FS muon, needs total counts of muons in chain
            if 'noL1' in subChainDict["chainParts"]["extra"]:
                AllMuons = GetAllMuonThresholds(chainDict)
            elif subChainDict["chainParts"][
                    "reccalibInfo"] == "btrk" or 'btrk' in subChainDict[
                        "chainParts"]["extra"]:
                AllMuons = GetAllMuonThresholds(chainDict)
            else:
                AllMuons = []

            Muon = L2EFChain_mu(subChainDict, asymDiMuonChain,
                                asymMultiMuonChain, AllMuons, thisIsBphysChain)

        listOfChainDefs += [Muon.generateHLTChainDef()]

        #only needed for nscan
        if "nscan" in subChainDict["chainParts"]['FSinfo']:
            modifyNscanInputTE = True
        if "calotag" in subChainDict["chainParts"]['FSinfo']:
            modifyCalotagInputTE = True

    if len(listOfChainDefs) > 1:
        if ('mergingStrategy' in chainDict.keys()):
            theChainDef = mergeChainDefs(listOfChainDefs,
                                         chainDict["mergingStrategy"],
                                         chainDict["mergingOffset"])
        else:
            theChainDef = mergeChainDefs(listOfChainDefs)
    else:
        theChainDef = listOfChainDefs[0]

    # needed for nscan to replace the placeholder TE with the L2TE of the other chain
    if (modifyNscanInputTE == True):
        theChainDef = _modifyTEinChainDef(theChainDef, chainDict)
    if (modifyCalotagInputTE == True):
        theChainDef = _modifyTEinChainDef(theChainDef, chainDict)

    #if chainDict["topo"]:
    #    theChainDef = _addTopoInfo(theChainDef,chainDict)

    if (len(listOfChainDicts) > 1):
        nomucomb_asymmetric = True
        for ii in range(len(listOfChainDicts)):
            if listOfChainDicts[ii]['chainParts']['reccalibInfo'] != 'nomucomb':
                nomucomb_asymmetric = False
        if nomucomb_asymmetric == True:
            theChainDef = _AsymmChainConfig(theChainDef, chainDict)

    return theChainDef
Пример #14
0
    def getChainDef(self, chainDicts):
        """
        == gets ChainDef object from the signature code
        """

        # generation of ChainDef objects for each signature
        if self.doMuonChains:
            try:
                import TriggerMenu.muon.generateMuonChainDefs
            except:
                log.error(
                    'Problems when importing MuonDef.py, disabling muon chains.'
                )
                log.info(traceback.print_exc())
                self.doMuonChains = False

        if self.doBphysicsChains:
            try:
                import TriggerMenu.bphysics.generateBPhysicsChainDefs
            except:
                log.error(
                    'Problems when importing BphysicsDef.py, disabling Bphysics chains.'
                )
                log.info(traceback.print_exc())
                self.doBphysicsChains = False

        if self.doMETChains:
            try:
                import TriggerMenu.met.generateMETChainDefs
            except:
                log.error(
                    'Problems when importing MissingETDef.py, disabling MET chains.'
                )
                log.info(traceback.print_exc())
                self.doMETChains = False

        if self.doTauChains:
            try:
                import TriggerMenu.tau.generateTauChainDefs
            except:
                log.error(
                    'Problems when importing TauDef.py, disabling tau chains.')
                log.info(traceback.print_exc())
                self.doTauChains = False

        if self.doEgammaChains:
            try:
                import TriggerMenu.egamma.generateElectronChainDefs
                import TriggerMenu.egamma.generatePhotonChainDefs
            except:
                log.error(
                    'Problems when importing EgammaDef.py or PhotonDef.py, disabling egamma chains.'
                )
                log.info(traceback.print_exc())
                self.doEgammaChains = False

        if self.doJetChains:
            try:
                import TriggerMenu.jet.generateJetChainDefs
            except:
                log.error(
                    'Problems when importing JetDef.py or JetDef_HT.py, disabling jet chains.'
                )
                log.info(traceback.print_exc())
                self.doJetChains = False

        if self.doBjetChains:
            try:
                import TriggerMenu.bjet.generateBjetChainDefs
            except:
                log.error(
                    'Problems when importing BjetDef.py disabling bjet chains.'
                )
                log.info(traceback.print_exc())
                self.doBjetChains = False

        if self.doAFPChains:
            try:
                import TriggerMenu.afp.generateAFPChainDefs
            except:
                log.error(
                    'Problems when importing AFP.py, disabling AFP chains.')
                log.info(traceback.print_exc())
                self.doAFPChains = False

        if self.doMinBiasChains:
            try:
                import TriggerMenu.minbias.generateMinBiasChainDefs
            except:
                log.error(
                    'Problems when importing MinBiasDef.py, disabling MinBias chains.'
                )
                log.info(traceback.print_exc())
                self.doMinBiasChains = False

        if self.doHeavyIonChains:
            try:
                import TriggerMenu.heavyion.generateHeavyIonChainDefs
            except:
                log.error(
                    'Problems when importing HeavyIonDef.py, disabling HeavyIon chains.'
                )
                log.info(traceback.print_exc())
                self.doHeavyIonChains = False

        if self.doCosmicChains:
            try:
                import TriggerMenu.calibcosmicmon.generateCosmicChainDefs
            except:
                log.error(
                    'Problems when importing CosmicDef.py, disabling cosmic chains.'
                )
                log.info(traceback.print_exc())
                self.doCosmicChains = False

        if self.doCalibrationChains:
            try:
                import TriggerMenu.calibcosmicmon.generateCalibChainDefs
            except:
                log.error(
                    'Problems when importing CalibDef.py, disabling calibration chains.'
                )
                log.info(traceback.print_exc())
                self.doCalibrationChains = False

        if self.doStreamingChains:
            try:
                import TriggerMenu.calibcosmicmon.generateStreamingChainDefs
            except:
                log.error(
                    'Problems when importing Streaming.py, disabling streaming chains.'
                )
                log.info(traceback.print_exc())
                self.doStreamingChains = False

        if self.doMonitorChains:
            try:
                import TriggerMenu.calibcosmicmon.generateMonitoringChainDefs
            except:
                log.error(
                    'Problems when importing Monitor.py, disabling monitoring chains.'
                )
                log.info(traceback.print_exc())
                self.doMonitorChains = False

        if self.doBeamspotChains:
            try:
                import TriggerMenu.calibcosmicmon.generateBeamspotChainDefs
            except:
                log.error(
                    'Problems when importing Beamspot.py, disabling beamspot chains.'
                )
                log.info(traceback.print_exc())
                self.doBeamspotChains = False

        if self.doEnhancedBiasChains:
            try:
                import TriggerMenu.calibcosmicmon.generateEnhancedBiasChainDefs
            except:
                log.error(
                    'Problems when importing EnhancedBias.py, disabling EnhancedBias chains.'
                )
                log.info(traceback.print_exc())
                self.doEnhancedBiasChains = False

        if self.doTestChains:
            try:
                import TriggerMenu.test.generateTestChainDefs
            except:
                log.error(
                    'Problems when importing Test.py, disabling Test chains.')
                log.info(traceback.print_exc())
                self.doTestChains = False

        if self.doCombinedChains:
            try:
                import TriggerMenu.combined.generateCombinedChainDefs
            except:
                log.error(
                    'Problems when importing generateCombinedChainDefs.py, disabling Topo on combined chains.'
                )
                log.info(traceback.print_exc())
                self.doCombinedChains = False

        #allowedSignatures = ["jet","egamma","muon", "electron", "photon","met","tau", "afp",
        #                     "minbias", "heavyion", "cosmic", "calibration", "streaming", "monitoring", "ht", 'bjet','eb']

        listOfChainDefs = []

        log.debug("\n chainDicts1 %s ", chainDicts)
        chainDicts = splitInterSignatureChainDict(chainDicts)
        log.debug("\n chainDicts2 %s", chainDicts)

        #print 'doEgammaChains, doMuonChains', self.doEgammaChains, self.doMuonChains

        for chainDict in chainDicts:
            chainDefs = None
            # print 'checking chainDict for chain %s %s %r' %(chainDict['chainName'],chainDict["signature"], self.doEnhancedBiasChains)

            if (chainDict["signature"] == "Jet" or chainDict["signature"]
                    == "HT") and (self.doJetChains or self.doBjetChains):
                bjetchain = False
                for chainpart in chainDict["chainParts"]:
                    if chainpart['bTag']: bjetchain = True

                if (bjetchain == True) and self.doBjetChains:
                    try:
                        chainDefs = TriggerMenu.bjet.generateBjetChainDefs.generateChainDefs(
                            chainDict)
                    except:
                        log.error(
                            'Problems creating ChainDef for bjet chain %s ' %
                            (chainDict['chainName']))
                        log.info(traceback.print_exc())
                        continue
                elif self.doJetChains:
                    try:
                        chainDefs = TriggerMenu.jet.generateJetChainDefs.generateChainDefs(
                            chainDict)
                    except:
                        log.error('Problems creating ChainDef for chain %s ' %
                                  (chainDict['chainName']))
                        log.info(traceback.print_exc())
                        continue

            elif chainDict["signature"] == "Muon" and self.doMuonChains:
                try:
                    chainDefs = TriggerMenu.muon.generateMuonChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "Bphysics" and self.doBphysicsChains:
                try:
                    chainDefs = TriggerMenu.bphysics.generateBPhysicsChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "Electron" and self.doEgammaChains:
                try:
                    chainDefs = TriggerMenu.egamma.generateElectronChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "Photon" and self.doEgammaChains:
                try:
                    chainDefs = TriggerMenu.egamma.generatePhotonChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif (chainDict["signature"] == "MET"
                  or chainDict["signature"] == "XS"
                  or chainDict["signature"] == "TE") and self.doMETChains:
                try:
                    chainDefs = TriggerMenu.met.generateMETChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "Tau" and self.doTauChains:
                try:
                    chainDefs = TriggerMenu.tau.generateTauChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "AFP" and self.doAFPChains:
                try:
                    chainDefs = TriggerMenu.afp.generateAFPChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "MinBias" and self.doMinBiasChains:
                try:
                    chainDefs = TriggerMenu.minbias.generateMinBiasChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "HeavyIon" and self.doHeavyIonChains:
                try:
                    chainDefs = TriggerMenu.heavyion.generateHeavyIonChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "Cosmic" and self.doCosmicChains:
                try:
                    chainDefs = TriggerMenu.calibcosmicmon.generateCosmicChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict[
                    "signature"] == "Calibration" and self.doCalibrationChains:
                try:
                    chainDefs = TriggerMenu.calibcosmicmon.generateCalibChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict[
                    "signature"] == "Streaming" and self.doStreamingChains:
                try:
                    chainDefs = TriggerMenu.calibcosmicmon.generateStreamingChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict[
                    "signature"] == "Monitoring" and self.doMonitorChains:
                try:
                    chainDefs = TriggerMenu.calibcosmicmon.generateMonitoringChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "Beamspot" and self.doBeamspotChains:
                try:
                    chainDefs = TriggerMenu.calibcosmicmon.generateBeamspotChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict[
                    "signature"] == "EnhancedBias" and self.doEnhancedBiasChains:
                try:
                    chainDefs = TriggerMenu.calibcosmicmon.generateEnhancedBiasChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            elif chainDict["signature"] == "Test" and self.doTestChains:
                try:
                    chainDefs = TriggerMenu.test.generateTestChainDefs.generateChainDefs(
                        chainDict)
                except:
                    log.error('Problems creating ChainDef for chain %s ' %
                              (chainDict['chainName']))
                    log.info(traceback.print_exc())
                    continue

            else:
                log.error(
                    'Chain %s ignored - either because the trigger signature ("slice") has been turned off or because the corresponding chain dictionary cannot be read.'
                    % (chainDict['chainName']))
                log.debug('Chain dictionary of failed chain is %s.', chainDict)

            log.debug(' ChainDef  %s ' % chainDefs)
            from ChainDef import ErrorChainDef, ChainDef

            if not isinstance(chainDefs, list):
                chainDefs = [chainDefs]

            for chainDef in chainDefs:
                if isinstance(chainDef, ErrorChainDef):
                    self.listOfErrorChainDefs.append(chainDict['chainName'])
                    continue
                elif isinstance(chainDef, ChainDef):
                    listOfChainDefs.append(chainDef)

        doTopo = self.CheckIntraSignatureTopo(chainDicts) and chainDict["topo"]

        if len(listOfChainDefs
               ) == 0:  # or not (len(listOfChainDefs)==len(chainDicts)):
            return False
        elif len(listOfChainDefs) > 1:
            if ("mergingStrategy" in chainDicts[0].keys()):
                theChainDef = mergeChainDefs(
                    listOfChainDefs,
                    chainDicts[0]["mergingStrategy"],
                    chainDicts[0]["mergingOffset"],
                    preserveL2EFOrder=chainDicts[0]
                    ["mergingPreserveL2EFOrder"],
                    doTopo=doTopo,
                    chainDicts=chainDicts
                )  #, noTEreplication = chainDicts[0]["mergingNoTEreplication"])
            else:
                log.error(
                    "No merging strategy specified for combined chain %s" %
                    chainDicts[0]['chainName'])

        else:
            theChainDef = listOfChainDefs[0]

        #Do TOPO on Combined chains
        if self.doCombinedChains:
            if doTopo:
                theChainDef = TriggerMenu.combined.generateCombinedChainDefs._addTopoInfo(
                    theChainDef, chainDicts, listOfChainDefs)

        return theChainDef
Пример #15
0
def generateChainDefs(chainDict):
    #log.setLevel(0)
    log.debug("In generateChainDefs")

    chainDict_orig = deepcopy(chainDict)
    # PrettyPrinter is rather expensive so make sure we don't invoke it unless in DEBUG
    if log.isEnabledFor(logging.DEBUG):
        log.debug("Initial b-jet chainDict: \n %s", pp.pformat(chainDict))

    #----------------------------------------------------------------------------
    # --- preparing the dictionary for jet chain generation ---
    n_chainParts = len(chainDict['chainParts'])

    if (n_chainParts > 1):
        jetchainDict = _prepareJetChainDict(chainDict)
    elif (n_chainParts == 1):
        log.debug('Only one chain part dictionary for this chain.')
        jetchainDict = chainDict
    else:
        raise RuntimeError('No chain parts found for chain %s' %
                           (chainDict['chainName']))
    #----------------------------------------------------------------------------

    #----------------------------------------------------------------------------
    # --- obtain jet chain def used as inputTE for first btag sequence ---
    thejThrChainDef = get_j35_ChainDef()
    if ('j0_bperf' in chainDict['chainName']):
        thejThrChainDef['L1item'] = 'L1_J10'
        thejThrChainDef['chainName'] = 'j0'
        for part in thejThrChainDef['chainParts']:
            part['chainPartName'] = 'j0'
            part['threshold'] = '0'
        if ('L1MU10' in chainDict['chainName']):
            thejThrChainDef['L1item'] = 'L1_MU10'
        if ('L1RD0_EMPTY' in chainDict['chainName']):
            thejThrChainDef['L1item'] = 'L1_RD0_EMPTY'

    theBJChainDef = genJetChainDefs(thejThrChainDef)
    log.debug("ChainDef for b-jet chain: \n %s", theBJChainDef)
    #----------------------------------------------------------------------------

    #----------------------------------------------------------------------------
    # --- build the jet chain, then pass JetChainDef and bjetchainDictionaries to build bjet chains ---
    log.debug("getting the Jet Chain Defs")
    theAllJetChainDef = genJetChainDefs(jetchainDict)
    log.debug("Jet ChainDef for b-jet chain: \n %s", theAllJetChainDef)
    #----------------------------------------------------------------------------

    #----------------------------------------------------------------------------
    # --- now merge chain defs so that last TE is from jet serving as input to bjet seq ---
    # DO NOT CHANGE THE MERGING ORDER PLEASE, OTHERWISE WRONG INPUT IS SELECTED
    log.debug("Trying to merge chainDef for b-jet chain: \n ")
    theJetChainDef = mergeChainDefs([theAllJetChainDef, theBJChainDef],
                                    'serial', -1, False)
    log.debug("Merged chainDef for b-jet chain: \n %s", theJetChainDef)
    #----------------------------------------------------------------------------

    #----------------------------------------------------------------------------
    # --- filtering b-tagged jets chainParts ---
    listofChainDicts = splitChainDict(chainDict_orig)
    if log.isEnabledFor(logging.DEBUG):
        log.debug("Split b-jet chainDict: \n %s", pp.pformat(listofChainDicts))

    bjetchainDicts = [
        cdict for cdict in listofChainDicts if cdict['chainParts']['bTag']
    ]
    if log.isEnabledFor(logging.DEBUG):
        log.debug("Final b-jet chainDict: \n %s", pp.pformat(bjetchainDicts))

    #
    # Basic properties of the chain, these are used to decide if we use the new AllTE configuration
    #
    isSplitChain = (not chainDict['chainName'].find("split") == -1)
    isRunITagger = (not chainDict['chainName'].find("btight") == -1
                    or not chainDict['chainName'].find("bmedium") == -1
                    or not chainDict['chainName'].find("bloose") == -1)
    is2015Tagger = (not chainDict['chainName'].find("bmv2c20") == -1
                    or not chainDict['chainName'].find("bperf") == -1)
    isMuDr = (not chainDict['chainName'].find("mu") == -1
              and not chainDict['chainName'].find("_dr") == -1)
    isMuDz = (not chainDict['chainName'].find("mu") == -1
              and not chainDict['chainName'].find("_dz") == -1)
    isIsoLep = (not chainDict['chainName'].find("ivarmedium") == -1
                or not chainDict['chainName'].find("ivarloose") == -1)
    isSingleJet = ((len(chainDict['chainParts']) == 1)
                   and (int(chainDict['chainParts'][0]['multiplicity']) == 1))

    #
    # Only run the All TE on split chains
    #
    doAllTEConfig = isSplitChain

    #
    # Do not need to run AllTE on single jet chains
    #
    if isSingleJet: doAllTEConfig = False

    #
    #  New AllTE config currently supported on new mv2c10 taggers
    #
    if isRunITagger or is2015Tagger: doAllTEConfig = False

    #
    # Need all the ouput bjet TEs to properly match to muons
    #  so dont use all TE here either
    #
    if isMuDz or isMuDr or isIsoLep: doAllTEConfig = False

    if doAllTEConfig:
        log.debug("Doing new buildBjetChainsAllTE")
        theFinalChainDef = buildBjetChainsAllTE(theJetChainDef, bjetchainDicts)
    else:
        log.debug("Doing buildBjetChains")
        theListOfChainDefs = []
        for subChainDict in bjetchainDicts:
            theJetChainDef1 = deepcopy(theJetChainDef)
            theBjetChainDef = buildBjetChains(theJetChainDef1, subChainDict,
                                              len(bjetchainDicts))
            theListOfChainDefs += [theBjetChainDef]

        if log.isEnabledFor(logging.DEBUG):
            log.debug(
                "----------------- Beginning of final individual chainDefs for b-jet chains printout -----------------"
            )
            for chainDef in theListOfChainDefs:
                log.debug('%s', chainDef)
            log.debug(
                "----------------- End of final individual chainDefs for b-jet chains printout -----------------"
            )

        if len(theListOfChainDefs) > 1:
            theFinalChainDef = mergeChainDefs(theListOfChainDefs,
                                              strategy="parallel",
                                              offset=-1,
                                              preserveL2EFOrder=True,
                                              removeDuplicateTEs=True,
                                              noMergeBJet=True)
        else:
            theFinalChainDef = theListOfChainDefs[0]

    log.debug(
        "----------------- Beginning of final merged chainDefs for b-jet chains printout -----------------"
    )
    log.debug('%s', theFinalChainDef)
    log.debug(
        "----------------- End of final merged chainDefs for b-jet chains printout -----------------"
    )

    return theFinalChainDef