LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
CheckSimEnergyDeposit_module.cc
Go to the documentation of this file.
1 // art Framework includes.
7 #include "art_root_io/TFileDirectory.h"
8 #include "art_root_io/TFileService.h"
11 
12 // Root includes.
13 #include "TH1F.h"
14 #include "TNtuple.h"
15 
16 // STL includes.
17 #include <cmath>
18 
19 // Other includes.
20 #include "CLHEP/Units/SystemOfUnits.h"
21 
22 using namespace std;
23 namespace larg4 {
24  class CheckSimEnergyDeposit;
25 }
26 
28 public:
29  explicit CheckSimEnergyDeposit(fhicl::ParameterSet const& p);
30 
31 private:
32  void beginJob() override;
33  void analyze(const art::Event& event) override;
34 
35  TH1F* _hnHits{nullptr}; // number of SimEnergyDepositHits
36  TH1F* _hEdep{nullptr}; // average energy deposition in SimEnergyDepositHits
37  TH1F* _hnumPhotons{nullptr}; // number of Photons per SimEnergyDepositHits
38  TH1F* _hLandauPhotons{nullptr}; // Edep/cm SimEnergyDepositHits
39  TH1F* _hLandauEdep{nullptr}; // number of Photons/cm SimEnergyDepositHits
40  TH1F* _hSteplength{nullptr}; // Geant 4 step length
41  TNtuple* _ntuple{nullptr};
42 };
43 
45  : art::EDAnalyzer(p)
46 {}
47 
49 {
51  _hnHits = tfs->make<TH1F>("hnHits", "Number of SimEnergyDeposits", 300, 0, 0);
52  _hEdep = tfs->make<TH1F>("hEdep", "Energy deposition in SimEnergyDeposits", 100, 0., 0.02);
53  _hnumPhotons =
54  tfs->make<TH1F>("hnumPhotons", "number of photons per SimEnergyDeposit", 100, 0., 500.);
55  _hLandauPhotons = tfs->make<TH1F>("hLandauPhotons", "number of photons/cm", 100, 0., 2000000.);
56  _hLandauEdep = tfs->make<TH1F>("hLandauEdep", "Edep/cm", 100, 0., 10.);
57  _hSteplength = tfs->make<TH1F>("hSteplength", "geant 4 step length", 100, 0., 0.05);
58  _ntuple = tfs->make<TNtuple>(
59  "ntuple", "Demo ntuple", "Event:Edep:em_Edep:nonem_Edep:xpos:ypos:zpos:time");
60 } // end beginJob
61 
63 {
64  auto allSims = event.getMany<sim::SimEnergyDepositCollection>();
65  for (auto const& sims : allSims) {
66  double sumPhotons = 0.0;
67  double sumE = 0.0;
68  _hnHits->Fill(sims->size());
69  for (auto const& hit : *sims) {
70  // sum up energy deposit in a 1cm slice of liquid Argon.
71  if (std::abs(hit.EndZ()) < 0.5) {
72  sumPhotons = sumPhotons + hit.NumPhotons();
73  sumE = sumE + hit.Energy();
74  }
75  _hnumPhotons->Fill(hit.NumPhotons());
76  _hEdep->Fill(hit.Energy()); // energy deposit in MeV
77  _hSteplength->Fill(hit.StepLength()); // step length in cm
78  }
79  _hLandauPhotons->Fill(sumPhotons);
80  _hLandauEdep->Fill(sumE);
81  }
82 } // end analyze
83 
constexpr auto abs(T v)
Returns the absolute value of the argument.
Geant4 interface.
STL namespace.
CheckSimEnergyDeposit(fhicl::ParameterSet const &p)
#define DEFINE_ART_MODULE(klass)
Definition: ModuleMacros.h:65
void beginJob()
Definition: Breakpoints.cc:14
Detector simulation of raw signals on wires.
std::vector< SimEnergyDeposit > SimEnergyDepositCollection
contains information for a single step in the detector simulation
Definition: MVAAlg.h:12
void analyze(const art::Event &event) override
Event finding and building.