ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtPad.cxx
Go to the documentation of this file.
1 /*********************************************************************
2  * AtTPC Pad Class AtPad *
3  * Author: Y. Ayyad *
4  * Log: 05-03-2015 19:24 JST *
5  * *
6  * *
7  *********************************************************************/
8 
9 #include "AtPad.h"
10 
11 #include <FairLogger.h>
12 
13 #include <TH1.h>
14 
15 #include <memory>
16 #include <string>
17 #include <utility>
19 
20 AtPad::AtPad(Int_t PadNum) : fPadNum(PadNum) {}
21 
22 void swap(AtPad &a, AtPad &b) noexcept
23 {
24  using std::swap; // Enable ADL
25 
26  swap(a.fPadNum, b.fPadNum);
27  swap(a.fSizeID, b.fSizeID);
28  swap(a.fPadCoord, b.fPadCoord);
29  swap(a.fIsValid, b.fIsValid);
30  swap(a.fIsPedestalSubtracted, b.fIsPedestalSubtracted);
31  swap(a.fRawAdc, b.fRawAdc);
32  swap(a.fAdc, b.fAdc);
33  swap(a.fPadAugments, b.fPadAugments);
34 }
36 {
37  swap(*this, obj);
38  return *this;
39 }
41  : fPadNum(o.fPadNum), fSizeID(o.fSizeID), fPadCoord(o.fPadCoord), fIsValid(o.fIsValid),
42  fIsPedestalSubtracted(o.fIsPedestalSubtracted), fRawAdc(o.fRawAdc), fAdc(o.fAdc)
43 {
44  for (const auto &pair : o.fPadAugments)
45  fPadAugments[pair.first] = pair.second->Clone();
46 }
47 std::unique_ptr<AtPadBase> AtPad::Clone() const
48 {
49  return std::make_unique<AtPad>(*this);
50 }
51 
55 std::unique_ptr<AtPad> AtPad::ClonePad() const
56 {
57  return std::make_unique<AtPad>(*this);
58 }
59 
63 AtPadBase *AtPad::AddAugment(std::string name, std::unique_ptr<AtPadBase> augment)
64 {
65  if (fPadAugments.find(name) != fPadAugments.end())
66  LOG(error) << "AtPad augment " << name
67  << " already exists in pad! If replacement is intentional use Atpad::ReplaceAugment() instead!";
68 
69  return ReplaceAugment(name, std::move(augment));
70 }
74 AtPadBase *AtPad::ReplaceAugment(std::string name, std::unique_ptr<AtPadBase> augment)
75 {
76  fPadAugments[name] = std::move(augment);
77  return fPadAugments[name].get();
78 }
82 AtPadBase *AtPad::GetAugment(std::string name)
83 {
84  return const_cast<AtPadBase *>(const_cast<const AtPad *>(this)->GetAugment(name)); // NOLINT
85 }
89 const AtPadBase *AtPad::GetAugment(std::string name) const
90 {
91  if (fPadAugments.find(name) == fPadAugments.end())
92  return nullptr;
93  else
94  return fPadAugments.at(name).get();
95 }
96 
98 {
100  LOG(debug) << "Pedestal subtraction was not done on pad " << fPadNum;
101 
102  return fAdc;
103 }
104 
105 Double_t AtPad::GetADC(Int_t idx) const
106 {
107  return GetADC()[idx];
108 }
109 
110 std::unique_ptr<TH1D> AtPad::GetADCHistrogram() const
111 {
112  auto histName = "adc" + std::to_string(GetPadNum());
113  auto histTitle = "ADC " + std::to_string(GetPadNum());
114  auto hist = std::make_unique<TH1D>(histName.data(), histTitle.data(), fAdc.size(), 0, fAdc.size() - 1);
115  hist->SetDirectory(nullptr); // Pass ownership to the pointer instead of current ROOT directory
116  for (int i = 0; i < fAdc.size(); ++i)
117  hist->SetBinContent(i + 1, fAdc[i]);
118  return hist;
119 }
AtPad::fPadNum
Int_t fPadNum
Definition: AtPad.h:45
AtPad::fIsPedestalSubtracted
Bool_t fIsPedestalSubtracted
Definition: AtPad.h:49
AtPad.h
swap
void swap(AtPad &a, AtPad &b) noexcept
Definition: AtPad.cxx:22
AtPad::fAdc
trace fAdc
Definition: AtPad.h:52
AtPad::AtPad
AtPad(Int_t PadNum=-1)
Definition: AtPad.cxx:20
AtPad::fPadAugments
std::map< std::string, std::unique_ptr< AtPadBase > > fPadAugments
Definition: AtPad.h:53
AtPadBase
Base class for AtPad composition pattern.
Definition: AtPadBase.h:37
ClassImp
ClassImp(AtPad)
AtPad::ClonePad
virtual std::unique_ptr< AtPad > ClonePad() const
Clone this pad (including augments).
Definition: AtPad.cxx:55
AtPad::trace
std::array< Double_t, 512 > trace
Definition: AtPad.h:41
AtPad::Clone
virtual std::unique_ptr< AtPadBase > Clone() const override
Definition: AtPad.cxx:47
AtPad::ReplaceAugment
AtPadBase * ReplaceAugment(std::string name, std::unique_ptr< AtPadBase > augment)
Definition: AtPad.cxx:74
AtPad::GetAugment
AtPadBase * GetAugment(std::string name)
Definition: AtPad.cxx:82
AtPad::GetPadNum
Int_t GetPadNum() const
Definition: AtPad.h:96
AtPad::GetADC
const trace & GetADC() const
Definition: AtPad.cxx:97
AtPad::operator=
AtPad & operator=(AtPad obj)
Definition: AtPad.cxx:35
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtPad::GetADCHistrogram
std::unique_ptr< TH1D > GetADCHistrogram() const
Definition: AtPad.cxx:110
AtPad::AddAugment
AtPadBase * AddAugment(std::string name, std::unique_ptr< AtPadBase > augment)
Definition: AtPad.cxx:63
AtPad::swap
friend void swap(AtPad &a, AtPad &b) noexcept
Definition: AtPad.cxx:22