4 #include "TDirectory.h" 34 TH2F* medianDeltaChiSqr =
dynamic_cast<TH2F*
>(universeDeltaChiSqrHists.front()->Clone(
"medianDeltaChiSqr"));
35 medianDeltaChiSqr->Reset();
38 std::vector<float> binDeltaChiSqrDist;
39 for(
int x = 1;
x < universeDeltaChiSqrHists.front()->GetNbinsX() + 1; ++
x){
40 for(
int y = 1;
y < universeDeltaChiSqrHists.front()->GetNbinsY() + 1; ++
y){
41 binDeltaChiSqrDist.clear();
42 for(
auto const* itr : universeDeltaChiSqrHists){
43 binDeltaChiSqrDist.emplace_back(itr->GetBinContent(
x,
y));
47 std::sort(binDeltaChiSqrDist.begin(), binDeltaChiSqrDist.end());
48 medianDeltaChiSqr->SetBinContent(
x,
y, binDeltaChiSqrDist[binDeltaChiSqrDist.size() / 2]);
52 return medianDeltaChiSqr;
58 std::vector<TGraph*>
const& median2SigmaContours,
59 std::vector<TGraph*>
const& median3SigmaContours,
60 std::vector<TGraph*>
const& asimov1SigmaContours,
61 std::vector<TGraph*>
const& asimov2SigmaContours,
62 std::vector<TGraph*>
const& asimov3SigmaContours,
63 std::vector<TH2F*>
const& heatMaps)
66 TCanvas *heatMapCanv =
new TCanvas(
"heatMapCanv",
"heatMapCanv", 1200, 800);
68 heatMapCanv->Divide(2, 2);
70 for(
size_t c = 0;
c < heatMaps.size(); ++
c){
71 heatMapCanv->cd(
c + 1);
72 heatMaps[
c]->Draw(
"colz");
75 for(
auto& itr : median1SigmaContours)
78 for(
auto& itr : asimov1SigmaContours)
82 for(
auto& itr : median2SigmaContours)
85 for(
auto& itr : asimov2SigmaContours)
89 for(
auto& itr : median3SigmaContours)
92 for(
auto& itr : asimov3SigmaContours)
100 TLegend *
leg =
new TLegend(0.1, 0.1, 0.9, 0.9);
101 leg->SetBorderSize(0);
102 leg->SetFillStyle(0);
103 leg->AddEntry(asimov1SigmaContours.front(),
"Asimov - 1#sigma",
"l");
104 leg->AddEntry(asimov2SigmaContours.front(),
"Asimov - 2#sigma",
"l");
105 leg->AddEntry(asimov3SigmaContours.front(),
"Asimov - 3#sigma",
"l");
106 leg->AddEntry(median1SigmaContours.front(),
"Median - 1#sigma",
"l");
107 leg->AddEntry(median2SigmaContours.front(),
"Median - 2#sigma",
"l");
108 leg->AddEntry(median3SigmaContours.front(),
"Median - 3#sigma",
"l");
111 heatMapCanv->Update();
116 std::vector<TGraph*>
const& median1SigmaContours,
117 std::vector<TGraph*>
const& median2SigmaContours,
118 std::vector<TGraph*>
const& median3SigmaContours,
119 std::vector<TGraph*>
const& asimov1SigmaContours,
120 std::vector<TGraph*>
const& asimov2SigmaContours,
121 std::vector<TGraph*>
const& asimov3SigmaContours,
122 std::vector<TGraph*>
const& universe1SigmaContours,
123 std::vector<TGraph*>
const& universe2SigmaContours,
124 std::vector<TGraph*>
const& universe3SigmaContours)
127 TCanvas *contoursCanv =
new TCanvas(
"contoursCanv",
"contoursCanv", 1200, 800);
129 contoursCanv->Divide(2, 2);
131 for(
size_t c = 0;
c < 3; ++
c){
132 contoursCanv->cd(
c + 1);
134 backdropHist->Draw();
137 for(
auto & itr : universe1SigmaContours){
138 itr->SetLineColor(kGray);
139 itr->SetLineWidth(1);
143 for(
auto & itr : median1SigmaContours)
146 for(
auto & itr : asimov1SigmaContours)
150 for(
auto & itr : universe2SigmaContours){
151 itr->SetLineColor(kGray);
152 itr->SetLineWidth(1);
156 for(
auto & itr : median2SigmaContours)
159 for(
auto & itr : asimov2SigmaContours)
163 for(
auto & itr : universe3SigmaContours){
164 itr->SetLineColor(kGray);
165 itr->SetLineWidth(1);
169 for(
auto & itr : median3SigmaContours)
172 for(
auto & itr : asimov3SigmaContours)
175 contoursCanv->Update();
180 TLegend *
leg =
new TLegend(0.1, 0.1, 0.9, 0.9);
181 leg->SetBorderSize(0);
182 leg->SetFillStyle(0);
183 leg->AddEntry(asimov1SigmaContours.front(),
"Asimov - 1#sigma",
"l");
184 leg->AddEntry(asimov2SigmaContours.front(),
"Asimov - 2#sigma",
"l");
185 leg->AddEntry(asimov3SigmaContours.front(),
"Asimov - 3#sigma",
"l");
186 leg->AddEntry(median1SigmaContours.front(),
"Median - 1#sigma",
"l");
187 leg->AddEntry(median2SigmaContours.front(),
"Median - 2#sigma",
"l");
188 leg->AddEntry(median3SigmaContours.front(),
"Median - 3#sigma",
"l");
191 contoursCanv->Update();
196 std::vector<TGraph*> & twoSigmaGrs,
197 std::vector<TGraph*> & threeSigmaGrs,
204 TIter
next(directory->GetListOfKeys());
205 while((key = dynamic_cast<TKey*>(
next()))){
206 keyName = key->GetName();
208 if(keyName.find(
"1#sigma") != std::string::npos){
209 oneSigmaGrs.emplace_back(dynamic_cast<TGraph*>(key->ReadObj()));
210 oneSigmaGrs.back()->SetLineColor(
kBlue);
211 oneSigmaGrs.back()->SetLineWidth(3);
213 else if(keyName.find(
"2#sigma") != std::string::npos){
214 twoSigmaGrs.emplace_back(dynamic_cast<TGraph*>(key->ReadObj()));
215 twoSigmaGrs.back()->SetLineColor(
kRed);
216 twoSigmaGrs.back()->SetLineWidth(3);
218 else if(keyName.find(
"3#sigma") != std::string::npos){
219 threeSigmaGrs.emplace_back(dynamic_cast<TGraph*>(key->ReadObj()));
220 threeSigmaGrs.back()->SetLineColor(kMagenta);
221 threeSigmaGrs.back()->SetLineWidth(3);
233 std::vector<std::vector<TGraph*> > & contourGraphs)
235 std::vector<double> contourLevel({2.3, 6.18, 11.83});
237 medianDeltaChiSqr->SetContour(contourLevel.size(), contourLevel.data());
245 medianDeltaChiSqr->Draw(
"contlist");
248 auto *plah =
dynamic_cast<TObjArray *
>(gROOT->GetListOfSpecials()->FindObject(
"contours"));
252 contourGraphs.resize(contourLevel.size());
254 for(
int i = 0;
i < plah->GetSize(); ++
i){
255 std::vector<TGraph*>
temp;
256 auto *
list =
dynamic_cast<TList*
>(plah->At(
i));
258 if(!(
list->First()))
break;
259 for(
int igraph = 0; igraph <
list->GetSize(); ++igraph){
260 if(
list->At(igraph)) temp.emplace_back(dynamic_cast<TGraph*>(
list->At(igraph)));
263 temp.back()->SetLineStyle(9);
264 temp.back()->SetLineWidth(3);
265 if (
i == 0) temp.back()->SetLineColor(
kBlue);
266 else if(
i == 1) temp.back()->SetLineColor(
kRed);
267 else if(
i == 2) temp.back()->SetLineColor(kMagenta);
269 contourGraphs[
i] = std::move(temp);
272 gROOT->GetListOfSpecials()->FindObject(
"contours")->Clear();
277 std::vector<TGraph*>
const& median1SigmaGrs,
278 std::vector<TGraph*>
const& median2SigmaGrs,
279 std::vector<TGraph*>
const& median3SigmaGrs,
280 std::vector<TGraph*>
const& asimov1SigmaGrs,
281 std::vector<TGraph*>
const& asimov2SigmaGrs,
282 std::vector<TGraph*>
const& asimov3SigmaGrs)
284 TCanvas *medianCanv =
new TCanvas(
"medianCanv",
"medianCanv", 1200, 800);
287 backdropHist->Draw();
289 for(
auto & itr : median1SigmaGrs) itr->Draw(
"lsame");
290 for(
auto & itr : median2SigmaGrs) itr->Draw(
"lsame");
291 for(
auto & itr : median3SigmaGrs) itr->Draw(
"lsame");
293 for(
auto & itr : asimov1SigmaGrs) itr->Draw(
"lsame");
294 for(
auto & itr : asimov2SigmaGrs) itr->Draw(
"lsame");
295 for(
auto & itr : asimov3SigmaGrs) itr->Draw(
"lsame");
297 TLegend *
leg =
new TLegend(0.6, 0.6, 0.9, 0.9);
298 leg->SetBorderSize(0);
299 leg->SetFillStyle(0);
301 leg->AddEntry(asimov1SigmaGrs[0],
"Asimov - 1#sigma",
"l");
302 leg->AddEntry(asimov2SigmaGrs[0],
"Asimov - 2#sigma",
"l");
303 leg->AddEntry(asimov3SigmaGrs[0],
"Asimov - 3#sigma",
"l");
304 leg->AddEntry(median1SigmaGrs[0],
"Median - 1#sigma",
"l");
305 leg->AddEntry(median2SigmaGrs[0],
"Median - 2#sigma",
"l");
306 leg->AddEntry(median3SigmaGrs[0],
"Median - 3#sigma",
"l");
309 medianCanv->Update();
320 std::vector<TGraph*> asimov1SigmaContours;
321 std::vector<TGraph*> asimov2SigmaContours;
322 std::vector<TGraph*> asimov3SigmaContours;
325 asimov2SigmaContours,
326 asimov3SigmaContours,
327 tf->GetDirectory(
"contours/Asimov"));
330 std::vector<TH2F*> universeDeltaChiSqrHists;
331 std::vector<TGraph*> universe1SigmaGrs;
332 std::vector<TGraph*> universe2SigmaGrs;
333 std::vector<TGraph*> universe3SigmaGrs;
341 universeDeltaChiSqrHists.emplace_back(dynamic_cast<TH2F*>(tf->Get(histName.c_str())));
346 tf->GetDirectory(dirName.c_str()));
352 std::vector<std::vector<TGraph*> > medianContours;
356 TH2F *backdropHist =
dynamic_cast<TH2F*
>(universeDeltaChiSqrHists.front()->Clone(
"BackDropHist"));
357 backdropHist->Reset();
363 asimov1SigmaContours,
364 asimov2SigmaContours,
365 asimov3SigmaContours);
371 asimov1SigmaContours,
372 asimov2SigmaContours,
373 asimov3SigmaContours,
380 std::vector<TH2F*> heatMaps;
381 for(
size_t cl = 0; cl < 3; ++cl){
382 histName =
"contours/Median/RandomUniverses" +
pars +
std::to_string(cl + 1) +
"sigmaHeatMap";
383 heatMaps.emplace_back(dynamic_cast<TH2F*>(tf->Get(histName.c_str())));
389 asimov1SigmaContours,
390 asimov2SigmaContours,
391 asimov3SigmaContours,
string directory
projection from multiple chains
std::string to_string(ModuleType mt)