VMC Examples Version 6.6
Loading...
Searching...
No Matches
Ex03MCApplication Class Reference

Implementation of the TVirtualMCApplication. More...

#include <Ex03MCApplication.h>

Inheritance diagram for Ex03MCApplication:

Public Member Functions

 Ex03MCApplication (const char *name, const char *title)
 
 Ex03MCApplication ()
 
virtual ~Ex03MCApplication ()
 
void InitMC (const char *setup)
 
void RunMC (Int_t nofEvents)
 
void FinishRun ()
 
void ReadEvent (Int_t i)
 
virtual TVirtualMCApplicationCloneForWorker () const
 
virtual void InitOnWorker ()
 
virtual void FinishRunOnWorker ()
 
virtual void ConstructGeometry ()
 
virtual void InitGeometry ()
 
virtual void AddParticles ()
 
virtual void AddIons ()
 
virtual void GeneratePrimaries ()
 
virtual void BeginEvent ()
 
virtual void BeginPrimary ()
 
virtual void PreTrack ()
 
virtual void Stepping ()
 
virtual void PostTrack ()
 
virtual void FinishPrimary ()
 
virtual void FinishEvent ()
 
void SetPrintModulo (Int_t value)
 
void SetVerboseLevel (Int_t verboseLevel)
 
void SetControls (Bool_t isConstrols)
 
void SetField (Double_t bz)
 
Ex03DetectorConstructionGetDetectorConstruction () const
 
Ex03CalorimeterSDGetCalorimeterSD () const
 
Ex03PrimaryGeneratorGetPrimaryGenerator () const
 
void SetOldGeometry (Bool_t oldGeometry=kTRUE)
 

Private Member Functions

 Ex03MCApplication (const Ex03MCApplication &origin)
 
void RegisterStack () const
 

Private Attributes

TMCRootManager * fRootManager
 Root manager.
 
Int_t fPrintModulo
 The event modulus number to be printed.
 
Int_t fEventNo
 Event counter.
 
TMCVerbose fVerbose
 VMC verbose helper.
 
Ex03MCStackfStack
 VMC stack.
 
Ex03DetectorConstructionfDetConstruction
 Dector construction.
 
Ex03CalorimeterSDfCalorimeterSD
 Calorimeter SD.
 
Ex03PrimaryGeneratorfPrimaryGenerator
 Primary generator.
 
TGeoUniformMagField * fMagField
 Magnetic field.
 
Bool_t fOldGeometry
 Option for geometry definition.
 
Bool_t fIsControls
 Option to activate special controls.
 
Bool_t fIsMaster
 If is on master thread.
 

Detailed Description

Implementation of the TVirtualMCApplication.

Date
06/03/2003
Author
I. Hrivnacova; IPN, Orsay

Definition at line 39 of file Ex03MCApplication.h.

Constructor & Destructor Documentation

◆ Ex03MCApplication() [1/3]

Ex03MCApplication::Ex03MCApplication ( const char * name,
const char * title )

Standard constructor

Parameters
nameThe MC application name
titleThe MC application description

Definition at line 44 of file Ex03MCApplication.cxx.

45 : TVirtualMCApplication(name, title),
46 fRootManager(0),
47 fPrintModulo(1),
48 fEventNo(0),
49 fVerbose(0),
50 fStack(0),
54 fMagField(0),
55 fOldGeometry(kFALSE),
56 fIsControls(kFALSE),
57 fIsMaster(kTRUE)
58{
59 /// Standard constructor
60 /// \param name The MC application name
61 /// \param title The MC application description
62
63 cout << "--------------------------------------------------------------"
64 << endl;
65 cout << " VMC Example E03" << endl;
66 cout << "--------------------------------------------------------------"
67 << endl;
68
69 // Create a user stack
70 fStack = new Ex03MCStack(1000);
71
72 // Create detector construction
74
75 // Create a calorimeter SD
77
78 // Create a primary generator
80
81 // Constant magnetic field (in kiloGauss)
82 fMagField = new TGeoUniformMagField();
83}
The calorimeter sensitive detector.
The detector construction (via TGeo )
Int_t fPrintModulo
The event modulus number to be printed.
TGeoUniformMagField * fMagField
Magnetic field.
Bool_t fIsControls
Option to activate special controls.
TMCVerbose fVerbose
VMC verbose helper.
Bool_t fIsMaster
If is on master thread.
Ex03PrimaryGenerator * fPrimaryGenerator
Primary generator.
Ex03MCStack * fStack
VMC stack.
Ex03CalorimeterSD * fCalorimeterSD
Calorimeter SD.
Ex03DetectorConstruction * fDetConstruction
Dector construction.
Bool_t fOldGeometry
Option for geometry definition.
Int_t fEventNo
Event counter.
TMCRootManager * fRootManager
Root manager.
Implementation of the TVirtualMCStack interface.
Definition Ex03MCStack.h:36
The primary generator.

◆ Ex03MCApplication() [2/3]

Ex03MCApplication::Ex03MCApplication ( )

Default constructor

Definition at line 120 of file Ex03MCApplication.cxx.

122 fRootManager(0),
123 fPrintModulo(1),
124 fEventNo(0),
125 fStack(0),
129 fMagField(0),
130 fOldGeometry(kFALSE),
131 fIsControls(kFALSE),
132 fIsMaster(kTRUE)
133{
134 /// Default constructor
135}

◆ ~Ex03MCApplication()

Ex03MCApplication::~Ex03MCApplication ( )
virtual

Destructor

Definition at line 138 of file Ex03MCApplication.cxx.

139{
140 /// Destructor
141
142 // cout << "Ex03MCApplication::~Ex03MCApplication " << this << endl;
143
144 delete fRootManager;
145 delete fStack;
146 if (fIsMaster) delete fDetConstruction;
147 delete fCalorimeterSD;
148 delete fPrimaryGenerator;
149 delete fMagField;
150 delete gMC;
151
152 // cout << "Done Ex03MCApplication::~Ex03MCApplication " << this << endl;
153}

◆ Ex03MCApplication() [3/3]

Ex03MCApplication::Ex03MCApplication ( const Ex03MCApplication & origin)
private

Copy constructor for cloning application on workers (in multithreading mode)

Parameters
originThe source MC application

Definition at line 86 of file Ex03MCApplication.cxx.

87 : TVirtualMCApplication(origin.GetName(), origin.GetTitle()),
88 fRootManager(0),
90 fEventNo(0),
91 fVerbose(origin.fVerbose),
92 fStack(0),
96 fMagField(0),
98 fIsMaster(kFALSE)
99{
100 /// Copy constructor for cloning application on workers (in multithreading
101 /// mode) \param origin The source MC application
102
103 // Create new user stack
104 fStack = new Ex03MCStack(1000);
105
106 // Create a calorimeter SD
109
110 // Create a primary generator
113
114 // Constant magnetic field (in kiloGauss)
115 fMagField = new TGeoUniformMagField(origin.fMagField->GetFieldValue()[0],
116 origin.fMagField->GetFieldValue()[1], origin.fMagField->GetFieldValue()[2]);
117}

Member Function Documentation

◆ InitMC()

void Ex03MCApplication::InitMC ( const char * setup)

Initialize MC. The selection of the concrete MC is done in the macro.

Parameters
setupThe name of the configuration macro

Definition at line 175 of file Ex03MCApplication.cxx.

176{
177 /// Initialize MC.
178 /// The selection of the concrete MC is done in the macro.
179 /// \param setup The name of the configuration macro
180
181 fVerbose.InitMC();
182
183 if (TString(setup) != "") {
184 gROOT->LoadMacro(setup);
185 gInterpreter->ProcessLine("Config()");
186 if (!gMC) {
187 Fatal(
188 "InitMC", "Processing Config() has failed. (No MC is instantiated.)");
189 }
190 }
191
192// MT support available from root v 5.34/18
193#if ROOT_VERSION_CODE >= 336402
194 // Create Root manager
195 if (!gMC->IsMT()) {
196 fRootManager = new TMCRootManager(GetName(), TMCRootManager::kWrite);
197 // fRootManager->SetDebug(true);
198 }
199#else
200 // Create Root manager
201 fRootManager = new TMCRootManager(GetName(), TMCRootManager::kWrite);
202 // fRootManager->SetDebug(true);
203#endif
204
205 gMC->SetStack(fStack);
206 gMC->SetMagField(fMagField);
207 gMC->Init();
208 gMC->BuildPhysics();
209
211}

◆ RunMC()

void Ex03MCApplication::RunMC ( Int_t nofEvents)

Run MC.

Parameters
nofEventsNumber of events to be processed

Definition at line 214 of file Ex03MCApplication.cxx.

215{
216 /// Run MC.
217 /// \param nofEvents Number of events to be processed
218
219 fVerbose.RunMC(nofEvents);
220
221 gMC->ProcessRun(nofEvents);
222 FinishRun();
223}

◆ FinishRun()

void Ex03MCApplication::FinishRun ( )

Finish MC run.

Definition at line 226 of file Ex03MCApplication.cxx.

227{
228 /// Finish MC run.
229
230 fVerbose.FinishRun();
231 // cout << "Ex03MCApplication::FinishRun: " << endl;
232 if (fRootManager) {
233 fRootManager->WriteAll();
234 fRootManager->Close();
235 }
236}

◆ ReadEvent()

void Ex03MCApplication::ReadEvent ( Int_t i)

Read i -th event and prints hits.

Parameters
iThe number of event to be read

Definition at line 271 of file Ex03MCApplication.cxx.

272{
273 /// Read \em i -th event and prints hits.
274 /// \param i The number of event to be read
275
278 fRootManager->ReadEvent(i);
279}

◆ CloneForWorker()

TVirtualMCApplication * Ex03MCApplication::CloneForWorker ( ) const
virtual

Definition at line 239 of file Ex03MCApplication.cxx.

240{
241 return new Ex03MCApplication(*this);
242}

◆ InitOnWorker()

void Ex03MCApplication::InitOnWorker ( )
virtual

Definition at line 245 of file Ex03MCApplication.cxx.

246{
247 // cout << "Ex03MCApplication::InitForWorker " << this << endl;
248
249 // Create Root manager
250 fRootManager = new TMCRootManager(GetName(), TMCRootManager::kWrite);
251 // fRootManager->SetDebug(true);
252
253 // Set data to MC
254 gMC->SetStack(fStack);
255 gMC->SetMagField(fMagField);
256
258}

◆ FinishRunOnWorker()

void Ex03MCApplication::FinishRunOnWorker ( )
virtual

Definition at line 261 of file Ex03MCApplication.cxx.

262{
263 // cout << "Ex03MCApplication::FinishWorkerRun: " << endl;
264 if (fRootManager) {
265 fRootManager->WriteAll();
266 fRootManager->Close();
267 }
268}

◆ ConstructGeometry()

void Ex03MCApplication::ConstructGeometry ( )
virtual

Construct geometry using detector contruction class. The detector contruction class is using TGeo functions or TVirtualMC functions (if oldGeometry is selected)

Definition at line 282 of file Ex03MCApplication.cxx.

283{
284 /// Construct geometry using detector contruction class.
285 /// The detector contruction class is using TGeo functions or
286 /// TVirtualMC functions (if oldGeometry is selected)
287
288 fVerbose.ConstructGeometry();
289
290 if (!fOldGeometry) {
293 // TGeoManager::Import("geometry.root");
294 // gMC->SetRootGeometry();
295 }
296 else {
297 Ex03DetectorConstructionOld detConstructionOld;
298 detConstructionOld.ConstructMaterials();
299 detConstructionOld.ConstructGeometry();
300 }
301}
The old detector construction (via VMC functions)

◆ InitGeometry()

void Ex03MCApplication::InitGeometry ( )
virtual

Initialize geometry

Definition at line 304 of file Ex03MCApplication.cxx.

305{
306 /// Initialize geometry
307
308 fVerbose.InitGeometry();
309
311
313
315}

◆ AddParticles()

void Ex03MCApplication::AddParticles ( )
virtual

Example of user defined particle with user defined decay mode

Definition at line 318 of file Ex03MCApplication.cxx.

319{
320 /// Example of user defined particle with user defined decay mode
321
322 fVerbose.AddParticles();
323
324 // Define particle
325 gMC->DefineParticle(1000020050, "He5", kPTHadron, 5.03427, 2.0, 0.002, "Ion",
326 0.0, 0, 1, 0, 0, 0, 0, 0, 5, kFALSE);
327
328 // Define the 2 body phase space decay for He5
329 Int_t mode[6][3];
330 Float_t bratio[6];
331
332 for (Int_t kz = 0; kz < 6; kz++) {
333 bratio[kz] = 0.;
334 mode[kz][0] = 0;
335 mode[kz][1] = 0;
336 mode[kz][2] = 0;
337 }
338 bratio[0] = 100.;
339 mode[0][0] = kNeutron; // neutron (2112)
340 mode[0][1] = 1000020040; // alpha
341
342 gMC->SetDecayMode(1000020050, bratio, mode);
343
344 // Overwrite a decay mode already defined in MCs
345 // Kaon Short: 310 normally decays in two modes
346 // pi+, pi- 68.61 %
347 // pi0, pi0 31.39 %
348 // and we force only the mode pi0, pi0
349
350 Int_t mode2[6][3];
351 Float_t bratio2[6];
352
353 for (Int_t kz = 0; kz < 6; kz++) {
354 bratio2[kz] = 0.;
355 mode2[kz][0] = 0;
356 mode2[kz][1] = 0;
357 mode2[kz][2] = 0;
358 }
359 bratio2[0] = 100.;
360 mode2[0][0] = kPi0; // pi0 (111)
361 mode2[0][1] = kPi0; // pi0 (111)
362
363 gMC->SetDecayMode(kK0Short, bratio2, mode2);
364}

◆ AddIons()

void Ex03MCApplication::AddIons ( )
virtual

Example of user defined ion

Definition at line 367 of file Ex03MCApplication.cxx.

368{
369 /// Example of user defined ion
370
371 fVerbose.AddIons();
372
373 gMC->DefineIon("MyIon", 34, 70, 12, 0.);
374}

◆ GeneratePrimaries()

void Ex03MCApplication::GeneratePrimaries ( )
virtual

Fill the user stack (derived from TVirtualMCStack) with primary particles.

Definition at line 377 of file Ex03MCApplication.cxx.

378{
379 /// Fill the user stack (derived from TVirtualMCStack) with primary particles.
380
381 fVerbose.GeneratePrimaries();
382
383 TVector3 origin(fDetConstruction->GetWorldSizeX(),
385
387}
virtual void GeneratePrimaries(const TVector3 &worldSize)

◆ BeginEvent()

void Ex03MCApplication::BeginEvent ( )
virtual

User actions at beginning of event

Definition at line 390 of file Ex03MCApplication.cxx.

391{
392 /// User actions at beginning of event
393
394 fVerbose.BeginEvent();
395
396 // Clear TGeo tracks (if filled)
397 if (TString(gMC->GetName()) == "TGeant3TGeo" &&
398 gGeoManager->GetListOfTracks() && gGeoManager->GetTrack(0) &&
399 ((TVirtualGeoTrack*)gGeoManager->GetTrack(0))->HasPoints()) {
400
401 gGeoManager->ClearTracks();
402 // if (gPad) gPad->Clear();
403 }
404
405 fEventNo++;
406 if (fEventNo % fPrintModulo == 0) {
407 cout << "\n---> Begin of event: " << fEventNo << endl;
408 // ??? How to do this in VMC
409 // HepRandom::showEngineStatus();
410 }
411}

◆ BeginPrimary()

void Ex03MCApplication::BeginPrimary ( )
virtual

User actions at beginning of a primary track. If test for user defined decay is activated, the primary track ID is printed on the screen.

Definition at line 414 of file Ex03MCApplication.cxx.

415{
416 /// User actions at beginning of a primary track.
417 /// If test for user defined decay is activated,
418 /// the primary track ID is printed on the screen.
419
420 fVerbose.BeginPrimary();
421
423 cout << " Primary track ID = " << fStack->GetCurrentTrackNumber() << endl;
424 }
425}
virtual Int_t GetCurrentTrackNumber() const
Bool_t GetUserDecay() const
Return true if particle with user decay is activated.

◆ PreTrack()

void Ex03MCApplication::PreTrack ( )
virtual

User actions at beginning of each track If test for user defined decay is activated, the decay products of the primary track (K0Short) are printed on the screen.

Definition at line 428 of file Ex03MCApplication.cxx.

429{
430 /// User actions at beginning of each track
431 /// If test for user defined decay is activated,
432 /// the decay products of the primary track (K0Short)
433 /// are printed on the screen.
434
435 fVerbose.PreTrack();
436
437 // print info about K0Short decay products
439 Int_t parentID = fStack->GetCurrentParentTrackNumber();
440
441 if (parentID >= 0 &&
442 fStack->GetParticle(parentID)->GetPdgCode() == kK0Short &&
443 fStack->GetCurrentTrack()->GetUniqueID() == kPDecay) {
444 // The production process is saved as TParticle unique ID
445 // via Ex03MCStack
446
447 cout << " Current track " << fStack->GetCurrentTrack()->GetName()
448 << " is a decay product of Parent ID = "
450 }
451 }
452}
virtual TParticle * GetCurrentTrack() const
virtual Int_t GetCurrentParentTrackNumber() const
TParticle * GetParticle(Int_t id) const

◆ Stepping()

void Ex03MCApplication::Stepping ( )
virtual

User actions at each step

Definition at line 455 of file Ex03MCApplication.cxx.

456{
457 /// User actions at each step
458
459 // Work around for Fluka VMC, which does not call
460 // MCApplication::PreTrack()
461 //
462
463 static Int_t trackId = 0;
464 if (TString(gMC->GetName()) == "TFluka" &&
465 gMC->GetStack()->GetCurrentTrackNumber() != trackId) {
466 fVerbose.PreTrack();
467 trackId = gMC->GetStack()->GetCurrentTrackNumber();
468 }
469
470 fVerbose.Stepping();
471
473}

◆ PostTrack()

void Ex03MCApplication::PostTrack ( )
virtual

User actions after finishing of each track

Definition at line 476 of file Ex03MCApplication.cxx.

477{
478 /// User actions after finishing of each track
479
480 fVerbose.PostTrack();
481}

◆ FinishPrimary()

void Ex03MCApplication::FinishPrimary ( )
virtual

User actions after finishing of a primary track

Definition at line 484 of file Ex03MCApplication.cxx.

485{
486 /// User actions after finishing of a primary track
487
488 fVerbose.FinishPrimary();
489
491 cout << endl;
492 }
493}

◆ FinishEvent()

void Ex03MCApplication::FinishEvent ( )
virtual

User actions after finishing of an event

Definition at line 496 of file Ex03MCApplication.cxx.

497{
498 /// User actions after finishing of an event
499
500 fVerbose.FinishEvent();
501
502 // Geant3 + TGeo
503 // (use TGeo functions for visualization)
504 if (TString(gMC->GetName()) == "TGeant3TGeo") {
505
506 // Draw volume
507 gGeoManager->SetVisOption(0);
508 gGeoManager->SetTopVisible();
509 gGeoManager->GetTopVolume()->Draw();
510
511 // Draw tracks (if filled)
512 // Available when this feature is activated via
513 // gMC->SetCollectTracks(kTRUE);
514 if (gGeoManager->GetListOfTracks() && gGeoManager->GetTrack(0) &&
515 ((TVirtualGeoTrack*)gGeoManager->GetTrack(0))->HasPoints()) {
516
517 gGeoManager->DrawTracks("/*"); // this means all tracks
518 }
519 }
520
521 fRootManager->Fill();
522
524
526
527 fStack->Reset();
528}

◆ SetPrintModulo()

void Ex03MCApplication::SetPrintModulo ( Int_t value)
inline

Set the event modulus number to be printed

Parameters
valueThe new event modulus number value

Definition at line 109 of file Ex03MCApplication.h.

110{
111 fPrintModulo = value;
112}

◆ SetVerboseLevel()

void Ex03MCApplication::SetVerboseLevel ( Int_t verboseLevel)
inline

Set verbosity

Parameters
verboseLevelThe new verbose level value

Definition at line 116 of file Ex03MCApplication.h.

117{
118 fVerbose.SetLevel(verboseLevel);
119}

◆ SetControls()

void Ex03MCApplication::SetControls ( Bool_t isControls)
inline

Switch on/off special process controls

Parameters
isControlsIf true, special process controls setting is activated

Definition at line 156 of file Ex03MCApplication.h.

157{
158 fIsControls = isControls;
159}

◆ SetField()

void Ex03MCApplication::SetField ( Double_t bz)
inline

Definition at line 123 of file Ex03MCApplication.h.

124{
125 fMagField->SetFieldValue(0., 0., bz);
126}

◆ GetDetectorConstruction()

Ex03DetectorConstruction * Ex03MCApplication::GetDetectorConstruction ( ) const
inline
Returns
The detector construction

Definition at line 130 of file Ex03MCApplication.h.

131{
132 return fDetConstruction;
133}

◆ GetCalorimeterSD()

Ex03CalorimeterSD * Ex03MCApplication::GetCalorimeterSD ( ) const
inline
Returns
The calorimeter sensitive detector

Definition at line 136 of file Ex03MCApplication.h.

137{
138 return fCalorimeterSD;
139}

◆ GetPrimaryGenerator()

Ex03PrimaryGenerator * Ex03MCApplication::GetPrimaryGenerator ( ) const
inline
Returns
The primary generator

Definition at line 142 of file Ex03MCApplication.h.

143{
144 return fPrimaryGenerator;
145}

◆ SetOldGeometry()

void Ex03MCApplication::SetOldGeometry ( Bool_t oldGeometry = kTRUE)
inline

Switch on/off the old geometry definition (via VMC functions)

Parameters
oldGeometryIf true, geometry definition via VMC functions

Definition at line 149 of file Ex03MCApplication.h.

150{
151 fOldGeometry = oldGeometry;
152}

◆ RegisterStack()

void Ex03MCApplication::RegisterStack ( ) const
private

Register stack in the Root manager.

Definition at line 160 of file Ex03MCApplication.cxx.

161{
162 /// Register stack in the Root manager.
163
164 if (fRootManager) {
165 // cout << "Ex03MCApplication::RegisterStack: " << endl;
166 fRootManager->Register("stack", "Ex03MCStack", &fStack);
167 }
168}

Member Data Documentation

◆ fRootManager

TMCRootManager* Ex03MCApplication::fRootManager
mutableprivate

Root manager.

Definition at line 89 of file Ex03MCApplication.h.

◆ fPrintModulo

Int_t Ex03MCApplication::fPrintModulo
private

The event modulus number to be printed.

Definition at line 90 of file Ex03MCApplication.h.

◆ fEventNo

Int_t Ex03MCApplication::fEventNo
private

Event counter.

Definition at line 91 of file Ex03MCApplication.h.

◆ fVerbose

TMCVerbose Ex03MCApplication::fVerbose
private

VMC verbose helper.

Definition at line 92 of file Ex03MCApplication.h.

◆ fStack

Ex03MCStack* Ex03MCApplication::fStack
private

VMC stack.

Definition at line 93 of file Ex03MCApplication.h.

◆ fDetConstruction

Ex03DetectorConstruction* Ex03MCApplication::fDetConstruction
private

Dector construction.

Definition at line 94 of file Ex03MCApplication.h.

◆ fCalorimeterSD

Ex03CalorimeterSD* Ex03MCApplication::fCalorimeterSD
private

Calorimeter SD.

Definition at line 95 of file Ex03MCApplication.h.

◆ fPrimaryGenerator

Ex03PrimaryGenerator* Ex03MCApplication::fPrimaryGenerator
private

Primary generator.

Definition at line 96 of file Ex03MCApplication.h.

◆ fMagField

TGeoUniformMagField* Ex03MCApplication::fMagField
private

Magnetic field.

Definition at line 97 of file Ex03MCApplication.h.

◆ fOldGeometry

Bool_t Ex03MCApplication::fOldGeometry
private

Option for geometry definition.

Definition at line 98 of file Ex03MCApplication.h.

◆ fIsControls

Bool_t Ex03MCApplication::fIsControls
private

Option to activate special controls.

Definition at line 99 of file Ex03MCApplication.h.

◆ fIsMaster

Bool_t Ex03MCApplication::fIsMaster
private

If is on master thread.

Definition at line 100 of file Ex03MCApplication.h.


The documentation for this class was generated from the following files: