CMS 3D CMS Logo

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 
14 
16 
22 
23 //
24 // constructors and destructor
25 //
27 m_data(nullptr),
28 m_builder(nullptr)
29 {
30 }
31 
33 {
34  m_eveViewer->GetGLViewer()->DeleteOverlayElements(TGLOverlayElement::kUser);
35 
36  if (m_data) m_data->DecDenyDestroy();
37  delete m_builder;
38 }
39 
40 //
41 // member functions
42 //
43 void FWPhotonDetailView::build (const FWModelId &id, const reco::Photon* iPhoton)
44 {
45  if(!iPhoton) return;
46 
47  // build ECAL objects
48  m_builder = new FWECALDetailViewBuilder(id.item()->getEvent(), id.item()->getGeom(),
49  iPhoton->caloPosition().eta(), iPhoton->caloPosition().phi(), 25);
51 
52  if ( iPhoton->superCluster().isAvailable() )
53  m_builder->showSuperCluster(*(iPhoton->superCluster()), kYellow + 1);
54 
55  TEveCaloLego* lego = m_builder->build();
56  m_data = lego->GetData();
57  m_data->IncDenyDestroy();
58  m_eveScene->AddElement(lego);
59 
60  // add Photon specific details
61  if( iPhoton->superCluster().isAvailable() )
62  addSceneInfo(iPhoton, m_eveScene);
63 
64  // draw axis at the window corners
65  TEveCaloLegoOverlay* overlay = new TEveCaloLegoOverlay();
66  overlay->SetShowPlane(kFALSE);
67  overlay->SetShowPerspective(kFALSE);
68  overlay->SetCaloLego(lego);
69  overlay->SetShowScales(true); // temporary
70  viewerGL()->AddOverlayElement(overlay);
71 
72  // set event handler and flip camera to top view at beginning
73  viewerGL()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
74  FWGLEventHandler* eh =
75  new FWGLEventHandler((TGWindow*)viewerGL()->GetGLWidget(), (TObject*)viewerGL(), lego);
76  viewerGL()->SetEventHandler(eh);
77  viewerGL()->UpdateScene();
78  viewerGL()->CurrentCamera().Reset();
79 
80  viewerGL()->RequestDraw(TGLRnrCtx::kLODHigh);
81 
82  setTextInfo(id, iPhoton);
83 }
84 
85 //______________________________________________________________________________
86 
87 void
89 {
90  m_infoCanvas->cd();
91  float_t x = 0.02;
92  float y = 0.97;
93  TLatex* latex = new TLatex(x, y, "");
94  const double textsize(0.05);
95  latex->SetTextSize(2*textsize);
96 
97  float h = latex->GetTextSize()*0.6;
98  latex->DrawLatex(x, y, id.item()->modelName(id.index()).c_str() );
99  y -= h;
100 
101  latex->DrawLatex(x, y, Form(" E_{T} = %.1f GeV, #eta = %0.2f, #varphi = %0.2f",
102  photon->et(), photon->eta(), photon->phi()) );
103  y -= h;
104  m_builder->makeLegend(x, y);
105 }
106 
107 //______________________________________________________________________________
108 
109 void
110 FWPhotonDetailView::addSceneInfo(const reco::Photon *i, TEveElementList* tList)
111 {
112 
113  // points for centroids
114  Double_t x(0), y(0), z(0);
115  TEvePointSet *scposition = new TEvePointSet("sc position");
116  scposition->SetPickable(kTRUE);
117  scposition->SetTitle("Super cluster centroid");
118 
119  x = i->caloPosition().eta();
120  y = i->caloPosition().phi();
121 
122  scposition->SetNextPoint(x,y,z);
123  scposition->SetMarkerSize(1);
124  scposition->SetMarkerStyle(4);
125  scposition->SetMarkerColor(kBlue);
126  tList->AddElement(scposition);
127 
128  // points for seed position
129  TEvePointSet *seedposition = new TEvePointSet("seed position");
130  seedposition->SetTitle("Seed cluster centroid");
131  seedposition->SetPickable(kTRUE);
132 
133  x = i->superCluster()->seed()->position().eta();
134  y = i->superCluster()->seed()->position().phi();
135  seedposition->SetMarkerSize(0.01);
136 
137  seedposition->SetNextPoint(x, y, z);
138  seedposition->SetMarkerStyle(2);
139  seedposition->SetMarkerColor(kRed);
140  tList->AddElement(seedposition);
141 }
142 
144 
145 /*
146 REGISTER_FWDETAILVIEW(FWPhotonDetailView,Photon,ecalRecHit);
147 REGISTER_FWDETAILVIEW(FWPhotonDetailView,Photon,reducedEcalRecHitsEB);
148 REGISTER_FWDETAILVIEW(FWPhotonDetailView,Photon,reducedEGamma);
149 */
bool isAvailable() const
Definition: Ref.h:577
void showSuperCluster(const reco::SuperCluster &cluster, Color_t color=kYellow)
Definition: Photon.py:1
double eta() const final
momentum pseudorapidity
TGLViewer * viewerGL() const
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
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 nullptr
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
void setTextInfo(const FWModelId &id, const reco::Photon *) override
def overlay(hists, ytitle, header, addon)
Definition: compare.py:120
void build(const FWModelId &id, const reco::Photon *) override
double et() const final
transverse energy
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:81
TEveCaloData * m_data
void showSuperClusters(Color_t color1=kGreen+2, Color_t color2=kTeal)
void addSceneInfo(const reco::Photon *, TEveElementList *)
#define REGISTER_FWDETAILVIEW(_classname_, _name_,...)
~FWPhotonDetailView() override
double phi() const final
momentum azimuthal angle