36 throw std::length_error(
"Invalid arguments, expect: prefix group ref_E "
37 "ref_p ref_P ref_b ref_B");
40 std::copy(opts.begin(), opts.end(), std::ostream_iterator<std::string>(
ss,
"\n"));
55 std::string nameprefix(prefix +
"_g" + gid +
"m" + E +
"td" + T);
57 ptrRefPhoton = std::make_shared<GamR::Nucleus::Photon>(energy, pklow, pkhigh, bglow, bghigh);
58 ptrRefPhoton->SetName((nameprefix +
"R").c_str());
60 p->WriteObject(ptrRefPhoton.get());
68 ptrPkMatrixSum = p->GetMatrix((nameprefix +
"P").c_str());
69 ptrBgMatrixSum = p->GetMatrix((nameprefix +
"B").c_str());
72 ptrPkMatrixSum->SetBins(4096, 0, 4096, 8192, -4096, 4096);
73 ptrBgMatrixSum->SetBins(4096, 0, 4096, 8192, -4096, 4096);
79 std::stringstream ssTitle;
81 ssTitle <<
"$E_{1}=" << ptrRefPhoton->GetEnergy() <<
"$ Gate: $";
82 ssTitle << ptrRefPhoton->GetGate()->GetLow() <<
"\\to";
83 ssTitle << ptrRefPhoton->GetGate()->GetHigh();
84 ssTitle <<
"$;Gamma Energy, E_{2}";
85 ssTitle <<
"[keV];$\\Delta t = t_{2}-t_{1}$";
87 ptrPkMatrixSum->SetTitle(ssTitle.str().c_str());
91 ssTitle <<
"$E_{1}=" << ptrRefPhoton->GetEnergy() <<
"$ GateBG: $";
92 ssTitle << ptrRefPhoton->GetGateBG()->GetLow() <<
"\\to";
93 ssTitle << ptrRefPhoton->GetGateBG()->GetHigh();
94 ssTitle <<
"$;Gamma Energy, E_{2}";
95 ssTitle <<
"[keV];$\\Delta t = t_{2}-t_{1}$";
97 ptrBgMatrixSum->SetTitle(ssTitle.str().c_str());
103 std::string group =
"DetGroup._" + gid;
104 TTreeReaderValue<std::vector<Det>> rdrDets(R, group.c_str());
105 while (R.Next() && !p->Done()) {
106 std::vector<Det> vecDets = *rdrDets;
108 if (vecDets.size() < 2) {
111 for (
auto &deti : vecDets) {
112 for (
auto &detj : vecDets) {
113 if (deti.ID == detj.ID) {
116 Bool_t pkgated = ptrRefPhoton->GetGate()->Pass(deti.template GetCal<E>());
117 Bool_t bggated = ptrRefPhoton->GetGateBG()->Pass(deti.template GetCal<E>());
119 if ((pkgated || bggated) && (deti.template Get<T>() > 0) && (detj.template Get<T>() > 0)) {
121 auto tdiff = detj.template GetCal<T>() - deti.template GetCal<T>();
123 ptrPkMatrixSum->Fill(detj.template GetCal<E>(), tdiff);
124 }
else if (bggated) {
125 ptrBgMatrixSum->Fill(detj.template GetCal<E>(), tdiff);