Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:11:16

0001 
0002 #ifndef MaterialEffects_h
0003 #define MaterialEffects_h
0004 
0005 /**
0006  * Steering class for the simulation of the Material Effects in each 
0007  * layer of the tracker material. For now, it has
0008  *
0009  *  - Photon conversion
0010  *  - Bremsstrahlung
0011  *  - Energy loss by ionization
0012  *  - Multiple scattering
0013  *  - Muon Bremsstrahlung
0014 
0015  * but no synchrotron radiation (well, this is not really a material 
0016  * effect, but might be dealt with here as well), no nuclear interactions, 
0017  * no delta-rays.
0018  *
0019  * The method interact() does all the above items in turn, and modifies 
0020  * the FSimEvent accordingly. For instance, a converting photon gets 
0021  * an end vertex here, and two new FSimTracks are created, one for the
0022  * electron and one for the positron, with the same parent vertex.
0023  *
0024  * \author: Stephan Wynhoff, Florian Beaudette, Patrick Janot
0025  * $Date: Last modification (after severe clean-up). 27-Fev-2011- Sandro Fonseca and Andre Sznajder  (UERJ/Brazil)
0026  */
0027 
0028 //Framework Headers
0029 //#include "FWCore/ParameterSet/interface/ParameterSet.h"
0030 
0031 // Geometry Headers
0032 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0033 
0034 #include <vector>
0035 class FSimEvent;
0036 class TrackerLayer;
0037 class ParticlePropagator;
0038 class PairProductionSimulator;
0039 class BremsstrahlungSimulator;
0040 class EnergyLossSimulator;
0041 //class NuclearInteractionSimulator;
0042 class MaterialEffectsSimulator;
0043 class MultipleScatteringSimulator;
0044 class MuonBremsstrahlungSimulator;
0045 class RandomEngineAndDistribution;
0046 
0047 namespace edm {
0048   class ParameterSet;
0049 }
0050 
0051 class MaterialEffects {
0052 public:
0053   /// Constructor
0054   MaterialEffects(const edm::ParameterSet& matEff);
0055 
0056   /// Default destructor
0057   ~MaterialEffects();
0058 
0059   /// Steer the various interaction processes in the Tracker Material
0060   /// and update the FSimEvent
0061   void interact(FSimEvent& simEvent,
0062                 const TrackerLayer& layer,
0063                 ParticlePropagator& PP,
0064                 unsigned i,
0065                 RandomEngineAndDistribution const*);
0066 
0067   /// Save nuclear interaction information
0068   void save();
0069 
0070   /// Return the thickness of the current layer
0071   inline double thickness() const { return theThickness; }
0072 
0073   /// Return the energy loss by ionization in the current layer
0074   inline double energyLoss() const { return theEnergyLoss; }
0075 
0076   /// Return the Multiple Scattering engine
0077   inline MultipleScatteringSimulator* multipleScatteringSimulator() const { return MultipleScattering; }
0078 
0079   /// Return the Energy Loss engine
0080   inline EnergyLossSimulator* energyLossSimulator() const { return EnergyLoss; }
0081 
0082   /// Return the Muon Bremsstrahlung engine
0083   inline MuonBremsstrahlungSimulator* muonBremsstrahlungSimulator() const { return MuonBremsstrahlung; }
0084 
0085 private:
0086   /// The number of radiation lengths traversed
0087   double radLengths(const TrackerLayer& layer, ParticlePropagator& myTrack);
0088 
0089   /// The vector normal to the surface traversed
0090   GlobalVector normalVector(const TrackerLayer& layer, ParticlePropagator& myTrack) const;
0091 
0092 private:
0093   PairProductionSimulator* PairProduction;
0094   BremsstrahlungSimulator* Bremsstrahlung;
0095   ////// Muon Brem
0096   MuonBremsstrahlungSimulator* MuonBremsstrahlung;
0097   MultipleScatteringSimulator* MultipleScattering;
0098   EnergyLossSimulator* EnergyLoss;
0099   MaterialEffectsSimulator* NuclearInteraction;
0100 
0101   // Cuts for material effects
0102   double pTmin;
0103   GlobalVector theNormalVector;
0104   double theThickness;
0105   double theEnergyLoss;
0106   double theTECFudgeFactor;
0107 
0108   // debugging
0109   //  double myEta;
0110 
0111   bool use_hardcoded;
0112 };
0113 
0114 #endif