CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2/src/SimTracker/SiStripDigitizer/plugins/SiHitDigitizer.h

Go to the documentation of this file.
00001 #ifndef _TRACKER_SiHitDigitizer_H_
00002 #define _TRACKER_SiHitDigitizer_H_
00003  
00004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00005 
00006 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
00007 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00008 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
00009 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
00010 #include "SiChargeCollectionDrifter.h"
00011 #include "SiChargeDivider.h"
00012 #include "SiInduceChargeOnStrips.h"
00013 #include "SiPileUpSignals.h"
00014 
00015 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h"
00016 
00017 #include <map>
00018 #include <memory>
00019 
00020 namespace CLHEP {
00021   class HepRandomEngine;
00022 }
00023 
00024 class SiStripDetType;
00028 class SiHitDigitizer {
00029  public:
00030 
00031   SiHitDigitizer(const edm::ParameterSet& conf,CLHEP::HepRandomEngine&);
00032 
00033   ~SiHitDigitizer();
00034 
00035   void setChargeDivider(SiChargeDivider* cd) {
00036     theSiChargeDivider.reset(cd);
00037   }
00038 
00039   void setChargeCollectionDrifter(SiChargeCollectionDrifter* cd) {
00040     theSiChargeCollectionDrifter.reset(cd);
00041   }
00042 
00043   void setInduceChargeOnStrips(SiInduceChargeOnStrips* cd) {
00044     theSiInduceChargeOnStrips.reset(cd);
00045   }
00046   
00047   void setParticleDataTable(const ParticleDataTable * pdt) { 
00048     theSiChargeDivider->setParticleDataTable(pdt); 
00049   }
00050 
00051   void processHit(const PSimHit*, const StripGeomDetUnit&, GlobalVector,float,
00052                   std::vector<double>&, size_t&, size_t&);
00053   
00054  private:
00055   const double depletionVoltage;
00056   const double chargeMobility;
00057   std::unique_ptr<SiChargeDivider> theSiChargeDivider;
00058   std::unique_ptr<SiChargeCollectionDrifter> theSiChargeCollectionDrifter;
00059   std::unique_ptr<const SiInduceChargeOnStrips> theSiInduceChargeOnStrips;
00060 
00061   typedef GloballyPositioned<double> Frame;
00062   
00063   LocalVector DriftDirection(const StripGeomDetUnit* _detp, GlobalVector _bfield, float langle) {
00064     LocalVector Bfield=Frame(_detp->surface().position(),_detp->surface().rotation()).toLocal(_bfield);
00065     return LocalVector(-langle * Bfield.y(),langle * Bfield.x(),1.);
00066   }
00067 
00068 };
00069 
00070 #endif