Skip to content
Snippets Groups Projects
THcTrigRawHit.cxx 7.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
    \class THcTrigRawHit
    \ingroup DetSupport
    \brief Class representing a single raw hit for the THcTrigDet.
    
    
      - `signal 0` is ADC
      - `signal 1` is TDC
    
    It supports rich data from flash 250 ADC modules.
    
    /**
    \fn THcTrigRawHit::THcTrigRawHit(Int_t plane=0, Int_t counter=0)
    \brief A constructor.
    \param[in] plane Internal plane number of the hit. Should be `1` for ADC and
      `2` for TDC.
    \param[in] counter Internal bar number of the hit.
    */
    
    /**
    \fn THcTrigRawHit& THcTrigRawHit::operator=(const THcTrigRawHit& right)
    \brief Assignment operator.
    \param[in] right Raw hit to be assigned.
    */
    
    /**
    \fn THcTrigRawHit::~THcTrigRawHit()
    \brief A destructor.
    */
    
    /**
    \fn void THcTrigRawHit::Clear(Option_t* opt="")
    \brief Clears variables before next event.
    
    \param[in] opt Maybe used in base class... Not sure.
    
    
    */
    
    /**
    \fn void THcTrigRawHit::SetData(Int_t signal, Int_t data)
    \brief Sets next data value.
    \param[in] signal ADC or TDC.
    \param[in] data Value to be set.
    
    \throw std::out_of_range Tried to set wrong signal.
    
    */
    
    /**
    \fn void THcTrigRawHit::SetSample(Int_t signal, Int_t data)
    \brief Sets next waveform sample value.
    
    \param[in] signal ADC.
    
    \param[in] data Sample value to be set.
    
    \throw std::out_of_range Tried to set wrong signal.
    
    */
    
    /**
    \fn void THcTrigRawHit::SetDataTimePedestalPeak(
      Int_t signal, Int_t data, Int_t time, Int_t pedestal, Int_t peak)
    \brief Sets multiple bits of data from flash 250 ADC modules.
    
    \param[in] signal ADC.
    
    \param[in] data ADC sum value to be set.
    \param[in] time Time of the peak.
    \param[in] pedestal Pedestal value.
    \param[in] peak Sample ADC value at peak.
    
    \throw std::out_of_range Tried to set wrong signal.
    
    */
    
    /**
    \fn void THcTrigRawHit::SetReference(Int_t signal, Int_t reference)
    \brief Sets reference time.
    
    \param[in] signal TDC.
    
    \param[in] reference Reference time to be set.
    
    \throw std::out_of_range Tried to set wrong signal.
    
    */
    
    /**
    \fn Int_t THcTrigRawHit::GetData(Int_t signal)
    \brief Gets data for first hit of signal.
    \param[in] signal ADC or TDC.
    
    \throw std::out_of_range Tried to get wrong signal.
    
    */
    
    /**
    \fn Int_t THcTrigRawHit::GetRawData(Int_t signal)
    \brief Gets raw data for first hit of signal.
    \param[in] signal ADC or TDC.
    
    \throw std::out_of_range Tried to get wrong signal.
    
    \fn Int_t THcTrigRawHit::GetReference(Int_t signal)
    \brief Returns reference time.
    \param[in] signal TDC.
    \throw std::out_of_range Tried to get wrong signal.
    
    */
    
    /**
    \fn THcRawHit::ESignalType THcTrigRawHit::GetSignalType(Int_t signal)
    \brief Returns the signal type.
    \param[in] signal ADC or TDC.
    
    \throw std::out_of_range Tried to get wrong signal.
    
    \fn Int_t THcTrigRawHit::GetNSignals()
    \brief Returns number of signal handled by this class, i.e., `2`.
    
    \fn Bool_t THcTrigRawHit::HasReference(Int_t signal)
    \brief Checks if reference time is available.
    \param[in] signal TDC.
    \throw std::out_of_range Tried to get wrong signal.
    
    \fn THcRawAdcHit& THcTrigRawHit::GetRawAdcHit()
    \brief Gets reference to THcRawAdcHit.
    
    \fn THcRawTdcHit& THcTrigRawHit::GetRawTdcHit()
    \brief Gets reference to THcRawTdcHit.
    
    /**
    \fn void THcTrigRawHit::SetF250Params(Int_t NSA, Int_t NSB, Int_t NPED)
    \brief See THcRawAdcHit::SetF250Params.
    */
    
    
    // TODO: Check if signal matches plane.
    
    
    #include "THcTrigRawHit.h"
    
    
    #include <iostream>
    
    #include <string>
    
    #include <stdexcept>
    
    
    #include "TObject.h"
    #include "TString.h"
    
    
    
    THcTrigRawHit::THcTrigRawHit(
      Int_t plane, Int_t counter
    
    ) : THcRawHit(plane, counter), fAdcHits(), fTdcHits() {}
    
    
    
    THcTrigRawHit& THcTrigRawHit::operator=(const THcTrigRawHit& right) {
      // Call base class assignment operator.
      THcRawHit::operator=(right);
    
    
      if (this != &right) {
    
        for (Int_t iAdcSig=0; iAdcSig<fNAdcSignals; ++iAdcSig) {
          fAdcHits[iAdcSig] = right.fAdcHits[iAdcSig];
    
        for (Int_t iTdcSig=0; iTdcSig<fNTdcSignals; ++iTdcSig) {
          fTdcHits[iTdcSig] = right.fTdcHits[iTdcSig];
    
    
      return *this;
    }
    
    
    THcTrigRawHit::~THcTrigRawHit() {}
    
    
    void THcTrigRawHit::Clear(Option_t* opt) {
    
      THcRawHit::Clear(opt);
    
      for (Int_t iAdcSig=0; iAdcSig<fNAdcSignals; ++iAdcSig) {
        fAdcHits[iAdcSig].Clear();
      }
      for (Int_t iTdcSig=0; iTdcSig<fNTdcSignals; ++iTdcSig) {
        fTdcHits[iTdcSig].Clear();
    
    }
    
    
    void THcTrigRawHit::SetData(Int_t signal, Int_t data) {
    
      if (0 <= signal && signal < fNAdcSignals) {
        fAdcHits[signal].SetData(data);
    
      else if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        fTdcHits[signal-fNAdcSignals].SetTime(data);
      }
      else {
        throw std::out_of_range(
          "`THcTrigRawHit::SetData`: only signals `0` and `1` available!"
        );
    
    void THcTrigRawHit::SetSample(Int_t signal, Int_t data) {
    
      if (0 <= signal && signal < fNAdcSignals) {
        fAdcHits[signal].SetSample(data);
      }
      else {
        throw std::out_of_range(
          "`THcTrigRawHit::SetSample`: only signal `0` available!"
        );
    
    void THcTrigRawHit::SetDataTimePedestalPeak(
      Int_t signal, Int_t data, Int_t time, Int_t pedestal, Int_t peak
    ) {
    
      if (0 <= signal && signal < fNAdcSignals) {
        fAdcHits[signal].SetDataTimePedestalPeak(data, time, pedestal, peak);
      }
      else {
        throw std::out_of_range(
          "`THcTrigRawHit::SetDataTimePedestalPeak`: only signal `0` available!"
        );
    
      }
    }
    
    
    void THcTrigRawHit::SetReference(Int_t signal, Int_t reference) {
    
      if (signal < fNAdcSignals) {
        fAdcHits[signal].SetRefTime(reference);
      } else if (signal < fNAdcSignals+fNTdcSignals) {
    
        fTdcHits[signal-fNAdcSignals].SetRefTime(reference);
    
      } else {
    
        throw std::out_of_range(
    
          "`THcTrigRawHit::SetReference`: only signals `2` and `3` available!"
    
    }
    
    
    Int_t THcTrigRawHit::GetData(Int_t signal) {
    
      if (0 <= signal && signal < fNAdcSignals) {
        return fAdcHits[signal].GetPulseInt();
    
      else if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        return fTdcHits[signal-fNAdcSignals].GetTime();
    
        throw std::out_of_range(
          "`THcTrigRawHit::GetData`: only signals `0` and `1` available!"
    
    Int_t THcTrigRawHit::GetRawData(Int_t signal) {
      if (0 <= signal && signal < fNAdcSignals) {
        return fAdcHits[signal].GetPulseIntRaw();
    
      else if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        return fTdcHits[signal-fNAdcSignals].GetTimeRaw();
    
        throw std::out_of_range(
          "`THcTrigRawHit::GetRawData`: only signals `0` and `1` available!"
        );
    
    Int_t THcTrigRawHit::GetReference(Int_t signal) {
      if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        return fTdcHits[signal-fNAdcSignals].GetRefTime();
    
        throw std::out_of_range(
          "`THcTrigRawHit::GetReference`: only signal `1` available!"
        );
    
      }
    }
    
    
    THcRawHit::ESignalType THcTrigRawHit::GetSignalType(Int_t signal) {
    
      if (0 <= signal && signal < fNAdcSignals) {
        return kADC;
      }
      else if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        return kTDC;
      }
    
      else {
        throw std::out_of_range(
          "`THcTrigRawHit::GetSignalType`: only signals `0` and `1` available!"
        );
      }
    
    Int_t THcTrigRawHit::GetNSignals() {
      return fNAdcSignals + fNTdcSignals;
    
    Bool_t THcTrigRawHit::HasReference(Int_t signal) {
      if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        return fTdcHits[signal-fNAdcSignals].HasRefTime();
    
      }
      else {
        throw std::out_of_range(
    
          "`THcTrigRawHit::HasReference`: only signal `1` available!"
    
    THcRawAdcHit& THcTrigRawHit::GetRawAdcHit() {
      return fAdcHits[0];
    
    THcRawTdcHit& THcTrigRawHit::GetRawTdcHit() {
      return fTdcHits[0];
    
    void THcTrigRawHit::SetF250Params(Int_t NSA, Int_t NSB, Int_t NPED) {
      for (Int_t iAdcSig=0; iAdcSig<fNAdcSignals; ++iAdcSig) {
        fAdcHits[iAdcSig].SetF250Params(NSA, NSB, NPED);
      }
    }
    
    
    
    ClassImp(THcTrigRawHit)