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