36 throw std::length_error(
"Invalid arguments, expect: prefix gate_group gate_s gate_S group "
37 "ref_E ref_p ref_P ref_b ref_B");
40 std::copy(opts.begin(), opts.end(), std::ostream_iterator<std::string>(
ss,
"\n"));
62 std::string nameprefix(prefix +
"_g" + gid_gate +
"w" + S +
"_g" + gid +
"m" + E +
"td" + T);
64 ptrGate = std::make_shared<GamR::TK::Gate>(siglow, sighigh);
65 ptrGate->SetName((nameprefix +
"G").c_str());
66 p->WriteObject(ptrGate.get());
68 ptrRefPhoton = std::make_shared<GamR::Nucleus::Photon>(energy, pklow, pkhigh, bglow, bghigh);
69 ptrRefPhoton->SetName((nameprefix +
"R").c_str());
70 p->WriteObject(ptrRefPhoton.get());
73 ptrPkMatrixSum = p->GetMatrix((nameprefix +
"P").c_str());
74 ptrBgMatrixSum = p->GetMatrix((nameprefix +
"B").c_str());
77 ptrPkMatrixSum->SetBins(4096, 0, 4096, 8192, -4096, 4096);
78 ptrBgMatrixSum->SetBins(4096, 0, 4096, 8192, -4096, 4096);
84 std::stringstream ssTitle;
86 ssTitle <<
"Gated(" << siglow <<
"," << sighigh <<
") ";
87 ssTitle <<
"$E_{1}=" << ptrRefPhoton->GetEnergy() <<
"$ Gate: $";
88 ssTitle << ptrRefPhoton->GetGate()->GetLow() <<
"\\to";
89 ssTitle << ptrRefPhoton->GetGate()->GetHigh();
90 ssTitle <<
"$;Gamma Energy, E_{2}";
91 ssTitle <<
"[keV];$\\Delta t = t_{2}-t_{1}$";
93 ptrPkMatrixSum->SetTitle(ssTitle.str().c_str());
97 ssTitle <<
"Gated(" << siglow <<
"," << sighigh <<
") ";
98 ssTitle <<
"$E_{1}=" << ptrRefPhoton->GetEnergy() <<
"$ GateBG: $";
99 ssTitle << ptrRefPhoton->GetGateBG()->GetLow() <<
"\\to";
100 ssTitle << ptrRefPhoton->GetGateBG()->GetHigh();
101 ssTitle <<
"$;Gamma Energy, E_{2}";
102 ssTitle <<
"[keV];$\\Delta t = t_{2}-t_{1}$";
104 ptrBgMatrixSum->SetTitle(ssTitle.str().c_str());
110 std::string group_gate =
"DetGroup._" + gid_gate;
111 std::string group =
"DetGroup._" + gid;
112 TTreeReaderValue<std::vector<DetTime>> rdrDets(R, group.c_str());
113 TTreeReaderValue<std::vector<DetGate>> rdrGaters(R, group_gate.c_str());
114 while (R.Next() && !p->Done()) {
116 std::vector<DetGate> vecGaters = *rdrGaters;
117 std::vector<DetTime> vecDets = *rdrDets;
119 if ((vecDets.size() < 2) && (vecDets.size() < 1)) {
124 Bool_t gated = kFALSE;
125 for (
auto &gaters : vecGaters) {
126 if (ptrGate->Pass(gaters.template GetCal<S>())) {
136 for (
auto &deti : vecDets) {
137 for (
auto &detj : vecDets) {
138 if (deti.ID == detj.ID) {
141 Bool_t pkgated = ptrRefPhoton->GetGate()->Pass(deti.template GetCal<E>());
142 Bool_t bggated = ptrRefPhoton->GetGateBG()->Pass(deti.template GetCal<E>());
144 if ((pkgated || bggated) && (deti.template Get<T>() > 0) && (detj.template Get<T>() > 0)) {
146 auto tdiff = detj.template GetCal<T>() - deti.template GetCal<T>();
148 ptrPkMatrixSum->Fill(detj.template GetCal<E>(), tdiff);
149 }
else if (bggated) {
150 ptrBgMatrixSum->Fill(detj.template GetCal<E>(), tdiff);