ROOT logo
// $Id$
// Author: Akira Okumura 2007/10/01

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

///////////////////////////////////////////////////////////////////////////////
//
// ASellmeierFormula
//
// Sellmeier's formula for calculation of refractive index
// See http://en.wikipedia.org/wiki/Sellmeier_equation
//
///////////////////////////////////////////////////////////////////////////////

#include "AOpticsManager.h"
#include "ASellmeierFormula.h"
#include "TMath.h"

ClassImp(ASellmeierFormula)

ASellmeierFormula::ASellmeierFormula() : ARefractiveIndex()
{
}

//_____________________________________________________________________________
ASellmeierFormula::ASellmeierFormula(Double_t B1, Double_t B2, Double_t B3,
                                     Double_t C1, Double_t C2, Double_t C3)
  : ARefractiveIndex()
{
  // n(lambda) = 1 + B1*lamda^2/(lamda^2 - C1) + B2*lamda^2/(lamda^2 - C2) + B3*lamda^2/(lamda^2 - C3)
  // where lambda is measured in (um)
  fPar[0] = B1;
  fPar[1] = B2;
  fPar[2] = B3;
  fPar[3] = C1;
  fPar[4] = C2;
  fPar[5] = C3;
}

//_____________________________________________________________________________
ASellmeierFormula::ASellmeierFormula(const Double_t* p)
{
  for(Int_t i = 0; i < 6; i++){
    fPar[i] = p[i];
  } // i
}

//_____________________________________________________________________________
Double_t ASellmeierFormula::GetIndex(Double_t lambda) const
{
  // Calculate the refractive index at wavelength = lambda (m)
  // Use AOpticsManager::m() to get the unit length in (m)
  lambda /= AOpticsManager::um(); // Convert (nm) to (um)
  Double_t lambda2 = lambda*lambda;
  return TMath::Sqrt(1 + fPar[0]*lambda2/(lambda2 - fPar[3])
                       + fPar[1]*lambda2/(lambda2 - fPar[4])
                       + fPar[2]*lambda2/(lambda2 - fPar[5]));
}
 ASellmeierFormula.cxx:1
 ASellmeierFormula.cxx:2
 ASellmeierFormula.cxx:3
 ASellmeierFormula.cxx:4
 ASellmeierFormula.cxx:5
 ASellmeierFormula.cxx:6
 ASellmeierFormula.cxx:7
 ASellmeierFormula.cxx:8
 ASellmeierFormula.cxx:9
 ASellmeierFormula.cxx:10
 ASellmeierFormula.cxx:11
 ASellmeierFormula.cxx:12
 ASellmeierFormula.cxx:13
 ASellmeierFormula.cxx:14
 ASellmeierFormula.cxx:15
 ASellmeierFormula.cxx:16
 ASellmeierFormula.cxx:17
 ASellmeierFormula.cxx:18
 ASellmeierFormula.cxx:19
 ASellmeierFormula.cxx:20
 ASellmeierFormula.cxx:21
 ASellmeierFormula.cxx:22
 ASellmeierFormula.cxx:23
 ASellmeierFormula.cxx:24
 ASellmeierFormula.cxx:25
 ASellmeierFormula.cxx:26
 ASellmeierFormula.cxx:27
 ASellmeierFormula.cxx:28
 ASellmeierFormula.cxx:29
 ASellmeierFormula.cxx:30
 ASellmeierFormula.cxx:31
 ASellmeierFormula.cxx:32
 ASellmeierFormula.cxx:33
 ASellmeierFormula.cxx:34
 ASellmeierFormula.cxx:35
 ASellmeierFormula.cxx:36
 ASellmeierFormula.cxx:37
 ASellmeierFormula.cxx:38
 ASellmeierFormula.cxx:39
 ASellmeierFormula.cxx:40
 ASellmeierFormula.cxx:41
 ASellmeierFormula.cxx:42
 ASellmeierFormula.cxx:43
 ASellmeierFormula.cxx:44
 ASellmeierFormula.cxx:45
 ASellmeierFormula.cxx:46
 ASellmeierFormula.cxx:47
 ASellmeierFormula.cxx:48
 ASellmeierFormula.cxx:49
 ASellmeierFormula.cxx:50
 ASellmeierFormula.cxx:51
 ASellmeierFormula.cxx:52
 ASellmeierFormula.cxx:53
 ASellmeierFormula.cxx:54
 ASellmeierFormula.cxx:55
 ASellmeierFormula.cxx:56
 ASellmeierFormula.cxx:57
 ASellmeierFormula.cxx:58
 ASellmeierFormula.cxx:59
 ASellmeierFormula.cxx:60
 ASellmeierFormula.cxx:61