16 std::unique_ptr<AtTPCXSManager> AtTPCXSManager::fInstance =
nullptr;
20 if (fInstance ==
nullptr)
21 fInstance = std::make_unique<concrete_AtTPCXSManager>();
22 return fInstance.get();
27 fExFunctionFile = filename;
29 file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
32 file.open(fExFunctionFile);
41 Float_t ERangeDown = 0;
42 Float_t ARangeDown = 0;
47 std::getline(file, line);
48 std::cout << line <<
"\n";
49 std::getline(file, line);
50 std::istringstream isheader(line);
51 isheader >> Ebinsize >> Abinsize >> ERangeUp >> ERangeDown >> ARangeUp >> ARangeDown >> XSTot;
52 std::cout <<
" Energy bin size : " << Ebinsize <<
" - Angular bin size : " << Abinsize
53 <<
" - Energy range Up : " << ERangeUp <<
" - Energy range down :" << ERangeDown
54 <<
" - Angular range Up : " << ARangeUp <<
" - Angular range Down : " << ARangeDown
55 <<
" - Total cross section : " << XSTot <<
"\n";
57 auto nEbins =
static_cast<Int_t
>(((ERangeUp + 0.000001) - ERangeDown) / Ebinsize);
58 auto nAbins =
static_cast<Int_t
>(((ARangeUp + 0.000001) - ARangeDown) / Abinsize);
60 std::cout <<
" Number of energy - angle bins : " << nEbins <<
" - " << nAbins <<
"\n";
62 fExFunction = std::make_shared<TH2F>(
"fExFunction",
"fExFunction", nEbins + 1, ERangeDown - Ebinsize / 2.0,
63 ERangeUp + Ebinsize / 2.0, nAbins + 1, ARangeDown - Abinsize / 2.0,
64 ARangeUp + Abinsize / 2.0);
68 std::getline(file, line);
70 Float_t ecm, acm, xs, ph;
73 std::istringstream isxs(line);
75 isxs >> ecm >> xs >> acm >> ph;
77 std::cout <<
" Energy cm (MeV) : " << ecm <<
" - Cross section (mb/sr or mb) : " << xs
78 <<
" - Angle cm (deg) : " << acm <<
" - Place holder : " << ph <<
"\n";
80 Int_t bin = fExFunction->Fill(ecm, acm, xs);
81 std::cout <<
" Bin fill " << bin <<
"\n";
88 std::cout <<
"Successfully read " << nPoints <<
" points in " << nLines <<
" lines!" << std::endl;
89 kIsExFunction = kTRUE;