diff --git a/data_results/PrCheckerTestThesis.root b/data_results/PrCheckerTestThesis.root index c4b5f31..a48520c 100644 Binary files a/data_results/PrCheckerTestThesis.root and b/data_results/PrCheckerTestThesis.root differ diff --git a/moore_options/Myget_resolution_and_eff_data.py b/moore_options/debug_get_resolution_and_eff_data.py similarity index 72% rename from moore_options/Myget_resolution_and_eff_data.py rename to moore_options/debug_get_resolution_and_eff_data.py index 795d270..fb023f7 100644 --- a/moore_options/Myget_resolution_and_eff_data.py +++ b/moore_options/debug_get_resolution_and_eff_data.py @@ -1,20 +1,15 @@ # flake8: noqa -""" -This set of options is used for reconstruction development purposes, -and assumes that the input contains MCHits (i.e. is of `Exended` -DST/digi type). -author: Furkan Cetin -date: 10/2023 -Moore/run gaudirun.py /work/cetin/LHCb/reco_tuner/moore_options/get_resolution_and_eff_data.py -""" - from Moore import options, run_reconstruction from Moore.config import Reconstruction -from PyConf.Algorithms import PrKalmanFilter -from PyConf.Tools import TrackMasterExtrapolator +from PyConf.Algorithms import PrKalmanFilter, PrMatchNN, fromPrMatchTracksV1Tracks +from PyConf.Tools import TrackMasterExtrapolator, PrMCDebugMatchToolNN +from PyConf.application import make_data_with_FetchDataFromFile +from RecoConf.data_from_file import mc_unpackers + + import glob from RecoConf.mc_checking import ( @@ -26,7 +21,7 @@ from RecoConf.mc_checking import ( make_links_tracks_mcparticles, ) from RecoConf.core_algorithms import make_unique_id_generator -from RecoConf.hlt2_tracking import make_hlt2_tracks +from RecoConf.hlt2_tracking import make_hlt2_tracks, get_global_ut_hits_tool from RecoConf.hlt1_tracking import ( make_VeloClusterTrackingSIMD_hits, make_PrStorePrUTHits_hits, @@ -34,11 +29,23 @@ from RecoConf.hlt1_tracking import ( get_global_materiallocator, ) +""" +This set of options is used for reconstruction development purposes, +and assumes that the input contains MCHits (i.e. is of `Exended` +DST/digi type). + +author: Furkan Cetin +date: 10/2023 + +Moore/run gaudirun.py /work/cetin/LHCb/reco_tuner/moore_options/get_resolution_and_eff_data.py +""" + + decay = "test" options.evt_max = -1 -options.ntuple_file = f"data/resolutions_and_effs_{decay}_thesis.root" +options.ntuple_file = f"data/resolutions_and_effs_{decay}_only_electrons_as_seed.root" options.input_type = "ROOT" @@ -63,6 +70,7 @@ options.output_level = 3 def run_tracking_resolution(): tracks = make_hlt2_tracks(light_reco=True, fast_reco=False, use_pr_kf=True) + fitted_forward_tracks = PrKalmanFilter( Input=tracks["Forward"]["Pr"], MaxChi2=2.8, @@ -77,24 +85,60 @@ def run_tracking_resolution(): ).OutputTracks links_to_lhcbids = make_links_lhcbids_mcparticles_tracking_system() - links_to_forward = make_links_tracks_mcparticles( - InputTracks=tracks["Forward"], + + links_to_best = make_links_tracks_mcparticles( + InputTracks=tracks["BestLong"], LinksToLHCbIDs=links_to_lhcbids, ) - links_to_match = make_links_tracks_mcparticles( - InputTracks=tracks["Match"], + + links_to_forward = make_links_tracks_mcparticles( + InputTracks=tracks["Forward"], LinksToLHCbIDs=links_to_lhcbids, ) - links_to_best = make_links_tracks_mcparticles( - InputTracks=tracks["BestLong"], + + links_to_velo = make_links_tracks_mcparticles( + InputTracks=tracks["Velo"], LinksToLHCbIDs=links_to_lhcbids, ) + links_to_seed = make_links_tracks_mcparticles( InputTracks=tracks["Seed"], LinksToLHCbIDs=links_to_lhcbids, ) - res_checker_forward = check_track_resolution(tracks["Forward"], suffix="Forward") + match_debug = PrMatchNN( + VeloInput=tracks["Velo"]["Pr"], + SeedInput=tracks["Seed"]["Pr"], + MatchDebugToolName=PrMCDebugMatchToolNN( + VeloTracks=tracks["Velo"]["v1"], + SeedTracks=tracks["Seed"]["v1"], + VeloTrackLinks=links_to_velo, + SeedTrackLinks=links_to_seed, + TrackInfo=make_data_with_FetchDataFromFile( + "/Event/MC/TrackInfo", "LHCb::MCProperty" + ), + MCParticles=mc_unpackers()["MCParticles"], + ), + AddUTHitsToolName=get_global_ut_hits_tool(enable=True), + ).MatchOutput + + match_tracks = {} + match_tracks["Pr"] = match_debug + match_tracks["v1"] = fromPrMatchTracksV1Tracks( + InputTracksLocation=match_debug, + VeloTracksLocation=tracks["Velo"]["v1"], + SeedTracksLocation=tracks["Seed"]["v1"], + ).OutputTracksLocation + + links_to_match = make_links_tracks_mcparticles( + InputTracks=match_tracks, + LinksToLHCbIDs=links_to_lhcbids, + ) + + res_checker_forward = check_track_resolution( + tracks["Forward"], + suffix="Forward", + ) res_checker_best_long = check_track_resolution( tracks["BestLong"], suffix="BestLong", @@ -118,7 +162,7 @@ def run_tracking_resolution(): ) eff_checker_match = check_tracking_efficiency( "Match", - tracks["Match"], + match_tracks, links_to_match, links_to_lhcbids, get_mc_categories("Match"), diff --git a/moore_options/get_calo_data.py b/moore_options/get_calo_data.py index 59a3cb8..c5859cd 100644 --- a/moore_options/get_calo_data.py +++ b/moore_options/get_calo_data.py @@ -83,14 +83,16 @@ def standalone_hlt2_fastest_reco(): # filter with calo clusters calo_matched_seeds = PrFilterTracks2CaloClusters( Relation=tcmatches["Ttrack"], - Cut=F.FILTER((F.MIN_ELEMENT_NOTZERO @ F.GET(0) @ F.WEIGHT) < 20), + Cut=F.FILTER((F.MIN_ELEMENT_NOTZERO @ F.FORWARDARG0 @ F.WEIGHT) < 20), ).Output + # corrections on track (bit better for elec?) # Cut=F.FILTER(F.ALL) ).Output electron_matched_seeds = PrFilterTracks2ElectronMatch( Relation=tcmatches_e["Ttrack"]["ElectronMatch"], - Cut=F.FILTER(F.MIN_ELEMENT_NOTZERO @ F.GET(0) @ F.WEIGHT < 20), + Cut=F.FILTER(F.MIN_ELEMENT_NOTZERO @ F.FORWARDARG0 @ F.WEIGHT < 20), ).Output + # should be best; shape of shower etc; E/p statt chi2; DLL even better? GET(1) # Cut=F.FILTER(F.ALL)).Output shower_matched_seeds = PrFilterTracks2ElectronShower( diff --git a/moore_options/get_resolution_and_eff_data.py b/moore_options/get_resolution_and_eff_data.py index fb023f7..cef8f3a 100644 --- a/moore_options/get_resolution_and_eff_data.py +++ b/moore_options/get_resolution_and_eff_data.py @@ -1,15 +1,20 @@ # flake8: noqa +""" +This set of options is used for reconstruction development purposes, +and assumes that the input contains MCHits (i.e. is of `Exended` +DST/digi type). +author: Furkan Cetin +date: 10/2023 +Moore/run gaudirun.py /work/cetin/LHCb/reco_tuner/moore_options/get_resolution_and_eff_data.py +""" + from Moore import options, run_reconstruction from Moore.config import Reconstruction -from PyConf.Algorithms import PrKalmanFilter, PrMatchNN, fromPrMatchTracksV1Tracks -from PyConf.Tools import TrackMasterExtrapolator, PrMCDebugMatchToolNN -from PyConf.application import make_data_with_FetchDataFromFile -from RecoConf.data_from_file import mc_unpackers - - +from PyConf.Algorithms import PrKalmanFilter +from PyConf.Tools import TrackMasterExtrapolator import glob from RecoConf.mc_checking import ( @@ -21,7 +26,7 @@ from RecoConf.mc_checking import ( make_links_tracks_mcparticles, ) from RecoConf.core_algorithms import make_unique_id_generator -from RecoConf.hlt2_tracking import make_hlt2_tracks, get_global_ut_hits_tool +from RecoConf.hlt2_tracking import make_hlt2_tracks from RecoConf.hlt1_tracking import ( make_VeloClusterTrackingSIMD_hits, make_PrStorePrUTHits_hits, @@ -29,23 +34,11 @@ from RecoConf.hlt1_tracking import ( get_global_materiallocator, ) -""" -This set of options is used for reconstruction development purposes, -and assumes that the input contains MCHits (i.e. is of `Exended` -DST/digi type). - -author: Furkan Cetin -date: 10/2023 - -Moore/run gaudirun.py /work/cetin/LHCb/reco_tuner/moore_options/get_resolution_and_eff_data.py -""" - - -decay = "test" +decay = "B" options.evt_max = -1 -options.ntuple_file = f"data/resolutions_and_effs_{decay}_only_electrons_as_seed.root" +options.ntuple_file = f"data/resolutions_and_effs_{decay}_thesis.root" options.input_type = "ROOT" @@ -70,7 +63,6 @@ options.output_level = 3 def run_tracking_resolution(): tracks = make_hlt2_tracks(light_reco=True, fast_reco=False, use_pr_kf=True) - fitted_forward_tracks = PrKalmanFilter( Input=tracks["Forward"]["Pr"], MaxChi2=2.8, @@ -85,60 +77,24 @@ def run_tracking_resolution(): ).OutputTracks links_to_lhcbids = make_links_lhcbids_mcparticles_tracking_system() - - links_to_best = make_links_tracks_mcparticles( - InputTracks=tracks["BestLong"], - LinksToLHCbIDs=links_to_lhcbids, - ) - links_to_forward = make_links_tracks_mcparticles( InputTracks=tracks["Forward"], LinksToLHCbIDs=links_to_lhcbids, ) - - links_to_velo = make_links_tracks_mcparticles( - InputTracks=tracks["Velo"], + links_to_match = make_links_tracks_mcparticles( + InputTracks=tracks["Match"], LinksToLHCbIDs=links_to_lhcbids, ) - - links_to_seed = make_links_tracks_mcparticles( - InputTracks=tracks["Seed"], + links_to_best = make_links_tracks_mcparticles( + InputTracks=tracks["BestLong"], LinksToLHCbIDs=links_to_lhcbids, ) - - match_debug = PrMatchNN( - VeloInput=tracks["Velo"]["Pr"], - SeedInput=tracks["Seed"]["Pr"], - MatchDebugToolName=PrMCDebugMatchToolNN( - VeloTracks=tracks["Velo"]["v1"], - SeedTracks=tracks["Seed"]["v1"], - VeloTrackLinks=links_to_velo, - SeedTrackLinks=links_to_seed, - TrackInfo=make_data_with_FetchDataFromFile( - "/Event/MC/TrackInfo", "LHCb::MCProperty" - ), - MCParticles=mc_unpackers()["MCParticles"], - ), - AddUTHitsToolName=get_global_ut_hits_tool(enable=True), - ).MatchOutput - - match_tracks = {} - match_tracks["Pr"] = match_debug - match_tracks["v1"] = fromPrMatchTracksV1Tracks( - InputTracksLocation=match_debug, - VeloTracksLocation=tracks["Velo"]["v1"], - SeedTracksLocation=tracks["Seed"]["v1"], - ).OutputTracksLocation - - links_to_match = make_links_tracks_mcparticles( - InputTracks=match_tracks, + links_to_seed = make_links_tracks_mcparticles( + InputTracks=tracks["Seed"], LinksToLHCbIDs=links_to_lhcbids, ) - res_checker_forward = check_track_resolution( - tracks["Forward"], - suffix="Forward", - ) + res_checker_forward = check_track_resolution(tracks["Forward"], suffix="Forward") res_checker_best_long = check_track_resolution( tracks["BestLong"], suffix="BestLong", @@ -162,7 +118,7 @@ def run_tracking_resolution(): ) eff_checker_match = check_tracking_efficiency( "Match", - match_tracks, + tracks["Match"], links_to_match, links_to_lhcbids, get_mc_categories("Match"), diff --git a/scripts/PrCheckerEfficiency.py b/scripts/PrCheckerEfficiency.py index c756a0e..027a108 100644 --- a/scripts/PrCheckerEfficiency.py +++ b/scripts/PrCheckerEfficiency.py @@ -9,6 +9,9 @@ python scripts/MyPrCheckerEfficiency.py --filename data/resolutions_and_effs_B_n python scripts/MyPrCheckerEfficiency.py --filename data/resolutions_and_effs_D_electron_weights.root --outfile data_results/PrCheckerDElectron.root +python scripts/PrCheckerEfficiency.py --filename data/resolutions_and_effs_B_thesis.root +--outfile data_results/PrCheckerTestThesis.root --label particle --plot-velo --plot-velo-only --trackers Match Seed --savepdf + """ import argparse diff --git a/scripts/Bak2PrCheckerEfficiency.py b/scripts/True2VeloPrCheckerEfficiency.py similarity index 91% rename from scripts/Bak2PrCheckerEfficiency.py rename to scripts/True2VeloPrCheckerEfficiency.py index 0713da1..690395b 100644 --- a/scripts/Bak2PrCheckerEfficiency.py +++ b/scripts/True2VeloPrCheckerEfficiency.py @@ -9,6 +9,9 @@ python scripts/MyPrCheckerEfficiency.py --filename data/resolutions_and_effs_B_n python scripts/MyPrCheckerEfficiency.py --filename data/resolutions_and_effs_D_electron_weights.root --outfile data_results/PrCheckerDElectron.root +python scripts/PrCheckerEfficiency.py --filename data/resolutions_and_effs_B_thesis.root +--outfile data_results/PrCheckerTestThesis.root --label particle --plot-velo --plot-velo-only --trackers Match Seed --savepdf + """ import argparse @@ -432,9 +435,13 @@ def PrCheckerEfficiency( canvas.SetRightMargin(0.1) mg = TMultiGraph() for i, lab in enumerate(label): - if not plot_electrons_only: # and not plot_velo_only: - mg.Add(eff[lab]) - set_style(eff[lab], colors[i], markers[i], styles[i]) + if ( + categories[tracker][cut]["plotEndVelo"] + and plot_velo + and (histo == "p" or histo == "pt") + ): # and not plot_velo_only: + mg.Add(eff_velo[lab]) + set_style(eff_velo[lab], colors[i], markers[i], styles[i]) if categories[tracker][cut]["plotElectrons"] and plot_electrons: if (not plot_velo_only) or ( histo == "phi" or histo == "eta" or histo == "nPV" @@ -446,18 +453,6 @@ def PrCheckerEfficiency( elec_markers[i], styles[i], ) - if ( - categories[tracker][cut]["plotEndVelo"] - and plot_velo - and (histo == "p" or histo == "pt") - ): - mg.Add(eff_velo[lab]) - set_style( - eff_velo[lab], - elec_colors[i], # elec_colors[i + 1], - elec_markers[i], - styles[i], - ) mg.Draw("AP") mg.GetYaxis().SetRangeUser(0, 1.05) @@ -477,7 +472,7 @@ def PrCheckerEfficiency( mg.GetYaxis().SetTitleOffset(1.1) mg.GetXaxis().SetRangeUser(*efficiencyHistoDict[histo]["range"]) mg.GetXaxis().SetNdivisions(10, 5, 0) - mygray = kGray + mygray = 18 myblue = kBlue - 10 mypurple = kMagenta - 10 for i, lab in enumerate(label): @@ -498,39 +493,23 @@ def PrCheckerEfficiency( hist_velo[lab].Scale(scale) if i == 0: - if not plot_electrons_only: # and not plot_velo_only: - set_style(hist_den[lab], mygray, markers[i], styles[i]) + if ( + categories[tracker][cut]["plotEndVelo"] + and plot_velo + and (histo == "p" or histo == "pt") + ): + set_style(hist_velo[lab], mygray, markers[i], styles[i]) gStyle.SetPalette(2, array("i", [mygray - 1, myblue + 1])) - hist_den[lab].Draw("HIST PLC SAME") + hist_velo[lab].Draw("HIST PLC SAME") if categories[tracker][cut]["plotElectrons"] and plot_electrons: if not plot_velo_only or ( histo == "phi" or histo == "eta" or histo == "nPV" ): set_style( - hist_elec[lab], - myblue, - elec_markers[i], - styles[i], + hist_elec[lab], myblue, elec_markers[i], styles[i] ) - # hist_elec[lab].SetLineColor(kBlue - 5) hist_elec[lab].SetFillColorAlpha(myblue, 0.5) hist_elec[lab].Draw("HIST PLC SAME") - if ( - categories[tracker][cut]["plotEndVelo"] - and plot_velo - and (histo == "p" or histo == "pt") - ): - set_style( - hist_velo[lab], - myblue, - elec_markers[i], - styles[i], - ) - # gStyle.SetPalette( - # 2, array("i", [mygray - 1, myblue + 1]) - # ) - hist_velo[lab].SetFillColorAlpha(myblue, 0.5) - hist_velo[lab].Draw("HIST PLC SAME") # else: # print( @@ -562,19 +541,18 @@ def PrCheckerEfficiency( legend.SetTextSize(0.04) legend.Draw() for lab in label: - if not plot_electrons_only: # and not plot_velo_only: - eff[lab].Draw("P SAME") + if ( + categories[tracker][cut]["plotEndVelo"] + and plot_velo + and (histo == "p" or histo == "pt") + ): + eff_velo[lab].Draw("P SAME") if categories[tracker][cut]["plotElectrons"] and plot_electrons: if not plot_velo_only or ( histo == "phi" or histo == "eta" or histo == "nPV" ): eff_elec[lab].Draw("P SAME") - if ( - categories[tracker][cut]["plotEndVelo"] - and plot_velo - and (histo == "p" or histo == "pt") - ): - eff_velo[lab].Draw("P SAME") + cutName = categories[tracker][cut]["title"] latex.DrawLatex(legend.GetX1() + 0.01, legend.GetY1() - 0.05, cutName) low = 0