///////////////////////////////////////////////////////////////////////////////
//
// This extends the ConcentratorOpticalModel with a simple ageing
// model. The petal is aged above and below a border in local z.
//
// Author: Phil G Jones <p.jones22@physics.ox.ac.uk>
//
// REVISION HISTORY:
//     05/11/2010 : P G Jones - New file
//     2014-08-05 : P G Jones - Updated doxygen.
//
///////////////////////////////////////////////////////////////////////////////

#ifndef __RAT_ConcentratorAgedOpticalModel_hh__
#define __RAT_ConcentratorAgedOpticalModel_hh__

#include <RAT/ConcentratorOpticalModel.hh>

class G4Region;
class G4LogicalVolume;

namespace RAT
{

class ConcentratorAgedOpticalModel : public ConcentratorOpticalModel
{
public:
  // The constructor invoked with the model name and applicable region
  //
  // name: name of this model
  // region: region this model is applied in
  // params: parameters that control this models settings, index to RATDB
  // volume: the volume this model applies to
  ConcentratorAgedOpticalModel( const G4String name, G4Region* const region,
                                const std::string params, G4LogicalVolume* const volume );

protected:
  // Return the reflection probability for the angle and wavelength.
  //
  // position: position in local coordinates
  // localTheta: photon angle to the boundary, in radians
  // energy: energy of the photon in MeV
  // polarisation: polarisation in local coordinates, as defined
  //               in OpticalModelBase.hh
  // specularR: specular reflection probability
  // diffuseR: diffuse reflection probability
  virtual void GetReflectionProb( const G4ThreeVector& position,
                                  const G4double localTheta,
                                  const G4double energy,
                                  const EPolarisation polarisation,
                                  G4double& specularR, G4double& diffuseR );

  G4double fDegredationBorder; // Local z coordinate of the ageing change
  G4MaterialPropertyVector* fUpperDegredation; // Upper degredation value
  G4MaterialPropertyVector* fLowerDegredation; // Lower degredation value

};

} //::RAT

#endif