357 LOG(warn) <<
"FairMonitor was disabled. Nothing to print!";
361 typedef std::map<TString, Int_t>::iterator tiMapIter;
364 TTask* mainFairTask =
static_cast<TTask*
>((gROOT->GetListOfBrowsables()->FindObject(
"FairTaskList")));
368 GetTaskMap(mainFairTask);
370 for (
auto itb = fTaskRequired.begin(); itb != fTaskRequired.end(); ++itb) {
371 iti = fTaskMap.find(itb->first);
372 if (iti == fTaskMap.end())
373 fTaskMap.insert(std::pair<TString, Int_t>(itb->first, 0));
374 iti = fObjectMap.find(itb->second);
375 if (iti == fObjectMap.end())
376 fObjectMap.insert(std::pair<TString, Int_t>(itb->second, 0));
378 for (
auto itb = fTaskCreated.begin(); itb != fTaskCreated.end(); ++itb) {
379 iti = fTaskMap.find(itb->first);
380 if (iti == fTaskMap.end())
381 fTaskMap.insert(std::pair<TString, Int_t>(itb->first, 0));
382 iti = fObjectMap.find(itb->second);
383 if (iti == fObjectMap.end())
384 fObjectMap.insert(std::pair<TString, Int_t>(itb->second, 0));
386 for (
auto itb = fTaskCreatedTemp.begin(); itb != fTaskCreatedTemp.end(); ++itb) {
387 iti = fTaskMap.find(itb->first);
388 if (iti == fTaskMap.end())
389 fTaskMap.insert(std::pair<TString, Int_t>(itb->first, 0));
390 iti = fObjectMap.find(itb->second);
391 if (iti == fObjectMap.end())
392 fObjectMap.insert(std::pair<TString, Int_t>(itb->second, 0));
395 AnalyzeObjectMap(mainFairTask);
397 Int_t maxHierarchyNumber = 0;
398 for (iti = fObjectMap.begin(); iti != fObjectMap.end(); ++iti) {
399 if (maxHierarchyNumber < iti->second)
400 maxHierarchyNumber = iti->second;
403 LOG(
debug) <<
"Max hierarchy number is " << maxHierarchyNumber;
405 fCanvas =
new TCanvas(
"MonitorCanvas",
"Fair Monitor", 10, 10, 960, 600);
408 fCanvas->SetFillStyle(4000);
409 fCanvas->Range(0, 0, 960, 800);
410 fCanvas->SetFillColor(0);
411 fCanvas->SetBorderSize(0);
412 fCanvas->SetBorderMode(0);
413 fCanvas->SetFrameFillColor(0);
415 for (Int_t ihier = 0; ihier < maxHierarchyNumber + 1; ++ihier) {
417 for (iti = fTaskMap.begin(); iti != fTaskMap.end(); ++iti) {
418 if (iti->second == ihier) {
422 LOG(
debug) <<
"There are " << nofHier <<
" tasks on level " << ihier <<
".";
426 for (iti = fTaskMap.begin(); iti != fTaskMap.end(); ++iti) {
427 if (iti->second == ihier) {
428 std::pair<Double_t, Double_t> tempPos(50, 600 - iObj * 40);
429 fTaskPos.insert(std::pair<TString, std::pair<Double_t, Double_t>>(iti->first, tempPos));
436 Int_t secLineEven = 0;
439 if (nofHier % 2 == 0)
442 Int_t startingPosition = 575 - nofHier / (1 + secLine) * 45 - secLine * (1 - secLineEven) * 45;
446 - 800. * (2. *
static_cast<Double_t
>(ihier) - 0.5) / (
static_cast<Double_t
>(2 * maxHierarchyNumber + 1))
448 LOG(
debug) <<
"for level " << ihier <<
" will put top edge at " << topEdge <<
". "
449 << (secLineEven ?
"Two lines" :
"One line") << (secLineEven ?
" with offset" :
"");
450 for (iti = fTaskMap.begin(); iti != fTaskMap.end(); ++iti) {
451 if (iti->second == ihier) {
452 std::pair<Double_t, Double_t> tempPos(startingPosition + iObj * 90 / (1 + secLine)
453 - secLineEven * (iObj % 2) * 45,
454 topEdge - 15 - secLine * (iObj % 2) * 35);
455 fTaskPos.insert(std::pair<TString, std::pair<Double_t, Double_t>>(iti->first, tempPos));
462 for (iti = fObjectMap.begin(); iti != fObjectMap.end(); ++iti) {
463 if (TMath::Abs(iti->second) == ihier) {
467 LOG(
debug) <<
"There are " << nofHier <<
" objects on level " << ihier <<
".";
471 Int_t secLineEven = 0;
474 if (nofHier % 2 == 0)
477 Int_t startingPosition = 575 - nofHier / (1 + secLine) * 45 - secLine * (1 - secLineEven) * 45;
481 - 800. * (2. *
static_cast<Double_t
>(ihier) + 0.5) / (
static_cast<Double_t
>(2 * maxHierarchyNumber + 1))
483 LOG(
debug) <<
"for level " << ihier <<
" will put top edge at " << topEdge <<
". "
484 << (secLineEven ?
"Two lines" :
"One line") << (secLineEven ?
" with offset" :
"");
485 for (iti = fObjectMap.begin(); iti != fObjectMap.end(); ++iti) {
486 if (TMath::Abs(iti->second) == ihier) {
487 std::pair<Double_t, Double_t> tempPos(startingPosition + iObj * 90 / (1 + secLine)
488 - secLineEven * (iObj % 2) * 45,
489 topEdge - 15 - secLine * (iObj % 2) * 35);
490 fObjectPos.insert(std::pair<TString, std::pair<Double_t, Double_t>>(iti->first, tempPos));
496 typedef std::map<TString, std::pair<Double_t, Double_t>>::iterator tddMapIter;
500 for (
auto itb = fTaskRequired.begin(); itb != fTaskRequired.end(); ++itb) {
501 itt = fTaskPos.find(itb->first);
502 ito = fObjectPos.find(itb->second);
503 if (itt != fTaskPos.end() && ito != fObjectPos.end()) {
504 std::pair<Double_t, Double_t> taskPos = itt->second;
505 std::pair<Double_t, Double_t> objectPos = ito->second;
507 new TArrow(objectPos.first, objectPos.second - 15, taskPos.first, taskPos.second + 15, 0.01,
"|>");
511 for (
auto itb = fTaskCreated.begin(); itb != fTaskCreated.end(); ++itb) {
512 itt = fTaskPos.find(itb->first);
513 ito = fObjectPos.find(itb->second);
514 if (itt != fTaskPos.end() && ito != fObjectPos.end()) {
515 std::pair<Double_t, Double_t> taskPos = itt->second;
516 std::pair<Double_t, Double_t> objectPos = ito->second;
518 new TArrow(taskPos.first, taskPos.second - 15, objectPos.first, objectPos.second + 15, 0.01,
"|>");
522 for (
auto itb = fTaskCreatedTemp.begin(); itb != fTaskCreatedTemp.end(); ++itb) {
523 itt = fTaskPos.find(itb->first);
524 ito = fObjectPos.find(itb->second);
525 if (itt != fTaskPos.end() && ito != fObjectPos.end()) {
526 std::pair<Double_t, Double_t> taskPos = itt->second;
527 std::pair<Double_t, Double_t> objectPos = ito->second;
529 new TArrow(taskPos.first, taskPos.second - 15, objectPos.first, objectPos.second + 15, 0.01,
"|>");
534 for (itt = fTaskPos.begin(); itt != fTaskPos.end(); ++itt) {
535 std::pair<Double_t, Double_t> taskPos = itt->second;
536 TBox* bkgBox =
new TBox(taskPos.first - 40, taskPos.second - 15, taskPos.first + 40, taskPos.second + 15);
537 bkgBox->SetFillColor(kGreen - 9);
540 TString tempString = Form(
"hist_%s_%s", itt->first.Data(),
"EXEC_TIM");
541 Int_t nofHists = fHistList->GetEntries();
542 for (Int_t ihist = 0; ihist < nofHists; ++ihist) {
543 if (!tempString.CompareTo(fHistList->At(ihist)->GetName())) {
544 Double_t timeInt = (
static_cast<TH1F*
>(fHistList->At(ihist))->Integral());
545 Double_t timeFrac = 80. * timeInt / fRunTime;
546 TBox* barBox =
new TBox(
547 taskPos.first - 40, taskPos.second - 15, taskPos.first - 40 + timeFrac, taskPos.second + 15);
548 barBox->SetFillColor(kRed);
553 tempString = itt->first;
554 tempString.Replace(0, tempString.First(
'_') + 1,
"");
555 if (tempString.Length() > 16)
556 tempString.Replace(16, tempString.Length(),
"");
557 TLatex* taskText =
new TLatex(taskPos.first, taskPos.second, tempString.Data());
558 taskText->SetTextAlign(22);
559 taskText->SetTextSize(0.015);
563 for (ito = fObjectPos.begin(); ito != fObjectPos.end(); ++ito) {
564 std::pair<Double_t, Double_t> objectPos = ito->second;
565 iti = fObjectMap.find(ito->first);
566 TPaveText* paveText =
new TPaveText(
567 objectPos.first - 40, objectPos.second - 15, objectPos.first + 40, objectPos.second + 15,
"nb");
568 paveText->SetFillColor(kMagenta - 9);
569 if (iti != fObjectMap.end())
571 paveText->SetFillColor(kGray);
572 paveText->SetShadowColor(0);
573 paveText->SetTextSize(0.015);
574 TString tempString = ito->first;
575 if (tempString.Length() > 16)
576 tempString.Replace(16, tempString.Length(),
"");
577 paveText->AddText(tempString);
585 LOG(warn) <<
"FairMonitor was disabled. Nothing to draw!";
589 Int_t nofHists = fHistList->GetEntries();
591 TString drawStr =
"P";
593 TLegend* tempLeg =
new TLegend(0.0, 0.5, 0.5, 0.9);
595 Double_t histMax = 0.;
596 for (Int_t ihist = 0; ihist < nofHists; ihist++) {
597 TString histString = Form(
"%s", fHistList->At(ihist)->GetName());
598 if (histString.Contains(specString)) {
599 TH1F* tempHist = (
static_cast<TH1F*
>((fHistList->At(ihist))));
600 if (histMax < tempHist->GetMaximum())
601 histMax = tempHist->GetMaximum();
605 for (Int_t ihist = 0; ihist < nofHists; ihist++) {
606 TString histString = Form(
"%s", fHistList->At(ihist)->GetName());
607 if (histString.Contains(specString)) {
608 TH1F* tempHist = (
static_cast<TH1F*
>((fHistList->At(ihist))));
609 if (tempHist->GetXaxis()->GetXmax() > tempHist->GetEntries())
610 tempHist->SetBins(tempHist->GetEntries(), 0, tempHist->GetEntries());
611 tempHist->SetMarkerColor(nofDraws % 6 + 2);
612 tempHist->SetMarkerStyle(nofDraws % 4 + 20);
613 tempHist->SetAxisRange(0., histMax * 1.1,
"Y");
614 tempHist->Draw(drawStr);
615 TString tempName = tempHist->GetName();
616 tempName.Remove(0, tempName.First(
'_') + 1);
617 tempName.Remove(0, tempName.First(
'_') + 1);
618 tempLeg->AddEntry(tempHist, tempName,
"p");