46 ClassImp(TEveJetCone);
51 TEveJetCone::TEveJetCone(
const Text_t* n,
const Text_t* t) :
54 fLimits(), fThetaC(10),
55 fEta(0), fPhi(0), fDEta(0), fDPhi(0), fNDiv(72)
63 void TEveJetCone::ComputeBBox()
66 BBoxCheckPoint(fApex);
67 BBoxCheckPoint(CalcBaseVec(0));
68 BBoxCheckPoint(CalcBaseVec(TMath::PiOver2()));
69 BBoxCheckPoint(CalcBaseVec(TMath::Pi()));
70 BBoxCheckPoint(CalcBaseVec(TMath::Pi() + TMath::PiOver2()));
76 TClass* TEveJetCone::ProjectedClass(
const TEveProjection*)
const
78 return TEveJetConeProjected::Class();
92 Int_t TEveJetCone::AddCone(Float_t eta, Float_t phi, Float_t cone_r, Float_t length)
94 return AddEllipticCone(eta, phi, cone_r, cone_r, length);
108 Int_t TEveJetCone::AddEllipticCone(Float_t eta, Float_t phi, Float_t reta, Float_t rphi, Float_t length)
110 using namespace TMath;
112 if (length != 0) fLimits.fX = length;
114 if (fLimits.IsZero())
117 fEta = eta; fPhi = phi; fDEta = reta; fDPhi = rphi;
125 TEveVector TEveJetCone::CalcEtaPhiVec(Float_t eta, Float_t phi)
const
127 using namespace TMath;
129 return TEveVector(Cos(phi) / CosH(eta), Sin(phi) / CosH(eta), TanH(eta));
135 TEveVector TEveJetCone::CalcBaseVec(Float_t eta, Float_t phi)
const
137 using namespace TMath;
139 TEveVector vec = CalcEtaPhiVec(eta, phi);
142 if (fLimits.fY != 0 && fLimits.fZ != 0)
144 Float_t theta = vec.Theta();
146 vec *= fLimits.fZ / Cos(theta);
147 else if (theta > Pi() - fThetaC)
148 vec *= fLimits.fZ / Cos(theta - Pi());
150 vec *= fLimits.fY / Sin(theta);
152 if (fLimits.fX != 0) vec *= fLimits.fX;
166 TEveVector TEveJetCone::CalcBaseVec(Float_t alpha)
const
168 using namespace TMath;
170 return CalcBaseVec(fEta + fDEta * Cos(alpha), fPhi + fDPhi * Sin(alpha));
176 Bool_t TEveJetCone::IsInTransitionRegion()
const
178 using namespace TMath;
180 Float_t tm = CalcBaseVec(0).Theta();
181 Float_t tM = CalcBaseVec(Pi()).Theta();
183 return (tM > fThetaC && tm < fThetaC) ||
184 (tM > Pi() - fThetaC && tm < Pi() - fThetaC);
195 TEveJetConeProjected::TEveJetConeProjected(
const char* n,
const char* t) :
203 TEveJetConeProjected::~TEveJetConeProjected()
210 void TEveJetConeProjected::ComputeBBox()
214 TEveJetCone *cone =
dynamic_cast<TEveJetCone*
>(fProjectable);
217 TEveProjection *proj = GetManager()->GetProjection();
219 v = cone->fApex; proj->ProjectVector(v, fDepth); BBoxCheckPoint(v);
220 v = cone->CalcBaseVec(0); proj->ProjectVector(v, fDepth); BBoxCheckPoint(v);
221 v = cone->CalcBaseVec(TMath::PiOver2()); proj->ProjectVector(v, fDepth); BBoxCheckPoint(v);
222 v = cone->CalcBaseVec(TMath::Pi()); proj->ProjectVector(v, fDepth); BBoxCheckPoint(v);
223 v = cone->CalcBaseVec(TMath::Pi() + TMath::PiOver2()); proj->ProjectVector(v, fDepth); BBoxCheckPoint(v);
229 void TEveJetConeProjected::SetDepthLocal(Float_t d)
231 SetDepthCommon(d,
this, fBBox);
237 void TEveJetConeProjected::SetProjection(TEveProjectionManager* mng, TEveProjectable* model)
239 TEveProjected::SetProjection(mng, model);
240 CopyVizParams(dynamic_cast<TEveElement*>(model));
246 void TEveJetConeProjected::UpdateProjection()