CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
FWPhotonDetailView.cc
Go to the documentation of this file.
1 //
2 // Package: Electrons
3 // Class : FWPhotonDetailView
4 
5 #include "TLatex.h"
6 #include "TEveCalo.h"
7 #include "TEvePointSet.h"
8 #include "TEveScene.h"
9 #include "TEveViewer.h"
10 #include "TGLViewer.h"
11 #include "TCanvas.h"
12 #include "TEveCaloLegoOverlay.h"
13 
15 
21 
22 //
23 // constructors and destructor
24 //
25 FWPhotonDetailView::FWPhotonDetailView() : m_data(nullptr), m_builder(nullptr) {}
26 
28  m_eveViewer->GetGLViewer()->DeleteOverlayElements(TGLOverlayElement::kUser);
29 
30  if (m_data)
31  m_data->DecDenyDestroy();
32  delete m_builder;
33 }
34 
35 //
36 // member functions
37 //
38 void FWPhotonDetailView::build(const FWModelId& id, const reco::Photon* iPhoton) {
39  if (!iPhoton)
40  return;
41 
42  // build ECAL objects
44  id.item()->getEvent(), id.item()->getGeom(), iPhoton->caloPosition().eta(), iPhoton->caloPosition().phi(), 25);
46 
47  if (iPhoton->superCluster().isAvailable())
48  m_builder->showSuperCluster(*(iPhoton->superCluster()), kYellow + 1);
49 
50  TEveCaloLego* lego = m_builder->build();
51  m_data = lego->GetData();
52  m_data->IncDenyDestroy();
53  m_eveScene->AddElement(lego);
54 
55  // add Photon specific details
56  if (iPhoton->superCluster().isAvailable())
57  addSceneInfo(iPhoton, m_eveScene);
58 
59  // draw axis at the window corners
60  TEveCaloLegoOverlay* overlay = new TEveCaloLegoOverlay();
61  overlay->SetShowPlane(kFALSE);
62  overlay->SetShowPerspective(kFALSE);
63  overlay->SetCaloLego(lego);
64  overlay->SetShowScales(true); // temporary
65  viewerGL()->AddOverlayElement(overlay);
66 
67  // set event handler and flip camera to top view at beginning
68  viewerGL()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
69  FWGLEventHandler* eh = new FWGLEventHandler((TGWindow*)viewerGL()->GetGLWidget(), (TObject*)viewerGL(), lego);
70  viewerGL()->SetEventHandler(eh);
71  viewerGL()->UpdateScene();
72  viewerGL()->CurrentCamera().Reset();
73 
74  viewerGL()->RequestDraw(TGLRnrCtx::kLODHigh);
75 
76  setTextInfo(id, iPhoton);
77 }
78 
79 //______________________________________________________________________________
80 
81 void FWPhotonDetailView::setTextInfo(const FWModelId& id, const reco::Photon* photon) {
82  m_infoCanvas->cd();
83  float_t x = 0.02;
84  float y = 0.97;
85  TLatex* latex = new TLatex(x, y, "");
86  const double textsize(0.05);
87  latex->SetTextSize(2 * textsize);
88 
89  float h = latex->GetTextSize() * 0.6;
90  latex->DrawLatex(x, y, id.item()->modelName(id.index()).c_str());
91  y -= h;
92 
93  latex->DrawLatex(
94  x, y, Form(" E_{T} = %.1f GeV, #eta = %0.2f, #varphi = %0.2f", photon->et(), photon->eta(), photon->phi()));
95  y -= h;
96  m_builder->makeLegend(x, y);
97 }
98 
99 //______________________________________________________________________________
100 
101 void FWPhotonDetailView::addSceneInfo(const reco::Photon* i, TEveElementList* tList) {
102  // points for centroids
103  Double_t x(0), y(0), z(0);
104  TEvePointSet* scposition = new TEvePointSet("sc position");
105  scposition->SetPickable(kTRUE);
106  scposition->SetTitle("Super cluster centroid");
107 
108  x = i->caloPosition().eta();
109  y = i->caloPosition().phi();
110 
111  scposition->SetNextPoint(x, y, z);
112  scposition->SetMarkerSize(1);
113  scposition->SetMarkerStyle(4);
114  scposition->SetMarkerColor(kBlue);
115  tList->AddElement(scposition);
116 
117  // points for seed position
118  TEvePointSet* seedposition = new TEvePointSet("seed position");
119  seedposition->SetTitle("Seed cluster centroid");
120  seedposition->SetPickable(kTRUE);
121 
122  x = i->superCluster()->seed()->position().eta();
123  y = i->superCluster()->seed()->position().phi();
124  seedposition->SetMarkerSize(0.01);
125 
126  seedposition->SetNextPoint(x, y, z);
127  seedposition->SetMarkerStyle(2);
128  seedposition->SetMarkerColor(kRed);
129  tList->AddElement(seedposition);
130 }
131 
133 
134 /*
135 REGISTER_FWDETAILVIEW(FWPhotonDetailView,Photon,ecalRecHit);
136 REGISTER_FWDETAILVIEW(FWPhotonDetailView,Photon,reducedEcalRecHitsEB);
137 REGISTER_FWDETAILVIEW(FWPhotonDetailView,Photon,reducedEGamma);
138 */
bool isAvailable() const
Definition: Ref.h:537
def overlay
Definition: compare.py:122
void showSuperCluster(const reco::SuperCluster &cluster, Color_t color=kYellow)
TGLViewer * viewerGL() const
constexpr char Photon[]
Definition: modules.cc:14
double makeLegend(double x0=0.02, double y0=0.95, Color_t clustered1=kGreen+1, Color_t clustered2=kTeal, Color_t supercluster=kYellow)
const FWEventItem * item()
#define REGISTER_FWDETAILVIEW(_classname_, _name_,...)
void setTextInfo(const FWModelId &id, const reco::Photon *) override
void build(const FWModelId &id, const reco::Photon *) override
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
FWECALDetailViewBuilder * m_builder
math::XYZPointF caloPosition() const
position in ECAL: this is th SC position if r9<0.93. If r8>0.93 is position of seed BasicCluster taki...
Definition: Photon.h:85
TEveCaloData * m_data
void showSuperClusters(Color_t color1=kGreen+2, Color_t color2=kTeal)
void addSceneInfo(const reco::Photon *, TEveElementList *)
~FWPhotonDetailView() override
double et() const final
transverse energy
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
double phi() const final
momentum azimuthal angle
double eta() const final
momentum pseudorapidity