Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:18:09

0001 /**
0002  * @file trackbase/LaserClusterv2.h
0003  * @author Ben Kimelman
0004  * @date July 2025
0005  * @brief Version 2 of CMFLashCluster
0006  */
0007 #ifndef TRACKBASE_LASERCLUSTERV2_H
0008 #define TRACKBASE_LASERCLUSTERV2_H
0009 
0010 #include "LaserCluster.h"
0011 
0012 #include <iostream>
0013 #include <vector>
0014 
0015 class PHObject;
0016 
0017 /**
0018  * @brief Version 2 of LaserCluster
0019  *
0020  * Note - D. McGlinchey June 2018:
0021  *   CINT does not like "override", so ignore where CINT
0022  *   complains. Should be checked with ROOT 6 once
0023  *   migration occurs.
0024  */
0025 class LaserClusterv2 : public LaserCluster
0026 {
0027  public:
0028   //! ctor
0029   LaserClusterv2() = default;
0030 
0031   // PHObject virtual overloads
0032   void identify(std::ostream& os = std::cout) const override;
0033   void Reset() override {}
0034   int isValid() const override;
0035   PHObject* CloneMe() const override { return new LaserClusterv2(*this); }
0036  
0037   //! copy content from base class
0038   void CopyFrom( const LaserCluster& ) override;
0039 
0040   //! copy content from base class
0041   void CopyFrom( LaserCluster* source ) override
0042   { CopyFrom( *source ); }
0043 
0044   //
0045   // cluster position
0046   //
0047   float getX() const override { return m_pos[0]; }
0048   void setX(float x) override { m_pos[0] = x; }
0049   float getY() const override { return m_pos[1]; }
0050   void setY(float y) override { m_pos[1] = y; }
0051   float getZ() const override { return m_pos[2]; }
0052   void setZ(float z) override { m_pos[2] = z; }
0053 
0054   bool getFitMode() const override { return m_fitMode; }
0055   void setFitMode(bool fitMode) override { m_fitMode = fitMode; }
0056 
0057   float getLayer() const override { return m_posHardware[0]; }
0058   void setLayer(float layer) override { m_posHardware[0] = layer; }
0059   float getIPhi() const override { return m_posHardware[1]; }
0060   void setIPhi(float iphi) override { m_posHardware[1] = iphi; }
0061   float getIT() const override { return m_posHardware[2]; }
0062   void setIT(float it) override { m_posHardware[2] = it; }
0063 
0064   unsigned int getNhits() const override {return m_hitVec.size();}
0065 
0066   //
0067   // cluster info
0068   //
0069   unsigned int getAdc() const override { return m_adc; }
0070   void setAdc(unsigned int adc) override { m_adc = adc; }
0071 
0072   void setNLayers(unsigned int nLayers) override { m_nLayers = nLayers; }
0073   unsigned int getNLayers() const override { return m_nLayers; }
0074 
0075   void setNIPhi(unsigned int nIPhi) override { m_nIPhi = nIPhi; }
0076   unsigned int getNIPhi() const override { return m_nIPhi; }
0077 
0078   void setNIT(unsigned int nIT) override { m_nIT = nIT; }
0079   unsigned int getNIT() const override { return m_nIT; }
0080 
0081   void setSDLayer(float SDLayer) override { m_SDLayer = SDLayer; }
0082   float getSDLayer() const override { return m_SDLayer; }
0083 
0084   void setSDIPhi(float SDIPhi) override { m_SDIPhi = SDIPhi; }
0085   float getSDIPhi() const override { return m_SDIPhi; }
0086 
0087   void setSDIT(float SDIT) override { m_SDIT = SDIT; }
0088   float getSDIT() const override { return m_SDIT; }
0089 
0090   void setSDWeightedLayer(float SDLayer) override { m_SDWeightedLayer = SDLayer; }
0091   float getSDWeightedLayer() const override { return m_SDWeightedLayer; }
0092 
0093   void setSDWeightedIPhi(float SDIPhi) override { m_SDWeightedIPhi = SDIPhi; }
0094   float getSDWeightedIPhi() const override { return m_SDWeightedIPhi; }
0095 
0096   void setSDWeightedIT(float SDIT) override { m_SDWeightedIT = SDIT; }
0097   float getSDWeightedIT() const override { return m_SDWeightedIT; }
0098 
0099   void addHit() override {m_hitVec.push_back({0.0,0.0,0.0,0.0}); m_hitVecHardware.push_back({0.0,0.0,0.0}); }
0100 
0101   void setHitLayer(int i, float layer) override {m_hitVecHardware[i][0] = layer; }
0102   float getHitLayer(int i) const override { return m_hitVecHardware[i][0]; }
0103 
0104   void setHitIPhi(int i, float iphi) override {m_hitVecHardware[i][1] = iphi; }
0105   float getHitIPhi(int i) const override { return m_hitVecHardware[i][1]; }
0106 
0107   void setHitIT(int i, float it) override {m_hitVecHardware[i][2] = it; }
0108   float getHitIT(int i) const override { return m_hitVecHardware[i][2]; }
0109 
0110   void setHitX(int i, float x) override {m_hitVec[i][0] = x; }
0111   float getHitX(int i) const override { return m_hitVec[i][0]; }
0112 
0113   void setHitY(int i, float y) override {m_hitVec[i][1] = y; }
0114   float getHitY(int i) const override { return m_hitVec[i][1]; }
0115 
0116   void setHitZ(int i, float z) override {m_hitVec[i][2] = z; }
0117   float getHitZ(int i) const override { return m_hitVec[i][2]; }
0118 
0119   void setHitAdc(int i, float adc) override {m_hitVec[i][3] = adc; }
0120   float getHitAdc(int i) const override { return m_hitVec[i][3]; }
0121 
0122 
0123  protected:
0124 
0125   /// mean cluster position
0126   float m_pos[3] = {std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN()};
0127   float m_posHardware[3] = {std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN()};
0128 
0129   bool m_fitMode{false};
0130 
0131   std::vector<std::vector<float>> m_hitVec;
0132   std::vector<std::vector<float>> m_hitVecHardware;
0133 
0134   /// cluster sum adc
0135   unsigned int m_adc = std::numeric_limits<unsigned int>::max();
0136   
0137   /// number of TPC clusters used to create this central mebrane cluster
0138   unsigned int m_nhits = std::numeric_limits<unsigned int>::max();
0139   unsigned int m_nLayers = std::numeric_limits<unsigned int>::max();
0140   unsigned int m_nIPhi = std::numeric_limits<unsigned int>::max();
0141   unsigned int m_nIT = std::numeric_limits<unsigned int>::max();
0142   float m_SDLayer = std::numeric_limits<float>::quiet_NaN();
0143   float m_SDIPhi = std::numeric_limits<float>::quiet_NaN();
0144   float m_SDIT = std::numeric_limits<float>::quiet_NaN();
0145   float m_SDWeightedLayer = std::numeric_limits<float>::quiet_NaN();
0146   float m_SDWeightedIPhi = std::numeric_limits<float>::quiet_NaN();
0147   float m_SDWeightedIT = std::numeric_limits<float>::quiet_NaN();
0148 
0149   ClassDefOverride(LaserClusterv2, 1)
0150 };
0151 
0152 #endif //TRACKBASE_LASERCLUSTERV2_H