Go to the documentation of this file.00001
00002 #include "FastSimulation/MaterialEffects/interface/MaterialEffectsSimulator.h"
00003
00004
00005 #include <list>
00006
00007 using std::list;
00008 using std::pair;
00009
00010 MaterialEffectsSimulator:: MaterialEffectsSimulator(const RandomEngine* engine,
00011 double A, double Z,
00012 double density, double radLen) :
00013 A(A), Z(Z), density(density), radLen(radLen)
00014 {
00015 random = engine;
00016 _theUpdatedState.clear();
00017 }
00018
00019 MaterialEffectsSimulator::~MaterialEffectsSimulator() {
00020
00021 _theUpdatedState.clear();
00022 }
00023
00024 void MaterialEffectsSimulator::updateState(ParticlePropagator & Particle,
00025 double radlen)
00026 {
00027
00028 _theUpdatedState.clear();
00029 theClosestChargedDaughterId = -1;
00030
00031 radLengths = radlen;
00032 if ( radLengths > 0. ) compute(Particle);
00033
00034 }
00035
00036 XYZVector
00037 MaterialEffectsSimulator::orthogonal(const XYZVector& aVector) const {
00038
00039 double x = fabs(aVector.X());
00040 double y = fabs(aVector.Y());
00041 double z = fabs(aVector.Z());
00042
00043 if ( x < y )
00044 return x < z ?
00045 XYZVector(0.,aVector.Z(),-aVector.Y()) :
00046 XYZVector(aVector.Y(),-aVector.X(),0.);
00047 else
00048 return y < z ?
00049 XYZVector(-aVector.Z(),0.,aVector.X()) :
00050 XYZVector(aVector.Y(),-aVector.X(),0.);
00051
00052 }
00053