View Javadoc

1   package org.lcsim.detector.tracker.silicon;
2   /*
3    * ChargeCarrier.java
4    *
5    * Created on October 13, 2005, 3:41 PM
6    *
7    * To change this template, choose Tools | Options and locate the template under
8    * the Source Creation and Management node. Right-click the template and choose
9    * Open. You can then make changes to the template in the Source Editor.
10   */
11  
12  /**
13   *
14   * @author tknelson
15   */
16  
17  public enum ChargeCarrier
18  {
19      ELECTRON(-1,1268.0,-2.33,92.0,-0.57,1.3E+17,2.4,0.91,-0.146),
20      HOLE(1,406.9,-2.23,54.3,-0.57,2.35E+17,2.4,0.88,-0.146);
21      
22      private final int _charge;
23      private final double _mu_0_factor;
24      private final double _mu_0_exponent;
25      private final double _mu_min_factor;
26      private final double _mu_min_exponent;
27      private final double _N_ref_factor;
28      private final double _N_ref_exponent;
29      private final double _alpha_factor;
30      private final double _alpha_exponent;
31      
32      ChargeCarrier(int charge, double mu_0_factor, double mu_0_exponent, double mu_min_factor, double mu_min_exponent,
33              double N_ref_factor, double N_ref_exponent, double alpha_factor, double alpha_exponent)
34      {
35          _charge = charge;
36          _mu_0_factor = mu_0_factor;
37          _mu_0_exponent = mu_0_exponent;
38          _mu_min_factor = mu_min_factor;
39          _mu_min_exponent = mu_min_exponent;
40          _N_ref_factor = N_ref_factor;
41          _N_ref_exponent = N_ref_exponent;
42          _alpha_factor = alpha_factor;
43          _alpha_exponent = alpha_exponent;
44      }
45      
46      // Methods
47      public int charge()
48      {return _charge;}
49      double mu0(double temperature)
50      {return _mu_0_factor * Math.pow( (temperature/300.0), _mu_0_exponent);}
51      double muMin(double temperature)
52      {return _mu_min_factor * Math.pow( (temperature/300.0), _mu_min_exponent);}
53      double nRef(double temperature)
54      {return _N_ref_factor * Math.pow( (temperature/300.0), _N_ref_exponent);}
55      double alpha(double temperature)
56      {return _alpha_factor * Math.pow( (temperature/300.0), _alpha_exponent);}
57      
58      // Static
59      public static ChargeCarrier getCarrier(int charge)
60      {
61          if (charge == -1) return ChargeCarrier.ELECTRON;
62          if (charge == +1) return ChargeCarrier.HOLE;
63          else throw new RuntimeException("No ChargeCarrier for charge: "+charge);
64      }
65      
66  }