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

#ifndef A_BORDER_SURFACE_CONDITION_H
#define A_BORDER_SURFACE_CONDITION_H

#include "AMultilayer.h"
#include "TObject.h"

class AOpticalComponent;

///////////////////////////////////////////////////////////////////////////////
//
// ABorderSurfaceCondition
//
// Defines the condition of the boarder surface between two volumes. Works as
// G4LogicalBorderSurface + G4OpticalSurface in Geant4.
//
///////////////////////////////////////////////////////////////////////////////

class ABorderSurfaceCondition : public TObject {
 private:
  AOpticalComponent* fComponent[2];
  Double_t fSigma;
  std::shared_ptr<AMultilayer> fMultilayer;

 public:
  ABorderSurfaceCondition(AOpticalComponent* component1,
                          AOpticalComponent* component2);
  virtual ~ABorderSurfaceCondition();

  const AOpticalComponent* GetComponent1() const { return fComponent[0]; }
  const AOpticalComponent* GetComponent2() const { return fComponent[1]; }
  Double_t GetGaussianRoughness() const { return fSigma; }
  void SetGaussianRoughness(Double_t sigma /* (rad) */);
  void SetMultilayer(std::shared_ptr<AMultilayer> layer) {
    fMultilayer = layer;
  }
  std::shared_ptr<AMultilayer> GetMultilayer() const { return fMultilayer; }

  ClassDef(ABorderSurfaceCondition, 1)
};

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