27int main(
const int argc,
const char *argv[])
29 args::ArgumentParser parser(
"GammaROOT Tree Sorter. ANU Edition.",
"Aqeel Akber <aqeel.akber@anu.edu.au>\n"
30 "Contribute! <i.believe.in.you@yourdesk.io>");
32 args::HelpFlag
help(parser,
"help",
"Display this help menu", {
'h',
"help"});
33 args::PositionalList<std::string> options(parser,
"options",
"Options passed to sorts (if applicable)");
35 args::Group parser_io(parser,
"IO:");
36 args::ValueFlagList<std::string, std::vector> infiles(parser_io,
"input.root",
"Input ROOT file.", {
"input"});
37 args::ValueFlag<std::string> outfilename(parser_io,
"output.root",
"Output ROOT file.", {
"output"});
38 args::ValueFlag<Int_t> compress(parser_io,
"101",
"Output compression settings", {
"compress"}, 101);
40 args::Group parser_hist(parser,
"Histogram:");
41 args::ValueFlag<std::string> nameprefix(parser_hist,
"junk",
"Histogram name prefix", {
"name"});
43 args::ValueFlag<ULong64_t> xbins(parser_hist,
"4096",
"Number of bins on X axis", {
"nx"}, 4096);
44 args::ValueFlag<Long64_t> xlow(parser_hist,
"0",
"Low value on X axis", {
"xmin"}, 0);
45 args::ValueFlag<Long64_t> xhigh(parser_hist,
"4096",
"High value on X axis", {
"xmax"}, 4096);
47 args::ValueFlag<ULong64_t> ybins(parser_hist,
"4096",
"Number of bins on Y ayis", {
"ny"}, 4096);
48 args::ValueFlag<Long64_t> ylow(parser_hist,
"0",
"Low value on Y ayis", {
"ymin"}, 0);
49 args::ValueFlag<Long64_t> yhigh(parser_hist,
"4096",
"High value on Y ayis", {
"ymax"}, 4096);
51 args::ValueFlag<ULong64_t> zbins(parser_hist,
"512",
"Number of bins on Z azis", {
"nz"}, 512);
52 args::ValueFlag<Long64_t> zlow(parser_hist,
"0",
"Low value on Z azis", {
"zmin"}, 0);
53 args::ValueFlag<Long64_t> zhigh(parser_hist,
"512",
"High value on Z azis", {
"zmax"}, 512);
55 args::Group parser_gates(parser,
"Gates:");
56 args::ValueFlagList<std::string, std::vector> gates(parser_gates,
"g.m.id lo hi | g.m.id lo hi",
"Gate", {
"gate"});
59 args::Group parser_sorts(parser,
"Type:", args::Group::Validators::AtLeastOne);
62 args::Group parser_matrix(parser_sorts,
"Matrix", args::Group::Validators::All);
63 args::Flag mat(parser_matrix,
"matrix",
"2D Histogram", {
"matrix"});
64 args::ValueFlag<size_t> matgI(parser_matrix,
"0",
"First detector group", {
"gI"}, 0);
65 args::ValueFlag<size_t> matgJ(parser_matrix,
"0",
"Second detector group", {
"gJ"}, 0);
66 args::ValueFlag<size_t> matmX(parser_matrix,
"0",
"Measurement X", {
"mX"}, 0);
67 args::ValueFlag<size_t> matmY(parser_matrix,
"0",
"Measurement Y", {
"mY"}, 0);
68 args::Group parser_matrixaxisX(parser_matrix,
"X Axis", args::Group::Validators::Xor);
69 args::Flag matXcoinc(parser_matrixaxisX,
"X",
"gI.mX", {
"x-coinc"});
70 args::Flag matXsum(parser_matrixaxisX,
"X+Y",
"gI.mX + gJ.mX", {
"x-sum"});
71 args::Flag matXdiff(parser_matrixaxisX,
"X-Y",
"gI.mX - gJ.mX", {
"x-diff"});
72 args::Flag matXprod(parser_matrixaxisX,
"X*Y",
"gI.mX * gJ.mX", {
"x-prod"});
73 args::Flag matXratio(parser_matrixaxisX,
"X",
"gI.mX / gJ.mX", {
"x-ratio"});
74 args::Group parser_matrixaxisY(parser_matrix,
"Y Axis", args::Group::Validators::Xor);
75 args::Flag matYcoinc(parser_matrixaxisY,
"Y",
"gJ.mY", {
"y-coinc"});
76 args::Flag matYsum(parser_matrixaxisY,
"Y+Y",
"gJ.mY + gI.mY", {
"y-sum"});
77 args::Flag matYdiff(parser_matrixaxisY,
"Y-Y",
"gJ.mY - gI.mY", {
"y-diff"});
78 args::Flag matYprod(parser_matrixaxisY,
"Y*Y",
"gJ.mY * gI.mY", {
"y-prod"});
79 args::Flag matYratio(parser_matrixaxisY,
"Y",
"gJ.mY / gI.mY", {
"y-ratio"});
112 parser.ParseCLI(argc, argv);
113 }
catch (args::Help) {
116 }
catch (args::ParseError e) {
117 std::cerr << e.what() << std::endl;
120 }
catch (args::ValidationError e) {
121 std::cerr << e.what() << std::endl;
127 Sorter sorter(infiles.Get(), outfilename.Get(), compress.Get());
128 sorter.
SetXsize(xbins.Get(), xlow.Get(), xhigh.Get());
129 sorter.
SetYsize(ybins.Get(), ylow.Get(), yhigh.Get());
130 sorter.
SetZsize(zbins.Get(), zlow.Get(), zhigh.Get());
133 std::thread process([&]() {
142 }
else if (matXsum) {
144 }
else if (matXdiff) {
146 }
else if (matXprod) {
148 }
else if (matXratio) {
155 }
else if (matYsum) {
157 }
else if (matYdiff) {
159 }
else if (matYprod) {
161 }
else if (matYratio) {
166 auto sort =
Type::Matrix(&sorter, nameprefix.Get(), matgI.Get(), matgJ.Get(), matmX.Get(), matmY.Get(),
167 gates.Get(), xaxis, yaxis);
202 while (repl.Loop()) {
203 repl.ReadLine(input);
204 if (input ==
"help") {
205 std::cout << std::endl <<
"help | status | save and exit | exit" << std::endl;
207 if (input ==
"status") {
209 std::cout << std::endl;
211 if (input ==
"save and exit") {
216 if (input ==
"exit") {
224 if (!input.empty()) {