// @(#)root/eve:$Id$
// Author: Matevz Tadel, Jochen Thaeder 2009

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TEveJetCone
#define ROOT_TEveJetCone

#include "TEveShape.h"
#include "TEveVector.h"


//------------------------------------------------------------------------------
// TEveJetCone
//------------------------------------------------------------------------------

class TEveJetCone : public TEveShape
{
   friend class TEveJetConeProjected;
   friend class TEveJetConeGL;
   friend class TEveJetConeProjectedGL;

private:
   TEveJetCone(const TEveJetCone&);            // Not implemented
   TEveJetCone& operator=(const TEveJetCone&); // Not implemented

protected:
   TEveVector      fApex;        // Apex of the cone.
   TEveVector      fAxis;        // Axis of the cone.
   TEveVector      fLimits;      // Border of Barrel/Cylinder to cut the cone.
   Float_t         fThetaC;      // Transition theta
   Float_t         fEta,  fPhi;
   Float_t         fDEta, fDPhi;
   Int_t           fNDiv;

   TEveVector CalcEtaPhiVec(Float_t eta, Float_t phi) const;
   TEveVector CalcBaseVec  (Float_t eta, Float_t phi) const;
   TEveVector CalcBaseVec  (Float_t alpha) const;
   Bool_t     IsInTransitionRegion() const;

public:
   TEveJetCone(const Text_t* n="TEveJetCone", const Text_t* t="");
   virtual ~TEveJetCone() {}

   virtual void    ComputeBBox();
   virtual TClass* ProjectedClass(const TEveProjection* p) const;

   void  SetApex(const TEveVector& a)      { fApex = a; }
   void  SetCylinder(Float_t r, Float_t z) { fLimits.Set(0, r, z); fThetaC = fLimits.Theta(); }
   void  SetRadius  (Float_t r)            { fLimits.Set(r, 0, 0); fThetaC = 10; }

   Int_t GetNDiv() const  { return fNDiv; }
   void  SetNDiv(Int_t n) { fNDiv = TMath::Max(3, n); }

   Int_t AddCone(Float_t eta, Float_t phi, Float_t cone_r, Float_t length=0);
   Int_t AddEllipticCone(Float_t eta, Float_t phi, Float_t reta, Float_t rphi, Float_t length=0);

   ClassDef(TEveJetCone, 0); // Short description.
};


//------------------------------------------------------------------------------
// TEveJetConeProjected
//------------------------------------------------------------------------------

class TEveJetConeProjected : public TEveShape,
                             public TEveProjected
{
   friend class TEveJetConeProjectedGL;

private:
   TEveJetConeProjected(const TEveJetConeProjected&);            // Not implemented
   TEveJetConeProjected& operator=(const TEveJetConeProjected&); // Not implemented

protected:
   virtual void SetDepthLocal(Float_t d);

public:
   TEveJetConeProjected(const char* n="TEveJetConeProjected", const char* t="");
   virtual ~TEveJetConeProjected();

   // For TAttBBox:
   virtual void ComputeBBox();

   // Projected:
   virtual void SetProjection(TEveProjectionManager* mng, TEveProjectable* model);
   virtual void UpdateProjection();

   virtual TEveElement* GetProjectedAsElement() { return this; }

   ClassDef(TEveJetConeProjected, 0); // Projection of TEveJetCone.
};

#endif
 TEveJetCone.h:1
 TEveJetCone.h:2
 TEveJetCone.h:3
 TEveJetCone.h:4
 TEveJetCone.h:5
 TEveJetCone.h:6
 TEveJetCone.h:7
 TEveJetCone.h:8
 TEveJetCone.h:9
 TEveJetCone.h:10
 TEveJetCone.h:11
 TEveJetCone.h:12
 TEveJetCone.h:13
 TEveJetCone.h:14
 TEveJetCone.h:15
 TEveJetCone.h:16
 TEveJetCone.h:17
 TEveJetCone.h:18
 TEveJetCone.h:19
 TEveJetCone.h:20
 TEveJetCone.h:21
 TEveJetCone.h:22
 TEveJetCone.h:23
 TEveJetCone.h:24
 TEveJetCone.h:25
 TEveJetCone.h:26
 TEveJetCone.h:27
 TEveJetCone.h:28
 TEveJetCone.h:29
 TEveJetCone.h:30
 TEveJetCone.h:31
 TEveJetCone.h:32
 TEveJetCone.h:33
 TEveJetCone.h:34
 TEveJetCone.h:35
 TEveJetCone.h:36
 TEveJetCone.h:37
 TEveJetCone.h:38
 TEveJetCone.h:39
 TEveJetCone.h:40
 TEveJetCone.h:41
 TEveJetCone.h:42
 TEveJetCone.h:43
 TEveJetCone.h:44
 TEveJetCone.h:45
 TEveJetCone.h:46
 TEveJetCone.h:47
 TEveJetCone.h:48
 TEveJetCone.h:49
 TEveJetCone.h:50
 TEveJetCone.h:51
 TEveJetCone.h:52
 TEveJetCone.h:53
 TEveJetCone.h:54
 TEveJetCone.h:55
 TEveJetCone.h:56
 TEveJetCone.h:57
 TEveJetCone.h:58
 TEveJetCone.h:59
 TEveJetCone.h:60
 TEveJetCone.h:61
 TEveJetCone.h:62
 TEveJetCone.h:63
 TEveJetCone.h:64
 TEveJetCone.h:65
 TEveJetCone.h:66
 TEveJetCone.h:67
 TEveJetCone.h:68
 TEveJetCone.h:69
 TEveJetCone.h:70
 TEveJetCone.h:71
 TEveJetCone.h:72
 TEveJetCone.h:73
 TEveJetCone.h:74
 TEveJetCone.h:75
 TEveJetCone.h:76
 TEveJetCone.h:77
 TEveJetCone.h:78
 TEveJetCone.h:79
 TEveJetCone.h:80
 TEveJetCone.h:81
 TEveJetCone.h:82
 TEveJetCone.h:83
 TEveJetCone.h:84
 TEveJetCone.h:85
 TEveJetCone.h:86
 TEveJetCone.h:87
 TEveJetCone.h:88
 TEveJetCone.h:89
 TEveJetCone.h:90
 TEveJetCone.h:91
 TEveJetCone.h:92
 TEveJetCone.h:93
 TEveJetCone.h:94
 TEveJetCone.h:95
 TEveJetCone.h:96
 TEveJetCone.h:97
 TEveJetCone.h:98
 TEveJetCone.h:99
 TEveJetCone.h:100