File indexing completed on 2025-08-05 08:18:16
0001
0002
0003 #ifndef G4TPC_PHG4TPCDIGITIZER_H
0004 #define G4TPC_PHG4TPCDIGITIZER_H
0005
0006 #include <fun4all/SubsysReco.h>
0007
0008 #include <trackbase/TrkrDefs.h>
0009 #include <trackbase/TrkrHitSet.h>
0010
0011 #include <map>
0012 #include <string> // for string
0013 #include <utility> // for pair, make_pair
0014 #include <vector>
0015
0016 #include <gsl/gsl_rng.h>
0017
0018 class PHCompositeNode;
0019
0020 class PHG4TpcDigitizer : public SubsysReco
0021 {
0022 public:
0023 PHG4TpcDigitizer(const std::string &name = "PHG4TpcDigitizer");
0024 ~PHG4TpcDigitizer() override;
0025
0026
0027 int Init(PHCompositeNode * ) override { return 0; }
0028
0029
0030 int InitRun(PHCompositeNode *topNode) override;
0031
0032
0033 int process_event(PHCompositeNode *topNode) override;
0034
0035
0036 int End(PHCompositeNode * ) override { return 0; };
0037
0038 void set_adc_scale(const int layer, const unsigned int max_adc, const float energy_per_adc)
0039 {
0040 _max_adc.insert(std::make_pair(layer, max_adc));
0041 _energy_scale.insert(std::make_pair(layer, energy_per_adc));
0042 }
0043
0044 void SetTpcMinLayer(const int minlayer) { TpcMinLayer = minlayer; };
0045 void SetADCThreshold(const float thresh) { ADCThreshold = thresh; };
0046 void SetENC(const float enc) { TpcEnc = enc; };
0047 void set_drift_velocity(float vd) {_drift_velocity = vd;}
0048 void set_skip_noise_flag(const bool skip) {skip_noise = skip;}
0049
0050 private:
0051 void CalculateCylinderCellADCScale(PHCompositeNode *topNode);
0052 void DigitizeCylinderCells(PHCompositeNode *topNode);
0053 float added_noise();
0054 float add_noise_to_bin(float signal);
0055
0056 unsigned int TpcMinLayer;
0057 unsigned int TpcNLayers;
0058 float ADCThreshold;
0059 float ADCThreshold_mV = 0;
0060 float TpcEnc;
0061 float Pedestal;
0062 float ChargeToPeakVolts;
0063 float _drift_velocity = 8.0e-3;
0064
0065 float ADCSignalConversionGain;
0066 float ADCNoiseConversionGain;
0067
0068 bool skip_noise = false;
0069
0070 std::vector<std::vector<TrkrHitSet::ConstIterator> > phi_sorted_hits;
0071 std::vector<std::vector<TrkrHitSet::ConstIterator> > t_sorted_hits;
0072
0073 std::vector<float> adc_input;
0074 std::vector<TrkrDefs::hitkey> adc_hitid;
0075 std::vector<int> is_populated;
0076
0077
0078 std::map<int, unsigned int> _max_adc;
0079 std::map<int, float> _energy_scale;
0080
0081
0082 gsl_rng *RandomGenerator;
0083 };
0084
0085 #endif