Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2022-03-09 00:51:19

0001 import FWCore.ParameterSet.Config as cms
0002 from PhysicsTools.NanoAOD.common_cff import *
0003 from PhysicsTools.JetMCAlgos.TauGenJets_cfi import tauGenJets
0004 from PhysicsTools.JetMCAlgos.TauGenJetsDecayModeSelectorAllHadrons_cfi import tauGenJetsSelectorAllHadrons 
0005 
0006 ##################### Updated tau collection with MVA-based tau-Ids rerun #######
0007 # Used only in some eras
0008 from PhysicsTools.NanoAOD.taus_updatedMVAIds_cff import *
0009 
0010 ##################### User floats producers, selectors ##########################
0011 
0012 
0013 finalTaus = cms.EDFilter("PATTauRefSelector",
0014     src = cms.InputTag("slimmedTaus"),
0015     cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || (tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum'))<2.5) || tauID('byVVVLooseDeepTau2017v2p1VSjet'))")
0016 )
0017 
0018 for era in [run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]:
0019     era.toModify(finalTaus,
0020                  src = cms.InputTag("slimmedTausUpdated"),
0021                  cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || tauID('byVLooseIsolationMVArun2v1DBoldDMwLT2015') || tauID('byVLooseIsolationMVArun2v1DBnewDMwLT') || tauID('byVLooseIsolationMVArun2v1DBdR03oldDMwLT') || tauID('byVVLooseIsolationMVArun2v1DBoldDMwLT') || tauID('byVVLooseIsolationMVArun2v1DBoldDMwLT2017v2') || tauID('byVVLooseIsolationMVArun2v1DBnewDMwLT2017v2') || tauID('byVVLooseIsolationMVArun2v1DBdR03oldDMwLT2017v2') || tauID('byVVVLooseDeepTau2017v2p1VSjet'))")
0022     )
0023 for era in [run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_92X]:
0024     era.toModify(finalTaus,
0025                  src = cms.InputTag("slimmedTausUpdated"),
0026                  cut = cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || tauID('byVLooseIsolationMVArun2v1DBoldDMwLT') || tauID('byVLooseIsolationMVArun2v1DBnewDMwLT') || tauID('byVLooseIsolationMVArun2v1DBdR03oldDMwLT') || tauID('byVVLooseIsolationMVArun2v1DBoldDMwLT2017v1') || tauID('byVVLooseIsolationMVArun2v1DBoldDMwLT2017v2') || tauID('byVVLooseIsolationMVArun2v1DBnewDMwLT2017v2') || tauID('byVVLooseIsolationMVArun2v1DBdR03oldDMwLT2017v2') || tauID('byVVVLooseDeepTau2017v2p1VSjet'))")
0027     )
0028 run2_miniAOD_80XLegacy.toModify(finalTaus,
0029                                 cut =  cms.string("pt > 18 && tauID('decayModeFindingNewDMs') && (tauID('byLooseCombinedIsolationDeltaBetaCorr3Hits') || tauID('byVLooseIsolationMVArun2v1DBoldDMwLT') || tauID('byVLooseIsolationMVArun2v1DBnewDMwLT') || tauID('byVLooseIsolationMVArun2v1DBdR03oldDMwLT'))")
0030     )
0031 
0032 ##################### Tables for final output and docs ##########################
0033 def _tauIdWPMask(pattern, choices, doc=""):
0034     return Var(" + ".join(["%d * tauID('%s')" % (pow(2,i), pattern % c) for (i,c) in enumerate(choices)]), "uint8", 
0035                doc=doc+": bitmask "+", ".join(["%d = %s" % (pow(2,i),c) for (i,c) in enumerate(choices)]))
0036 def _tauId2WPMask(pattern,doc):
0037     return _tauIdWPMask(pattern,choices=("Loose","Tight"),doc=doc)
0038 def _tauId3WPMask(pattern,doc):
0039     return _tauIdWPMask(pattern,choices=("Loose","Medium","Tight"),doc=doc)
0040 def _tauId4WPMask(pattern,doc):
0041     return _tauIdWPMask(pattern, choices=("VLoose", "Loose", "Medium", "Tight"), doc=doc)
0042 def _tauId5WPMask(pattern,doc):
0043     return _tauIdWPMask(pattern,choices=("VLoose","Loose","Medium","Tight","VTight"),doc=doc)
0044 def _tauId6WPMask(pattern,doc):
0045     return _tauIdWPMask(pattern,choices=("VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc)
0046 def _tauId7WPMask(pattern,doc):
0047     return _tauIdWPMask(pattern,choices=("VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc)
0048 def _tauId8WPMask(pattern,doc):
0049     return _tauIdWPMask(pattern,choices=("VVVLoose","VVLoose","VLoose","Loose","Medium","Tight","VTight","VVTight"),doc=doc)
0050 
0051 tauTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
0052     src = cms.InputTag("linkedObjects","taus"),
0053     cut = cms.string(""), #we should not filter on cross linked collections
0054     name= cms.string("Tau"),
0055     doc = cms.string("slimmedTaus after basic selection (" + finalTaus.cut.value()+")"),
0056     singleton = cms.bool(False), # the number of entries is variable
0057     extension = cms.bool(False), # this is the main table for the taus
0058     variables = cms.PSet() # PSet defined below in era dependent way
0059 )
0060 _tauVarsBase = cms.PSet(P4Vars,
0061        charge = Var("charge", int, doc="electric charge"),
0062        jetIdx = Var("?hasUserCand('jet')?userCand('jet').key():-1", int, doc="index of the associated jet (-1 if none)"),
0063        decayMode = Var("decayMode()",int),
0064        idDecayModeOldDMs = Var("tauID('decayModeFinding')", bool),
0065 
0066        leadTkPtOverTauPt = Var("leadChargedHadrCand.pt/pt ",float, doc="pt of the leading track divided by tau pt",precision=10),
0067        leadTkDeltaEta = Var("leadChargedHadrCand.eta - eta ",float, doc="eta of the leading track, minus tau eta",precision=8),
0068        leadTkDeltaPhi = Var("deltaPhi(leadChargedHadrCand.phi, phi) ",float, doc="phi of the leading track, minus tau phi",precision=8),
0069 
0070        dxy = Var("leadChargedHadrCand().dxy()",float, doc="d_{xy} of lead track with respect to PV, in cm (with sign)",precision=10),
0071        dz = Var("leadChargedHadrCand().dz()",float, doc="d_{z} of lead track with respect to PV, in cm (with sign)",precision=14),
0072 
0073        # these are too many, we may have to suppress some
0074        rawIso = Var( "tauID('byCombinedIsolationDeltaBetaCorrRaw3Hits')", float, doc = "combined isolation (deltaBeta corrections)", precision=10),
0075        rawIsodR03 = Var( "(tauID('chargedIsoPtSumdR03')+max(0.,tauID('neutralIsoPtSumdR03')-0.072*tauID('puCorrPtSum')))", float, doc = "combined isolation (deltaBeta corrections, dR=0.3)", precision=10),
0076        chargedIso = Var( "tauID('chargedIsoPtSum')", float, doc = "charged isolation", precision=10),
0077        neutralIso = Var( "tauID('neutralIsoPtSum')", float, doc = "neutral (photon) isolation", precision=10),
0078        puCorr = Var( "tauID('puCorrPtSum')", float, doc = "pileup correction", precision=10),
0079        photonsOutsideSignalCone = Var( "tauID('photonPtSumOutsideSignalCone')", float, doc = "sum of photons outside signal cone", precision=10),
0080 
0081        idAntiMu = _tauId2WPMask("againstMuon%s3", doc= "Anti-muon discriminator V3: "),
0082        idAntiEleDeadECal = Var("tauID('againstElectronDeadECAL')", bool, doc = "Anti-electron dead-ECal discriminator"),
0083 
0084 #   isoCI3hit = Var(  "tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits")" doc="byCombinedIsolationDeltaBetaCorrRaw3Hits raw output discriminator"),
0085 #   photonOutsideSigCone = Var( "tauID("photonPtSumOutsideSignalCone")" doc="photonPtSumOutsideSignalCone raw output discriminator"),
0086 
0087 )
0088 
0089 _mvaIsoVars2015 = cms.PSet(
0090     rawMVAnewDM = Var( "tauID('byIsolationMVArun2v1DBnewDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10),
0091     rawMVAoldDM = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10),
0092     rawMVAoldDMdR03 = Var( "tauID('byIsolationMVArun2v1DBdR03oldDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10),
0093     idMVAnewDM = _tauId6WPMask( "by%sIsolationMVArun2v1DBnewDMwLT", doc="IsolationMVArun2v1DBnewDMwLT ID working point (2015)"),
0094     idMVAoldDM = _tauId6WPMask( "by%sIsolationMVArun2v1DBoldDMwLT", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)"),
0095     idMVAoldDMdR03 = _tauId6WPMask( "by%sIsolationMVArun2v1DBdR03oldDMwLT", doc="IsolationMVArun2v1DBoldDMdR0p3wLT ID working point (2015)")
0096 )
0097 _mvaIsoVars2015Reduced = cms.PSet(
0098     rawMVAoldDM = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw2015')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10),
0099     idMVAoldDM = _tauId6WPMask( "by%sIsolationMVArun2v1DBoldDMwLT2015", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)"),
0100 )
0101 _mvaIsoVars2017v1 = cms.PSet(
0102     rawMVAoldDM2017v1 = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2017v1)",precision=10),
0103     idMVAoldDM2017v1 = _tauId7WPMask( "by%sIsolationMVArun2v1DBoldDMwLT", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v1)")
0104 )
0105 _mvaIsoVars2017v2 = cms.PSet(
0106     rawMVAnewDM2017v2 = Var( "tauID('byIsolationMVArun2v1DBnewDMwLTraw2017v2')",float, doc="byIsolationMVArun2v1DBnewDMwLT raw output discriminator (2017v2)",precision=10),
0107     rawMVAoldDM2017v2 = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw2017v2')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2017v2)",precision=10),
0108     rawMVAoldDMdR032017v2 = Var( "tauID('byIsolationMVArun2v1DBdR03oldDMwLTraw2017v2')",float, doc="byIsolationMVArun2v1DBdR03oldDMwLT raw output discriminator (2017v2)",precision=10),
0109     idMVAnewDM2017v2 = _tauId7WPMask( "by%sIsolationMVArun2v1DBnewDMwLT2017v2", doc="IsolationMVArun2v1DBnewDMwLT ID working point (2017v2)"),
0110     idMVAoldDM2017v2 = _tauId7WPMask( "by%sIsolationMVArun2v1DBoldDMwLT2017v2", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v2)"),
0111     idMVAoldDMdR032017v2 = _tauId7WPMask( "by%sIsolationMVArun2v1DBdR03oldDMwLT2017v2", doc="IsolationMVArun2v1DBoldDMdR0p3wLT ID working point (2017v2)")
0112 )
0113 _mvaAntiEVars2015 = cms.PSet(
0114        rawAntiEle = Var("tauID('againstElectronMVA6Raw')", float, doc= "Anti-electron MVA discriminator V6 raw output discriminator (2015)", precision=10),
0115        rawAntiEleCat = Var("tauID('againstElectronMVA6category')", int, doc="Anti-electron MVA discriminator V6 category (2015"),
0116        idAntiEle = _tauId5WPMask("againstElectron%sMVA6", doc= "Anti-electron MVA discriminator V6 (2015)"),
0117 )
0118 _deepTauVars2017v2p1 = cms.PSet(
0119     rawDeepTau2017v2p1VSe = Var("tauID('byDeepTau2017v2p1VSeraw')", float, doc="byDeepTau2017v2p1VSe raw output discriminator (deepTau2017v2p1)", precision=10),
0120     rawDeepTau2017v2p1VSmu = Var("tauID('byDeepTau2017v2p1VSmuraw')", float, doc="byDeepTau2017v2p1VSmu raw output discriminator (deepTau2017v2p1)", precision=10),
0121     rawDeepTau2017v2p1VSjet = Var("tauID('byDeepTau2017v2p1VSjetraw')", float, doc="byDeepTau2017v2p1VSjet raw output discriminator (deepTau2017v2p1)", precision=10),
0122     idDeepTau2017v2p1VSe = _tauId8WPMask("by%sDeepTau2017v2p1VSe", doc="byDeepTau2017v2p1VSe ID working points (deepTau2017v2p1)"),
0123     idDeepTau2017v2p1VSmu = _tauId4WPMask("by%sDeepTau2017v2p1VSmu", doc="byDeepTau2017v2p1VSmu ID working points (deepTau2017v2p1)"),
0124     idDeepTau2017v2p1VSjet = _tauId8WPMask("by%sDeepTau2017v2p1VSjet", doc="byDeepTau2017v2p1VSjet ID working points (deepTau2017v2p1)"),
0125 )
0126 
0127 _variablesMiniV2 = cms.PSet(
0128     _tauVarsBase,
0129     _deepTauVars2017v2p1
0130 )
0131 _variablesMiniV1 = cms.PSet(
0132     _variablesMiniV2,
0133     _mvaIsoVars2017v2
0134 )
0135 _variablesMiniV1.rawMVAoldDM = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2015)",precision=10)
0136 _variablesMiniV1.rawMVAoldDM2017v1 = Var( "tauID('byIsolationMVArun2v1DBoldDMwLTraw2017v1')",float, doc="byIsolationMVArun2v1DBoldDMwLT raw output discriminator (2017v1)",precision=10)
0137 _variablesMiniV1.idMVAoldDM = _tauId6WPMask( "by%sIsolationMVArun2v1DBoldDMwLT", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2015)")
0138 _variablesMiniV1.idMVAoldDM2017v1 = _tauId7WPMask( "by%sIsolationMVArun2v1DBoldDMwLT2017v1", doc="IsolationMVArun2v1DBoldDMwLT ID working point (2017v1)")
0139 _variables80X =  cms.PSet(
0140     _tauVarsBase,
0141     _mvaAntiEVars2015,
0142     _mvaIsoVars2015
0143 )
0144 
0145 tauTable.variables = _variablesMiniV2
0146 
0147 (run2_nanoAOD_92X | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_94X2016 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1).toModify(tauTable,
0148                  variables = cms.PSet(tauTable.variables, _mvaIsoVars2015Reduced, _mvaIsoVars2017v1, _mvaIsoVars2017v2)
0149     )
0150 for era in [run2_nanoAOD_94XMiniAODv1,]:
0151     era.toModify(tauTable,
0152                  variables = _variablesMiniV1
0153     )
0154 run2_miniAOD_80XLegacy.toModify(tauTable,
0155                                 variables = _variables80X
0156 )
0157 for era in [run2_nanoAOD_92X, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, \
0158             run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]:
0159     era.toModify(tauTable.variables,
0160                  rawAntiEle2018 = Var("tauID('againstElectronMVA6Raw2018')", float, doc= "Anti-electron MVA discriminator V6 raw output discriminator (2018)", precision=10),
0161                  rawAntiEleCat2018 = Var("tauID('againstElectronMVA6category2018')", int, doc="Anti-electron MVA discriminator V6 category (2018)"),
0162                  idAntiEle2018 = _tauId5WPMask("againstElectron%sMVA62018", doc= "Anti-electron MVA discriminator V6 (2018)"),
0163                  rawAntiEle = Var("tauID('againstElectronMVA6Raw')", float, doc= "Anti-electron MVA discriminator V6 raw output discriminator (2015)", precision=10),
0164                  rawAntiEleCat = Var("tauID('againstElectronMVA6category')", int, doc="Anti-electron MVA discriminator V6 category (2015"),
0165                  idAntiEle = _tauId5WPMask("againstElectron%sMVA6", doc= "Anti-electron MVA discriminator V6 (2015)")
0166     )
0167 
0168 for era in [run2_miniAOD_80XLegacy, run2_nanoAOD_92X, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, \
0169             run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]:
0170     era.toModify(tauTable.variables,
0171                  idDecayMode = Var("tauID('decayModeFinding')", bool),
0172                  idDecayModeNewDMs = Var("tauID('decayModeFindingNewDMs')", bool),
0173                  idDecayModeOldDMs = None
0174     )
0175 run2_miniAOD_80XLegacy.toModify(tauTable.variables,
0176                                 idAntiEleDeadECal = None)
0177 for era in [run2_nanoAOD_92X, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, \
0178             run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]:
0179     era.toModify(tauTable.variables,
0180                  idAntiEleDeadECal = Var("tauID('againstElectronDeadECALForNano')", bool, doc = "Anti-electron dead-ECal discriminator"),
0181     )
0182 
0183 tauGenJetsForNano = tauGenJets.clone(
0184     GenParticles = "finalGenParticles",
0185     includeNeutrinos = False
0186 )
0187 
0188 tauGenJetsSelectorAllHadronsForNano = tauGenJetsSelectorAllHadrons.clone(
0189     src = "tauGenJetsForNano"
0190 )
0191 
0192 genVisTaus = cms.EDProducer("GenVisTauProducer",
0193     src = cms.InputTag("tauGenJetsSelectorAllHadronsForNano"),
0194     srcGenParticles = cms.InputTag("finalGenParticles")
0195 )
0196 
0197 genVisTauTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
0198     src = cms.InputTag("genVisTaus"),
0199     cut = cms.string("pt > 10."),
0200     name = cms.string("GenVisTau"),
0201     doc = cms.string("gen hadronic taus "),
0202     singleton = cms.bool(False), # the number of entries is variable
0203     extension = cms.bool(False), # this is the main table for generator level hadronic tau decays
0204     variables = cms.PSet(
0205          pt = Var("pt", float,precision=8),
0206          phi = Var("phi", float,precision=8),
0207          eta = Var("eta", float,precision=8),
0208          mass = Var("mass", float,precision=8),                           
0209      charge = Var("charge", int),
0210      status = Var("status", int, doc="Hadronic tau decay mode. 0=OneProng0PiZero, 1=OneProng1PiZero, 2=OneProng2PiZero, 10=ThreeProng0PiZero, 11=ThreeProng1PiZero, 15=Other"),
0211      genPartIdxMother = Var("?numberOfMothers>0?motherRef(0).key():-1", int, doc="index of the mother particle"),
0212     )
0213 )
0214 
0215 tausMCMatchLepTauForTable = cms.EDProducer("MCMatcher",  # cut on deltaR, deltaPt/Pt; pick best by deltaR
0216     src         = tauTable.src,                 # final reco collection
0217     matched     = cms.InputTag("finalGenParticles"), # final mc-truth particle collection
0218     mcPdgId     = cms.vint32(11,13),            # one or more PDG ID (11 = electron, 13 = muon); absolute values (see below)
0219     checkCharge = cms.bool(False),              # True = require RECO and MC objects to have the same charge
0220     mcStatus    = cms.vint32(),                 # PYTHIA status code (1 = stable, 2 = shower, 3 = hard scattering)
0221     maxDeltaR   = cms.double(0.3),              # Minimum deltaR for the match
0222     maxDPtRel   = cms.double(0.5),              # Minimum deltaPt/Pt for the match
0223     resolveAmbiguities    = cms.bool(True),     # Forbid two RECO objects to match to the same GEN object
0224     resolveByMatchQuality = cms.bool(True),     # False = just match input in order; True = pick lowest deltaR pair first
0225 )
0226 
0227 tausMCMatchHadTauForTable = cms.EDProducer("MCMatcher",  # cut on deltaR, deltaPt/Pt; pick best by deltaR
0228     src         = tauTable.src,                 # final reco collection
0229     matched     = cms.InputTag("genVisTaus"),   # generator level hadronic tau decays
0230     mcPdgId     = cms.vint32(15),               # one or more PDG ID (15 = tau); absolute values (see below)
0231     checkCharge = cms.bool(False),              # True = require RECO and MC objects to have the same charge
0232     mcStatus    = cms.vint32(),                 # CV: no *not* require certain status code for matching (status code corresponds to decay mode for hadronic tau decays)
0233     maxDeltaR   = cms.double(0.3),              # Maximum deltaR for the match
0234     maxDPtRel   = cms.double(1.),               # Maximum deltaPt/Pt for the match
0235     resolveAmbiguities    = cms.bool(True),     # Forbid two RECO objects to match to the same GEN object
0236     resolveByMatchQuality = cms.bool(True),     # False = just match input in order; True = pick lowest deltaR pair first
0237 )
0238 
0239 tauMCTable = cms.EDProducer("CandMCMatchTableProducer",
0240     src = tauTable.src,
0241     mcMap = cms.InputTag("tausMCMatchLepTauForTable"),
0242     mcMapVisTau = cms.InputTag("tausMCMatchHadTauForTable"),                         
0243     objName = tauTable.name,
0244     objType = tauTable.name, #cms.string("Tau"),
0245     branchName = cms.string("genPart"),
0246     docString = cms.string("MC matching to status==2 taus"),
0247 )
0248 
0249 
0250 tauTask = cms.Task(finalTaus)
0251 
0252 for era in [run2_nanoAOD_92X, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, \
0253             run2_nanoAOD_94X2016, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1]:
0254     era.toReplaceWith(tauTask, cms.Task(patTauMVAIDsTask,finalTaus))
0255 
0256 tauTablesTask = cms.Task(tauTable)
0257 
0258 genTauTask = cms.Task(tauGenJetsForNano,tauGenJetsSelectorAllHadronsForNano,genVisTaus,genVisTauTable)
0259 tauMCTask = cms.Task(genTauTask,tausMCMatchLepTauForTable,tausMCMatchHadTauForTable,tauMCTable)
0260