CMS 3D CMS Logo

FWTauProxyBuilderBase.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Calo
4 // Class : FWTauProxyBuilderBase
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author: Alja Mrak-Tadel
10 // Created: Thu Oct 21 20:40:28 CEST 2010
11 //
12 
13 // system include files
14 
15 // user include files
16 #include "TGeoTube.h"
17 #include "TEveJetCone.h"
18 #include "TEveGeoNode.h"
19 #include "TEveScalableStraightLineSet.h"
20 #include "TEveTrack.h"
21 
32 
34 
37 
38 static const std::string kTauApexBeamSpot("Place Apex In BeamSpot");
39 FWTauProxyBuilderBase::FWTauProxyBuilderBase() : m_minTheta(0), m_maxTheta(0) {}
40 
42 
45  if (iItem) {
46  iItem->getConfig()->assertParam(kTauApexBeamSpot, false);
47  }
48 }
49 
51  const reco::Jet* iJet,
52  TEveElement* comp,
54  const FWViewContext* vc) {
55  // track
56  addLeadTrack(iTau, comp);
57  addConstituentTracks(iTau, comp);
58 
59  // projected markers
60  if (FWViewType::isProjected(type)) {
61  double phi = iTau.phi();
62  double theta = iTau.theta();
63  double size = 1;
64 
65  bool barrel = (theta < context().caloTransAngle() || theta > (TMath::Pi() - context().caloTransAngle()));
66  float ecalR = barrel ? context().caloR1() : context().caloR2();
67  float ecalZ = barrel ? context().caloZ1() : context().caloZ2();
68 
69  TEveScalableStraightLineSet* marker = new TEveScalableStraightLineSet("energy");
70 
71  if (type == FWViewType::kRhoZ) {
72  double r(0);
73  (theta < context().caloTransAngle() || M_PI - theta < context().caloTransAngle()) ? r = ecalZ / fabs(cos(theta))
74  : r = ecalR / sin(theta);
75 
76  fireworks::addRhoZEnergyProjection(this, comp, ecalR, ecalZ, m_minTheta - 0.003, m_maxTheta + 0.003, phi);
77 
78  marker->SetScaleCenter(0., (phi > 0 ? r * fabs(sin(theta)) : -r * fabs(sin(theta))), r * cos(theta));
79  marker->AddLine(0.,
80  (phi > 0 ? r * fabs(sin(theta)) : -r * fabs(sin(theta))),
81  r * cos(theta),
82  0.,
83  (phi > 0 ? (r + size) * fabs(sin(theta)) : -(r + size) * fabs(sin(theta))),
84  (r + size) * cos(theta));
85 
86  } else {
87  std::pair<double, double> phiRange = fireworks::getPhiRange(m_phis, phi);
88  double min_phi = phiRange.first - M_PI / 36 / 2;
89  double max_phi = phiRange.second + M_PI / 36 / 2;
90  TEveGeoManagerHolder gmgr(TEveGeoShape::GetGeoMangeur());
91  TGeoBBox* sc_box = new TGeoTubeSeg(ecalR - 1, ecalR + 1, 1, min_phi * 180 / M_PI, max_phi * 180 / M_PI);
92  TEveGeoShape* shape = fireworks::getShape("spread", sc_box, item()->defaultDisplayProperties().color());
93  shape->SetPickable(kTRUE);
94  setupAddElement(shape, comp);
95 
96  marker->SetScaleCenter(ecalR * cos(phi), ecalR * sin(phi), 0);
97  marker->AddLine(ecalR * cos(phi), ecalR * sin(phi), 0, (ecalR + size) * cos(phi), (ecalR + size) * sin(phi), 0);
98  }
99  marker->SetLineWidth(4);
100  FWViewEnergyScale* caloScale = vc->getEnergyScale();
101  marker->SetScale(caloScale->getScaleFactor3D() * (caloScale->getPlotEt() ? iTau.et() : iTau.energy()));
102  setupAddElement(marker, comp);
103  m_lines.push_back(fireworks::scaleMarker(marker, iTau.et(), iTau.energy(), vc));
104 
105  context().voteMaxEtAndEnergy(iTau.et(), iTau.energy());
106  } else if (iJet) {
107  // jet
108  TEveJetCone* cone = fireworks::makeEveJetCone(*iJet, context());
109  if (item()->getConfig()->value<bool>(kTauApexBeamSpot)) {
110  FWBeamSpot* bs = context().getBeamSpot();
111  cone->SetApex(TEveVector(bs->x0(), bs->y0(), bs->z0()));
112  }
114  cone->SetFillColor(dp.color());
115  cone->SetLineColor(dp.color());
116  setupAddElement(cone, comp);
117  cone->SetMainTransparency(TMath::Min(100, 80 + dp.transparency() / 5));
118  }
119 }
120 
121 // Tracks which passed quality cuts and are inside a tracker signal cone around leading Track
122 void FWTauProxyBuilderBase::addConstituentTracks(const reco::BaseTau& tau, class TEveElement* product) {
123  for (reco::TrackRefVector::iterator i = tau.signalTracks().begin(), iEnd = tau.signalTracks().end(); i != iEnd; ++i) {
124  TEveTrack* track(nullptr);
125  if (i->isAvailable()) {
126  track = fireworks::prepareTrack(**i, context().getTrackPropagator());
127  track->MakeTrack();
128  setupAddElement(track, product);
129  }
130  }
131 }
132 
133 // Leading Track
134 void FWTauProxyBuilderBase::addLeadTrack(const reco::BaseTau& tau, class TEveElement* product) {
135  const reco::TrackRef leadTrack = tau.leadTrack();
136  if (!leadTrack)
137  return;
138 
139  TEveTrack* track = fireworks::prepareTrack(*leadTrack, context().getTrackPropagator());
140  if (track) {
141  track->MakeTrack();
142  setupAddElement(track, product);
143  }
144 }
145 
147  TEveElement* iCompound,
148  FWViewType::EType viewType,
149  const FWViewContext* vc) {
150  if (FWViewType::isProjected(viewType))
151  increaseComponentTransparency(iId.index(), iCompound, "TEveJetCone", 80);
152 }
153 
154 void FWTauProxyBuilderBase::scaleProduct(TEveElementList* parent, FWViewType::EType viewType, const FWViewContext* vc) {
155  if (FWViewType::isProjected(viewType)) {
156  typedef std::vector<fireworks::scaleMarker> Lines_t;
157  FWViewEnergyScale* caloScale = vc->getEnergyScale();
158  // printf("%p -> %f\n", this,caloScale->getValToHeight() );
159  for (Lines_t::iterator i = m_lines.begin(); i != m_lines.end(); ++i) {
160  if (vc == (*i).m_vc) {
161  float value = caloScale->getPlotEt() ? (*i).m_et : (*i).m_energy;
162  (*i).m_ls->SetScale(caloScale->getScaleFactor3D() * value);
163  TEveProjected* proj = *(*i).m_ls->BeginProjecteds();
164  proj->UpdateProjection();
165  }
166  }
167  }
168 }
169 
size
Write out results.
const double Pi
type
Definition: HCALResponse.h:21
const fireworks::Context & context() const
virtual reco::TrackRef leadTrack() const
Definition: BaseTau.cc:24
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:150
float getScaleFactor3D() const
void scaleProduct(TEveElementList *parent, FWViewType::EType, const FWViewContext *vc) override
const FWDisplayProperties & defaultDisplayProperties() const
Definition: FWEventItem.cc:403
std::pair< double, double > getPhiRange(const std::vector< double > &phis, double phi)
Definition: BuilderUtils.cc:20
double x0() const
Definition: FWBeamSpot.cc:23
double theta() const final
momentum polar angle
static float caloTransAngle()
Definition: Context.cc:189
TEveTrack * prepareTrack(const reco::Track &track, TEveTrackPropagator *propagator, const std::vector< TEveVector > &extraRefPoints=std::vector< TEveVector >())
Definition: TrackUtils.cc:62
double z0() const
Definition: FWBeamSpot.cc:27
void addLeadTrack(const reco::BaseTau &tau, class TEveElement *product)
double y0() const
Definition: FWBeamSpot.cc:25
Base class for all types of Jets.
Definition: Jet.h:20
void voteMaxEtAndEnergy(float Et, float energy) const
Definition: Context.cc:162
void setupAddElement(TEveElement *el, TEveElement *parent, bool set_color=true) const
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
void setItem(const FWEventItem *iItem) override
FWViewEnergyScale * getEnergyScale() const
Geom::Theta< T > theta() const
static float caloZ2(bool offset=true)
Definition: Context.cc:185
T Min(T a, T b)
Definition: MathUtil.h:39
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:228
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:223
const FWEventItem * item() const
Color_t color() const
void addConstituentTracks(const reco::BaseTau &tau, class TEveElement *product)
void buildBaseTau(const reco::BaseTau &iTau, const reco::Jet *iJet, TEveElement *comp, FWViewType::EType type, const FWViewContext *vc)
static bool isProjected(int)
Definition: FWViewType.cc:100
Char_t transparency() const
FWBeamSpot * getBeamSpot() const
Definition: Context.h:67
static float caloR2(bool offset=true)
Definition: Context.cc:182
void localModelChanges(const FWModelId &iId, TEveElement *iCompound, FWViewType::EType viewType, const FWViewContext *vc) override
int index() const
Definition: FWModelId.h:41
double et() const final
transverse energy
static const std::string kTauApexBeamSpot("Place Apex In BeamSpot")
virtual void setItem(const FWEventItem *iItem)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double energy() const final
energy
static float caloR1(bool offset=true)
Definition: Context.cc:180
Definition: value.py:1
virtual const reco::TrackRefVector & signalTracks() const
Definition: BaseTau.cc:26
#define M_PI
FWGenericParameter< T > * assertParam(const std::string &name, T def)
void addRhoZEnergyProjection(FWProxyBuilderBase *, TEveElement *, double r_ecal, double z_ecal, double theta_min, double theta_max, double phi)
Definition: BuilderUtils.cc:57
static float caloZ1(bool offset=true)
Definition: Context.cc:183
std::vector< double > m_phis
TEveGeoShape * getShape(const char *name, TGeoBBox *shape, Color_t color)
Definition: BuilderUtils.cc:43
std::vector< fireworks::scaleMarker > m_lines
double phi() const final
momentum azimuthal angle
void increaseComponentTransparency(unsigned int index, TEveElement *holder, const std::string &name, Char_t transpOffset)
TEveJetCone * makeEveJetCone(const reco::Jet &iData, const fireworks::Context &context)
bool getPlotEt() const