CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
LaserBeamsBarrel Class Reference

#include <LaserBeamsBarrel.h>

Inheritance diagram for LaserBeamsBarrel:

Public Member Functions

void GeneratePrimaries (G4Event *myEvent)
 shoot optical photons into the detector at the beginning of an event More...
 
 LaserBeamsBarrel ()
 default constructor More...
 
 LaserBeamsBarrel (G4int nPhotonsInGun, G4int nPhotonsInBeam, G4double PhotonEnergy)
 constructor More...
 
void setOptPhotonPolar (G4double Angle)
 set the polarisation of the photons More...
 
 ~LaserBeamsBarrel ()
 destructor More...
 

Private Attributes

CLHEP::DRand48Engine * theDRand48Engine
 
G4int thenParticle
 
G4int thenParticleInGun
 
G4ParticleGun * theParticleGun
 
G4double thePhotonEnergy
 

Detailed Description

Define the LaserBeams which connect both TECs and TIB and TOB with eachother

Date:
2007/06/11 14:44:28
Revision:
1.3
Author
Maarten Thomas

Definition at line 21 of file LaserBeamsBarrel.h.

Constructor & Destructor Documentation

LaserBeamsBarrel::LaserBeamsBarrel ( )

default constructor

Definition at line 20 of file LaserBeamsBarrel.cc.

21 {
22  G4int nPhotonsGun = 1;
23  G4int nPhotonsBeam = 1;
24  G4double Energy = 1.15 * eV;
25  // call constructor with options
26  LaserBeamsBarrel(nPhotonsGun, nPhotonsBeam, Energy);
27 }
LaserBeamsBarrel()
default constructor
LaserBeamsBarrel::LaserBeamsBarrel ( G4int  nPhotonsInGun,
G4int  nPhotonsInBeam,
G4double  PhotonEnergy 
)

constructor

Definition at line 29 of file LaserBeamsBarrel.cc.

References setOptPhotonPolar(), theDRand48Engine, thenParticle, thenParticleInGun, theParticleGun, and thePhotonEnergy.

29  : thenParticleInGun(0),
30  thenParticle(0),
31  thePhotonEnergy(0),
34 {
35  /* *********************************************************************** */
36  /* initialize and configure the particle gun */
37  /* *********************************************************************** */
38 
39  // the Photon energy
40  thePhotonEnergy = PhotonEnergy;
41 
42  // number of particles in the Laser beam
43  thenParticleInGun = nPhotonsInGun;
44 
45  // number of particles in one beam. ATTENTION: each beam contains nParticleInGun with the same
46  // startpoint and direction. nParticle gives the number of particles in the beam with a different
47  // startpoint. They are used to simulate the gaussian beamprofile of the Laser Beams.
48  thenParticle = nPhotonsInBeam;
49 
50  // create the particle gun
51  theParticleGun = new G4ParticleGun(thenParticleInGun);
52 
53  // default kinematics
54  G4ParticleTable * theParticleTable = G4ParticleTable::GetParticleTable();
55  G4ParticleDefinition * theOpticalPhoton = theParticleTable->FindParticle("opticalphoton");
56 
57  theParticleGun->SetParticleDefinition(theOpticalPhoton);
58  theParticleGun->SetParticleTime(0.0 * ns);
59  theParticleGun->SetParticlePosition(G4ThreeVector(-500.0 * cm, 0.0 * cm, 0.0 * cm));
60  theParticleGun->SetParticleMomentumDirection(G4ThreeVector(5.0, 3.0, 0.0));
61  theParticleGun->SetParticleEnergy(10.0 * keV);
62  setOptPhotonPolar(90.0);
63 
64  // initialize the random number engine
65  theDRand48Engine = new CLHEP::DRand48Engine();
66 
67 }
G4double thePhotonEnergy
G4ParticleGun * theParticleGun
void setOptPhotonPolar(G4double Angle)
set the polarisation of the photons
CLHEP::DRand48Engine * theDRand48Engine
LaserBeamsBarrel::~LaserBeamsBarrel ( )

destructor

Definition at line 69 of file LaserBeamsBarrel.cc.

References theDRand48Engine, and theParticleGun.

70 {
71  if ( theParticleGun != 0 ) { delete theParticleGun; }
72  if ( theDRand48Engine != 0 ) { delete theDRand48Engine; }
73 }
G4ParticleGun * theParticleGun
CLHEP::DRand48Engine * theDRand48Engine

Member Function Documentation

void LaserBeamsBarrel::GeneratePrimaries ( G4Event *  myEvent)

shoot optical photons into the detector at the beginning of an event

Definition at line 75 of file LaserBeamsBarrel.cc.

References funct::cos(), M_PI, edm::RandomNumberGenerator::mySeed(), setOptPhotonPolar(), funct::sin(), theDRand48Engine, thenParticle, theParticleGun, and thePhotonEnergy.

Referenced by LaserPrimaryGeneratorAction::GeneratePrimaries().

76 {
77  // this function is called at the beginning of an Event in LaserAlignment::upDate(const BeginOfEvent * myEvent)
78 
79  // use the random number generator service of the framework
81  unsigned int seed = rng->mySeed();
82 
83  // set the seed
84  theDRand48Engine->setSeed(seed);
85 
86  // number of LaserBeams
87  const G4int nLaserBeams = 8;
88 
89  // z position of the Laserdiodes (value from design drawings)
90  G4double LaserPositionZ = 1137.0 * mm;
91 
92  // Radius of the Laser ring
93  G4double LaserRingRadius = 564.0 * mm;
94 
95  // phi positions of the Laserdiodes (from CMS Note 2001/053 or from http://abbaneo.home.cern.ch/abbaneo/cms/layout)
96  G4double LaserPhi[nLaserBeams] = { G4double(7.0/112.0) * G4double(2.0 * M_PI),
97  G4double(23.0/112.0) * G4double(2.0 * M_PI),
98  G4double(33.0/112.0) * G4double(2.0 * M_PI),
99  G4double(49.0/112.0) * G4double(2.0 * M_PI),
100  G4double(65.0/112.0) * G4double(2.0 * M_PI),
101  G4double(77.0/112.0) * G4double(2.0 * M_PI),
102  G4double(93.0/112.0) * G4double(2.0 * M_PI),
103  G4double(103.0/112.0) * G4double(2.0 * M_PI) };
104 
105  // width of the LaserBeams
106  G4double LaserBeamSigmaX = 0.5 * mm;
107  G4double LaserBeamSigmaY = 0.5 * mm;
108 
109  // get the definition of the optical photon
110  G4ParticleTable * theParticleTable = G4ParticleTable::GetParticleTable();
111  G4ParticleDefinition * theOpticalPhoton = theParticleTable->FindParticle("opticalphoton");
112 
113  // loop over the LaserBeams
114  for (int theBeam = 0; theBeam < nLaserBeams; theBeam++)
115  {
116  // code for forward and backward beam
117  // calculate x and y position of the current laser diode
118  G4double LaserPositionX = cos(LaserPhi[theBeam]) * LaserRingRadius;
119  G4double LaserPositionY = sin(LaserPhi[theBeam]) * LaserRingRadius;
120 
121  // loop over all the particles in one beam
122  for (int theParticle = 0; theParticle < thenParticle; theParticle++)
123  {
124  // get randomnumbers and calculate the position
125  CLHEP::RandGaussQ aGaussObjX( *theDRand48Engine, LaserPositionX, LaserBeamSigmaX );
126  CLHEP::RandGaussQ aGaussObjY( *theDRand48Engine, LaserPositionY, LaserBeamSigmaY );
127 
128  G4double theXPosition = aGaussObjX.fire();
129  G4double theYPosition = aGaussObjY.fire();
130  G4double theZPosition = LaserPositionZ;
131 
132  // set the properties of the newly created particle
133  theParticleGun->SetParticleDefinition(theOpticalPhoton);
134  theParticleGun->SetParticleTime(0.0 * ns);
135  theParticleGun->SetParticlePosition(G4ThreeVector(theXPosition, theYPosition, theZPosition));
136  theParticleGun->SetParticleEnergy(thePhotonEnergy);
137 
138  // loop over both directions of the beam
139  for (int theDirection = 0; theDirection < 2; theDirection++)
140  {
141  // shoot in both beam directions ...
142  if (theDirection == 0) // shoot in forward direction (+z)
143  {
144  theParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.0, 0.0, 1.0));
145  // set the polarization
146  setOptPhotonPolar(90.0);
147  // generate the particle
148  theParticleGun->GeneratePrimaryVertex(myEvent);
149  }
150  else if (theDirection == 1) // shoot in backward direction (-z)
151  {
152  theParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.0, 0.0, -1.0));
153  // set the polarization
154  setOptPhotonPolar(90.0);
155  // generate the particle
156  theParticleGun->GeneratePrimaryVertex(myEvent);
157  }
158  } // end looop over both beam directions
159  } // end looop over particles in beam
160  } // end loop over beams
161 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
G4double thePhotonEnergy
G4ParticleGun * theParticleGun
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
#define M_PI
Definition: BFit3D.cc:3
void setOptPhotonPolar(G4double Angle)
set the polarisation of the photons
CLHEP::DRand48Engine * theDRand48Engine
virtual uint32_t mySeed() const =0
Exists for backward compatibility.
void LaserBeamsBarrel::setOptPhotonPolar ( G4double  Angle)

set the polarisation of the photons

Definition at line 163 of file LaserBeamsBarrel.cc.

References funct::cos(), funct::sin(), mathSSE::sqrt(), and theParticleGun.

Referenced by GeneratePrimaries(), and LaserBeamsBarrel().

164 {
165  /* *********************************************************************** */
166  /* to get optical processes working properly, you have to make sure *
167  * that the photon polarisation is defined. */
168  /* *********************************************************************** */
169 
170  // first check if we have an optical photon
171  if ( theParticleGun->GetParticleDefinition()->GetParticleName() != "opticalphoton" )
172  {
173  edm::LogWarning("SimLaserAlignment:LaserBeamsBarrel") << "<LaserBeamsBarrel::setOptPhotonPolar()>: WARNING! The ParticleGun is not an optical photon";
174  return;
175  }
176 
177 // G4cout << " AC1CMS: The ParticleGun is an " << theParticleGun->GetParticleDefinition()->GetParticleName();
178  G4ThreeVector normal(1.0, 0.0, 0.0);
179  G4ThreeVector kphoton = theParticleGun->GetParticleMomentumDirection();
180  G4ThreeVector product = normal.cross(kphoton);
181  G4double modul2 = product * product;
182 
183  G4ThreeVector e_perpendicular(0.0, 0.0, 1.0);
184 
185  if ( modul2 > 0.0 ) { e_perpendicular = (1.0 / sqrt(modul2)) * product; }
186 
187  G4ThreeVector e_parallel = e_perpendicular.cross(kphoton);
188 
189  G4ThreeVector polar = cos(Angle) * e_parallel + sin(Angle) * e_perpendicular;
190 
191 // G4cout << ", the polarization = " << polar << G4endl;
192  theParticleGun->SetParticlePolarization(polar);
193 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
G4ParticleGun * theParticleGun
T sqrt(T t)
Definition: SSEVec.h:28
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Definition: Angle.h:17

Member Data Documentation

CLHEP::DRand48Engine* LaserBeamsBarrel::theDRand48Engine
private

Definition at line 46 of file LaserBeamsBarrel.h.

Referenced by GeneratePrimaries(), LaserBeamsBarrel(), and ~LaserBeamsBarrel().

G4int LaserBeamsBarrel::thenParticle
private

Definition at line 39 of file LaserBeamsBarrel.h.

Referenced by GeneratePrimaries(), and LaserBeamsBarrel().

G4int LaserBeamsBarrel::thenParticleInGun
private

Definition at line 38 of file LaserBeamsBarrel.h.

Referenced by LaserBeamsBarrel().

G4ParticleGun* LaserBeamsBarrel::theParticleGun
private
G4double LaserBeamsBarrel::thePhotonEnergy
private

Definition at line 40 of file LaserBeamsBarrel.h.

Referenced by GeneratePrimaries(), and LaserBeamsBarrel().