Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:18:13

0001 // Tell emacs that this is a C++ source
0002 // -*- C++ -*-.
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   //! module initialization
0025   int Init(PHCompositeNode * /*topNode*/) override { return 0; }
0026 
0027   //! run initialization
0028   int InitRun(PHCompositeNode *topNode) override;
0029 
0030   //! event processing
0031   int process_event(PHCompositeNode *topNode) override;
0032 
0033   //! end of process
0034   int End(PHCompositeNode * /*topNode*/) 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   // settings
0057   std::map<int, unsigned short> _max_adc;
0058   std::map<int, float> _energy_scale;
0059   float _energy_threshold;
0060 
0061   //! random generator that conform with sPHENIX standard
0062   gsl_rng *RandomGenerator;
0063 };
0064 
0065 #endif