Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:52

0001 #ifndef MBD_MBDOUTV2_H
0002 #define MBD_MBDOUTV2_H
0003 
0004 #include "MbdOut.h"
0005 
0006 #include <iostream>
0007 #include <limits>
0008 
0009 class TClonesArray;
0010 
0011 ///
0012 class MbdOutV2 : public MbdOut
0013 {
0014  public:
0015   ///
0016   MbdOutV2() = default;
0017   ///
0018   ~MbdOutV2() override = default;
0019 
0020   /// Clear Event from memory
0021   void Reset() override;
0022 
0023   /** identify Function from PHObject
0024       @param os Output Stream
0025    */
0026   void identify(std::ostream &out = std::cout) const override;
0027 
0028   /// isValid returns non zero if object contains vailid data
0029   int isValid() const override;
0030 
0031   ///  functions to copy nodes for embedding
0032   PHObject* CloneMe() const override { return new MbdOutV2(*this); }
0033   void CopyTo(MbdOut *mbd) override;
0034 
0035   /// get ZVertex determined by MBD
0036   Float_t get_zvtx() const override { return bz; }
0037 
0038   /// get Error on ZVertex determined by MBD
0039   Float_t get_zvtxerr() const override { return bzerr; }
0040 
0041   /// get T0 determined by MBD
0042   Float_t get_t0() const override { return bt0; }
0043 
0044   /// get Error on T0 determined by MBD
0045   Float_t get_t0err() const override { return bt0err; }
0046 
0047   /** set T0 for MBD
0048       @param t0 MBD T0
0049       @param t0err MBD T0 error
0050    */
0051   void set_t0(const Float_t t0, const Float_t t0err = 0) override;
0052 
0053   //! set vertex
0054   void set_zvtx(const Float_t vtx, const Float_t vtxerr = 0) override;
0055 
0056   /** set Vtx Error for MBD
0057       @param vtxerr MBD Vtx Error
0058   */
0059   void set_zvtxerr(const Float_t vtxerr) override;
0060 
0061   /** Add MBD North/South data containing Number of pmt's, Energy and Timing
0062       @param npmt Number of PMT's fired
0063       @param energy Energy in North/South
0064       @param timing Timing of North/South
0065       @param iarm  Arm, use MBD::North and MBD::South
0066    */
0067   void set_arm(const int iarm, const Short_t npmt, const Float_t chargesum, const Float_t timing) override;
0068 
0069   /** Add Mbd data containing evt, clk, and femclk
0070       @param ievt   Event number
0071       @param iclk    XMIT clock
0072       @param ifemclk FEM clock
0073    */
0074   virtual void set_clocks(const Int_t ievt, const UShort_t iclk, const UShort_t ifemclk) override;
0075 
0076   /** get Number of PMT's fired in North/South MBD
0077       @param iarm  Arm, use MBD::North and MBD::South
0078    */
0079   Short_t get_npmt(const int iarm) const override;
0080 
0081   /** get Number of Charged Particles into North/South MBD
0082       @param iarm  Arm, use MBD::North and MBD::South
0083    */
0084   Float_t get_q(const int iarm) const override;
0085 
0086   /** get Timing of North/South MBD
0087       @param iarm  Arm, use MBD::North and MBD::South
0088    */
0089   Float_t get_time(const int iarm) const override;
0090 
0091   /** get Event Number
0092    */
0093   virtual Int_t get_evt() const override;
0094 
0095   /** get XMIT Clock Counter
0096    */
0097   virtual UShort_t get_clock() const override;
0098 
0099   /** get FEM Clock Counter
0100    */
0101   virtual UShort_t get_femclock() const override;
0102 
0103  private:
0104   Float_t bz{std::numeric_limits<Float_t>::quiet_NaN()};
0105   Float_t bzerr{std::numeric_limits<Float_t>::quiet_NaN()};
0106   Float_t bt0{std::numeric_limits<Float_t>::quiet_NaN()};
0107   Float_t bt0err{std::numeric_limits<Float_t>::quiet_NaN()};
0108   Float_t bqs{0};
0109   Float_t bqn{0};
0110   Float_t bts{std::numeric_limits<Float_t>::quiet_NaN()};
0111   Float_t btn{std::numeric_limits<Float_t>::quiet_NaN()};
0112   Short_t bns{0};
0113   Short_t bnn{0};
0114   Int_t evt{-1};
0115   UShort_t clk{0};
0116   UShort_t femclk{0};
0117 
0118   ClassDefOverride(MbdOutV2, 1)
0119 };
0120 
0121 #endif