Skip to content
Snippets Groups Projects
THcRawHodoHit.cxx 4.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
    \class THcRawHodoHit
    \ingroup DetSupport
    
    \brief Class representing a single raw hit for a hodoscope paddle.
    
      - `signal 0` is ADC pos
      - `signal 1` is ADC neg
      - `signal 2` is TDC pos
      - `signal 3` is TDC neg
    
    THcRawHodoHit::THcRawHodoHit(Int_t plane, Int_t counter) :
    
      THcRawHit(plane, counter), fAdcHits(), fTdcHits()
    
    THcRawHodoHit& THcRawHodoHit::operator=(const THcRawHodoHit& right) {
      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];
        }
    
    
    THcRawHodoHit::~THcRawHodoHit() {}
    
    
    void THcRawHodoHit::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 THcRawHodoHit::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(
          "`THcRawHodoHit::SetData`: only signals `0` to `3` available!"
        );
    
    
    void THcRawHodoHit::SetSample(Int_t signal, Int_t data) {
      if (0 <= signal && signal < fNAdcSignals) {
        fAdcHits[signal].SetSample(data);
      }
      else {
        throw std::out_of_range(
          "`THcRawHodoHit::SetSample`: only signals `0` and `1` available!"
        );
    
    
    void THcRawHodoHit::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(
          "`THcRawHodoHit::SetDataTimePedestalPeak`: only signals `0` and `1` available!"
        );
    
    
    void THcRawHodoHit::SetReference(Int_t signal, Int_t reference) {
      if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        fTdcHits[signal-fNAdcSignals].SetRefTime(reference);
      }
      else {
        throw std::out_of_range(
          "`THcRawHodoHit::SetReference`: only signals `2` and `3` available!"
        );
    
    Int_t THcRawHodoHit::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();
      }
      else {
        throw std::out_of_range(
          "`THcRawHodoHit::GetData`: only signals `0` to `3` available!"
        );
    
    Int_t THcRawHodoHit::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();
      }
      else {
        throw std::out_of_range(
          "`THcRawHodoHit::GetRawData`: only signals `0` to `3` available!"
    
    
    Int_t THcRawHodoHit::GetReference(Int_t signal) {
      if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        return fTdcHits[signal-fNAdcSignals].GetRefTime();
      }
      else {
        throw std::out_of_range(
          "`THcRawHodoHit::GetReference`: only signals `2` and `3` available!"
        );
    
    
    
    THcRawHit::ESignalType THcRawHodoHit::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(
          "`THcRawHodoHit::GetSignalType`: only signals `0` to `3` available!"
        );
    
    Int_t THcRawHodoHit::GetNSignals() {
      return fNAdcSignals + fNTdcSignals;
    }
    
    Bool_t THcRawHodoHit::HasReference(Int_t signal) {
      if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
        return fTdcHits[signal-fNAdcSignals].HasRefTime();
    
      else {
        throw std::out_of_range(
          "`THcRawHodoHit::HasReference`: only signals `2` and `3` available!"
        );
      }
    }
    
    
    THcRawAdcHit& THcRawHodoHit::GetRawAdcHitPos() {
      return fAdcHits[0];
    }
    
    
    THcRawAdcHit& THcRawHodoHit::GetRawAdcHitNeg() {
      return fAdcHits[1];
    }
    
    
    THcRawTdcHit& THcRawHodoHit::GetRawTdcHitPos() {
      return fTdcHits[0];
    }
    
    
    THcRawTdcHit& THcRawHodoHit::GetRawTdcHitNeg() {
      return fTdcHits[1];
    
    void THcRawHodoHit::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(THcRawHodoHit)