2 // ********************************************************************
 
    3 // * License and Disclaimer                                           *
 
    5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
 
    6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
 
    7 // * conditions of the Geant4 Software License,  included in the file *
 
    8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
 
    9 // * include a list of copyright holders.                             *
 
   11 // * Neither the authors of this software system, nor their employing *
 
   12 // * institutes,nor the agencies providing financial support for this *
 
   13 // * work  make  any representation or  warranty, express or implied, *
 
   14 // * regarding  this  software system or assume any liability for its *
 
   15 // * use.  Please see the license in the file  LICENSE  and URL above *
 
   16 // * for the full disclaimer and the limitation of liability.         *
 
   18 // * This  code  implementation is the result of  the  scientific and *
 
   19 // * technical work of the GEANT4 collaboration.                      *
 
   20 // * By using,  copying,  modifying or  distributing the software (or *
 
   21 // * any work based  on the software)  you  agree  to acknowledge its *
 
   22 // * use  in  resulting  scientific  publications,  and indicate your *
 
   23 // * acceptance of all terms of the Geant4 Software license.          *
 
   24 // ********************************************************************
 
   27 // $Id: G4Trap.icc 66356 2012-12-18 09:02:32Z gcosmo $
 
   29 // --------------------------------------------------------------------
 
   30 // GEANT 4 inline definitions file
 
   34 // Implementation of inline methods of G4Trap
 
   35 // --------------------------------------------------------------------
 
   38 G4double G4Trap::GetZHalfLength() const
 
   44 G4ThreeVector G4Trap::GetSymAxis() const
 
   46   G4double cosTheta = 1.0/std::sqrt(1+fTthetaCphi*fTthetaCphi +
 
   47                                fTthetaSphi*fTthetaSphi) ;
 
   49   return G4ThreeVector(fTthetaCphi*cosTheta,
 
   55 G4double G4Trap::GetYHalfLength1() const
 
   61 G4double G4Trap::GetXHalfLength1() const
 
   67 G4double G4Trap::GetXHalfLength2() const
 
   73 G4double G4Trap::GetTanAlpha1() const
 
   79 G4double G4Trap::GetYHalfLength2() const
 
   85 G4double G4Trap::GetXHalfLength3() const
 
   91 G4double G4Trap::GetXHalfLength4() const
 
   97 G4double G4Trap::GetTanAlpha2() const
 
  103 TrapSidePlane G4Trap::GetSidePlane( G4int n ) const
 
  109 G4double G4Trap::GetFaceArea(const G4ThreeVector& p0, const G4ThreeVector& p1,
 
  110                              const G4ThreeVector& p2, const G4ThreeVector& p3)
 
  112    G4double area = 0.5*((p1-p0).cross(p2-p1).mag()+(p3-p2).cross(p0-p3).mag());
 
  117 G4double G4Trap::GetCubicVolume()
 
  119   if(fCubicVolume != 0.) {;}
 
  120   else  { fCubicVolume = fDz*( (fDx1+fDx2+fDx3+fDx4)*(fDy1+fDy2)
 
  121                              + (fDx4+fDx3-fDx2-fDx1)*(fDy2-fDy1)/3 ); }
 
  126 G4double G4Trap::GetSurfaceArea()
 
  128   if(fSurfaceArea != 0.) {;}
 
  131     G4ThreeVector ba(fDx1-fDx2+fTalpha1*2*fDy1,2*fDy1,0);
 
  132     G4ThreeVector bc(2*fDz*fTthetaCphi-(fDx4-fDx2)+fTalpha2*fDy2-fTalpha1*fDy1,
 
  133                      2*fDz*fTthetaSphi+fDy2-fDy1, 2*fDz);
 
  134     G4ThreeVector dc(-fDx4+fDx3+2*fTalpha2*fDy2, 2*fDy2,0);
 
  135     G4ThreeVector da(-2*fDz*fTthetaCphi-(fDx1-fDx3)-fTalpha1*fDy1+fTalpha2*fDy2,
 
  136                      -2*fDz*fTthetaSphi-fDy1+fDy2,-2*fDz);
 
  138     G4ThreeVector ef(fDx2-fDx1+2*fTalpha1*fDy1, 2*fDy1,0);
 
  139     G4ThreeVector eh(2*fDz*fTthetaCphi+fDx3-fDx1+fTalpha1*fDy1-fTalpha2*fDy2,
 
  140                      2*fDz*fTthetaSphi-fDy2+fDy1,2*fDz);
 
  141     G4ThreeVector gh(fDx3-fDx4-2*fTalpha2*fDy2, -2*fDy2,0);
 
  142     G4ThreeVector gf(-2*fDz*fTthetaCphi+fDx2-fDx4+fTalpha1*fDy1-fTalpha2*fDy2,
 
  143                      -2*fDz*fTthetaSphi+fDy1-fDy2,-2*fDz);
 
  147     G4double babc=cr.mag();
 
  149     G4double dcda=cr.mag();
 
  151     G4double efeh=cr.mag();
 
  153     G4double ghgf=cr.mag();
 
  155     fSurfaceArea = 2*fDy1*(fDx1+fDx2)+2*fDy2*(fDx3+fDx4)
 
  157                  * std::sqrt(4*fDz*fDz+std::pow(fDy2-fDy1-2*fDz*fTthetaSphi,2))
 
  159                  * std::sqrt(4*fDz*fDz+std::pow(fDy2-fDy1+2*fDz*fTthetaSphi,2))
 
  160                  + 0.5*(babc+dcda+efeh+ghgf);