From 04d29ca741d60863ef7f57914d4a54a2f86ed4ef Mon Sep 17 00:00:00 2001 From: Tamas Vami Date: Mon, 13 Jan 2025 08:22:28 -0800 Subject: [PATCH] Improvements to DQM axis in ECal and PN, adding ECal BDT pass histo (#1508) --- DQM/python/dqm.py | 78 +++++++++++++------------ DQM/src/DQM/EcalMipTrackingFeatures.cxx | 2 +- DQM/src/DQM/EcalVetoResults.cxx | 1 + Validation/src/Validate/ecal.py | 2 +- 4 files changed, 43 insertions(+), 40 deletions(-) diff --git a/DQM/python/dqm.py b/DQM/python/dqm.py index 3d66bc76d..d58dcc299 100644 --- a/DQM/python/dqm.py +++ b/DQM/python/dqm.py @@ -247,7 +247,7 @@ def __init__(self,name="EcalDigiVerify") : "Number of noisy RecHits" , 100 , -0.5 , 99.5 ) self.build1DHistogram( "total_rec_energy" , - "Total Reconstructed Energy in ECal [MeV]" , 800 , 0. , 8000. ) + "Total Reconstructed Energy in ECal [MeV]" , 800 , 0. , 11000. ) self.build2DHistogram( "sim_edep__rec_amplitude" , "Simulated [MeV]" , 1000 , 0. , 50. , @@ -267,13 +267,13 @@ def __init__(self,name="EcalShowerFeatures") : self.build1DHistogram('num_readout_hits', 'Num Readout Hits',100,0,300) self.build1DHistogram('summed_det', - 'Total Rec Energy [MeV]',800,0.,8000.) + 'Total Rec Energy [MeV]',600,0.,12000.) self.build1DHistogram('summed_iso', - 'Total Isolated Energy [MeV]',400,0.,4000.) + 'Total Isolated Energy [MeV]',600,0.,12000.) self.build1DHistogram('summed_back', - 'Total Back Energy [MeV]',400,0.,4000.) + 'Total Back Energy [MeV]',500,0.,10000.) self.build1DHistogram('max_cell_dep', - 'Maximum Single-Cell Energy Dep [MeV]',100,0.,1000.) + 'Maximum Single-Cell Energy Dep [MeV]',200,0.,2000.) self.build1DHistogram('shower_rms', 'Transverse Shower RMS [mm]',200,0.,200.) self.build1DHistogram('x_std', @@ -285,11 +285,11 @@ def __init__(self,name="EcalShowerFeatures") : self.build1DHistogram('std_layer_hit', 'Std Dev Layer Hit',20,0.,20.) self.build1DHistogram('e_containment_energy', - 'Electron Containment Energy [MeV]',200,0.,8000.) + 'Electron Containment Energy [MeV]',200,0.,10000.) self.build1DHistogram('ph_containment_energy', - 'Photon Containment Energy [MeV]',200,0.,8000.) + 'Photon Containment Energy [MeV]',200,0.,10000.) self.build1DHistogram('out_containment_energy', - 'Outside Containment Energy [MeV]',200,0.,8000.) + 'Outside Containment Energy [MeV]',200,0.,10000.) class EcalMipTrackingFeatures(ldmxcfg.Analyzer) : """Configured EcalMipTrackingFeatures python object """ @@ -302,22 +302,22 @@ def __init__(self,name="EcalMipTrackingFeatures") : self.build1DHistogram('n_straight_tracks', 'Num Straight Tracks',30,-0.5,29.5) - self.build1DHistogram('n_linreg_tracks', - 'Num Linear Regression Tracks',15,-0.5,14.5) + self.build1DHistogram('n_linreg_segments', + 'Num Linear Regression Segments',30,-0.5,29.5) self.build1DHistogram('first_near_photon_layer', 'First Near Photon Layer',34,-0.5,34.5) self.build1DHistogram('ep_ang', - 'Electron Photon Angle',90,0.,90.) + 'Electron Photon Angle [degrees]',90,0.,90.) self.build1DHistogram('ep_sep', 'Electron Photon Separation',180,0.,180.) self.build1DHistogram('recoil_pz', - 'Recoil electron pz',200,-200.,8000.) + 'Recoil electron p_{z} [MeV]',200,-200.,8000.) self.build1DHistogram('recoil_pt', - 'Recoil electron p_{T}',200,0,2000.) + 'Recoil electron p_{T} [MeV]',200,0,2000.) self.build1DHistogram('recoil_x', - 'Recoil electron x',100,-300.,300.) + 'Recoil electron x [mm]',100,-300.,300.) self.build1DHistogram('recoil_y', - 'Recoil electron y',100,-300.,300.) + 'Recoil electron y [mm]',100,-300.,300.) class EcalVetoResults(ldmxcfg.Analyzer) : @@ -335,6 +335,8 @@ def __init__(self,name="EcalVetoResults") : '-log(1-BDT discriminating score)',100,0.,5.) self.build1DHistogram('fiducial', 'Recoil eletron fiducial',2,-0.5,1.5) + self.build1DHistogram('bdt_pass', + 'Event passed the ECal BDT',2,-0.5,1.5) class SimObjects(ldmxcfg.Analyzer) : """Configuration for sim-level objects to histogram-ize @@ -453,63 +455,63 @@ def __init__(self,name='PN', verbose=False, count_light_ions=True) : self.build1DHistogram("1n_event_type" , "", 7, -1, 6) self.build1DHistogram("pn_particle_mult" , "Photo-nuclear Multiplicity", 200, 0, 200) self.build1DHistogram("pn_neutron_mult", "Photo-nuclear Neutron Multiplicity", 200,0, 200) - self.build1DHistogram("pn_gamma_energy" , "#gamma Energy (MeV)", 500, 0, 5000) - self.build1DHistogram("pn_total_ke" , "Total Kineitc Energy of Photo-Nuclear Products(MeV)", 500, 0, 5000) - self.build1DHistogram("pn_total_neutron_ke" , "Total Kineitc Energy of Photo-Nuclear Neutrons (MeV)", 500, 0, 5000) - self.build1DHistogram("1n_neutron_energy" , "Neutron Energy (MeV)", 500, 0, 5000) - self.build1DHistogram("1n_energy_diff" , "E(#gamma_{PN}) - E(n) (MeV)", 500, 0, 5000) + self.build1DHistogram("pn_gamma_energy" , "#gamma Energy (MeV)", 500, 0, 10000) + self.build1DHistogram("pn_total_ke" , "Total Kineitc Energy of Photo-Nuclear Products(MeV)", 500, 0, 10000) + self.build1DHistogram("pn_total_neutron_ke" , "Total Kineitc Energy of Photo-Nuclear Neutrons (MeV)", 500, 0, 10000) + self.build1DHistogram("1n_neutron_energy" , "Neutron Energy (MeV)", 500, 0, 10000) + self.build1DHistogram("1n_energy_diff" , "E(#gamma_{PN}) - E(n) (MeV)", 500, 0, 10000) self.build1DHistogram("1n_energy_frac" , "E(n)/E(#gamma_{PN}) (MeV)", 500, 0, 1) - self.build1DHistogram("2n_n2_energy" , "Energy of second hardest neutron (MeV)", 500, 0, 5000) + self.build1DHistogram("2n_n2_energy" , "Energy of second hardest neutron (MeV)", 500, 0, 10000) self.build1DHistogram("2n_energy_frac" , "E(n)/E(#gamma_{PN}) (MeV)", 500, 0, 1) - self.build1DHistogram("2n_energy_other" , "E_{other} (MeV)", 500, 0, 5000) - self.build1DHistogram("1kp_energy" , "Charged Kaon Energy (MeV)", 500, 0, 5000) - self.build1DHistogram("1kp_energy_diff" , "E(#gamma_{PN}) - E(K#pm) (MeV)", 500, 0, 5000) + self.build1DHistogram("2n_energy_other" , "E_{other} (MeV)", 500, 0, 10000) + self.build1DHistogram("1kp_energy" , "Charged Kaon Energy (MeV)", 500, 0, 10000) + self.build1DHistogram("1kp_energy_diff" , "E(#gamma_{PN}) - E(K#pm) (MeV)", 500, 0, 100000) self.build1DHistogram("1kp_energy_frac" , "E(K#pm)/E(#gamma_{PN}) (MeV)", 500, 0, 1) - self.build1DHistogram("1k0_energy" , "K0 Energy (MeV)", 500, 0, 5000) - self.build1DHistogram("1k0_energy_diff" , "E(#gamma_{PN}) - E(K0) (MeV)", 500, 0, 5000) + self.build1DHistogram("1k0_energy" , "K0 Energy (MeV)", 500, 0, 10000) + self.build1DHistogram("1k0_energy_diff" , "E(#gamma_{PN}) - E(K0) (MeV)", 500, 0, 10000) self.build1DHistogram("1k0_energy_frac" , "E(K0)/E(#gamma_{PN}) (MeV)", 500, 0, 1) self.build1DHistogram("recoil_vertex_x", "Recoil e^{-} Vertex - x (mm)", 40, -40, 40) self.build1DHistogram("recoil_vertex_y", "Recoil e^{-} Vertex - y (mm)", 80, -80, 80) - self.build1DHistogram("recoil_vertex_z", "Recoil e^{-} Vertex - z (mm)", 20, -750, -650) + self.build1DHistogram("recoil_vertex_z", "Recoil e^{-} Vertex - z (mm)", 20, -950, -850) self.build1DHistogram("pn_gamma_int_z", "#gamma Interaction Vertex (mm)", 50, 200, 400) self.build1DHistogram("pn_gamma_vertex_z", "#gamma Vertex (mm)", 1000, -5, 5) self.build1DHistogram("pn_gamma_vertex_x", "#gamma Vertex (mm)", 80, -40, 40) self.build1DHistogram("pn_gamma_vertex_y", "#gamma Vertex (mm)", 160, -80, 80) - self.build1DHistogram("hardest_ke", "Kinetic Energy Hardest Photo-nuclear Particle (MeV)", 400, 0, 4000) + self.build1DHistogram("hardest_ke", "Kinetic Energy Hardest Photo-nuclear Particle (MeV)", 400, 0, 8000) self.build1DHistogram("hardest_theta", "#theta of Hardest Photo-nuclear Particle (Degrees)", 360, 0, 180) - self.build1DHistogram("hardest_p_ke", "Kinetic Energy Hardest Photo-nuclear Proton (MeV)", 400, 0, 4000) + self.build1DHistogram("hardest_p_ke", "Kinetic Energy Hardest Photo-nuclear Proton (MeV)", 400, 0, 8000) self.build1DHistogram("hardest_p_theta", "#theta of Hardest Photo-nuclear Proton (Degrees)", 360, 0, 180) - self.build1DHistogram("hardest_n_ke", "Kinetic Energy Hardest Photo-nuclear Neutron (MeV)", 400, 0, 4000) + self.build1DHistogram("hardest_n_ke", "Kinetic Energy Hardest Photo-nuclear Neutron (MeV)", 400, 0, 8000) self.build1DHistogram("hardest_n_theta", "#theta of Hardest Photo-nuclear Neutron (Degrees)", 360, 0, 180) - self.build1DHistogram("hardest_pi_ke", "Kinetic Energy Hardest Photo-nuclear #pi (MeV)", 400, 0, 4000) + self.build1DHistogram("hardest_pi_ke", "Kinetic Energy Hardest Photo-nuclear #pi (MeV)", 400, 0, 8000) self.build1DHistogram("hardest_pi_theta", "#theta of Hardest Photo-nuclear #pi (Degrees)", 360, 0, 180) self.build2DHistogram("h_ke_h_theta", "Kinetic Energy Hardest Photo-nuclear Particle (MeV)", - 400, 0, 4000, + 400, 0, 8000, "#theta of Hardest Photo-nuclear Particle (Degrees)", 360, 0, 180) self.build2DHistogram("1n_ke:2nd_h_ke", "Kinetic Energy of Leading Neutron (MeV)", - 400, 0, 4000, + 400, 0, 8000, "Kinetic Energy of 2nd Hardest Particle", - 400, 0, 4000) + 400, 0, 8000) self.build2DHistogram("1kp_ke:2nd_h_ke", "Kinetic Energy of Leading Charged Kaon (MeV)", - 400, 0, 4000, + 400, 0, 8000, "Kinetic Energy of 2nd Hardest Particle", - 400, 0, 4000) + 400, 0, 8000) self.build2DHistogram("1k0_ke:2nd_h_ke", "Kinetic Energy of Leading K0 (MeV)", - 400, 0, 4000, + 400, 0, 8000, "Kinetic Energy of 2nd Hardest Particle", - 400, 0, 4000) + 400, 0, 8000) self.build2DHistogram("recoil_vertex_x:recoil_vertex_y", "Recoil electron vertex x (mm)", diff --git a/DQM/src/DQM/EcalMipTrackingFeatures.cxx b/DQM/src/DQM/EcalMipTrackingFeatures.cxx index 818a2e636..4320c4c35 100644 --- a/DQM/src/DQM/EcalMipTrackingFeatures.cxx +++ b/DQM/src/DQM/EcalMipTrackingFeatures.cxx @@ -17,7 +17,7 @@ void EcalMipTrackingFeatures::analyze(const framework::Event &event) { event.getObject(ecal_veto_name_, ecal_veto_pass_)}; histograms_.fill("n_straight_tracks", veto.getNStraightTracks()); - histograms_.fill("n_linreg_tracks", veto.getNLinRegTracks()); + histograms_.fill("n_linreg_segments", veto.getNLinRegTracks()); histograms_.fill("first_near_photon_layer", veto.getFirstNearPhLayer()); histograms_.fill("ep_ang", veto.getEPAng()); histograms_.fill("ep_sep", veto.getEPSep()); diff --git a/DQM/src/DQM/EcalVetoResults.cxx b/DQM/src/DQM/EcalVetoResults.cxx index 0a69f15ef..4f540122d 100644 --- a/DQM/src/DQM/EcalVetoResults.cxx +++ b/DQM/src/DQM/EcalVetoResults.cxx @@ -19,6 +19,7 @@ void EcalVetoResults::analyze(const framework::Event &event) { histograms_.fill("bdt_disc", veto.getDisc()); histograms_.fill("bdt_disc_log", -std::log10(1 - veto.getDisc())); histograms_.fill("fiducial", veto.getFiducial()); + histograms_.fill("bdt_pass", veto.passesVeto()); return; } diff --git a/Validation/src/Validate/ecal.py b/Validation/src/Validate/ecal.py index a46c79b6c..897a70fdc 100644 --- a/Validation/src/Validate/ecal.py +++ b/Validation/src/Validate/ecal.py @@ -74,7 +74,7 @@ def mip_tracking(d : Differ, out_dir = None) : d.plot1d(col, name, out_dir = out_dir, legend_kw = dict(loc='upper left')) features = [ - ('EcalMipTrackingFeatures/EcalMipTrackingFeatures_n_linreg_tracks', 'Number of Linear Regression Tracks'), + ('EcalMipTrackingFeatures/EcalMipTrackingFeatures_n_linreg_segments', 'Number of Linear Regression Segments'), ('EcalMipTrackingFeatures/EcalMipTrackingFeatures_first_near_photon_layer', 'First Near Photon Layer'), ('EcalMipTrackingFeatures/EcalMipTrackingFeatures_ep_ang', 'Electron Photon Angle [degree]'), ('EcalMipTrackingFeatures/EcalMipTrackingFeatures_ep_sep', 'Electron Photon Separation'),