114 auto klidObj = cluster.getRelatedTo<
KlId>();
125 if (!cluster.getAssociatedTrackFlag()) {
133 if (mcpart ==
nullptr) {
138 while (!(mcpart -> getMother() ==
nullptr)) {
143 mcpart = mcpart -> getMother();
149 double time = cluster.getTime();
150 double nLayer = cluster.getLayers();
151 double trackSep = 1.0e20;
153 for (
auto trackSeperation : trackSeperations) {
154 double dist = trackSeperation.getDistance();
155 if (dist < trackSep) {
167 m_phi = cluster.getMomentum().Phi();
168 m_theta = cluster.getMomentum().Theta();
169 m_momentum = std::abs(cluster.getMomentumMag());
217 m_trackFlag->Fill(cluster.getAssociatedTrackFlag());
218 m_ECLFlag->Fill(cluster.getAssociatedEclClusterFlag());
246 std::vector<double> efficiency(
m_xbins.size());
247 std::vector<double> purity(
m_xbins.size());
248 std::vector<double> backrej(
m_xbins.size());
251 for (
unsigned int i = 0; i <
m_xbins.size() - 1; ++i) {
254 if ((NtruePositive + NfalsePositive) <= 0) {
257 purity[i] = NtruePositive / (NtruePositive + NfalsePositive);
260 backrej[i] = 1 - NfalsePositive / NallFakes;
264 if (NallKlong <= 0) {
265 B2WARNING(
"No Klongs found in ROC calculation.");
267 efficiency[i] = NtruePositive / NallKlong;
271 m_ROC =
new TGraph(
m_xbins.size(), efficiency.data(), purity.data());
274 m_ROC->SetMarkerStyle(3);
276 m_ROC->SetLineColorAlpha(kBlue, 0.0);
277 m_backRej->SetLineColorAlpha(kBlue, 0.0);
278 m_ROC->GetXaxis()->SetTitle(
"Efficiency");
279 m_backRej->GetXaxis()->SetTitle(
"Efficiency");
280 m_ROC->GetYaxis()->SetTitle(
"Purity");
281 m_backRej->GetYaxis()->SetTitle(
"Background rejection");
282 m_ROC-> SetTitle(
"Klong Purity vs Efficiency");
283 m_backRej-> SetTitle(
"Klong background rejection vs Efficiency");
284 m_ROC-> GetListOfFunctions() -> Add(
new TNamed(
"Description",
285 "Purity vs Efficiency each point represents a cut on the klong ID."));
286 m_ROC -> GetListOfFunctions() -> Add(
new TNamed(
"Check",
"Should be as high as possible"));
287 m_backRej -> GetListOfFunctions() -> Add(
new TNamed(
"Check",
"Should be as high as possible"));
288 m_ROC -> GetListOfFunctions() -> Add(
new TNamed(
"Contact",
m_contact));
292 std::vector<std::tuple<TH1F*, std::string, std::string, bool>> histograms;
293 std::string defaultCheck{
"Nightly result should not differ significantly from the reference"};
294 histograms.push_back(make_tuple(
m_klidAll,
"KlId distribution", defaultCheck,
true));
295 histograms.push_back(make_tuple(
m_Mom_all_plot,
"All Momenta generated", defaultCheck,
false));
296 histograms.push_back(make_tuple(
m_effPhi,
"KlId efficiency in Phi", defaultCheck,
false));
297 histograms.push_back(make_tuple(
m_effTheta,
"KlId efficiency in Theta",
298 defaultCheck +
"; efficiency must be 0 below 0.3 rad and above 2.7 rad",
true));
299 histograms.push_back(make_tuple(
m_effMom,
"KlId efficiency in Momentum", defaultCheck,
true));
300 histograms.push_back(make_tuple(
m_fakePhi,
"KlId fake rate in Phi", defaultCheck,
false));
301 histograms.push_back(make_tuple(
m_fakeTheta,
"KlId fake rate in Theta",
302 defaultCheck +
"; fake rate must be 0 below 0.3 rad and above 2.7 rad",
true));
303 histograms.push_back(make_tuple(
m_fakeMom,
"KlId fake rate in Momentum", defaultCheck,
true));
304 histograms.push_back(make_tuple(
m_time,
"KLMClusters time", defaultCheck +
"; no secondary peaks",
true));
305 histograms.push_back(make_tuple(
m_trackSep,
"Distance of KLMCluster to closest Track", defaultCheck,
true));
306 histograms.push_back(make_tuple(
m_nLayer,
"KLMClusters nLayer", defaultCheck,
false));
307 histograms.push_back(make_tuple(
m_innermostLayer,
"KLMClusters innermostLayer", defaultCheck,
false));
308 histograms.push_back(make_tuple(
m_bkgPhi,
"Beam bkg in Phi", defaultCheck,
false));
309 histograms.push_back(make_tuple(
m_bkgTheta,
"Beam bkg in Theta",
310 defaultCheck +
"; background must be 0 below 0.3 rad and above 2.7 rad",
false));
311 histograms.push_back(make_tuple(
m_bkgMom,
"Beam bkg in Momentum", defaultCheck,
false));
312 histograms.push_back(make_tuple(
m_trackFlag,
"Track flag", defaultCheck,
false));
313 histograms.push_back(make_tuple(
m_ECLFlag,
"ECLCluster flag", defaultCheck,
false));
315 for (
auto hist : histograms) {
316 std::get<0>(hist) -> SetTitle(std::get<1>(hist).c_str());
317 std::get<0>(hist) -> GetListOfFunctions() -> Add(
new TNamed(
"Description", std::get<1>(hist)));
318 std::get<0>(hist) -> GetListOfFunctions() -> Add(
new TNamed(
"Check", std::get<2>(hist).c_str()));
319 std::get<0>(hist) -> GetListOfFunctions() -> Add(
new TNamed(
"Contact",
m_contact));
320 if (std::get<3>(hist))
321 std::get<0>(hist) -> GetListOfFunctions() -> Add(
new TNamed(
"MetaOptions",
"shifter,pvalue-warn=0.99,pvalue-error=0.02"));
323 std::get<0>(hist) -> GetListOfFunctions() -> Add(
new TNamed(
"MetaOptions",
"pvalue-warn=0.99,pvalue-error=0.1"));
324 std::get<0>(hist) -> Write();
A Class to store the Monte Carlo particle information.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.