Line | Branch | Exec | Source |
---|---|---|---|
1 | #include "Validator.h" | ||
2 | |||
3 | #include <TProfile.h> | ||
4 | |||
5 | namespace iguana::clas12 { | ||
6 | |||
7 | REGISTER_IGUANA_VALIDATOR(SectorFinderValidator); | ||
8 | |||
9 | 1 | void SectorFinderValidator::Start(hipo::banklist& banks) | |
10 | { | ||
11 | // define the algorithm sequence | ||
12 | 2 | m_algo_seq = std::make_unique<AlgorithmSequence>(); | |
13 |
3/8✓ Branch 0 (7→8) taken 1 times.
✗ Branch 1 (7→181) not taken.
✓ Branch 2 (8→9) taken 1 times.
✗ Branch 3 (8→175) not taken.
✓ Branch 4 (14→15) taken 1 times.
✗ Branch 5 (14→17) not taken.
✗ Branch 6 (181→182) not taken.
✗ Branch 7 (181→184) not taken.
|
2 | m_algo_seq->Add("clas12::EventBuilderFilter"); |
14 |
3/8✓ Branch 0 (20→21) taken 1 times.
✗ Branch 1 (20→193) not taken.
✓ Branch 2 (21→22) taken 1 times.
✗ Branch 3 (21→187) not taken.
✓ Branch 4 (27→28) taken 1 times.
✗ Branch 5 (27→30) not taken.
✗ Branch 6 (193→194) not taken.
✗ Branch 7 (193→196) not taken.
|
2 | m_algo_seq->Add("clas12::SectorFinder"); |
15 |
5/14✓ Branch 0 (33→34) taken 1 times.
✗ Branch 1 (33→211) not taken.
✓ Branch 2 (34→35) taken 1 times.
✗ Branch 3 (34→205) not taken.
✓ Branch 4 (35→36) taken 1 times.
✗ Branch 5 (35→199) not taken.
✓ Branch 6 (41→42) taken 1 times.
✗ Branch 7 (41→44) not taken.
✓ Branch 8 (46→47) taken 1 times.
✗ Branch 9 (46→49) not taken.
✗ Branch 10 (205→206) not taken.
✗ Branch 11 (205→208) not taken.
✗ Branch 12 (211→212) not taken.
✗ Branch 13 (211→214) not taken.
|
4 | m_algo_seq->SetOption<std::vector<int>>("clas12::EventBuilderFilter", "pids", u_pdg_list); |
16 |
5/14✓ Branch 0 (50→51) taken 1 times.
✗ Branch 1 (50→227) not taken.
✓ Branch 2 (51→52) taken 1 times.
✗ Branch 3 (51→221) not taken.
✓ Branch 4 (52→53) taken 1 times.
✗ Branch 5 (52→215) not taken.
✓ Branch 6 (58→59) taken 1 times.
✗ Branch 7 (58→61) not taken.
✓ Branch 8 (63→64) taken 1 times.
✗ Branch 9 (63→66) not taken.
✗ Branch 10 (221→222) not taken.
✗ Branch 11 (221→224) not taken.
✗ Branch 12 (227→228) not taken.
✗ Branch 13 (227→230) not taken.
|
4 | m_algo_seq->SetOption<std::string>("clas12::SectorFinder", "bank_charged", "REC::Track"); |
17 |
5/14✓ Branch 0 (69→70) taken 1 times.
✗ Branch 1 (69→245) not taken.
✓ Branch 2 (70→71) taken 1 times.
✗ Branch 3 (70→239) not taken.
✓ Branch 4 (71→72) taken 1 times.
✗ Branch 5 (71→233) not taken.
✓ Branch 6 (77→78) taken 1 times.
✗ Branch 7 (77→80) not taken.
✓ Branch 8 (82→83) taken 1 times.
✗ Branch 9 (82→85) not taken.
✗ Branch 10 (239→240) not taken.
✗ Branch 11 (239→242) not taken.
✗ Branch 12 (245→246) not taken.
✗ Branch 13 (245→248) not taken.
|
4 | m_algo_seq->SetOption<std::string>("clas12::SectorFinder", "bank_uncharged", "default"); |
18 | 1 | m_algo_seq->Start(banks); | |
19 | |||
20 | |||
21 |
2/4✓ Branch 0 (89→90) taken 1 times.
✗ Branch 1 (89→251) not taken.
✓ Branch 2 (90→91) taken 1 times.
✗ Branch 3 (90→93) not taken.
|
1 | b_particle = GetBankIndex(banks, "REC::Particle"); |
22 |
2/4✓ Branch 0 (96→97) taken 1 times.
✗ Branch 1 (96→257) not taken.
✗ Branch 2 (97→98) not taken.
✓ Branch 3 (97→100) taken 1 times.
|
1 | b_cal = GetBankIndex(banks, "REC::Calorimeter"); |
23 |
2/4✓ Branch 0 (103→104) taken 1 times.
✗ Branch 1 (103→263) not taken.
✗ Branch 2 (104→105) not taken.
✓ Branch 3 (104→107) taken 1 times.
|
1 | b_sector = GetBankIndex(banks, "REC::Particle::Sector"); |
24 | |||
25 | // set an output file | ||
26 | 1 | auto output_dir = GetOutputDirectory(); | |
27 |
1/2✓ Branch 0 (110→111) taken 1 times.
✗ Branch 1 (110→125) not taken.
|
1 | if(output_dir) { |
28 |
3/6✓ Branch 0 (111→112) taken 1 times.
✗ Branch 1 (111→312) not taken.
✓ Branch 2 (112→113) taken 1 times.
✗ Branch 3 (112→269) not taken.
✓ Branch 4 (118→119) taken 1 times.
✗ Branch 5 (118→312) not taken.
|
2 | m_output_file_basename = output_dir.value() + "/sector_finder"; |
29 |
2/4✓ Branch 0 (119→120) taken 1 times.
✗ Branch 1 (119→277) not taken.
✓ Branch 2 (122→123) taken 1 times.
✗ Branch 3 (122→275) not taken.
|
2 | m_output_file = new TFile(m_output_file_basename + ".root", "RECREATE"); |
30 | } | ||
31 | |||
32 | // define plots | ||
33 |
2/2✓ Branch 0 (170→126) taken 2 times.
✓ Branch 1 (170→171) taken 1 times.
|
3 | for(auto const& pdg : u_pdg_list) { |
34 | std::vector<TH2D*> YvsX; | ||
35 |
2/6✓ Branch 0 (126→127) taken 2 times.
✗ Branch 1 (126→306) not taken.
✓ Branch 2 (127→128) taken 2 times.
✗ Branch 3 (127→306) not taken.
✗ Branch 4 (306→307) not taken.
✗ Branch 5 (306→309) not taken.
|
2 | TString particle_name = particle::name.at(particle::PDG(pdg)); |
36 |
2/4✓ Branch 0 (128→129) taken 2 times.
✗ Branch 1 (128→304) not taken.
✓ Branch 2 (129→130) taken 2 times.
✗ Branch 3 (129→304) not taken.
|
2 | TString particle_title = particle::title.at(particle::PDG(pdg)); |
37 |
2/2✓ Branch 0 (157→131) taken 12 times.
✓ Branch 1 (157→158) taken 2 times.
|
14 | for(int sec = 1; sec <= 6; sec++) { |
38 |
2/4✓ Branch 0 (131→132) taken 12 times.
✗ Branch 1 (131→302) not taken.
✓ Branch 2 (132→133) taken 12 times.
✗ Branch 3 (132→302) not taken.
|
12 | TString sector_name = Form("sec%d", sec); |
39 |
2/4✓ Branch 0 (133→134) taken 12 times.
✗ Branch 1 (133→296) not taken.
✓ Branch 2 (134→135) taken 12 times.
✗ Branch 3 (134→296) not taken.
|
12 | TString sector_title = Form("sector %d", sec); |
40 |
1/2✓ Branch 0 (147→148) taken 12 times.
✗ Branch 1 (147→279) not taken.
|
12 | YvsX.push_back(new TH2D( |
41 |
3/6✓ Branch 0 (141→142) taken 12 times.
✗ Branch 1 (141→285) not taken.
✓ Branch 2 (142→143) taken 12 times.
✗ Branch 3 (142→283) not taken.
✓ Branch 4 (143→144) taken 12 times.
✗ Branch 5 (143→281) not taken.
|
24 | "YvsX_" + particle_name + "_" + sector_name, |
42 |
3/8✓ Branch 0 (136→137) taken 12 times.
✗ Branch 1 (136→291) not taken.
✓ Branch 2 (137→138) taken 12 times.
✗ Branch 3 (137→289) not taken.
✓ Branch 4 (138→139) taken 12 times.
✗ Branch 5 (138→287) not taken.
✗ Branch 6 (291→292) not taken.
✗ Branch 7 (291→293) not taken.
|
24 | particle_title + " Calorimeter Hit Position, " + sector_title + ";X [cm];Y [cm]", |
43 | 50, -500, 500, | ||
44 |
1/2✓ Branch 0 (146→147) taken 12 times.
✗ Branch 1 (146→279) not taken.
|
12 | 50, -500, 500)); |
45 | 12 | } | |
46 | 2 | u_YvsX.insert({pdg, YvsX}); | |
47 | 2 | } | |
48 | 1 | u_IsInFD = new TH1D( | |
49 | "IsInFD", | ||
50 | "e^{-} with #theta>6.5^{o} Sector; e^{-} Sector", | ||
51 |
1/2✓ Branch 0 (172→173) taken 1 times.
✗ Branch 1 (172→310) not taken.
|
1 | 7, -0.5, 6.5); |
52 | |||
53 | 1 | } | |
54 | |||
55 | 1000 | void SectorFinderValidator::Run(hipo::banklist& banks) const | |
56 | { | ||
57 | |||
58 |
1/2✓ Branch 0 (3→4) taken 1000 times.
✗ Branch 1 (3→58) not taken.
|
1000 | auto& particle_bank = GetBank(banks, b_particle, "REC::Particle"); |
59 |
2/4✓ Branch 0 (9→10) taken 1000 times.
✗ Branch 1 (9→70) not taken.
✓ Branch 2 (10→11) taken 1000 times.
✗ Branch 3 (10→64) not taken.
|
1000 | auto& sector_bank = GetBank(banks, b_sector, "REC::Particle::Sector"); |
60 |
2/4✓ Branch 0 (16→17) taken 1000 times.
✗ Branch 1 (16→77) not taken.
✓ Branch 2 (17→18) taken 1000 times.
✗ Branch 3 (17→71) not taken.
|
2000 | auto& cal_bank = GetBank(banks, b_cal, "REC::Calorimeter"); |
61 | |||
62 | |||
63 | 1000 | m_algo_seq->Run(banks); | |
64 | |||
65 | // lock the mutex, so we can mutate plots | ||
66 | 1000 | std::scoped_lock<std::mutex> lock(m_mutex); | |
67 | // fill the plots | ||
68 |
3/4✓ Branch 0 (25→26) taken 1000 times.
✗ Branch 1 (25→78) not taken.
✓ Branch 2 (55→27) taken 2478 times.
✓ Branch 3 (55→56) taken 1000 times.
|
3478 | for(auto const& row : particle_bank.getRowList()) { |
69 | |||
70 | 2478 | auto pdg = particle_bank.getInt("pid", row); | |
71 | 2478 | auto sector = sector_bank.getInt("sector", row); | |
72 | |||
73 | double x=0,y=0; | ||
74 |
3/4✓ Branch 0 (29→30) taken 2478 times.
✗ Branch 1 (29→78) not taken.
✓ Branch 2 (37→31) taken 18264 times.
✓ Branch 3 (37→38) taken 2478 times.
|
20742 | for(auto const& rowcal : cal_bank.getRowList()){ |
75 |
2/2✓ Branch 0 (32→33) taken 2509 times.
✓ Branch 1 (32→36) taken 15755 times.
|
18264 | if(cal_bank.getShort("pindex", rowcal)==row){ |
76 | 2509 | x=cal_bank.getFloat("x", rowcal); | |
77 | 2509 | y=cal_bank.getFloat("y", rowcal); | |
78 | } | ||
79 | } | ||
80 | |||
81 |
2/2✓ Branch 0 (38→39) taken 639 times.
✓ Branch 1 (38→47) taken 1839 times.
|
2478 | if(pdg==11){ |
82 | 639 | double Px=particle_bank.getFloat("px", row); | |
83 | 639 | double Py=particle_bank.getFloat("py", row); | |
84 | 639 | double Pz=particle_bank.getFloat("pz", row); | |
85 | 639 | double P=sqrt(Px*Px+Py*Py+Pz*Pz); | |
86 | 639 | double Theta=acos(Pz/P) * 180./M_PI ; | |
87 | //electrons are in FT or FD | ||
88 | //sector should always be 1 if theta is larger than 5.5 degrees | ||
89 |
2/2✓ Branch 0 (42→43) taken 149 times.
✓ Branch 1 (42→47) taken 490 times.
|
639 | if (Theta>6.5){ |
90 |
1/2✓ Branch 0 (43→44) taken 149 times.
✗ Branch 1 (43→78) not taken.
|
149 | u_IsInFD->Fill(sector); |
91 |
2/2✓ Branch 0 (44→45) taken 4 times.
✓ Branch 1 (44→49) taken 145 times.
|
149 | if(sector==0){ |
92 | 4 | m_log->Trace("e' with theta={} and sector==0, this should not happen", Theta); | |
93 | } | ||
94 | } | ||
95 | } | ||
96 | |||
97 | // skip central particle, or unknown sector | ||
98 |
2/2✓ Branch 0 (47→48) taken 827 times.
✓ Branch 1 (47→49) taken 1506 times.
|
2333 | if(sector == 0) |
99 | 827 | continue; | |
100 |
2/4✓ Branch 0 (49→50) taken 1651 times.
✗ Branch 1 (49→78) not taken.
✓ Branch 2 (50→51) taken 1651 times.
✗ Branch 3 (50→78) not taken.
|
1651 | m_log->Trace("Filling SectorFinder Validator, pdg {} sector {} pindex {}", pdg, sector, row); |
101 |
2/4✓ Branch 0 (51→52) taken 1651 times.
✗ Branch 1 (51→78) not taken.
✓ Branch 2 (52→53) taken 1651 times.
✗ Branch 3 (52→78) not taken.
|
1651 | u_YvsX.at(pdg).at(sector - 1)->Fill(x, y); |
102 | } | ||
103 | |||
104 | 1000 | } | |
105 | |||
106 | |||
107 | 1 | void SectorFinderValidator::Stop() | |
108 | { | ||
109 |
1/2✓ Branch 0 (4→5) taken 1 times.
✗ Branch 1 (4→55) not taken.
|
2 | if(GetOutputDirectory()) { |
110 |
2/2✓ Branch 0 (42→6) taken 2 times.
✓ Branch 1 (42→43) taken 1 times.
|
3 | for(auto const& [pdg, plots] : u_YvsX) { |
111 | int n_cols = 3; | ||
112 | int n_rows = 2; | ||
113 | 2 | TString canv_name = Form("canv%d", pdg); | |
114 |
1/2✓ Branch 0 (11→12) taken 2 times.
✗ Branch 1 (11→56) not taken.
|
2 | auto canv = new TCanvas(canv_name, canv_name, n_cols * 800, n_rows * 600); |
115 |
1/2✓ Branch 0 (12→13) taken 2 times.
✗ Branch 1 (12→72) not taken.
|
2 | canv->Divide(n_cols, n_rows); |
116 | int pad_num = 0; | ||
117 |
2/2✓ Branch 0 (22→14) taken 12 times.
✓ Branch 1 (22→23) taken 2 times.
|
14 | for(auto const& plot : plots) { |
118 |
1/2✓ Branch 0 (14→15) taken 12 times.
✗ Branch 1 (14→72) not taken.
|
12 | auto pad = canv->GetPad(++pad_num); |
119 |
1/2✓ Branch 0 (15→16) taken 12 times.
✗ Branch 1 (15→72) not taken.
|
12 | pad->cd(); |
120 |
1/2✓ Branch 0 (16→17) taken 12 times.
✗ Branch 1 (16→72) not taken.
|
12 | pad->SetGrid(1, 1); |
121 |
1/2✓ Branch 0 (17→18) taken 12 times.
✗ Branch 1 (17→72) not taken.
|
12 | pad->SetLeftMargin(0.12); |
122 |
1/2✓ Branch 0 (18→19) taken 12 times.
✗ Branch 1 (18→72) not taken.
|
12 | pad->SetRightMargin(0.12); |
123 |
1/2✓ Branch 0 (19→20) taken 12 times.
✗ Branch 1 (19→72) not taken.
|
12 | pad->SetBottomMargin(0.12); |
124 |
1/2✓ Branch 0 (20→21) taken 12 times.
✗ Branch 1 (20→72) not taken.
|
12 | plot->Draw("colz"); |
125 | } | ||
126 |
5/10✓ Branch 0 (24→25) taken 2 times.
✗ Branch 1 (24→66) not taken.
✓ Branch 2 (25→26) taken 2 times.
✗ Branch 3 (25→64) not taken.
✓ Branch 4 (26→27) taken 2 times.
✗ Branch 5 (26→62) not taken.
✓ Branch 6 (27→28) taken 2 times.
✗ Branch 7 (27→60) not taken.
✓ Branch 8 (30→31) taken 2 times.
✗ Branch 9 (30→58) not taken.
|
4 | canv->SaveAs(m_output_file_basename + "_" + std::to_string(pdg) + ".png"); |
127 | |||
128 | 2 | } | |
129 | |||
130 |
1/2✓ Branch 0 (44→45) taken 1 times.
✗ Branch 1 (44→74) not taken.
|
1 | auto canv1D = new TCanvas("1D canvas","1D canvas",800, 600); |
131 | 1 | u_IsInFD->Draw(); | |
132 |
1/2✓ Branch 0 (49→50) taken 1 times.
✗ Branch 1 (49→76) not taken.
|
2 | canv1D->SaveAs(m_output_file_basename+"_elIsInFD.png"); |
133 | |||
134 | 1 | m_output_file->Write(); | |
135 | 1 | m_log->Info("Wrote output file {}", m_output_file->GetName()); | |
136 | 1 | m_output_file->Close(); | |
137 | } | ||
138 | 1 | } | |
139 | |||
140 | } | ||
141 |