ROOT logo
// $Id: ARefractiveIndex.cxx 3 2010-11-26 17:17:31Z oxon $
// Author: Akira Okumura 2007/09/24

/******************************************************************************
 * Copyright (C) 2006-, Akira Okumura                                         *
 * All rights reserved.                                                       *
 *****************************************************************************/

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

#include "ABorderSurfaceCondition.h"
#include "AOpticalComponent.h"

ClassImp(ABorderSurfaceCondition)

TObjArray ABorderSurfaceCondition::fSurfaceArray;

ABorderSurfaceCondition::ABorderSurfaceCondition(TGeoVolume* volume1, TGeoVolume* volume2)
  : fSigma(0)
{
  fVolume[0] = volume1;
  fVolume[1] = volume2;

  if(not fSurfaceArray.IsOwner()){
    fSurfaceArray.SetOwner(kTRUE);
  } // if

  ABorderSurfaceCondition* condition = GetSurfaceCondition(volume1, volume2);
  if(condition){
    fSurfaceArray.Remove(condition);
    SafeDelete(condition);
  } // if

  fSurfaceArray.Add(this);
}

//______________________________________________________________________________
ABorderSurfaceCondition::~ABorderSurfaceCondition()
{
}

//______________________________________________________________________________
ABorderSurfaceCondition* ABorderSurfaceCondition::GetSurfaceCondition(TGeoVolume* volume1, TGeoVolume* volume2)
{
  for(Int_t i = 0; i < fSurfaceArray.GetEntries(); i++){
    if(((ABorderSurfaceCondition*)fSurfaceArray[i])->GetVolume1() == volume1 &&
       ((ABorderSurfaceCondition*)fSurfaceArray[i])->GetVolume2() == volume2){
      return (ABorderSurfaceCondition*)fSurfaceArray[i];
    } // if
  } // i

  return 0;
}

//______________________________________________________________________________
void ABorderSurfaceCondition::SetGaussianRoughness(Double_t sigma /* (rad) */)
{
  // Set Gaussian-like roughness in unit of (rad). Works as sigma_alpha in
  // Geant4 optics.
  fSigma = TMath::Abs(sigma);
}
 ABorderSurfaceCondition.cxx:1
 ABorderSurfaceCondition.cxx:2
 ABorderSurfaceCondition.cxx:3
 ABorderSurfaceCondition.cxx:4
 ABorderSurfaceCondition.cxx:5
 ABorderSurfaceCondition.cxx:6
 ABorderSurfaceCondition.cxx:7
 ABorderSurfaceCondition.cxx:8
 ABorderSurfaceCondition.cxx:9
 ABorderSurfaceCondition.cxx:10
 ABorderSurfaceCondition.cxx:11
 ABorderSurfaceCondition.cxx:12
 ABorderSurfaceCondition.cxx:13
 ABorderSurfaceCondition.cxx:14
 ABorderSurfaceCondition.cxx:15
 ABorderSurfaceCondition.cxx:16
 ABorderSurfaceCondition.cxx:17
 ABorderSurfaceCondition.cxx:18
 ABorderSurfaceCondition.cxx:19
 ABorderSurfaceCondition.cxx:20
 ABorderSurfaceCondition.cxx:21
 ABorderSurfaceCondition.cxx:22
 ABorderSurfaceCondition.cxx:23
 ABorderSurfaceCondition.cxx:24
 ABorderSurfaceCondition.cxx:25
 ABorderSurfaceCondition.cxx:26
 ABorderSurfaceCondition.cxx:27
 ABorderSurfaceCondition.cxx:28
 ABorderSurfaceCondition.cxx:29
 ABorderSurfaceCondition.cxx:30
 ABorderSurfaceCondition.cxx:31
 ABorderSurfaceCondition.cxx:32
 ABorderSurfaceCondition.cxx:33
 ABorderSurfaceCondition.cxx:34
 ABorderSurfaceCondition.cxx:35
 ABorderSurfaceCondition.cxx:36
 ABorderSurfaceCondition.cxx:37
 ABorderSurfaceCondition.cxx:38
 ABorderSurfaceCondition.cxx:39
 ABorderSurfaceCondition.cxx:40
 ABorderSurfaceCondition.cxx:41
 ABorderSurfaceCondition.cxx:42
 ABorderSurfaceCondition.cxx:43
 ABorderSurfaceCondition.cxx:44
 ABorderSurfaceCondition.cxx:45
 ABorderSurfaceCondition.cxx:46
 ABorderSurfaceCondition.cxx:47
 ABorderSurfaceCondition.cxx:48
 ABorderSurfaceCondition.cxx:49
 ABorderSurfaceCondition.cxx:50
 ABorderSurfaceCondition.cxx:51
 ABorderSurfaceCondition.cxx:52
 ABorderSurfaceCondition.cxx:53
 ABorderSurfaceCondition.cxx:54
 ABorderSurfaceCondition.cxx:55
 ABorderSurfaceCondition.cxx:56
 ABorderSurfaceCondition.cxx:57
 ABorderSurfaceCondition.cxx:58
 ABorderSurfaceCondition.cxx:59
 ABorderSurfaceCondition.cxx:60
 ABorderSurfaceCondition.cxx:61
 ABorderSurfaceCondition.cxx:62
 ABorderSurfaceCondition.cxx:63
 ABorderSurfaceCondition.cxx:64
 ABorderSurfaceCondition.cxx:65
 ABorderSurfaceCondition.cxx:66
 ABorderSurfaceCondition.cxx:67
 ABorderSurfaceCondition.cxx:68