ROBAST logo
// Author: Akira Okumura <mailto:oxon@mac.com>
/******************************************************************************
 * Copyright (C) 2006-, Akira Okumura                                         *
 * All rights reserved.                                                       *
 *****************************************************************************/

#ifndef A_GEO_BEZIER_PCON_H
#define A_GEO_BEZIER_PCON_H

#include "TGeoPcon.h"
#include "TVector2.h"

///////////////////////////////////////////////////////////////////////////////
//
// AGeoBezierPcon
//
// Geometry class for Pcon-like volume, but the side surfaces are defined by
// a Bezier curve (https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
//
///////////////////////////////////////////////////////////////////////////////

class AGeoBezierPcon : public TGeoPcon {
 protected:
  Double_t fLength;  // fDZ will be fLength/2
  Double_t fR1;      // Half of the upper aperture
  Double_t fR2;      // Half of the lower aperture
  TVector2 fP1;      // Relative coordinates of the control point 1
  TVector2 fP2;      // Relative coordinates of the control point 2
  Int_t fNcontrol;   // Number of control points (0, 1, or 2)

 public:
  AGeoBezierPcon();
  AGeoBezierPcon(Double_t phi, Double_t dphi, Int_t nz, Double_t r1,
                 Double_t r2, Double_t dz);
  AGeoBezierPcon(const char* name, Double_t phi, Double_t dphi, Int_t nz,
                 Double_t r1, Double_t r2, Double_t dz);
  virtual ~AGeoBezierPcon();

  virtual void Bezier(Double_t t, Double_t& r, Double_t& z);
  virtual void SetControlPoints(Double_t r1, Double_t z1);
  virtual void SetControlPoints(Double_t r1, Double_t z1, Double_t r2,
                                Double_t z2);
  virtual void SetSections();

  ClassDef(AGeoBezierPcon, 1)
};

#endif  // A_GEO_BEZIER_PCON_H
 AGeoBezierPcon.h:1
 AGeoBezierPcon.h:2
 AGeoBezierPcon.h:3
 AGeoBezierPcon.h:4
 AGeoBezierPcon.h:5
 AGeoBezierPcon.h:6
 AGeoBezierPcon.h:7
 AGeoBezierPcon.h:8
 AGeoBezierPcon.h:9
 AGeoBezierPcon.h:10
 AGeoBezierPcon.h:11
 AGeoBezierPcon.h:12
 AGeoBezierPcon.h:13
 AGeoBezierPcon.h:14
 AGeoBezierPcon.h:15
 AGeoBezierPcon.h:16
 AGeoBezierPcon.h:17
 AGeoBezierPcon.h:18
 AGeoBezierPcon.h:19
 AGeoBezierPcon.h:20
 AGeoBezierPcon.h:21
 AGeoBezierPcon.h:22
 AGeoBezierPcon.h:23
 AGeoBezierPcon.h:24
 AGeoBezierPcon.h:25
 AGeoBezierPcon.h:26
 AGeoBezierPcon.h:27
 AGeoBezierPcon.h:28
 AGeoBezierPcon.h:29
 AGeoBezierPcon.h:30
 AGeoBezierPcon.h:31
 AGeoBezierPcon.h:32
 AGeoBezierPcon.h:33
 AGeoBezierPcon.h:34
 AGeoBezierPcon.h:35
 AGeoBezierPcon.h:36
 AGeoBezierPcon.h:37
 AGeoBezierPcon.h:38
 AGeoBezierPcon.h:39
 AGeoBezierPcon.h:40
 AGeoBezierPcon.h:41
 AGeoBezierPcon.h:42
 AGeoBezierPcon.h:43
 AGeoBezierPcon.h:44
 AGeoBezierPcon.h:45
 AGeoBezierPcon.h:46
 AGeoBezierPcon.h:47
 AGeoBezierPcon.h:48