Skip to content
Snippets Groups Projects
Commit c6c592f9 authored by Tadej Novak's avatar Tadej Novak
Browse files

Merge branch 'FPGATrackSimPrintResults' into 'main'

Simple Additional Monitoring for FPGATrackSim

See merge request !71194
parents 3f53ba7e 3f164f11
No related branches found
No related tags found
29 merge requests!78241Draft: FPGATrackSim: GenScan code refactor,!78236Draft: Switching Streams https://its.cern.ch/jira/browse/ATR-27417,!78056AFP monitoring: new synchronization and cleaning,!78041AFP monitoring: new synchronization and cleaning,!77990Updating TRT chip masks for L1TRT trigger simulation - ATR-28372,!77733Draft: add new HLT NN JVT, augmented with additional tracking information,!77731Draft: Updates to ZDC reconstruction,!77728Draft: updates to ZDC reconstruction,!77522Draft: sTGC Pad Trigger Emulator,!76725ZdcNtuple: Fix cppcheck warning.,!76611L1CaloFEXByteStream: Fix out-of-bounds array accesses.,!76475Punchthrough AF3 implementation in FastG4,!76474Punchthrough AF3 implementation in FastG4,!76343Draft: MooTrackBuilder: Recalibrate NSW hits in refine method,!75729New implementation of ZDC nonlinear FADC correction.,!75703Draft: Update to HI han config for HLT jets,!75184Draft: Update file heavyions_run.config,!74430Draft: Fixing upper bound for Delayed Jet Triggers,!73963Changing the path of the histograms to "Expert" area,!73875updating ID ART reference plots,!73874AtlasCLHEP_RandomGenerators: Fix cppcheck warnings.,!73449Add muon detectors to DarkJetPEBTLA partial event building,!73343Draft: [TrigEgamma] Add photon ringer chains on bootstrap mechanism,!72336Fixed TRT calibration crash,!72176Draft: Improving L1TopoOnline chain that now gets no-empty plots. Activating it by default,!72012Draft: Separate JiveXMLConfig.py into Config files,!71876Fix MET trigger name in MissingETMonitoring,!71820Draft: Adding new TLA End-Of-Fill (EOF) chains and removing obsolete DIPZ chains,!71194Simple Additional Monitoring for FPGATrackSim
......@@ -260,7 +260,27 @@ def FPGATrackSimLogicalHitsProcessAlgMonitoringCfg(flags):
monTool.defineHistogram('best_chi2_1st', path='EXPERT', type='TH1F', title='chi2_1st_all', xbins=nbin, xmin=low, xmax=high)
monTool.defineHistogram('ntrack_1st', path='EXPERT', type='TH1F', title='ntrack_1st', xbins=nbin, xmin=low, xmax=high)
monTool.defineHistogram('ntrack_1st_afterOLR', path='EXPERT', type='TH1F', title='ntrack_1st_afterOLR', xbins=nbin, xmin=low, xmax=high)
monTool.defineHistogram('eff_road,pT', path='EXPERT', type='TEfficiency', title='eff_road_pt', xbins=20, xmin=0, xmax=100)
monTool.defineHistogram('eff_track,pT', path='EXPERT', type='TEfficiency', title='eff_track_pt', xbins=20, xmin=0, xmax=100)
monTool.defineHistogram('eff_track_chi2,pT', path='EXPERT', type='TEfficiency', title='eff_track_chi2_pt', xbins=20, xmin=0, xmax=100)
monTool.defineHistogram('eff_road,pT_zoom', path='EXPERT', type='TEfficiency', title='eff_road_pt_zoom', xbins=10, xmin=0, xmax=10)
monTool.defineHistogram('eff_track,pT_zoom', path='EXPERT', type='TEfficiency', title='eff_track_pt_zoom', xbins=10, xmin=0, xmax=10)
monTool.defineHistogram('eff_track_chi2,pT_zoom', path='EXPERT', type='TEfficiency', title='eff_track_chi2_pt_zoom', xbins=10, xmin=0, xmax=10)
monTool.defineHistogram('eff_road,eta', path='EXPERT', type='TEfficiency', title='eff_road_eta', xbins = 20, xmin=0.1, xmax=0.3)
monTool.defineHistogram('eff_track,eta', path='EXPERT', type='TEfficiency', title='eff_track_eta', xbins = 20, xmin=0.1, xmax=0.3)
monTool.defineHistogram('eff_track_chi2,eta', path='EXPERT', type='TEfficiency', title='eff_track_chi2_eta', xbins = 20, xmin=0.1, xmax=0.3)
monTool.defineHistogram('eff_road,phi', path='EXPERT', type='TEfficiency', title='eff_road_phi', xbins = 20, xmin=flags.Trigger.FPGATrackSim.ActiveConfig.phiMin, xmax=flags.Trigger.FPGATrackSim.ActiveConfig.phiMax)
monTool.defineHistogram('eff_track,phi', path='EXPERT', type='TEfficiency', title='eff_track_phi', xbins = 20, xmin=flags.Trigger.FPGATrackSim.ActiveConfig.phiMin, xmax=flags.Trigger.FPGATrackSim.ActiveConfig.phiMax)
monTool.defineHistogram('eff_track_chi2,phi', path='EXPERT', type='TEfficiency', title='eff_track_chi2_phi', xbins = 20, xmin=flags.Trigger.FPGATrackSim.ActiveConfig.phiMin, xmax=flags.Trigger.FPGATrackSim.ActiveConfig.phiMax)
monTool.defineHistogram('eff_road,d0', path='EXPERT', type='TEfficiency', title='eff_road_d0', xbins = 20, xmin = -2.0, xmax = 2.0)
monTool.defineHistogram('eff_track,d0', path='EXPERT', type='TEfficiency', title='eff_track_d0', xbins = 20, xmin = -2.0, xmax = 2.0)
monTool.defineHistogram('eff_track_chi2,d0', path='EXPERT', type='TEfficiency', title='eff_track_chi2_d0', xbins = 20, xmin = -2.0, xmax = 2.0)
monTool.defineHistogram('eff_road,z0', path='EXPERT', type='TEfficiency', title='eff_road_z0', xbins = 20, xmin = -150, xmax = 150.0)
monTool.defineHistogram('eff_track,z0', path='EXPERT', type='TEfficiency', title='eff_track_z0', xbins = 20, xmin = -150.0, xmax = 150.0)
monTool.defineHistogram('eff_track_chi2,z0', path='EXPERT', type='TEfficiency', title='eff_track_chi2_z0', xbins = 20, xmin = -150.0, xmax = 150.0)
result.setPrivateTools(monTool)
return result
......
......@@ -9,6 +9,7 @@
#include "FPGATrackSimObjects/FPGATrackSimTrack.h"
#include "FPGATrackSimObjects/FPGATrackSimLogicalEventOutputHeader.h"
#include "FPGATrackSimObjects/FPGATrackSimLogicalEventInputHeader.h"
#include "FPGATrackSimObjects/FPGATrackSimTrackPars.h"
#include "FPGATrackSimDataFlowTool.h"
#include "FPGATrackSimNNTrackTool.h"
......@@ -23,7 +24,7 @@
#include "FPGATrackSimMaps/FPGATrackSimRegionMap.h"
#include "GaudiKernel/IEventProcessor.h"
#include "TGraphAsymmErrors.h"
#ifdef BENCHMARK_LOGICALHITSALG
#define TIME(name) \
......@@ -104,6 +105,7 @@ StatusCode FPGATrackSimLogicalHitsProcessAlg::initialize()
ATH_CHECK(m_monTool.retrieve());
ATH_MSG_DEBUG("initialize() Finished");
return StatusCode::SUCCESS;
}
......@@ -146,6 +148,9 @@ StatusCode FPGATrackSimLogicalHitsProcessAlg::execute()
}
TIME(m_tread);
// Event passes cuts, count it
m_evt++;
// Map, cluster, and filter hits
ATH_CHECK(processInputs());
// Get reference to hits
......@@ -234,18 +239,62 @@ StatusCode FPGATrackSimLogicalHitsProcessAlg::execute()
auto mon_ntracks_1st = Monitored::Scalar<unsigned>("ntrack_1st", tracks_1st.size());
Monitored::Group(m_monTool,mon_ntracks_1st);
TIME(m_ttracks);
// Overlap removal
ATH_CHECK(m_overlapRemovalTool_1st->runOverlapRemoval(tracks_1st));
unsigned ntrackOLR = 0;
for (const FPGATrackSimTrack& track : tracks_1st) { if (track.passedOR()) ntrackOLR++;}
auto mon_ntracks_1st_olr = Monitored::Scalar<unsigned>("ntrack_1st_afterOLR", ntrackOLR);
unsigned ntrackOLRChi2 = 0, ntrackChi2 = 0;
for (auto track : tracks_1st) {
if (track.getChi2ndof() < 10) {
ntrackChi2++;
m_nTracksChi2Tot++;
if (track.passedOR()) {
ntrackOLRChi2++;
m_nTracksChi2OLRTot++;
}
}
}
auto mon_ntracks_1st_olr = Monitored::Scalar<unsigned>("ntrack_1st_afterOLR", ntrackOLRChi2);
Monitored::Group(m_monTool,mon_ntracks_1st_olr);
m_nRoadsTot += roads_1st.size();
m_nTracksTot += tracks_1st.size();
// Do some simple monitoring of efficiencies
std::vector<FPGATrackSimTruthTrack> const & truthtracks = m_logicEventHeader_1st->optional().getTruthTracks();
if (truthtracks.size() > 0) {
m_evt_truth++;
auto passroad = Monitored::Scalar<bool>("eff_road",(roads_1st.size() > 0));
auto passtrack = Monitored::Scalar<bool>("eff_track",(tracks_1st.size() > 0));
auto truthpT_zoom = Monitored::Scalar<float>("pT_zoom",truthtracks.front().getPt()*0.001);
auto truthpT = Monitored::Scalar<float>("pT",truthtracks.front().getPt()*0.001);
auto trutheta = Monitored::Scalar<float>("eta",truthtracks.front().getEta());
auto truthphi= Monitored::Scalar<float>("phi",truthtracks.front().getPhi());
auto truthd0= Monitored::Scalar<float>("d0",truthtracks.front().getD0());
auto truthz0= Monitored::Scalar<float>("z0",truthtracks.front().getZ0());
if (roads_1st.size() > 0) m_nRoadsFound++;
bool passchi2 = false;
bool passchi2OLR = false;
if (tracks_1st.size() > 0) {
m_nTracksFound++;
for (auto track : tracks_1st) {
if (track.getChi2ndof() < 10) {
passchi2 = true;
if (track.passedOR()) {
passchi2OLR = true;
break;
}
}
}
}
if (passchi2) m_nTracksChi2Found++;
if (passchi2OLR) m_nTracksChi2OLRFound++;
auto passtrackchi2 = Monitored::Scalar<bool>("eff_track_chi2",passchi2);
Monitored::Group(m_monTool,passroad,passtrack,truthpT_zoom,truthpT,trutheta,truthphi,truthd0,truthz0,passtrackchi2);
}
TIME(m_tOR);
// Now, we may want to do large-radius tracking on the hits not used by the first stage tracking.
......@@ -557,9 +606,24 @@ StatusCode FPGATrackSimLogicalHitsProcessAlg::finalize()
"\nfin: " << std::setw(10) << m_tfin
);
#endif
if (m_outputHitTxt) m_outputHitTxtStream.close();
ATH_MSG_INFO("PRINTING FPGATRACKSIM SIMPLE STATS");
ATH_MSG_INFO("========================================================================================");
ATH_MSG_INFO("Inclusive efficiency to find a road = " << m_nRoadsFound/m_evt_truth);
ATH_MSG_INFO("Inclusive efficiency to find a track = " << m_nTracksFound/m_evt_truth);
ATH_MSG_INFO("Inclusive efficiency to find a track passing chi2 = " << m_nTracksChi2Found/m_evt_truth);
ATH_MSG_INFO("Inclusive efficiency to find a track passing chi2 and OLR = " << m_nTracksChi2OLRFound/m_evt_truth);
ATH_MSG_INFO("Number of 1st stage roads/event = " << m_nRoadsTot/m_evt);
ATH_MSG_INFO("Number of 1st stage track combinations/event = " << m_nTracksTot/m_evt);
ATH_MSG_INFO("Number of 1st stage tracks passing chi2/event = " << m_nTracksChi2Tot/m_evt);
ATH_MSG_INFO("Number of 1st stage tracks passing chi2 and OLR/event = " << m_nTracksChi2OLRTot/m_evt);
ATH_MSG_INFO("========================================================================================");
return StatusCode::SUCCESS;
}
......
......@@ -122,6 +122,19 @@ class FPGATrackSimLogicalHitsProcessAlg : public AthAlgorithm
std::vector<FPGATrackSimHit> m_hits_1st_miss, m_hits_2nd_miss;
std::vector<FPGATrackSimTrack> m_tracks_1st_guessedcheck, m_tracks_1st_nomiss, m_tracks_2nd_guessedcheck, m_tracks_2nd_nomiss;
// internal counters
double m_evt = 0; // number of events passing event selection, independent of truth
long m_nRoadsTot = 0; // total number of roads in those events
long m_nTracksTot = 0; // total number of tracks in those events
long m_nTracksChi2Tot = 0; // total number of tracks passing chi2 in those events
long m_nTracksChi2OLRTot = 0; // total number of tracks passing chi2 and OLR in those events
double m_evt_truth = 0; // number of events passing event selection and having a truth object
long m_nRoadsFound = 0; // total number of those events with at least one road
long m_nTracksFound = 0; // total number of those events with at least one track
long m_nTracksChi2Found = 0; // total number of those events with at least one track passing chi2
long m_nTracksChi2OLRFound = 0; // total number of those events with at least one track passing chi2 and OLR
StatusCode readInputs(bool & done);
StatusCode processInputs();
......
......@@ -143,7 +143,6 @@ StatusCode FPGATrackSimInputHeaderTool::readData(FPGATrackSimEventInputHeader* h
// increase counters
ATH_MSG_INFO(m_event);
m_EventTree->GetEntry(m_event++);
ATH_MSG_DEBUG("Reading event "<<m_eventHeader->event() );
*header= *m_eventHeader; //copy object to the external pointer
......
......@@ -127,7 +127,6 @@ StatusCode FPGATrackSimOutputHeaderTool::finalize()
ATH_MSG_INFO ("finalize: closing files");
if (m_rwoption.value() == std::string("RECREATE")) {
m_EventTree->Print();
ATH_MSG_INFO ("Contains " << m_EventTree->GetEntries() << " entries, over " << m_event << " events run");
// close the output files, but check that it exists (for athenaMP)
m_infile->Write();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment