Geant4 Cross Reference |
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 /// \file SAXSRunAction.cc 26 /// \file SAXSRunAction.cc 27 /// \brief Implementation of the SAXSRunAction 27 /// \brief Implementation of the SAXSRunAction class 28 // 28 // 29 //....oooOO0OOooo........oooOO0OOooo........oo 29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 30 30 31 #include "SAXSRunAction.hh" << 31 #include "G4Run.hh" >> 32 #include "G4RunManager.hh" >> 33 #include "G4UnitsTable.hh" >> 34 #include "G4SystemOfUnits.hh" 32 35 33 #include "SAXSDetectorConstruction.hh" << 36 #include "SAXSRunAction.hh" 34 #include "SAXSRunActionMessenger.hh" 37 #include "SAXSRunActionMessenger.hh" >> 38 #include "SAXSDetectorConstruction.hh" >> 39 #include "SAXSAnalysis.hh" 35 40 36 #include "G4AnalysisManager.hh" << 37 #include "G4Run.hh" << 38 #include "G4RunManager.hh" << 39 #include "G4SDManager.hh" 41 #include "G4SDManager.hh" 40 #include "G4SystemOfUnits.hh" << 41 #include "G4UnitsTable.hh" << 42 42 43 //....oooOO0OOooo........oooOO0OOooo........oo 43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 44 44 45 SAXSRunAction::SAXSRunAction() : G4UserRunActi << 45 SAXSRunAction::SAXSRunAction(): >> 46 G4UserRunAction(), >> 47 fIsFileOpened(false) 46 { 48 { 47 // define the messenger << 49 //set the number of events to print progress during the simulation >> 50 G4RunManager::GetRunManager()->SetPrintProgress(10000); >> 51 >> 52 //define the messenger 48 fMessenger = new SAXSRunActionMessenger(this 53 fMessenger = new SAXSRunActionMessenger(this); 49 << 54 50 // default output filename (can be set throu << 55 //default output filename (can be set through macro) 51 fFileName = "output"; 56 fFileName = "output"; 52 << 57 53 // Create the analysis manager << 58 //Create the analysis manager 54 fAnalysisManager = G4AnalysisManager::Instan << 59 G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); 55 << 60 analysisManager->SetFileName(fFileName); 56 fAnalysisManager->SetDefaultFileType("root") << 61 analysisManager->SetNtupleMerging(true); //only for root 57 fAnalysisManager->SetFileName(fFileName); << 62 analysisManager->SetVerboseLevel(1); 58 fAnalysisManager->SetNtupleMerging(true); / << 63 59 fAnalysisManager->SetVerboseLevel(1); << 64 //Creating the SD scoring ntuple 60 << 65 analysisManager->CreateNtuple("part","Particle"); 61 // Creating the SD scoring ntuple << 66 analysisManager->CreateNtupleDColumn("e"); 62 fAnalysisManager->CreateNtuple("part", "Part << 67 analysisManager->CreateNtupleDColumn("posx"); 63 fAnalysisManager->CreateNtupleDColumn("e"); << 68 analysisManager->CreateNtupleDColumn("posy"); 64 fAnalysisManager->CreateNtupleDColumn("posx" << 69 analysisManager->CreateNtupleDColumn("posz"); 65 fAnalysisManager->CreateNtupleDColumn("posy" << 70 analysisManager->CreateNtupleDColumn("momx"); 66 fAnalysisManager->CreateNtupleDColumn("posz" << 71 analysisManager->CreateNtupleDColumn("momy"); 67 fAnalysisManager->CreateNtupleDColumn("momx" << 72 analysisManager->CreateNtupleDColumn("momz"); 68 fAnalysisManager->CreateNtupleDColumn("momy" << 73 analysisManager->CreateNtupleDColumn("t"); 69 fAnalysisManager->CreateNtupleDColumn("momz" << 74 analysisManager->CreateNtupleIColumn("type"); 70 fAnalysisManager->CreateNtupleDColumn("t"); << 75 analysisManager->CreateNtupleIColumn("trackID"); 71 fAnalysisManager->CreateNtupleIColumn("type" << 76 analysisManager->CreateNtupleIColumn("NRi"); 72 fAnalysisManager->CreateNtupleIColumn("track << 77 analysisManager->CreateNtupleIColumn("NCi"); 73 fAnalysisManager->CreateNtupleIColumn("NRi") << 78 analysisManager->CreateNtupleIColumn("NDi"); 74 fAnalysisManager->CreateNtupleIColumn("NCi") << 79 analysisManager->CreateNtupleIColumn("eventID"); 75 fAnalysisManager->CreateNtupleIColumn("NDi") << 80 analysisManager->CreateNtupleDColumn("weight"); 76 fAnalysisManager->CreateNtupleIColumn("event << 81 analysisManager->FinishNtuple(); 77 fAnalysisManager->CreateNtupleDColumn("weigh << 82 78 fAnalysisManager->FinishNtuple(); << 83 //Creating ntuple for scattering 79 << 84 analysisManager->CreateNtuple("scatt","Scattering"); 80 // Creating ntuple for scattering << 85 analysisManager->CreateNtupleIColumn("processID"); 81 fAnalysisManager->CreateNtuple("scatt", "Sca << 86 analysisManager->CreateNtupleDColumn("e"); 82 fAnalysisManager->CreateNtupleIColumn("proce << 87 analysisManager->CreateNtupleDColumn("theta"); 83 fAnalysisManager->CreateNtupleDColumn("e"); << 88 analysisManager->CreateNtupleDColumn("weight"); 84 fAnalysisManager->CreateNtupleDColumn("theta << 89 analysisManager->FinishNtuple(); 85 fAnalysisManager->CreateNtupleDColumn("weigh << 86 fAnalysisManager->FinishNtuple(); << 87 } 90 } 88 91 89 //....oooOO0OOooo........oooOO0OOooo........oo 92 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 90 93 91 SAXSRunAction::~SAXSRunAction() << 94 SAXSRunAction::~SAXSRunAction() { 92 { << 95 //write results 93 delete fMessenger; << 96 if (fIsFileOpened) >> 97 { >> 98 G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); >> 99 analysisManager->Write(); >> 100 } 94 } 101 } 95 102 96 //....oooOO0OOooo........oooOO0OOooo........oo 103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 97 104 98 void SAXSRunAction::BeginOfRunAction(const G4R 105 void SAXSRunAction::BeginOfRunAction(const G4Run*) 99 { 106 { 100 // open the output file << 107 //open the output file 101 if (!fIsFileOpened) { << 108 if (!fIsFileOpened) 102 fAnalysisManager->OpenFile(fFileName); << 109 { 103 fIsFileOpened = true; << 110 G4AnalysisManager::Instance()->OpenFile(fFileName); 104 } << 111 fIsFileOpened = true; >> 112 } 105 } 113 } 106 114 107 //....oooOO0OOooo........oooOO0OOooo........oo 115 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 108 116 109 void SAXSRunAction::EndOfRunAction(const G4Run 117 void SAXSRunAction::EndOfRunAction(const G4Run* run) 110 { << 118 { 111 G4int nofEvents = run->GetNumberOfEvent(); 119 G4int nofEvents = run->GetNumberOfEvent(); 112 if (nofEvents == 0) return; 120 if (nofEvents == 0) return; 113 << 121 114 // print << 122 //print 115 if (IsMaster()) { 123 if (IsMaster()) { 116 G4cout << G4endl << "--------------------E << 124 G4cout 117 << " The run had " << nofEvents << << 125 << G4endl 118 } << 126 << "--------------------End of Global Run-----------------------" 119 else { << 127 << G4endl 120 G4cout << G4endl << "--------------------E << 128 << " The run had " << nofEvents << " events"; 121 << " The run had " << nofEvents << << 129 } else { 122 } << 130 G4cout 123 if (fIsFileOpened) { << 131 << G4endl 124 fAnalysisManager->Write(); << 132 << "--------------------End of Local Run------------------------" 125 fAnalysisManager->CloseFile(); << 133 << G4endl 126 } << 134 << " The run had " << nofEvents << " events"; >> 135 } >> 136 127 } 137 } 128 138 129 //....oooOO0OOooo........oooOO0OOooo........oo 139 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 130 140 131 void SAXSRunAction::SetFileName(const G4String << 141 void SAXSRunAction::SetFileName(G4String filename) 132 { 142 { 133 // method to set the output filename << 143 //method to set the output filename 134 if (filename != "") fFileName = filename; 144 if (filename != "") fFileName = filename; 135 } 145 } 136 146 137 //....oooOO0OOooo........oooOO0OOooo........oo 147 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 148 138 149