///////////////////////////////////////////////////////////////////////////////
//
// Extends the ConcentratorOpticalModel to match the SNOMAN 5_0294
// version. This takes into account the SNOMAN specific assumptions.
// Namely this includes a SNOMAN specific look-up table.
//
// Author: Phil G Jones
//
// REVISION HISTORY:
// 05/11/2010 : P G Jones - New file
// 2014-08-05 : P G Jones - Updated doxygen.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef __RAT_ConcentratorSNOMANOpticalModel_hh__
#define __RAT_ConcentratorSNOMANOpticalModel_hh__
#include
class G4Region;
class G4LogicalVolume;
namespace RAT
{
class ConcentratorSNOMANOpticalModel : 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: volume this model applies to
ConcentratorSNOMANOpticalModel( const G4String name, G4Region* const region,
const std::string params, G4LogicalVolume* const volume );
// The method that does the actual tracking
//
// fastTrack: track to track
// fastStep: result of tracking
virtual void DoIt( const G4FastTrack& fastTrack, G4FastStep& fastStep );
protected:
// Return the reflection probability for the angle and wavelength.
//
// position: position in local coordinates
// theta: photon angle to the boundary, in radians
// energy: energy of the photon
// polarisation: polarisation in local coordinates
// specularR: specular reflection probability
// diffuseR: diffuse reflection probability
virtual void GetReflectionProb( const G4ThreeVector& position,
const G4double theta, const G4double energy,
const EPolarisation polarisation,
G4double& specularR, G4double& diffuseR );
std::vector fPrompt; // The prompt response table
G4double fPromptNormalisation; // The prompt normalisation factor
};
} //::RAT
#endif