Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/CaTS/src/RunAction.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/CaTS/src/RunAction.cc (Version 11.3.0) and /examples/advanced/CaTS/src/RunAction.cc (Version 11.0)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // *******************************************     26 // ********************************************************************
 27 //                                                 27 //
 28 //  CaTS (Calorimetry and Tracking Simulation)     28 //  CaTS (Calorimetry and Tracking Simulation)
 29 //                                                 29 //
 30 //  Authors : Hans Wenzel                          30 //  Authors : Hans Wenzel
 31 //            Soon Yung Jun                        31 //            Soon Yung Jun
 32 //            (Fermi National Accelerator Labo     32 //            (Fermi National Accelerator Laboratory)
 33 //                                                 33 //
 34 // History                                         34 // History
 35 //   October 18th, 2021 : first implementation     35 //   October 18th, 2021 : first implementation
 36 //                                                 36 //
 37 // *******************************************     37 // ********************************************************************
 38 //                                                 38 //
 39 /// \file RunAction.cc                             39 /// \file RunAction.cc
 40 /// \brief Implementation of the CaTS::RunActi     40 /// \brief Implementation of the CaTS::RunAction class
 41                                                    41 
 42 #include <G4UserRunAction.hh>                      42 #include <G4UserRunAction.hh>
 43 #include "G4Run.hh"                                43 #include "G4Run.hh"
 44 #ifdef WITH_G4OPTICKS                              44 #ifdef WITH_G4OPTICKS
 45 #include "G4TransportationManager.hh"              45 #include "G4TransportationManager.hh"
 46 #include ""                                        46 #include ""
 47 #endif                                             47 #endif
 48 #ifdef WITH_ROOT                                   48 #ifdef WITH_ROOT
 49 #include "G4AnalysisManager.hh"                    49 #include "G4AnalysisManager.hh"
 50 #include "RootIO.hh"                               50 #include "RootIO.hh"
 51 #endif                                             51 #endif
 52 // project headers                                 52 // project headers
 53 #include "RunAction.hh"                            53 #include "RunAction.hh"
 54 #include "ConfigurationManager.hh"                 54 #include "ConfigurationManager.hh"
 55                                                    55 
 56 RunAction::RunAction()                             56 RunAction::RunAction()
 57 : G4UserRunAction() {                              57 : G4UserRunAction() {
 58 }                                                  58 }
 59                                                    59 
 60 void RunAction::BeginOfRunAction(const G4Run*) <<  60 void RunAction::BeginOfRunAction(const G4Run* aRun) {
 61 #ifdef WITH_ROOT                                   61 #ifdef WITH_ROOT
 62     if (ConfigurationManager::getInstance()->i     62     if (ConfigurationManager::getInstance()->isdoAnalysis()) {
 63         // Create the generic analysis manager     63         // Create the generic analysis manager
 64         auto analysisManager = G4AnalysisManag     64         auto analysisManager = G4AnalysisManager::Instance();
 65         analysisManager->SetDefaultFileType("r     65         analysisManager->SetDefaultFileType("root");
 66         G4cout << "Using " << analysisManager-     66         G4cout << "Using " << analysisManager->GetType() << G4endl;
 67         analysisManager->SetVerboseLevel(1);       67         analysisManager->SetVerboseLevel(1);
 68         G4String HistoFileName =                   68         G4String HistoFileName =
 69                 ConfigurationManager::getInsta     69                 ConfigurationManager::getInstance()->getHistoFileName();
 70         G4cout << "Opening Analysis output Fil     70         G4cout << "Opening Analysis output File: " << HistoFileName << G4endl;
 71         analysisManager->SetFileName(HistoFile     71         analysisManager->SetFileName(HistoFileName);
 72         analysisManager->OpenFile();               72         analysisManager->OpenFile();
 73         //                                         73         //
 74         // Book histograms, ntuple                 74         // Book histograms, ntuple
 75         //                                         75         //
 76         // Creating 1D histograms                  76         // Creating 1D histograms
 77         analysisManager->CreateH1("ENeutron",      77         analysisManager->CreateH1("ENeutron", "Energy of created Neutrons", 200, 0,
 78                 100);                              78                 100);
 79         analysisManager->CreateH1("EProton", "     79         analysisManager->CreateH1("EProton", "Energy of created Protons", 200, 0,
 80                 100);                              80                 100);
 81     }                                              81     }
 82 #endif                                             82 #endif
 83 #ifdef WITH_G4OPTICKS                              83 #ifdef WITH_G4OPTICKS
 84     if (ConfigurationManager::getInstance()->i     84     if (ConfigurationManager::getInstance()->isEnable_opticks()) {
 85         if (!geo_initialized) {                    85         if (!geo_initialized) {
 86             G4cout << "\n\n###[ RunAction::Beg     86             G4cout << "\n\n###[ RunAction::BeginOfRunAction G4Opticks.setGeometry\n\n"
 87                     << G4endl;                     87                     << G4endl;
 88             G4VPhysicalVolume* world =             88             G4VPhysicalVolume* world =
 89                     G4TransportationManager::G     89                     G4TransportationManager::GetTransportationManager()
 90                     ->GetNavigatorForTracking(     90                     ->GetNavigatorForTracking()
 91                     ->GetWorldVolume();            91                     ->GetWorldVolume();
 92             assert(world);                         92             assert(world);
 93             bool standardize_geant4_materials      93             bool standardize_geant4_materials = false; // required for alignment
 94             G4Opticks* g4ok = G4Opticks::Get()     94             G4Opticks* g4ok = G4Opticks::Get();
 95             g4ok->setGeometry(world, standardi     95             g4ok->setGeometry(world, standardize_geant4_materials);
 96             const std::vector<G4PVPlacement*>&     96             const std::vector<G4PVPlacement*>& sensor_placements =
 97                     g4ok->getSensorPlacements(     97                     g4ok->getSensorPlacements();
 98             G4cout << "sensor_placements.size(     98             G4cout << "sensor_placements.size():  " << sensor_placements.size()
 99                     << G4endl;                     99                     << G4endl;
100             for (unsigned i = 0; i < sensor_pl    100             for (unsigned i = 0; i < sensor_placements.size(); i++) {
101                 float efficiency_1 = 0.5f;        101                 float efficiency_1 = 0.5f;
102                 float efficiency_2 = 1.0f;        102                 float efficiency_2 = 1.0f;
103                 int sensor_cat = -1; // -1:mea    103                 int sensor_cat = -1; // -1:means no angular info
104                 int sensor_identifier =           104                 int sensor_identifier =
105                         0xc0ffee + i; // mocku    105                         0xc0ffee + i; // mockup a detector specific identifier
106                 unsigned sensorIndex = 1 + i;     106                 unsigned sensorIndex = 1 + i; // 1-based
107                 g4ok->setSensorData(sensorInde    107                 g4ok->setSensorData(sensorIndex, efficiency_1, efficiency_2, sensor_cat,
108                         sensor_identifier);       108                         sensor_identifier);
109             }                                     109             }
110             G4cout << "\n\n###] RunAction::Beg    110             G4cout << "\n\n###] RunAction::BeginOfRunAction G4Opticks.setGeometry\n\n"
111                     << G4endl;                    111                     << G4endl;
112             geo_initialized = true;               112             geo_initialized = true;
113         }                                         113         }
114     }                                             114     }
115 #endif                                            115 #endif
116 }                                                 116 }
117                                                   117 
118 void RunAction::EndOfRunAction(const G4Run*) {    118 void RunAction::EndOfRunAction(const G4Run*) {
119 #ifdef WITH_G4OPTICKS                             119 #ifdef WITH_G4OPTICKS
120     if (ConfigurationManager::getInstance()->i    120     if (ConfigurationManager::getInstance()->isEnable_opticks()) {
121         if (ConfigurationManager::getInstance(    121         if (ConfigurationManager::getInstance()->isEnable_verbose()) {
122             G4cout << "\n\n###[ RunAction::End    122             G4cout << "\n\n###[ RunAction::EndOfRunAction G4Opticks.Finalize\n\n"
123                     << G4endl;                    123                     << G4endl;
124         }                                         124         }
125         G4Opticks::Finalize();                    125         G4Opticks::Finalize();
126         if (ConfigurationManager::getInstance(    126         if (ConfigurationManager::getInstance()->isEnable_verbose()) {
127             G4cout << "\n\n###] RunAction::End    127             G4cout << "\n\n###] RunAction::EndOfRunAction G4Opticks.Finalize\n\n"
128                     << G4endl;                    128                     << G4endl;
129         }                                         129         }
130     }                                             130     }
131 #endif                                            131 #endif
132 #ifdef WITH_ROOT                                  132 #ifdef WITH_ROOT
133     if (ConfigurationManager::getInstance()->i    133     if (ConfigurationManager::getInstance()->isEnable_verbose()) {
134         G4cout << "##############RunAction::En    134         G4cout << "##############RunAction::EndOfRunAction" << G4endl;
135     }                                             135     }
136     if (ConfigurationManager::getInstance()->i    136     if (ConfigurationManager::getInstance()->isWriteHits()) {
137         if (G4Threading::IsMultithreadedApplic    137         if (G4Threading::IsMultithreadedApplication()) {
138             RootIO::GetInstance()->Merge();       138             RootIO::GetInstance()->Merge();
139         } else {                                  139         } else {
140             RootIO::GetInstance()->Close();       140             RootIO::GetInstance()->Close();
141         }                                         141         }
142     }                                             142     }
143     if (ConfigurationManager::getInstance()->i    143     if (ConfigurationManager::getInstance()->isdoAnalysis()) {
144         auto analysisManager = G4AnalysisManag    144         auto analysisManager = G4AnalysisManager::Instance();
145         analysisManager->Write();                 145         analysisManager->Write();
146         analysisManager->CloseFile();             146         analysisManager->CloseFile();
147     }                                             147     }
148 #endif                                            148 #endif
149 }                                                 149 }
150                                                   150