View Javadoc

1   package org.lcsim.detector.tracker.silicon;
2   /*
3    * DopedSilicon.java
4    *
5    * Created on July 26, 2005, 3:31 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  //import static org.lcsim.units.clhep.SystemOfUnits.*;
13  //import static org.lcsim.units.clhep.PhysicalConstants.*;
14  import java.util.*;
15  
16  /**
17   *
18   * @author tknelson
19   */
20  public class DopedSilicon
21  {
22  
23      // Fields
24      //=======
25      
26      // Static
27      static public double K_BOLTZMANN = 8.617385E-5; // eV/degK
28      static public double ENERGY_EHPAIR = 3.62E-9; // 3.62E-9 GeV/e-h pair
29      
30      // Member
31      private double _temperature = 293.0; // * kelvin;
32      private double _doping_concentration = 6.0E+11; // / cm3; 
33      private EnumMap<ChargeCarrier, Double> _carrier_concentration = new EnumMap<ChargeCarrier,Double>(ChargeCarrier.class);    
34      
35      // Constructors
36      //=============
37      public DopedSilicon()
38      {
39          setElectronConcentration(1.0E+14);
40          setHoleConcentration(1.0E+14);
41      }
42  
43      // Setters/Accessors
44      //==================
45      public void setTemperature(double temperature){_temperature = temperature;}
46      public void setDopingConcentration(double doping_concentration) 
47      {
48          _doping_concentration = doping_concentration;
49      }
50      public void setElectronConcentration(double electron_concentration)
51      {
52          _carrier_concentration.put(ChargeCarrier.ELECTRON,electron_concentration);
53      }
54      public void setHoleConcentration(double hole_concentration)
55      {
56          _carrier_concentration.put(ChargeCarrier.HOLE,hole_concentration);
57      }
58      
59      public double getTemperature(){return _temperature;}
60      public double getCarrierConcentration(ChargeCarrier charge_carrier)
61      {
62          return _carrier_concentration.get(charge_carrier);
63      }
64      
65      // Methods
66      //========
67      
68      // Lorentz angle calculation for silicon sensors
69      public double tanLorentzAngle(double b_field, ChargeCarrier charge_carrier)
70      {
71          return b_field * mobility(charge_carrier) * 1.0E-4; // (must clean up units)
72      }
73      
74      // Mobility calculation with correction for irradiated sensors
75      public double mobility(ChargeCarrier charge_carrier)
76      {
77          return charge_carrier.muMin(_temperature) + charge_carrier.mu0(_temperature) / 
78                  (1.0 + Math.pow(_carrier_concentration.get(charge_carrier)/charge_carrier.nRef(_temperature), 
79                                  charge_carrier.alpha(_temperature)));
80      }
81  
82      // Silicon type
83      public boolean isNtype(){return _doping_concentration > 0.0;}
84      
85      
86  }