38 return StatusCode::SUCCESS;
44 std::vector<FPGATrackSimCluster>
const & clusters_1st,
45 std::vector<FPGATrackSimRoad*>
const & roads_1st, std::vector<FPGATrackSimTrack>
const & tracks_1st,
46 std::vector<FPGATrackSimRoad*>
const & roads_2nd, std::vector<FPGATrackSimTrack>
const & tracks_2nd)
50 info->nMappedHits_1st_layer[hit.getLayer()]++;
51 info->nMappedHits_1st_total++;
56 info->nClusters_1st_layer[cluster.getClusterEquiv().getLayer()]++;
57 info->nClusters_1st_total = clusters_1st.size();
60 info->nRoads_1st_total = roads_1st.size();
66 std::unordered_map<int, size_t> pattID_nTracks_1st;
67 std::unordered_map<int, size_t> pattID_nTracks_1st_passChi2;
68 std::unordered_map<int, size_t> pattID_nTracks_1st_afterOR;
70 std::unordered_map<int, size_t> sectID_nTracks_1st;
71 std::unordered_map<int, size_t> sectID_nTracks_1st_passChi2;
72 std::unordered_map<int, size_t> sectID_nTracks_1st_afterOR;
74 info->nTracks_1st_total = tracks_1st.size();
77 info->nTracks_1st_passChi2++;
78 pattID_nTracks_1st_passChi2[
t.getPatternID()]++;
79 sectID_nTracks_1st_passChi2[
t.getFirstSectorID()]++;
81 if (
t.passedOR() == 1) {
82 info->nTracks_1st_afterOR++;
83 pattID_nTracks_1st_afterOR[
t.getPatternID()]++;
84 sectID_nTracks_1st_afterOR[
t.getFirstSectorID()]++;
86 pattID_nTracks_1st[
t.getPatternID()]++;
87 sectID_nTracks_1st[
t.getFirstSectorID()]++;
89 for (
const auto& [
ID, ntrack]: pattID_nTracks_1st) {
90 info->nTracks_1st_per_patt_total.push_back(ntrack);
92 for (
const auto& [
ID, ntrack]: pattID_nTracks_1st_passChi2) {
93 info->nTracks_1st_per_patt_passChi2.push_back(ntrack);
95 for (
const auto& [
ID, ntrack]: pattID_nTracks_1st_afterOR) {
96 info->nTracks_1st_per_patt_afterOR.push_back(ntrack);
99 info->nConstants_1st_fitter = sectID_nTracks_1st.size();
100 info->nConstants_1st_passChi2 = sectID_nTracks_1st_passChi2.size();
101 info->nConstants_1st_afterOR = sectID_nTracks_1st_afterOR.size();
104 info->nRoads_2nd_total = roads_2nd.size();
106 std::unordered_map<int, size_t> sectID_nTracks_2nd;
107 std::unordered_map<int, size_t> sectID_nTracks_2nd_passChi2;
108 std::unordered_map<int, size_t> sectID_nTracks_2nd_afterOR;
110 info->nTracks_2nd_total = tracks_2nd.size();
113 info->nTracks_2nd_passChi2++;
114 sectID_nTracks_2nd_passChi2[
t.getSecondSectorID()]++;
116 if (
t.passedOR() == 1) {
117 info->nTracks_2nd_afterOR++;
118 sectID_nTracks_2nd_afterOR[
t.getSecondSectorID()]++;
120 sectID_nTracks_2nd[
t.getSecondSectorID()]++;
123 info->nConstants_2nd_fitter = sectID_nTracks_2nd.size();
124 info->nConstants_2nd_passChi2 = sectID_nTracks_2nd_passChi2.size();
125 info->nConstants_2nd_afterOR = sectID_nTracks_2nd_afterOR.size();
133 if (
m_evtSel->passCuts(offline_t))
info->nOfflineTracks++;
136 if (
info->nOfflineTracks > 0) {
137 info->nTracks_1st_over_nOfflineTracks = (
float)tracks_1st.size() / (
float)
info->nOfflineTracks;
143 return StatusCode::SUCCESS;
170 for (
size_t n :
info.nTracks_1st_per_patt_total) {
173 for (
size_t n :
info.nTracks_1st_per_patt_passChi2) {
176 for (
size_t n :
info.nTracks_1st_per_patt_afterOR) {
200 if (
info.nOfflineTracks > 0) {
207 return StatusCode::SUCCESS;
222 m_dataFlowTeX <<
"\\documentclass[12pt]{article}" << std::endl;
226 m_dataFlowTeX <<
"\\begin{tabular}{|c|c|c|c|c|c|c|}" << std::endl;
228 m_dataFlowTeX <<
"Type & Stage & Mean & RMS & RMS95 & Min & Max \\\\" << std::endl;
294 std::string str_sample;
297 switch (
m_evtSel->getSampleType()) {
301 default : str_sample =
"";
break;
304 str_PU =
m_evtSel->checkPU() ?
" with pile-up" :
"";
320 return StatusCode::SUCCESS;
329 return StatusCode::SUCCESS;
369 std::string
hname =
"h_dataflow_" +
key;
393 h->SetBins(
max + 1, -0.5,
max + 0.5);
404 return StatusCode::SUCCESS;
415 return StatusCode::SUCCESS;
428 std::string str_stage =
"", str_key =
key;
429 if (
key.find(
"_1st") != std::string::npos) {
431 str_key.erase(
key.find(
"_1st"), std::string(
"_1st").length());
433 else if (
key.find(
"_2nd") != std::string::npos) {
434 str_stage =
"SECOND";
435 str_key.erase(
key.find(
"_2nd"), std::string(
"_2nd").length());
438 str_stage =
"UNKNOWN";
441 double mean =
h->GetMean() / div;
442 double rms =
h->GetRMS() / div;
443 double rms95_n =
rms95(
h) / div;
457 std::string key_tex = str_key;
466 return StatusCode::SUCCESS;
473 for (
unsigned i = 0;
i <
n;
i++) {
483 size_t pos =
data.find(toFind);
484 while (
pos != std::string::npos) {
485 data.replace(
pos, toFind.size(), replaceStr);
486 pos =
data.find(toFind,
pos + replaceStr.size());
494 double total =
h->Integral();
495 for (
int i = 1;
i <=
h->GetNbinsX();
i++) {
496 double partial =
h->Integral(1,
i);
497 if (partial / total > max_frac) {
498 max_value =
h->GetBinCenter(
i);
499 h->GetXaxis()->SetRange(1,
i);
509 int sigDigit =
v != 0 ? trunc(log10(fabs(
v))) : 0;
510 if (nSigDigits >= 1) {
511 double factor =
pow(10., nSigDigits - sigDigit - 1);
512 return round(
v * factor) / factor;