GamR  0.0.0
GammaROOT
Loading...
Searching...
No Matches
gamrcal.cc
Go to the documentation of this file.
1#include <iostream>
2#include <sstream>
3#include <string>
4#include <vector>
5
6#include <TApplication.h>
7#include <TCanvas.h>
8#include <TFile.h>
9#include <TH1.h>
10#include <TROOT.h>
11#include <TSystem.h>
12#include <TTree.h>
13
14/* Vendor */
15#include <args/args.hxx>
16
17#include "Gain.hh"
18
19int main(int argc, char *argv[])
20{
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"});
25
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'});
32
33 args::Group parser_sort(parser, "Raw sort out parameters");
34 args::ValueFlag<std::string> cutstring(parser_sort, "", "Cut string", {'C'});
35
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);
40
41 args::Group parser_fit(parser, "Fitting options");
42 args::ValueFlag<UInt_t> polyorder(parser_fit, "2", "Polynomial order [0=constant]", {'n', "poly"}, 2);
43
44 try {
45 parser.ParseCLI(argc, argv);
46 } catch (args::Help) {
47 std::cout << parser;
48 return 0;
49 } catch (args::ParseError e) {
50 std::cerr << e.what() << std::endl;
51 std::cerr << parser;
52 return 1;
53 } catch (args::ValidationError e) {
54 std::cerr << e.what() << std::endl;
55 std::cerr << parser;
56 return 1;
57 }
58 // gErrorIgnoreLevel = kWarning;
59 TApplication theApp("gamrcal", 0, 0);
60
61 auto infile = new TFile(infilename.Get().c_str());
62
63 if (infile->IsZombie() || !infile->IsOpen()) {
64 std::cerr << "Error opening input file" << std::endl;
65 return 1;
66 }
67
68 auto rawtree = new TTree;
69 infile->GetObject("RawTree", rawtree);
70
71 auto targetfile = new TFile(targetfilename.Get().c_str());
72 if (infile->IsZombie() || !infile->IsOpen()) {
73 std::cerr << "Error opening target file" << std::endl;
74 return 1;
75 }
76
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);
81 c.Draw();
82
83 // Generate histogram from tree
84 // Ignoring Channel 0 and 4096
85 auto rawhist = new TH1D((inbranchname.Get() + "_hist").c_str(),
86 (infilename.Get() + " >> " + inbranchname.Get()).c_str(), 4096, 0, 4096);
87
88 rawtree->Draw((inbranchname.Get() + ">>" + inbranchname.Get() + "_hist").c_str(), cutstring.Get().c_str());
89
90 std::vector<Double_t> pars(polyorder.Get() + 1);
91 auto n = GamR::TK::GainMatchEnergy(rawhist, targethist, pars, kTRUE, npeaks.Get(), outfilename.Get(), 0.98, &c);
92 int order = 0;
93 std::stringstream ss;
94 for (const auto &p : pars) {
95 ss << ((p < 0) ? std::to_string(p).insert(1, "(") : "+(" + std::to_string(p));
96 if (order) {
97 ss << "*([0]+x)";
98 if (order > 1) {
99 ss << "^" << order << ")";
100 }
101 }
102 ss << ")";
103 ++order;
104 }
105 std::cout << ss.str() << std::endl;
106
107 // theApp.Run();
108
109 return n;
110}
void ss(std::vector< int > indexes, TCanvas *canvas, Option_t *option)
void help(std::string topic)
int main(int argc, char *argv[])
Definition gamrcal.cc:19
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)
Definition Gain.cc:22