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 // 26 // 27 // ------------------------------------------- 27 // -------------------------------------------------------------- 28 // GEANT 4 - Underground Dark Matter Detecto 28 // GEANT 4 - Underground Dark Matter Detector Advanced Example 29 // 29 // 30 // For information related to this code c 30 // For information related to this code contact: Alex Howard 31 // e-mail: alexander.howard@cern.ch 31 // e-mail: alexander.howard@cern.ch 32 // ------------------------------------------- 32 // -------------------------------------------------------------- 33 // Comments 33 // Comments 34 // 34 // 35 // Underground Advanced 35 // Underground Advanced 36 // by A. Howard and H. Araujo 36 // by A. Howard and H. Araujo 37 // (27th November 2001) 37 // (27th November 2001) 38 // 38 // 39 // History: 39 // History: 40 // 21 Feb 2002 AH: Added Analysis 40 // 21 Feb 2002 AH: Added Analysis 41 // 41 // 42 // SteppingAction program 42 // SteppingAction program 43 // ------------------------------------------- 43 // -------------------------------------------------------------- 44 44 45 #include "DMXSteppingAction.hh" 45 #include "DMXSteppingAction.hh" 46 #include "DMXSteppingActionMessenger.hh" 46 #include "DMXSteppingActionMessenger.hh" 47 47 48 #include "DMXEventAction.hh" 48 #include "DMXEventAction.hh" >> 49 #include "DMXAnalysisManager.hh" >> 50 49 51 50 #include "G4AnalysisManager.hh" << 51 #include "G4RunManager.hh" << 52 #include "G4Track.hh" 52 #include "G4Track.hh" 53 #include "G4Step.hh" 53 #include "G4Step.hh" 54 #include "G4StepPoint.hh" 54 #include "G4StepPoint.hh" 55 #include "G4TrackStatus.hh" 55 #include "G4TrackStatus.hh" 56 #include "G4ParticleDefinition.hh" 56 #include "G4ParticleDefinition.hh" 57 #include "G4ParticleTypes.hh" 57 #include "G4ParticleTypes.hh" 58 #include "G4VVisManager.hh" 58 #include "G4VVisManager.hh" 59 #include "G4Colour.hh" 59 #include "G4Colour.hh" 60 #include "G4Polyline.hh" 60 #include "G4Polyline.hh" 61 #include "G4VisAttributes.hh" 61 #include "G4VisAttributes.hh" 62 #include "globals.hh" 62 #include "globals.hh" 63 #include "G4ios.hh" 63 #include "G4ios.hh" 64 64 65 65 66 //....oooOO0OOooo........oooOO0OOooo........oo 66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 67 67 68 DMXSteppingAction::DMXSteppingAction() << 68 DMXSteppingAction::DMXSteppingAction(DMXEventAction* eventAction) 69 : evtAction(0) { << 69 : evtAction(eventAction) { 70 70 71 steppingMessenger = new DMXSteppingActionMes 71 steppingMessenger = new DMXSteppingActionMessenger(this); 72 72 73 // defaults for messenger 73 // defaults for messenger 74 colourNeutronFlag = "magenta"; 74 colourNeutronFlag = "magenta"; 75 colourGammaFlag = "cyan"; 75 colourGammaFlag = "cyan"; 76 colourOpticalFlag = "white"; 76 colourOpticalFlag = "white"; 77 colourChargedPlusFlag = "red"; 77 colourChargedPlusFlag = "red"; 78 colourChargedMinusFlag = "blue"; 78 colourChargedMinusFlag = "blue"; 79 79 80 } 80 } 81 81 82 //....oooOO0OOooo........oooOO0OOooo........oo 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 83 83 84 DMXSteppingAction::~DMXSteppingAction() 84 DMXSteppingAction::~DMXSteppingAction() 85 { 85 { 86 86 87 delete steppingMessenger; 87 delete steppingMessenger; 88 88 89 } 89 } 90 90 91 //....oooOO0OOooo........oooOO0OOooo........oo 91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 92 92 93 void DMXSteppingAction::UserSteppingAction(con 93 void DMXSteppingAction::UserSteppingAction(const G4Step* fStep) 94 { 94 { 95 if (!evtAction) << 96 evtAction = << 97 dynamic_cast<const DMXEventAction*> << 98 (G4RunManager::GetRunManager()->GetUserE << 99 << 100 95 101 // removed 28/11/01 - unnecessary unless pro 96 // removed 28/11/01 - unnecessary unless program "freezes" 102 // kill track if too many steps 97 // kill track if too many steps 103 // NB: This is set to DBL_MAX - therefore ma 98 // NB: This is set to DBL_MAX - therefore may cause program to "hang" 104 // G4int MaxNoSteps = DBL_MAX; 99 // G4int MaxNoSteps = DBL_MAX; 105 // G4int StepNo = fStep->GetTrack()->GetCur 100 // G4int StepNo = fStep->GetTrack()->GetCurrentStepNumber(); 106 // if(StepNo >= MaxNoSteps) fStep->GetTrack 101 // if(StepNo >= MaxNoSteps) fStep->GetTrack()->SetTrackStatus(fStopAndKill); 107 102 108 G4int StepNo = fStep->GetTrack()->GetCurrent 103 G4int StepNo = fStep->GetTrack()->GetCurrentStepNumber(); 109 if(StepNo == 1) 104 if(StepNo == 1) 110 { 105 { 111 G4double partEnergy = fStep->GetPreStepP 106 G4double partEnergy = fStep->GetPreStepPoint()->GetKineticEnergy(); 112 G4ParticleDefinition* particleType = fSt 107 G4ParticleDefinition* particleType = fStep->GetTrack()->GetDefinition(); 113 << 108 //G4String particleName = particleType->GetParticleName(); 114 G4AnalysisManager* man = G4AnalysisManag 109 G4AnalysisManager* man = G4AnalysisManager::Instance(); 115 if (particleType == G4Gamma::Definition( 110 if (particleType == G4Gamma::Definition()) 116 man->FillH1(8,partEnergy); 111 man->FillH1(8,partEnergy); 117 else if (particleType == G4Neutron::Defi 112 else if (particleType == G4Neutron::Definition()) 118 man->FillH1(9,partEnergy); 113 man->FillH1(9,partEnergy); 119 else if (particleType == G4Electron::Def 114 else if (particleType == G4Electron::Definition()) 120 man->FillH1(10,partEnergy); 115 man->FillH1(10,partEnergy); 121 else if (particleType == G4Positron::Def 116 else if (particleType == G4Positron::Definition()) 122 man->FillH1(11,partEnergy); 117 man->FillH1(11,partEnergy); 123 else 118 else 124 man->FillH1(12,partEnergy); 119 man->FillH1(12,partEnergy); 125 } 120 } 126 121 127 122 128 // check what is to be drawn from EventActio 123 // check what is to be drawn from EventAction/EventActionMessenger 129 G4String drawColsFlag = evtAction->GetDrawCo 124 G4String drawColsFlag = evtAction->GetDrawColsFlag(); 130 G4String drawTrksFlag = evtAction->GetDrawTr 125 G4String drawTrksFlag = evtAction->GetDrawTrksFlag(); 131 126 132 // draw by step (here) instead of by event ( 127 // draw by step (here) instead of by event (event action) 133 if (drawColsFlag=="custom" && drawTrksFlag!= 128 if (drawColsFlag=="custom" && drawTrksFlag!="none") { 134 129 135 // check that VisManager exists 130 // check that VisManager exists 136 G4VVisManager* pVVisManager = G4VVisManage 131 G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); 137 if(pVVisManager) { 132 if(pVVisManager) { 138 133 139 // particle colour in a string 134 // particle colour in a string 140 G4String name = fStep->GetTrack()->GetDe 135 G4String name = fStep->GetTrack()->GetDefinition()->GetParticleName(); 141 G4String strColour; 136 G4String strColour; 142 if(name=="neutron") { 137 if(name=="neutron") { 143 if(drawTrksFlag=="charged") return; 138 if(drawTrksFlag=="charged") return; 144 strColour = colourNeutronFlag; 139 strColour = colourNeutronFlag; 145 } else if (name=="gamma") { 140 } else if (name=="gamma") { 146 if(drawTrksFlag=="charged") return; 141 if(drawTrksFlag=="charged") return; 147 strColour = colourGammaFlag; 142 strColour = colourGammaFlag; 148 } else if (name=="opticalphoton") { 143 } else if (name=="opticalphoton") { 149 if(drawTrksFlag!="all") return; 144 if(drawTrksFlag!="all") return; 150 strColour = colourOpticalFlag; 145 strColour = colourOpticalFlag; 151 } 146 } 152 else if (name=="alpha" || name=="e+") 147 else if (name=="alpha" || name=="e+") 153 strColour = colourChargedPlusFlag; 148 strColour = colourChargedPlusFlag; 154 else 149 else 155 strColour = colourChargedMinusFlag; 150 strColour = colourChargedMinusFlag; 156 151 157 // convert string to G4Colour 152 // convert string to G4Colour 158 G4Colour colour; 153 G4Colour colour; 159 if (strColour=="white") colour=G4 154 if (strColour=="white") colour=G4Colour(1.0, 1.0, 1.0); 160 else if(strColour=="grey" ) colour=G4 155 else if(strColour=="grey" ) colour=G4Colour(0.5, 0.5, 0.5); 161 else if(strColour=="lgrey") colour=G4 156 else if(strColour=="lgrey") colour=G4Colour(.75, .75, .75); 162 else if(strColour=="black") colour=G4 157 else if(strColour=="black") colour=G4Colour(0.0, 0.0, 0.0); 163 else if(strColour=="red") colour=G4 158 else if(strColour=="red") colour=G4Colour(1.0, 0.0, 0.0); 164 else if(strColour=="green") colour=G4 159 else if(strColour=="green") colour=G4Colour(0.0, 1.0, 0.0); 165 else if(strColour=="blue") colour=G4 160 else if(strColour=="blue") colour=G4Colour(0.0, 0.0, 1.0); 166 else if(strColour=="cyan") colour=G4 161 else if(strColour=="cyan") colour=G4Colour(0.0, 1.0, 1.0); 167 else if(strColour=="magenta") colour=G4 162 else if(strColour=="magenta") colour=G4Colour(1.0, 0.0, 1.0); 168 else if(strColour=="yellow") colour=G4 163 else if(strColour=="yellow") colour=G4Colour(1.0, 1.0, 0.0); 169 else if(strColour=="lgreen") colour=G4 164 else if(strColour=="lgreen") colour=G4Colour(0.0, .75, 0.0); 170 else if(strColour=="lblue") colour=G4 165 else if(strColour=="lblue") colour=G4Colour(0.0, 0.0, .75); 171 else colour=G4 166 else colour=G4Colour(1.0, 1.0, 1.0); 172 167 173 // create line with colour 168 // create line with colour 174 G4VisAttributes attribs(colour); 169 G4VisAttributes attribs(colour); 175 G4Polyline polyline; 170 G4Polyline polyline; 176 polyline.SetVisAttributes(attribs); 171 polyline.SetVisAttributes(attribs); 177 172 178 // draw line 173 // draw line 179 G4Point3D start(fStep->GetPreStepPoint() 174 G4Point3D start(fStep->GetPreStepPoint()->GetPosition()); 180 G4Point3D end(fStep->GetPostStepPoint()- 175 G4Point3D end(fStep->GetPostStepPoint()->GetPosition()); 181 polyline.push_back(start); 176 polyline.push_back(start); 182 polyline.push_back(end); 177 polyline.push_back(end); 183 pVVisManager->Draw(polyline); 178 pVVisManager->Draw(polyline); 184 } 179 } 185 180 186 } 181 } 187 182 188 } 183 } 189 184 190 185 191 186