Back to home page

EIC code displayed by LXR

 
 

    


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 // @(#)root/geom:$Id$
0002 // Author: Andrei Gheata   24/10/01
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0010  *************************************************************************/
0011 
0012 #ifndef ROOT_TGeoPcon
0013 #define ROOT_TGeoPcon
0014 
0015 #include "TGeoBBox.h"
0016 
0017 class TGeoPcon : public TGeoBBox {
0018 protected:
0019    // data members
0020    Int_t fNz = 0;             // number of z planes (at least two)
0021    Double_t fPhi1 = 0;        // lower phi limit (converted to [0,2*pi)
0022    Double_t fDphi = 0;        // phi range
0023    Double_t *fRmin = nullptr; //[fNz] pointer to array of inner radii
0024    Double_t *fRmax = nullptr; //[fNz] pointer to array of outer radii
0025    Double_t *fZ = nullptr;    //[fNz] pointer to array of Z planes positions
0026    Bool_t fFullPhi = false;   //! Full phi range flag
0027    Double_t fC1 = 0;          //! Cosine of phi1
0028    Double_t fS1 = 0;          //! Sine of phi1
0029    Double_t fC2 = 0;          //! Cosine of phi1+dphi
0030    Double_t fS2 = 0;          //! Sine of phi1+dphi
0031    Double_t fCm = 0;          //! Cosine of (phi1+phi2)/2
0032    Double_t fSm = 0;          //! Sine of (phi1+phi2)/2
0033    Double_t fCdphi = 0;       //! Cosine of dphi
0034 
0035    // methods
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    // constructors
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    // destructor
0050    ~TGeoPcon() override;
0051    // methods
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 * /*mother*/, TGeoMatrix * /*mat*/) const override { return nullptr; }
0087    Int_t GetNmeshVertices() const override;
0088    Bool_t GetPointsOnSegments(Int_t /*npoints*/, Double_t * /*array*/) 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) // polycone class
0110 };
0111 
0112 #endif