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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
// ROOT includes
#include "TLatex.h"
#include "TEveCalo.h"
#include "TEveStraightLineSet.h"
#include "TEvePointSet.h"
#include "TEveScene.h"
#include "TEveViewer.h"
#include "TGLViewer.h"
#include "TGLOverlay.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TEveCaloLegoOverlay.h"
#include "TRootEmbeddedCanvas.h"
// Fireworks includes
#include "Fireworks/Calo/interface/FWECALDetailViewBase.h"
#include "Fireworks/Calo/interface/FWECALDetailViewBuilder.h"
#include "Fireworks/Core/interface/FWColorManager.h"
#include "Fireworks/Core/interface/FWModelId.h"
#include "Fireworks/Core/interface/FWEventItem.h"
#include "Fireworks/Core/interface/FWGLEventHandler.h"
// CMSSW includes
#include "DataFormats/Candidate/interface/Candidate.h"
#include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
template <typename T>
FWECALDetailViewBase<T>::FWECALDetailViewBase() : m_data(nullptr), m_builder(nullptr), m_legend(nullptr) {}
template <typename T>
FWECALDetailViewBase<T>::~FWECALDetailViewBase() {
FWDetailViewGL<T>::m_eveViewer->GetGLViewer()->DeleteOverlayElements(TGLOverlayElement::kUser);
delete m_builder;
if (m_data)
m_data->DecDenyDestroy();
}
template <typename T>
void FWECALDetailViewBase<T>::build(const FWModelId& id, const T* element) {
double eta = element->eta();
double phi = element->phi();
// build ECAL objects
m_builder = new FWECALDetailViewBuilder(id.item()->getEvent(), id.item()->getGeom(), eta, phi, 25);
TEveCaloLego* lego = m_builder->build();
m_data = lego->GetData();
m_data->IncDenyDestroy(); // needed ???
FWDetailViewGL<T>::m_eveScene->AddElement(lego);
m_legend = new TLegend(0.01, 0.01, 0.99, 0.99, nullptr, "NDC");
m_legend->SetTextSize(0.075);
m_legend->SetBorderSize(0);
m_legend->SetMargin(0.15);
m_legend->SetEntrySeparation(0.05);
// draw axis at the window corners
if (true) {
TEveCaloLegoOverlay* overlay = new TEveCaloLegoOverlay();
overlay->SetShowPlane(kFALSE);
overlay->SetShowPerspective(kFALSE);
overlay->SetCaloLego(lego);
overlay->SetShowScales(true); // temporary
FWDetailViewGL<T>::viewerGL()->AddOverlayElement(overlay);
}
// set event handler and flip camera to top view at beginning
FWDetailViewGL<T>::viewerGL()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
FWGLEventHandler* eh = new FWGLEventHandler(
(TGWindow*)FWDetailViewGL<T>::viewerGL()->GetGLWidget(), (TObject*)FWDetailViewGL<T>::viewerGL(), lego);
FWDetailViewGL<T>::viewerGL()->SetEventHandler(eh);
FWDetailViewGL<T>::viewerGL()->ResetCamerasAfterNextUpdate();
FWDetailViewGL<T>::viewerGL()->UpdateScene(kFALSE);
gEve->Redraw3D();
setTextInfo(id, element);
}
template <typename T>
void FWECALDetailViewBase<T>::setTextInfo(const FWModelId& id, const T* element) {
FWDetailViewGL<T>::m_infoCanvas->cd();
float_t x = 0.02;
float y = 0.95;
TLatex* latex = new TLatex(x, y, "");
const double textsize(0.1);
latex->SetTextSize(textsize);
latex->DrawLatex(x, y, id.item()->modelName(id.index()).c_str());
y -= latex->GetTextSize() * 0.8;
latex->SetTextSize(textsize * 0.8);
float lineH = latex->GetTextSize() * 0.6;
latex->DrawLatex(x, y, Form("#eta = %0.2f", element->eta()));
y -= lineH;
latex->DrawLatex(x, y, Form("#phi = %0.2f", element->phi()));
y -= lineH;
// summary
if (element->charge() > 0)
latex->DrawLatex(x, y, "charge = +1");
else
latex->DrawLatex(x, y, "charge = -1");
y -= lineH;
m_legend->SetY2(y);
m_legend->Draw();
m_legend = nullptr; // Deleted together with TPad.
}
|