GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TMnemonic.cxx
Go to the documentation of this file.
1#include "TMnemonic.h"
2
3#include <iostream>
4
5#include "TRandom.h"
6
7bool TMnemonic::fPrint = true;
8
23
24void TMnemonic::EnumerateMnemonic(std::string mnemonic_word, EMnemonic& mnemonic_enum)
25{
26 char mnemonic_char = mnemonic_word[0];
27 switch(mnemonic_char) {
28 case 'A': mnemonic_enum = EMnemonic::kA; break;
29 case 'B': mnemonic_enum = EMnemonic::kB; break;
30 case 'C': mnemonic_enum = EMnemonic::kC; break;
31 case 'D': mnemonic_enum = EMnemonic::kD; break;
32 case 'E': mnemonic_enum = EMnemonic::kE; break;
33 case 'F': mnemonic_enum = EMnemonic::kF; break;
34 case 'G': mnemonic_enum = EMnemonic::kG; break;
35 case 'H': mnemonic_enum = EMnemonic::kH; break;
36 case 'I': mnemonic_enum = EMnemonic::kI; break;
37 case 'J': mnemonic_enum = EMnemonic::kJ; break;
38 case 'K': mnemonic_enum = EMnemonic::kK; break;
39 case 'L': mnemonic_enum = EMnemonic::kL; break;
40 case 'M': mnemonic_enum = EMnemonic::kM; break;
41 case 'N': mnemonic_enum = EMnemonic::kN; break;
42 case 'O': mnemonic_enum = EMnemonic::kO; break;
43 case 'P': mnemonic_enum = EMnemonic::kP; break;
44 case 'Q': mnemonic_enum = EMnemonic::kQ; break;
45 case 'R': mnemonic_enum = EMnemonic::kR; break;
46 case 'S': mnemonic_enum = EMnemonic::kS; break;
47 case 'T': mnemonic_enum = EMnemonic::kT; break;
48 case 'U': mnemonic_enum = EMnemonic::kU; break;
49 case 'V': mnemonic_enum = EMnemonic::kV; break;
50 case 'W': mnemonic_enum = EMnemonic::kW; break;
51 case 'X': mnemonic_enum = EMnemonic::kX; break;
52 case 'Y': mnemonic_enum = EMnemonic::kY; break;
53 case 'Z': mnemonic_enum = EMnemonic::kZ; break;
54 default: mnemonic_enum = EMnemonic::kClear;
55 };
56}
57
58void TMnemonic::Parse(std::string* name)
59{
60 if((name == nullptr) || name->length() < 9) {
61 // ??? has this ever worked? How can we compare 2 characters from a string with a length < 1, i.e. an empty string?
62 // or use a null pointer for this?
63 if((name->length() < 1) && (name->compare(0, 2, "RF") == 0)) {
64 SetRFMnemonic(name);
65 }
66 return;
67 }
68 SetName(*name);
69 std::string buf;
70 fSystemString.assign(*name, 0, 2);
71 fSubSystemString.assign(*name, 2, 1);
73 buf.clear();
74 buf.assign(*name, 3, 2);
75 fArrayPosition = static_cast<int16_t>(atoi(buf.c_str()));
76 // TIP is a Bad Mnemonic and uses 3 characters for array position this may be changed in the future - S. Gillespie
77 if(fSystemString == "TP") {
78 fArraySubPositionString.assign(*name, 5, 2);
79 } else {
80 fArraySubPositionString.assign(*name, 5, 1);
81 }
83 fCollectedChargeString.assign(*name, 6, 1);
85 buf.clear();
86 buf.assign(*name, 7, 2);
87 fSegment = static_cast<int16_t>(atoi(buf.c_str()));
88 fOutputSensorString.assign(*name, 9, 1);
90}
91
92void TMnemonic::Parse(const char* name)
93{
94 std::string sname = name;
95 Parse(&sname);
96}
97
112
113void TMnemonic::Print(std::ostringstream& str) const
114{
115 str << "fArrayPosition = " << fArrayPosition << std::endl;
116 str << "fSegment = " << fSegment << std::endl;
117 str << "fSystemString = " << fSystemString << std::endl;
118 str << "fSubSystemString = " << fSubSystemString << std::endl;
119 str << "fArraySubPositionString = " << fArraySubPositionString << std::endl;
120 str << "fCollectedChargeString = " << fCollectedChargeString << std::endl;
121 str << "fOutputSensorString = " << fOutputSensorString << std::endl;
122}
123
124void TMnemonic::Print(Option_t*) const
125{
126 std::ostringstream str;
127 str << "====== MNEMONIC ======" << std::endl;
128 Print(str);
129 str << "===============================" << std::endl;
130 std::cout << str.str();
131}
132
134{
135 switch(fArraySubPosition) {
137 return 0;
139 return 1;
141 return 2;
143 return 3;
144 default:
145 return 5;
146 };
147
148 // return statement here instead of default case
149 // to make sure compiler doesn't warn us about missing return
150 return 5;
151}
152
154{
155 return fClassType;
156}
157
158double TMnemonic::GetTime(Long64_t timestamp, Float_t, double, const TChannel* channel) const
159{
160 return (static_cast<double>(timestamp) + gRandom->Uniform()) * static_cast<double>(channel->GetTimeStampUnit());
161}
int GetTimeStampUnit() const
Definition TChannel.h:172
std::string fArraySubPositionString
Definition TMnemonic.h:112
void SetName(const char *val)
Definition TMnemonic.h:102
int16_t fSegment
Definition TMnemonic.h:109
static bool fPrint
Definition TMnemonic.h:125
virtual int NumericArraySubPosition() const
TClass * fClassType
! TGRSIDetector Type that this mnemonic represents
Definition TMnemonic.h:121
EMnemonic fOutputSensor
Definition TMnemonic.h:119
std::string fOutputSensorString
Definition TMnemonic.h:114
void Print(Option_t *opt="") const override
void EnumerateMnemonic(std::string mnemonic_word, EMnemonic &mnemonic_enum)
Definition TMnemonic.cxx:24
EMnemonic fCollectedCharge
Definition TMnemonic.h:118
EMnemonic fSubSystem
Definition TMnemonic.h:116
std::string fSystemString
Definition TMnemonic.h:110
EMnemonic fArraySubPosition
Definition TMnemonic.h:117
virtual void Parse(std::string *name)
Definition TMnemonic.cxx:58
std::string fCollectedChargeString
Definition TMnemonic.h:113
void Clear(Option_t *opt="") override
Definition TMnemonic.cxx:9
virtual TClass * GetClassType() const
std::string fSubSystemString
Definition TMnemonic.h:111
virtual void SetRFMnemonic(std::string *name)
Definition TMnemonic.cxx:98
int16_t fArrayPosition
Definition TMnemonic.h:108
virtual double GetTime(Long64_t timestamp, Float_t cfd, double energy, const TChannel *channel) const