Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/hadronic/FlukaCern/utils/src/G4H1Wrapper.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/extended/hadronic/FlukaCern/utils/src/G4H1Wrapper.cc (Version 11.3.0) and /examples/extended/hadronic/FlukaCern/utils/src/G4H1Wrapper.cc (Version 11.0.p1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 ///  \file G4H1Wrapper.cc                         
 27 ///  \brief This allows statistics compatible     
 28 ///         It is fully relying on G4VAnalysis    
 29 //                                                
 30 //  Author: G.Hugo, 08 December 2022              
 31 //                                                
 32 // *******************************************    
 33 //                                                
 34 //      G4H1Wrapper                               
 35 //                                                
 36 ///  This allows event-level statistics.          
 37 ///  This is necessary IN THIS SPECIFIC CASE O    
 38 ///  with e.g. FLUKA, MCNP, PENELOPE, SERPENT,    
 39 ///                                               
 40 ///  It is fully relying on G4VAnalysisManager    
 41 ///  Collects info within an event, then flush    
 42 //                                                
 43 // *******************************************    
 44                                                   
 45 #include "G4H1Wrapper.hh"                         
 46                                                   
 47 #include "G4RootAnalysisManager.hh"               
 48                                                   
 49 //....oooOO0OOooo........oooOO0OOooo........oo    
 50                                                   
 51 G4H1Wrapper::G4H1Wrapper(G4VAnalysisManager* c    
 52   : fAnalysisManager(analysisManager),            
 53     fHistoIndex(histoIndex),                      
 54     fHisto(dynamic_cast<G4RootAnalysisManager*    
 55     // fAxis(fHisto->axis()),                     
 56     fNumBins(fHisto->axis().bins()),              
 57     fIsSet(false),                                
 58     fUnderflow(0.),                               
 59     fOverflow(0.),                                
 60     fSumSquaredEventTotals(0.),                   
 61     fSumSquaredEventInRangeTotals(0.)             
 62 {                                                 
 63   fEventData.assign(fNumBins, 0.);                
 64 }                                                 
 65                                                   
 66 // *******************************************    
 67 // Fill data WITHIN THE EVENT. Can be called a    
 68 // *******************************************    
 69 void G4H1Wrapper::Fill(const G4double abscissa    
 70 {                                                 
 71   if (!fIsSet) {                                  
 72     fIsSet = true;                                
 73   }                                               
 74                                                   
 75   const G4int binIndex = fHisto->axis().coord_    
 76                                                   
 77   // underflow                                    
 78   // See external/g4tools/include/tools/histo/    
 79   if (binIndex == tools::histo::axis_UNDERFLOW    
 80     fUnderflow += weight;                         
 81   }                                               
 82   // overflow                                     
 83   // See external/g4tools/include/tools/histo/    
 84   else if (binIndex == tools::histo::axis_OVER    
 85     fOverflow += weight;                          
 86   }                                               
 87   // in range                                     
 88   else {                                          
 89     fEventData[binIndex] += weight;               
 90   }                                               
 91 }                                                 
 92                                                   
 93 // *******************************************    
 94 // End of event: flush all data collected duri    
 95 // to G4VAnalysisManager's G4H1, then reset ev    
 96 // *******************************************    
 97 void G4H1Wrapper::EndOfEvent()                    
 98 {                                                 
 99   // Only do the flush if there was at least o    
100   if (fIsSet) {                                   
101     G4double eventTotal = 0.;                     
102     // FLUSH IN RANGE DATA.                       
103     for (G4int binIndex = 0; binIndex < fNumBi    
104       if (fEventData[binIndex] > 0.) {            
105         const G4double binKineticEnergy = fHis    
106         const G4double binEventWeight = fEvent    
107         fAnalysisManager->FillH1(fHistoIndex,     
108         eventTotal += binEventWeight;             
109                                                   
110         fEventData[binIndex] = 0.;                
111       }                                           
112     }                                             
113     // Also keep track of the event's total (I    
114     const G4double squaredEventTotal = eventTo    
115     fSumSquaredEventInRangeTotals += squaredEv    
116     fSumSquaredEventTotals += squaredEventTota    
117                                                   
118     // FLUSH UNDERFLOW DATA.                      
119     if (fUnderflow > 0.) {                        
120       fAnalysisManager->FillH1(fHistoIndex, fH    
121       fSumSquaredEventTotals += fUnderflow;       
122       fUnderflow = 0.;                            
123     }                                             
124                                                   
125     // FLUSH OVERFLOW DATA.                       
126     if (fOverflow > 0.) {                         
127       fAnalysisManager->FillH1(fHistoIndex, fH    
128       fSumSquaredEventTotals += fOverflow;        
129       fOverflow = 0.;                             
130     }                                             
131                                                   
132     fIsSet = false;                               
133   }                                               
134 }                                                 
135                                                   
136 //....oooOO0OOooo........oooOO0OOooo........oo    
137