FTLDataFrameT

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
#ifndef DIGIFTL_FTLDATAFRAMET_H
#define DIGIFTL_FTLDATAFRAMET_H

#include <vector>
#include <ostream>
#include <iostream>

/**
   @class FTLDataFrameT
   @short Readout digi for HGC
*/

template <class D, class S, class DECODE>
class FTLDataFrameT {
public:
  /**
     @short key to sort the collection
  */
  typedef D key_type;

  /**
     @short CTOR
  */
  FTLDataFrameT() : id_(0), maxSampleSize_(15) { data_.resize(maxSampleSize_); }
  FTLDataFrameT(const D& id) : id_(id), maxSampleSize_(15) { data_.resize(maxSampleSize_); }

  /**
    @short det id
  */
  const D& id() const { return id_; }

  /**
   @short row
   */
  const int row() const { return DECODE::row(id_, data_); }

  /**
   @short column
   */
  const int column() const { return DECODE::col(id_, data_); }

  /** 
    @short total number of samples in the digi 
  */
  int size() const { return data_.size() & 0xf; }

  /**
     @short allow to set size
   */
  void resize(size_t s) { data_.resize(s); }

  /**
     @short assess/set specific samples
  */
  const S& operator[](int i) const { return data_[i]; }
  const S& sample(int i) const { return data_[i]; }
  void setSample(int i, const S& sample) {
    if (i < (int)data_.size())
      data_[i] = sample;
  }
  void print(std::ostream& out = std::cout) {
    for (size_t i = 0; i < data_.size(); i++) {
      out << "[" << i << "] ";
      data_[i].print(out);
    }
  }

private:
  //collection of samples
  std::vector<S> data_;

  // det id for this data frame
  D id_;

  //number of samples and maximum available
  size_t maxSampleSize_;
};

#endif