3 #include <FairLogger.h>
5 #include <TCollection.h>
19 constexpr
auto cRED =
"\033[1;31m";
22 constexpr
auto cGREEN =
"\033[1;32m";
23 constexpr
auto cBLUE =
"\033[1;34m";
28 : fLogger(FairLogger::GetLogger()), fXfObj_ToF(-999), fObjCorr_ToF(-999), fICSum_E(-999), fX0(-999), fX1(-999),
37 fMTDCObjRange.clear();
57 for (
auto &w : files) {
59 TIter next(
f.GetListOfKeys());
62 while ((key =
dynamic_cast<TKey *
>(next()))) {
63 LOG(INFO) <<
"PID1 Loading Cut file: " << key->GetName();
64 fcutPID1.push_back(
dynamic_cast<TCutG *
>(
f.Get(key->GetName())));
70 for (
auto &w : files) {
72 TIter next(
f.GetListOfKeys());
75 while ((key =
dynamic_cast<TKey *
>(next()))) {
76 LOG(INFO) <<
"PID2 Loading Cut file: " << key->GetName();
77 fcutPID2.push_back(
dynamic_cast<TCutG *
>(
f.Get(key->GetName())));
83 for (
auto &w : files) {
85 TIter next(
f.GetListOfKeys());
88 while ((key =
dynamic_cast<TKey *
>(next()))) {
89 LOG(INFO) <<
"PID3 Loading Cut file: " << key->GetName();
90 fcutPID3.push_back(
dynamic_cast<TCutG *
>(
f.Get(key->GetName())));
117 return fMTDCObjRange;
141 std::vector<Double_t> result;
142 result.push_back(fX0);
143 result.push_back(fX1);
144 result.push_back(fY0);
145 result.push_back(fY1);
146 result.push_back(fAfp);
147 result.push_back(fBfp);
154 if (fMTDCXfRange.size() < 2 || fMTDCObjRange.size() < 2 || fTofObjCorr.size() < 2) {
155 LOG(WARNING) <<
"S800Ana::Calc : MTDCXfRange, MTDCObjRange, TofObjCorr size must be 2 : " << fMTDCXfRange.size()
156 <<
" " << fMTDCObjRange.size() <<
" " << fTofObjCorr.size() <<
" ... skip event";
167 Float_t S800_timeObjSelect = -999;
168 Float_t S800_timeXfSelect = -999;
169 Int_t CondMTDCXfObj = 0;
180 fAfp = atan((fX1 - fX0) / 1073.);
181 fBfp = atan((fY1 - fY0) / 1073.);
187 for (
float k : S800_timeMTDCXf) {
188 if (k > fMTDCXfRange.at(0) && k < fMTDCXfRange.at(1))
189 S800_timeXfSelect = k;
191 for (
float k : S800_timeMTDCObj) {
192 if (k > fMTDCObjRange.at(0) && k < fMTDCObjRange.at(1))
193 S800_timeObjSelect = k;
196 fXfObj_ToF = S800_timeXfSelect - S800_timeObjSelect;
198 if (S800_timeXfSelect != -999 && S800_timeObjSelect != -999) {
199 fXfObj_ToF = S800_timeXfSelect - S800_timeObjSelect;
203 if (CondMTDCXfObj && std::isnan(fX0) == 0 && std::isnan(fAfp) == 0 && std::isnan(fICSum_E) == 0) {
204 fObjCorr_ToF = S800_timeObjSelect + fTofObjCorr.at(0) * fAfp + fTofObjCorr.at(1) * fX0;
216 Int_t InCondition1 = 0;
217 Int_t InCondition2 = 0;
218 Int_t InCondition3 = 0;
223 for (
auto &w : fcutPID1)
224 if (fObjCorr_ToF != -999 && w->IsInside(fObjCorr_ToF, fXfObj_ToF))
226 for (
auto &w : fcutPID2)
227 if (fObjCorr_ToF != -999 && w->IsInside(fX0, fAfp))
229 for (
auto &w : fcutPID3)
230 if (fObjCorr_ToF != -999 && w->IsInside(fObjCorr_ToF, fICSum_E))
233 if (fcutPID1.size() == 0)
235 if (fcutPID2.size() == 0)
237 if (fcutPID3.size() == 0)
244 Int_t AndofCon = InCondition1 * InCondition2 * InCondition3;
248 std::cout <<
cGREEN <<
"'And' of S800 PID gates TRUE" <<
cNORMAL << std::endl;