Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/analysis/hntools/src/G4TP1ToolsManager.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 /analysis/hntools/src/G4TP1ToolsManager.cc (Version 11.3.0) and /analysis/hntools/src/G4TP1ToolsManager.cc (Version 11.1)


  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 // Author: Ivana Hrivnacova, 10/08/2022  (ivan     27 // Author: Ivana Hrivnacova, 10/08/2022  (ivana@ipno.in2p3.fr)
 28                                                    28 
 29 #include "G4THnToolsManager.hh"                    29 #include "G4THnToolsManager.hh"
 30                                                    30 
 31 #include "tools/histo/p1d"                         31 #include "tools/histo/p1d"
 32                                                    32 
 33 using namespace G4Analysis;                        33 using namespace G4Analysis;
 34                                                    34 
 35 #include <fstream>                                 35 #include <fstream>
 36                                                    36 
 37 // Specialization for P1 type                      37 // Specialization for P1 type
 38                                                    38 
 39                                                    39 
 40 //____________________________________________     40 //_____________________________________________________________________________
 41 template <>                                        41 template <>
 42 tools::histo::p1d* G4THnToolsManager<kDim2, to <<  42 tools::histo::p1d* G4THnToolsManager<2, tools::histo::p1d>::CreateToolsHT(
 43   const G4String& title,                           43   const G4String& title,
 44   const std::array<G4HnDimension, kDim2>& bins <<  44   const std::array<G4HnDimension, 2>& bins,
 45   const std::array<G4HnDimensionInformation, k <<  45   const std::array<G4HnDimensionInformation, 2>& hnInfo)
 46 {                                                  46 {
 47   // Apply hn information to bins                  47   // Apply hn information to bins
 48   auto newXBins(bins[kX]);                         48   auto newXBins(bins[kX]);
 49   Update(newXBins, hnInfo[kX]);                    49   Update(newXBins, hnInfo[kX]);
 50   auto newYBins(bins[kY]);                         50   auto newYBins(bins[kY]);
 51   UpdateValues(newYBins, hnInfo[kY]);              51   UpdateValues(newYBins, hnInfo[kY]);
 52                                                    52 
 53   if (hnInfo[kX].fBinScheme == G4BinScheme::kL     53   if (hnInfo[kX].fBinScheme == G4BinScheme::kLinear) {
 54     if ( newYBins.fMinValue == 0. && newYBins.     54     if ( newYBins.fMinValue == 0. && newYBins.fMaxValue == 0.) {
 55       return new tools::histo::p1d(                55       return new tools::histo::p1d(
 56         title, newXBins.fNBins, newXBins.fMinV     56         title, newXBins.fNBins, newXBins.fMinValue, newXBins.fMaxValue);
 57     }                                              57     }
 58     return new tools::histo::p1d(                  58     return new tools::histo::p1d(
 59       title, newXBins.fNBins, newXBins.fMinVal     59       title, newXBins.fNBins, newXBins.fMinValue, newXBins.fMaxValue,
 60       newYBins.fMinValue, newYBins.fMaxValue);     60       newYBins.fMinValue, newYBins.fMaxValue);
 61   }                                                61   }
 62                                                    62 
 63   if ( newYBins.fMinValue == 0. && newYBins.fM     63   if ( newYBins.fMinValue == 0. && newYBins.fMaxValue == 0.) {
 64     return new tools::histo::p1d(title, newXBi     64     return new tools::histo::p1d(title, newXBins.fEdges);
 65   }                                                65   }
 66                                                    66 
 67   return new tools::histo::p1d(title, newXBins     67   return new tools::histo::p1d(title, newXBins.fEdges,
 68     newYBins.fMinValue, newYBins.fMaxValue);       68     newYBins.fMinValue, newYBins.fMaxValue);
 69 }                                                  69 }
 70                                                    70 
 71 //____________________________________________     71 //_____________________________________________________________________________
 72 template <>                                        72 template <>
 73 void G4THnToolsManager<kDim2, tools::histo::p1 <<  73 void G4THnToolsManager<2, tools::histo::p1d>::ConfigureToolsHT(
 74   tools::histo::p1d* ht,                           74   tools::histo::p1d* ht,
 75   const std::array<G4HnDimension, kDim2>& bins <<  75   const std::array<G4HnDimension, 2>& bins,
 76   const std::array<G4HnDimensionInformation, k <<  76   const std::array<G4HnDimensionInformation, 2>& hnInfo)
 77 {                                                  77 {
 78   // Apply hn information to bins                  78   // Apply hn information to bins
 79   auto newXBins(bins[kX]);                         79   auto newXBins(bins[kX]);
 80   Update(newXBins, hnInfo[kX]);                    80   Update(newXBins, hnInfo[kX]);
 81   auto newYBins(bins[kY]);                         81   auto newYBins(bins[kY]);
 82   UpdateValues(newYBins, hnInfo[kY]);              82   UpdateValues(newYBins, hnInfo[kY]);
 83                                                    83 
 84   if (hnInfo[kX].fBinScheme == G4BinScheme::kL     84   if (hnInfo[kX].fBinScheme == G4BinScheme::kLinear) {
 85     if ( newYBins.fMinValue == 0. && newYBins.     85     if ( newYBins.fMinValue == 0. && newYBins.fMaxValue == 0.) {
 86       ht->configure(                               86       ht->configure(
 87             newXBins.fNBins, newXBins.fMinValu     87             newXBins.fNBins, newXBins.fMinValue, newXBins.fMaxValue);
 88       return;                                      88       return;
 89     }                                              89     }
 90     ht->configure(                                 90     ht->configure(
 91           newXBins.fNBins, newXBins.fMinValue,     91           newXBins.fNBins, newXBins.fMinValue, newXBins.fMaxValue,
 92           newYBins.fMinValue, newYBins.fMaxVal     92           newYBins.fMinValue, newYBins.fMaxValue);
 93     return;                                        93     return;
 94   }                                                94   }
 95                                                    95 
 96   if ( newYBins.fMinValue == 0. && newYBins.fM     96   if ( newYBins.fMinValue == 0. && newYBins.fMaxValue == 0.) {
 97     ht->configure(newXBins.fEdges);                97     ht->configure(newXBins.fEdges);
 98   return;                                          98   return;
 99   }                                                99   }
100   ht->configure(newXBins.fEdges, newYBins.fMin    100   ht->configure(newXBins.fEdges, newYBins.fMinValue, newYBins.fMaxValue);
101   return;                                         101   return;
102 }                                                 102 }
103                                                   103 
104 //____________________________________________    104 //_____________________________________________________________________________
105 template <>                                       105 template <>
106 G4bool G4THnToolsManager<kDim2, tools::histo:: << 106 G4bool G4THnToolsManager<2, tools::histo::p1d>::FillHT(
107   tools::histo::p1d* ht, const G4HnInformation    107   tools::histo::p1d* ht, const G4HnInformation& hnInformation, 
108   std::array<G4double, kDim2>& value, G4double << 108   std::array<G4double, 2>& value, G4double weight)
109 {                                                 109 {
110   const auto& xInfo = hnInformation.GetHnDimen << 110   auto xInfo = hnInformation.GetHnDimensionInformation(kX);
111   const auto& yInfo = hnInformation.GetHnDimen << 111   auto yInfo = hnInformation.GetHnDimensionInformation(kY);
112                                                   112 
113   // Apply hn information to value                113   // Apply hn information to value
114   Update(value[kX], xInfo);                       114   Update(value[kX], xInfo);
115   Update(value[kY], yInfo);                       115   Update(value[kY], yInfo);
116                                                   116 
117   // Fill updated value                           117   // Fill updated value
118   ht->fill(value[kX], value[kY], weight);         118   ht->fill(value[kX], value[kY], weight);
119                                                   119 
120   return true;                                    120   return true;
121 }                                                 121 }
122                                                   122 
123 //____________________________________________    123 //_____________________________________________________________________________
124 template <>                                       124 template <>
125 G4bool G4THnToolsManager<kDim2, tools::histo:: << 125 G4bool G4THnToolsManager<2, tools::histo::p1d>::WriteOnAscii(
126   std::ofstream& output)                          126   std::ofstream& output)
127 {                                                 127 {
128 // Write selected objects on ASCII file           128 // Write selected objects on ASCII file
129                                                   129 
130   // Do nothing if no histograms are selected     130   // Do nothing if no histograms are selected
131   if ( ! GetHnManager()->IsAscii() ) return tr    131   if ( ! GetHnManager()->IsAscii() ) return true;
132                                                   132 
133   // Write p1 histograms                          133   // Write p1 histograms
134   auto id = GetHnManager()->GetFirstId();         134   auto id = GetHnManager()->GetFirstId();
135   for (const auto& [p1, info] : *GetTHnVector(    135   for (const auto& [p1, info] : *GetTHnVector()) {
136                                                   136 
137     if ( (p1 == nullptr) || (! info->GetAscii( << 137     if ( ! info->GetAscii() ) {
138       // skip writing                          << 138       // skip writing if activation is enabled and H1 is inactivated
139       // if p1 was deleted or writing ascii is << 
140       id++;                                       139       id++;
141       continue;                                   140       continue;
142     }                                             141     }
143                                                   142 
144     Message(kVL3, "write on ascii", "p1d", inf    143     Message(kVL3, "write on ascii", "p1d", info->GetName());
145                                                   144 
146     output << "\n  1D profile " << id++ << ":     145     output << "\n  1D profile " << id++ << ": " << p1->title()
147            << "\n \n \t \t     X \t\t MeanY" <    146            << "\n \n \t \t     X \t\t MeanY" << G4endl;
148                                                   147 
149     for (G4int j=0; j< G4int(p1->axis().bins()    148     for (G4int j=0; j< G4int(p1->axis().bins()); ++j) {
150        auto sw = p1->bin_Sw(j);                   149        auto sw = p1->bin_Sw(j);
151        auto svw = p1->bin_Svw(j);                 150        auto svw = p1->bin_Svw(j);
152        auto mean = ( sw != 0. ) ?  (svw / sw)     151        auto mean = ( sw != 0. ) ?  (svw / sw) : 0.;
153        output << "  " << j << "\t"                152        output << "  " << j << "\t"
154               << p1->axis().bin_center(j) << "    153               << p1->axis().bin_center(j) << "\t"
155               << mean << G4endl;                  154               << mean << G4endl;
156     }                                             155     }
157   }                                               156   }
158                                                   157 
159   return output.good();                           158   return output.good();
160 }                                                 159 }
161                                                   160