Warning, file /include/root/TGeoPcon.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOT_TGeoPcon
0013 #define ROOT_TGeoPcon
0014
0015 #include "TGeoBBox.h"
0016
0017 class TGeoPcon : public TGeoBBox {
0018 protected:
0019
0020 Int_t fNz = 0;
0021 Double_t fPhi1 = 0;
0022 Double_t fDphi = 0;
0023 Double_t *fRmin = nullptr;
0024 Double_t *fRmax = nullptr;
0025 Double_t *fZ = nullptr;
0026 Bool_t fFullPhi = false;
0027 Double_t fC1 = 0;
0028 Double_t fS1 = 0;
0029 Double_t fC2 = 0;
0030 Double_t fS2 = 0;
0031 Double_t fCm = 0;
0032 Double_t fSm = 0;
0033 Double_t fCdphi = 0;
0034
0035
0036 TGeoPcon(const TGeoPcon &) = delete;
0037 TGeoPcon &operator=(const TGeoPcon &) = delete;
0038
0039 Bool_t HasInsideSurface() const;
0040 void SetSegsAndPolsNoInside(TBuffer3D &buff) const;
0041
0042 public:
0043
0044 TGeoPcon();
0045 TGeoPcon(const char *name) : TGeoBBox(name, 0, 0, 0) {}
0046 TGeoPcon(Double_t phi, Double_t dphi, Int_t nz);
0047 TGeoPcon(const char *name, Double_t phi, Double_t dphi, Int_t nz);
0048 TGeoPcon(Double_t *params);
0049
0050 ~TGeoPcon() override;
0051
0052 Double_t Capacity() const override;
0053 void ComputeBBox() override;
0054 void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) override;
0055 void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize) override;
0056 Bool_t Contains(const Double_t *point) const override;
0057 void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const override;
0058 virtual void DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax);
0059 Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact = 1, Double_t step = TGeoShape::Big(),
0060 Double_t *safe = nullptr) const override;
0061 void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize,
0062 Double_t *step) const override;
0063 Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact = 1,
0064 Double_t step = TGeoShape::Big(), Double_t *safe = nullptr) const override;
0065 void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize,
0066 Double_t *step) const override;
0067 Double_t DistToSegZ(const Double_t *point, const Double_t *dir, Int_t &iz) const;
0068 Int_t DistancetoPrimitive(Int_t px, Int_t py) override;
0069 TGeoVolume *
0070 Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step) override;
0071 const char *GetAxisName(Int_t iaxis) const override;
0072 Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const override;
0073 void GetBoundingCylinder(Double_t *param) const override;
0074 const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const override;
0075 Int_t GetByteCount() const override { return 60 + 12 * fNz; }
0076 Double_t GetPhi1() const { return fPhi1; }
0077 Double_t GetDphi() const { return fDphi; }
0078 Int_t GetNz() const { return fNz; }
0079 virtual Int_t GetNsegments() const;
0080 Double_t *GetRmin() const { return fRmin; }
0081 Double_t GetRmin(Int_t ipl) const;
0082 Double_t *GetRmax() const { return fRmax; }
0083 Double_t GetRmax(Int_t ipl) const;
0084 Double_t *GetZ() const { return fZ; }
0085 Double_t GetZ(Int_t ipl) const;
0086 TGeoShape *GetMakeRuntimeShape(TGeoShape * , TGeoMatrix * ) const override { return nullptr; }
0087 Int_t GetNmeshVertices() const override;
0088 Bool_t GetPointsOnSegments(Int_t , Double_t * ) const override { return kFALSE; }
0089 void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const override;
0090 void InspectShape() const override;
0091 Bool_t IsCylType() const override { return kTRUE; }
0092 TBuffer3D *MakeBuffer3D() const override;
0093 Double_t &Phi1() { return fPhi1; }
0094 Double_t &Dphi() { return fDphi; }
0095 Double_t &Rmin(Int_t ipl) { return fRmin[ipl]; }
0096 Double_t &Rmax(Int_t ipl) { return fRmax[ipl]; }
0097 Double_t &Z(Int_t ipl) { return fZ[ipl]; }
0098 Double_t Safety(const Double_t *point, Bool_t in = kTRUE) const override;
0099 void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const override;
0100 Double_t
0101 SafetyToSegment(const Double_t *point, Int_t ipl, Bool_t in = kTRUE, Double_t safmin = TGeoShape::Big()) const;
0102 void SavePrimitive(std::ostream &out, Option_t *option = "") override;
0103 void SetDimensions(Double_t *param) override;
0104 void SetPoints(Double_t *points) const override;
0105 void SetPoints(Float_t *points) const override;
0106 void SetSegsAndPols(TBuffer3D &buff) const override;
0107 void Sizeof3D() const override;
0108
0109 ClassDefOverride(TGeoPcon, 1)
0110 };
0111
0112 #endif