Skip to content
Snippets Groups Projects

Btof1285 ananlysis data production

Merged Ranyu Zhang requested to merge razhang/Btof1285 into master
Files
2
+ 216
0
import GaudiKernel.SystemOfUnits as Units
from GaudiConfUtils import ConfigurableGenerators
from Configurables import PrintDecayTree, DecayTreeTuple, DaVinci, SelDSTWriter, FilterDesktop, FilterInTrees, LoKi__HDRFilter, FilterDesktop,CombineParticles
from PhysSelPython.Wrappers import AutomaticData, Selection, SelectionSequence, DataOnDemand
from DecayTreeTuple.Configuration import *
from Configurables import LoKi__Hybrid__TupleTool, TupleToolDecay, TupleToolVeto, TupleToolSubMass
from Configurables import LoKi__HDRFilter, LoKi__VertexFitter, LoKi__Hybrid__EvtTupleTool
from Configurables import GaudiSequencer, PrintDecayTree
from MVADictHelpers import *
#outTag = '/afs/ihep.ac.cn/users/z/zhangranyu/jobs/5T/'
outTag = ''
line = 'Buto5h_K4pi_exclLine'
doMC = False
data_type = '2011'
if doMC:
stream_loc = 'AllStreams'
evt_type = '12205011'
else:
stream_loc = 'Bhadron'
from Configurables import FilterInTrees
from PhysSelPython.Wrappers import Selection, DataOnDemand
from PhysConf.Selections import CombineSelection
if doMC:
Kaons = DataOnDemand('Phys/StdAllNoPIDsKaons/Particles')
Pions = DataOnDemand('Phys/StdAllNoPIDsPions/Particles')
else:
#tesLoc = '/Event/{0}/Phys/{1}/Particles'.format(stream_loc, line)
tesLoc = 'Phys/{0}/Particles'.format(line)
kaons_from_B = FilterInTrees('kaons_from_B_filter', Code="('K+' == ABSID)")
kaons_from_B_sel = Selection("kaons_from_B_sel",
Algorithm=kaons_from_B,
RequiredSelections=[DataOnDemand(Location=tesLoc)])
pions_from_B = FilterInTrees('pions_from_B_filter', Code="('pi+' == ABSID)")
pions_from_B_sel = Selection("pions_from_B_sel",
Algorithm=pions_from_B,
RequiredSelections=[DataOnDemand(Location=tesLoc)])
Kaons = kaons_from_B_sel
Pions = pions_from_B_sel
XX1 = CombineParticles('D0',
DecayDescriptor="f_1(1285) -> pi+ pi+ pi- pi-",
CombinationCut="(AM > 100.0*MeV)",
DaughtersCuts ={'pi+':'(PT > 150.0*MeV) & (TRCHI2DOF < 1.7) & (MIPCHI2DV(PRIMARY) > 6.0) & (TRGHP < 0.2)',
'pi-':'(PT > 150.0*MeV) & (TRCHI2DOF < 1.7) & (MIPCHI2DV(PRIMARY) > 6.0) & (TRGHP < 0.2)'
},
MotherCut='(PT > 100.0*MeV)')
XX1_sel = Selection('XX1_sel',
Algorithm=XX1,
RequiredSelections=[Pions])
B_sel = CombineSelection(
'Sel_B',
[XX1_sel,Kaons],
DecayDescriptor='[B+ -> f_1(1285) K+]cc',
CombinationCut='(AM < 5679.0*MeV) & (AM > 5000.0*MeV)',
DaughtersCuts ={
'K+':'(PT > 250.0*MeV) & (TRCHI2DOF < 1.7) & (MIPCHI2DV(PRIMARY) > 6.0) & (TRGHP < 0.2)',
'K-':'(PT > 250.0*MeV) & (TRCHI2DOF < 1.7) & (MIPCHI2DV(PRIMARY) > 6.0) & (TRGHP < 0.2)'},
MotherCut='(BPVDIRA > 0.9999) & (VFASPF(VCHI2) < 30.0) & (BPVIP()<0.06) & (PT >1000.0*MeV) & (BPVVDCHI2 > 100.0)'
)
#--------------------
#--------------------
decaydesc = "[B+ -> ^K+ ^(f_1(1285) -> ^pi+ ^pi+ ^pi- ^pi-)]CC"
branches={
"B" : "[B+ -> K+ (f_1(1285) -> pi+ pi+ pi- pi-)]CC",
"K" : "[B+ -> ^K+ (f_1(1285) -> pi+ pi+ pi- pi-)]CC",
"f_1285" : "[B+ -> K+ ^(f_1(1285) -> pi+ pi+ pi- pi-)]CC",
"pi3" : "[B+ -> K+ (f_1(1285) -> ^pi+ pi+ pi- pi-)]CC",
"pi5" : "[B+ -> K+ (f_1(1285) -> pi+ ^pi+ pi- pi-)]CC",
"pi2" : "[B+ -> K+ (f_1(1285) -> pi+ pi+ ^pi- pi-)]CC",
"pi4" : "[B+ -> K+ (f_1(1285) -> pi+ pi+ pi- ^pi-)]CC",
}
tl = ["TupleToolKinematic",
"TupleToolPropertime",
"TupleToolPid",
"TupleToolTrackInfo",
"TupleToolPrimaries",
"TupleToolEventInfo",
"TupleToolTrackInfo",
"TupleToolRecoStats",
"TupleToolGeometry",
"TupleToolTISTOS",
"TupleToolL0Data",
"TupleToolL0Calo"]
from PhysConf.Selections import TupleSelection
myTuple = TupleSelection(
'myTuple',
[B_sel],
Decay=decaydesc,
Branches=branches,
ToolList=tl,
)
tg_list=["L0HadronDecision","Hlt1TrackAllL0Decision","Hlt1TrackMVADecision","Hlt1TwoTrackMVADecision","Hlt2Topo2BodyBBDTDecision","Hlt2Topo3BodyBBDTDecision","Hlt2Topo4BodyBBDTDecision"]
myTuple.B.addTupleTool("TupleToolTISTOS")
myTuple.B.TupleToolTISTOS.Verbose = True
myTuple.B.TupleToolTISTOS.TriggerList = tg_list
if doMC:
myTuple.ToolList += ['TupleToolMCBackgroundInfo']
myTuple.ToolList += ["TupleToolMCTruth/TupleToolMCTruth"]
myTuple.TupleToolMCTruth.ToolList+=["MCTupleToolHierarchy", "MCTupleToolReconstructed"]
from Configurables import TupleToolDecay
for particle in list(branches.keys()):
myTuple.addTool(TupleToolDecay, name=particle)
myTuple.ReFitPVs = True
from Configurables import TupleToolDecayTreeFitter
MassFit = TupleToolDecayTreeFitter("MassFit")
MassFit.constrainToOriginVertex = True
MassFit.Verbose = True
MassFit.UpdateDaughters = True
myTuple.B.addTool(MassFit)
myTuple.B.ToolList += ["TupleToolDecayTreeFitter/MassFit"]
Dres = TupleToolDecayTreeFitter("Dres")
Dres.constrainToOriginVertex = True
Dres.UpdateDaughters = True
Dres.Verbose = True
myTuple.B.addTool(Dres)
myTuple.B.ToolList += ["TupleToolDecayTreeFitter/Dres"]
myTuple.B.Dres.Substitutions={
'B+ -> K+ ^(f_1(1285) -> pi+ pi+ pi- pi-)' : 'D~0',
'B- -> K- ^(f_1(1285) -> pi- pi- pi+ pi+)' : 'D0'
}
if doMC:
from Configurables import TupleToolMCTruth
MCTruth = TupleToolMCTruth('Truth')
MCTruth.ToolList = ["MCTupleToolKinematic","MCTupleToolHierarchy", "MCTupleToolReconstructed"]
mct = MCDecayTreeTuple('truth')
if evt_type == '12205011':
mct1 = MCDecayTreeTuple('No_reso')
mct2 = MCDecayTreeTuple('f_1')
mct3 = MCDecayTreeTuple('f_2')
mct4 = MCDecayTreeTuple('f_0')
mct.Decay = "[[B+]CC ==> ^pi+ ^pi- ^pi+ ^pi- ^K+]CC"
mct1.Decay = "[[B+]CC => ^pi+ ^pi- ^pi+ ^pi- ^K+]CC"
mct2.Decay = "[[B+]CC => ^(f_1(1285) => ^(rho(770)0=> ^pi+ ^pi-) ^pi+ ^pi-) ^K+]CC"
mct3.Decay = "[[B+]CC => ^(f_2(1270) => ^pi+ ^pi- ^pi+ ^pi-) ^K+]CC"
mct4.Decay = "[[B+]CC => ^(f_0(1500) => ^pi+ ^pi- ^pi+ ^pi-) ^K+]CC"
if evt_type == '12165011':
mct.Decay = "[[B+]CC => ^(D~0 => ^pi+ ^pi- ^pi+ ^pi-) ^K+]CC"
if evt_type == '12165021':
mct.Decay = "[[B+]CC => ^(D~0 => ^pi+ ^pi- ^pi+ ^pi-) ^pi+]CC"
if evt_type == '12105011':
mct.Decay = "[[B+]CC => ^pi+ ^pi- ^pi+ ^pi- ^K+]CC"
mct.Branches = {
"B" : "[B+]CC"
}
mct.ToolList=['MCTupleToolHierarchy',
'MCTupleToolKinematic',
'MCTupleToolPrimaries']
if doMC:
from Configurables import TrackSmearState as SMEAR
smear = SMEAR( 'Smear' )
DaVinci().UserAlgorithms = [ smear ]
if not doMC:
from Configurables import TrackScaleState as SCALER
scaler = SCALER( 'Scaler' )
DaVinci().UserAlgorithms = [ scaler ]
if doMC:
DaVinci().appendToMainSequence([mct])
if evt_type == '12205011':
DaVinci().appendToMainSequence([mct1,mct2,mct3,mct4])
from Configurables import CheckPV
checkpv = CheckPV()
DaVinci().UserAlgorithms += [checkpv]
DaVinci().UserAlgorithms += [SelectionSequence("seq", myTuple).sequence()]
DaVinci().DataType = data_type
if not doMC:
from Configurables import CondDB
CondDB( LatestGlobalTagByDataType = data_type )
DaVinci().Simulation = True if doMC else False
#--------------------
#--------------------
DaVinci().EvtMax = -1 # Number of events
#DaVinci().EvtMax = 2000 # Number of events
DaVinci().RootInTES = '/Event/{0}'.format(stream_loc)
if doMC:
DaVinci().InputType = 'DST'
else:
DaVinci().InputType = 'MDST'
DaVinci().PrintFreq = 1000
DaVinci().SkipEvents = 0 # Events to skip
DaVinci().HistogramFile = outTag+"DVHistos_data1_X.root" # Histogram file
DaVinci().TupleFile = outTag+"Tuple_data1_X.root" # Ntuple1
if not doMC:
from PhysConf.Filters import LoKi_Filters
fltrs = LoKi_Filters (
STRIP_Code = "HLT_PASS_RE('StrippingButo5h_K4pi_exclLineDecision')"
)
DaVinci().EventPreFilters = fltrs.filters('Filters')
#from GaudiConf import IOHelper
# Use the local input data
#IOHelper().inputFiles([
#'/afs/ihep.ac.cn/users/z/zhangranyu/jobs/5T/f1285/12205011_test_00240113_00000015_1.AllStreams.dst'
#'/afs/ihep.ac.cn/users/z/zhangranyu/jobs/5T/f1285/00240134_00000010_1.AllStreams.dst'
#'/afs/ihep.ac.cn/users/z/zhangranyu/jobs/5T/f1285/00239594_00000022_1.AllStreams.dst'
#], clear=True)
Loading