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:
2009/05/26 07:12:23
Revision:
1.4
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.

20  :
21  theParticleGun(0),
23 {
24  G4int nPhotonsGun = 1;
25  G4int nPhotonsBeam = 1;
26  G4double Energy = 1.15 * eV;
27  // call constructor with options
28  LaserBeamsBarrel(nPhotonsGun, nPhotonsBeam, Energy);
29 }
LaserBeamsBarrel()
default constructor
G4ParticleGun * theParticleGun
CLHEP::DRand48Engine * theDRand48Engine
LaserBeamsBarrel::LaserBeamsBarrel ( G4int  nPhotonsInGun,
G4int  nPhotonsInBeam,
G4double  PhotonEnergy 
)

constructor

Definition at line 31 of file LaserBeamsBarrel.cc.

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

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

destructor

Definition at line 71 of file LaserBeamsBarrel.cc.

References theDRand48Engine, and theParticleGun.

72 {
73  if ( theParticleGun != 0 ) { delete theParticleGun; }
74  if ( theDRand48Engine != 0 ) { delete theDRand48Engine; }
75 }
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 77 of file LaserBeamsBarrel.cc.

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

Referenced by LaserPrimaryGeneratorAction::GeneratePrimaries().

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

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

Referenced by GeneratePrimaries(), and LaserBeamsBarrel().

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