-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathacat19.cpp
65 lines (49 loc) · 2.59 KB
/
acat19.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// call from command line like, for instance:
// root -l 'acat19.cpp()'
R__LOAD_LIBRARY(libRooFit)
#include <chrono>
#include <iostream>
using namespace RooFit;
////////////////////////////////////////////////////////////////////////////////////////////////////
// timing_flag is used to activate only selected timing statements [1-7]
// num_cpu: -1 is special option -> compare overhead communication protocol (wrt 1 cpu)
// parallel_interleave: 0 = blocks of equal size, 1 = interleave, 2 = simultaneous pdfs mode
// { BulkPartition=0, Interleave=1, SimComponents=2, Hybrid=3 }
////////////////////////////////////////////////////////////////////////////////////////////////////
void acat19() {
RooMsgService::instance().deleteStream(0);
RooMsgService::instance().deleteStream(0);
RooMsgService::instance().addStream(RooFit::DEBUG, RooFit::Topic(RooFit::Benchmarking1));
RooMsgService::instance().addStream(RooFit::DEBUG, RooFit::Topic(RooFit::Benchmarking2));
std::size_t seed = 1;
RooRandom::randomGenerator()->SetSeed(seed);
TFile *_file0 = TFile::Open("/user/pbos/data_atlas/carsten/comb-5xs-80ifb-v8.root");
RooWorkspace* w = static_cast<RooWorkspace*>(gDirectory->Get("combWS"));
RooAbsData *data = w->data("combData");
auto mc = dynamic_cast<RooStats::ModelConfig *>(w->genobj("ModelConfig"));
auto global_observables = mc->GetGlobalObservables();
auto nuisance_parameters = mc->GetNuisanceParameters();
RooAbsPdf *pdf = w->pdf(mc->GetPdf()->GetName());
// w->var("mu")->setVal(1.5);
RooAbsReal *nll = pdf->createNLL(*data,
RooFit::GlobalObservables(*global_observables),
RooFit::Constrain(*nuisance_parameters),
RooFit::Offset(kTRUE));
RooFit::MultiProcess::GradMinimizer m(*nll, 8);
m.setPrintLevel(-1);
m.setStrategy(0);
m.setProfile(false);
m.optimizeConst(2);
m.setMinimizerType("Minuit2");
// m.setVerbose(kTRUE);
auto get_time = [](){return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count();};
auto start = std::chrono::high_resolution_clock::now();
std::cout << "start migrad at " << get_time() << std::endl;
m.migrad();
std::cout << "end migrad at " << get_time() << std::endl;
auto end = std::chrono::high_resolution_clock::now();
auto elapsed_seconds =
std::chrono::duration_cast<std::chrono::duration<double>>(
end - start).count();
std::cout << "migrad: " << elapsed_seconds << "s" << std::endl;
}