19int main(
int argc,
char *argv[])
21 args::ArgumentParser parser(
"GammaROOT Calibration Helper for RawTree",
22 "Aqeel Akber <aqeel.akber@anu.edu.au>\n"
23 "Contribute! <i.believe.in.you@yourdesk.io>");
24 args::HelpFlag
help(parser,
"help",
"Display this help menu", {
'h',
"help"});
26 args::Group parser_io(parser,
"Input / Output", args::Group::Validators::All);
27 args::ValueFlag<std::string> infilename(parser_io,
"raw.root",
"RawTree ROOT file.", {
'i'});
28 args::ValueFlag<std::string> inbranchname(parser_io,
"branch",
"RawTree branch name", {
'b'});
29 args::ValueFlag<std::string> targetfilename(parser_io,
"targets.root",
"Targets ROOT file.", {
't'});
30 args::ValueFlag<std::string> targethistname(parser_io,
"calhist",
"Target histogram name", {
'c'});
31 args::ValueFlag<std::string> outfilename(parser_io,
"output.pdf",
"Output graphic.", {
'o'});
33 args::Group parser_sort(parser,
"Raw sort out parameters");
34 args::ValueFlag<std::string> cutstring(parser_sort,
"",
"Cut string", {
'C'});
36 args::Group parser_tune(parser,
"Peak search parameters");
37 args::ValueFlag<Int_t> npeaks(parser_tune,
"5",
"Minimum target number of peaks", {
'p',
"npeaks"}, 5);
38 args::ValueFlag<Long64_t> xlow(parser_tune,
"2",
"Target X low inclusive", {
'x',
"xlo"}, 2);
39 args::ValueFlag<Long64_t> xhigh(parser_tune,
"4000",
"Target X high inclusive", {
'X',
"xhi"}, 4000);
41 args::Group parser_fit(parser,
"Fitting options");
42 args::ValueFlag<UInt_t> polyorder(parser_fit,
"2",
"Polynomial order [0=constant]", {
'n',
"poly"}, 2);
45 parser.ParseCLI(argc, argv);
46 }
catch (args::Help) {
49 }
catch (args::ParseError e) {
50 std::cerr << e.what() << std::endl;
53 }
catch (args::ValidationError e) {
54 std::cerr << e.what() << std::endl;
59 TApplication theApp(
"gamrcal", 0, 0);
61 auto infile =
new TFile(infilename.Get().c_str());
63 if (infile->IsZombie() || !infile->IsOpen()) {
64 std::cerr <<
"Error opening input file" << std::endl;
68 auto rawtree =
new TTree;
69 infile->GetObject(
"RawTree", rawtree);
71 auto targetfile =
new TFile(targetfilename.Get().c_str());
72 if (infile->IsZombie() || !infile->IsOpen()) {
73 std::cerr <<
"Error opening target file" << std::endl;
77 auto targethist =
new TH1D;
78 targetfile->GetObject(targethistname.Get().c_str(), targethist);
79 targethist->GetXaxis()->SetRangeUser(xlow.Get(), xhigh.Get());
80 TCanvas c(
"gainmatchenergy",
"Gain Match: Energy", 1280, 720);
85 auto rawhist =
new TH1D((inbranchname.Get() +
"_hist").c_str(),
86 (infilename.Get() +
" >> " + inbranchname.Get()).c_str(), 4096, 0, 4096);
88 rawtree->Draw((inbranchname.Get() +
">>" + inbranchname.Get() +
"_hist").c_str(), cutstring.Get().c_str());
90 std::vector<Double_t> pars(polyorder.Get() + 1);
94 for (
const auto &p : pars) {
95 ss << ((p < 0) ? std::to_string(p).insert(1,
"(") :
"+(" + std::to_string(p));
99 ss <<
"^" << order <<
")";
105 std::cout <<
ss.str() << std::endl;
Int_t GainMatchEnergy(TH1 *spec1, TH1 *spec2, std::vector< Double_t > &pars, bool draw, UInt_t target, std::string outfn, Double_t step, TCanvas *c1)