File indexing completed on 2025-08-05 08:18:13
0001
0002
0003
0004 #ifndef G4MVTX_PHG4MVTXDIGITIZER_H
0005 #define G4MVTX_PHG4MVTXDIGITIZER_H
0006
0007 #include <fun4all/SubsysReco.h>
0008
0009 #include <gsl/gsl_rng.h>
0010
0011 #include <map>
0012 #include <string> // for string
0013 #include <utility> // for pair, make_pair
0014 #include <vector>
0015
0016 class PHCompositeNode;
0017
0018 class PHG4MvtxDigitizer : public SubsysReco
0019 {
0020 public:
0021 PHG4MvtxDigitizer(const std::string &name = "PHG4MvtxDigitizer");
0022 ~PHG4MvtxDigitizer() override;
0023
0024
0025 int Init(PHCompositeNode * ) override { return 0; }
0026
0027
0028 int InitRun(PHCompositeNode *topNode) override;
0029
0030
0031 int process_event(PHCompositeNode *topNode) override;
0032
0033
0034 int End(PHCompositeNode * ) override { return 0; };
0035
0036 void set_adc_scale(const int layer, const unsigned short max_adc, const float energy_per_adc)
0037 {
0038 _max_adc.insert(std::make_pair(layer, max_adc));
0039 _energy_scale.insert(std::make_pair(layer, energy_per_adc));
0040 }
0041
0042 void set_energy_threshold(const float threshold)
0043 {
0044 _energy_threshold = threshold;
0045 }
0046
0047 float get_energy_threshold() { return _energy_threshold; }
0048
0049 private:
0050 void CalculateMvtxLadderCellADCScale(PHCompositeNode *topNode);
0051 void DigitizeMvtxLadderCells(PHCompositeNode *topNode);
0052
0053 std::vector<float> adc_input;
0054 std::vector<int> is_populated;
0055
0056
0057 std::map<int, unsigned short> _max_adc;
0058 std::map<int, float> _energy_scale;
0059 float _energy_threshold;
0060
0061
0062 gsl_rng *RandomGenerator;
0063 };
0064
0065 #endif