Skip to content
Snippets Groups Projects
Select Git revision
  • cda923ab0fcb01b44b23542488c16546bae98832
  • master default protected
  • nightly_master
  • online_much_readconf_cleanup protected
  • online_mvd_readconf_cleanup protected
  • jul25_patches
  • cleanup_rich_v25a
  • jul24_patches
  • nov23_patches
  • DC_2404
  • nighly_master
  • DC_Jan24
  • DC_Nov23
  • DC_Oct23
  • feb23_patches
  • L1Algo-dev9
  • dec21_patches protected
  • apr21_patches protected
  • dev_2025_48
  • dev_2025_47
  • RC2_jul25
  • dev_2025_46
  • dev_2025_45
  • dev_2025_44
  • dev_2025_43
  • dev_2025_42
  • dev_2025_41
  • dev_2025_40
  • dev_2025_39
  • dev_2025_38
  • dev_2025_37
  • dev_2025_36
  • dev_2025_35
  • dev_2025_34
  • dev_2025_33
  • dev_2025_32
  • dev_2025_31
  • dev_2025_30
38 results

CbmTrdModuleAbstract.h

Blame
  • Florian Uhlig's avatar
    Administrator authored
    Apply code formatting to all source/header files and root macros.
    cda923ab
    History
    CbmTrdModuleAbstract.h 3.92 KiB
    #ifndef CBMTRDMODULEABSTRACT_H
    #define CBMTRDMODULEABSTRACT_H
    
    #include <Rtypes.h>      // for THashConsistencyHolder, ClassDef
    #include <RtypesCore.h>  // for Int_t, Double_t, Char_t, UChar_t, USho...
    #include <TNamed.h>      // for TNamed
    
    #include "CbmTrdParModDigi.h"  // for CbmTrdParModDigi
    #include "CbmTrdParModGeo.h"   // for CbmTrdParModGeo
    #include "CbmTrdParSetAsic.h"  // for CbmTrdParSetAsic
    
    class CbmTrdParModGain;
    class CbmTrdParModGas;
    
    /**
      * \brief Abstract class for TRD module
      **/
    class CbmTrdModuleAbstract : public TNamed {
    public:
      /** \brief Default constructor.*/
      CbmTrdModuleAbstract();
      /** \brief Constructor with placement */
      CbmTrdModuleAbstract(Int_t mod, Int_t ly, Int_t rot);
    
      virtual ~CbmTrdModuleAbstract();
    
      /** \brief Shortcut getter size x/2 [cm] */
      virtual Double_t GetDx() const { return fGeoPar ? fGeoPar->GetDX() : 0.; }
      /** \brief Shortcut getter size y/2 [cm] */
      virtual Double_t GetDy() const { return fGeoPar ? fGeoPar->GetDY() : 0.; }
      /** \brief Shortcut getter size z/2 [cm] */
      virtual Double_t GetDz() const { return fGeoPar ? fGeoPar->GetDZ() : 0.; }
      /** \brief Shortcut getter ASICs number module wise */
      virtual Int_t GetNasics() const {
        return fAsicPar ? fAsicPar->GetNofAsics() : 0;
      }
      /** \brief Shortcut getter column size */
      virtual Int_t GetNcols() const {
        return fDigiPar ? fDigiPar->GetNofColumns() : 0;
      }
      /** \brief Shortcut getter row wise */
      virtual Int_t GetNrows() const {
        return fDigiPar ? fDigiPar->GetNofRows() : 0;
      }
      /** \brief Addressing ASIC on module based on id
       * \param[in] id module wise ASIC identifier
       * \return ASIC address within experiment
       */
      virtual Int_t GetAsicAddress(Int_t id) const {
        return fModAddress * 1000 + id;
      }
      /** \brief Addressing read-out pads on module based on (row,col)
       * \param[in] r global row id (not sector wise)
       * \param[in] c global column id
       * \return pad address within module
       */
      virtual Int_t GetPadAddress(Int_t r, Int_t c) const {
        return r * GetNcols() + c;
      }
      /** \brief Addressing read-out pads based on module address
       * \param[in] address pad address within module
       * \param[in] c on return global column id
       * \return global row address within module
       */
      virtual inline Int_t GetPadRowCol(Int_t address, Int_t& c) const;
      virtual const Char_t* GetPath() const {
        return fGeoPar ? fGeoPar->GetTitle() : "";
      }
      virtual void LocalToMaster(Double_t in[3], Double_t out[3]);
      virtual void SetAsicPar(CbmTrdParSetAsic* p = nullptr) { fAsicPar = p; }
      virtual void SetChmbPar(const CbmTrdParModGas* p) { fChmbPar = p; }
      virtual void SetDigiPar(const CbmTrdParModDigi* p) { fDigiPar = p; }
      virtual void SetGainPar(const CbmTrdParModGain* p) { fGainPar = p; }
      virtual void SetGeoPar(const CbmTrdParModGeo* p) { fGeoPar = p; }
    
    protected:
      // geometrical definitions imported from CbmTrdGeoHandler
      UShort_t fModAddress;  ///< unique identifier for current module
      Char_t fLayerId;       ///< layer identifier
      UChar_t fRotation;     ///< rotation angle for current module
    
      // calibration objects
      const CbmTrdParModDigi* fDigiPar;  ///< read-out description of module
      const CbmTrdParModGas*
        fChmbPar;  ///< detection description (HV, drift) of module
      CbmTrdParSetAsic*
        fAsicPar;  ///< the set of ASIC operating on the module (owned)
      const CbmTrdParModGain*
        fGainPar;                      ///< Analog to digital conversion for module
      const CbmTrdParModGeo* fGeoPar;  ///< link to gGeometry for module
    
    private:
      CbmTrdModuleAbstract(const CbmTrdModuleAbstract& ref);
      const CbmTrdModuleAbstract& operator=(const CbmTrdModuleAbstract& ref);
    
      ClassDef(CbmTrdModuleAbstract, 1)
    };
    
    //_______________________________________________________________________________
    Int_t CbmTrdModuleAbstract::GetPadRowCol(Int_t address, Int_t& c) const {
      if (!fDigiPar) {
        c = -1;
        return -1;
      }
      c = address % GetNcols();
      return address / GetNcols();
    }
    
    #endif