JAPAn
Just Another Parity Analyzer
Loading...
Searching...
No Matches
QwTypes.h
Go to the documentation of this file.
1/*!
2 * \file QwTypes.h
3 * \brief Basic data types and constants used throughout the Qweak analysis framework
4 */
5
6#pragma once
7
8// C and C++ headers
9#include <map>
10#include <iostream>
11
12// ROOT basic types
13#include <Rtypes.h>
14class TString;
15
16// Qweak headers
17#include "QwUnits.h"
18
19// Types for the ROC_ID and Bank_ID used in decoding and distributing data
20typedef UInt_t ROCID_t;
21typedef ULong64_t BankID_t; /// Bank ID will combine both bank and marker words
22static const ROCID_t kNullROCID = kMaxUInt;
23static const BankID_t kNullBankID = kMaxULong64;
24
25
26// Enumerator types for regions and directions
33inline std::ostream& operator<< (std::ostream& stream, const EQwRegionID& i) {
34 stream << "?123TCS#"[i]; return stream;
35}
36typedef std::map < char, EQwRegionID > QwRegionMap;
38{
39 QwRegionMap map;
40 map['?'] = kRegionIDNull;
41 map['1'] = kRegionID1;
42 map['2'] = kRegionID2;
43 map['3'] = kRegionID3;
44 map['T'] = kRegionIDTrig;
45 map['C'] = kRegionIDCer;
46 map['S'] = kRegionIDScanner;
47 return map;
48}
50
51
60inline std::ostream& operator<< (std::ostream& stream, const EQwDirectionID& i) {
61 stream << "?xyuvrfLR#"[i]; return stream;
62}
63typedef std::map < char, EQwDirectionID > QwDirectionMap;
65{
67 map['?'] = kDirectionNull;
68 map['x'] = kDirectionX;
69 map['y'] = kDirectionY;
70 map['u'] = kDirectionU;
71 map['v'] = kDirectionV;
72 map['r'] = kDirectionR;
73 map['f'] = kDirectionPhi;
74 map['L'] = kDirectionLeft;
75 map['R'] = kDirectionRight;
76 return map;
77}
79
80// Currently up and down are considered two packages.
87// NOTE: Packages will be defined with respect to the *fixed magnet octants*.
88// This means that after a rotation of 45 deg from the vertical position,
89// one package will be identified as kPackageUpLeft (name?), and the other
90// package as kPackageDownRight. (wdc, based on discussion with pking)
91inline std::ostream& operator<< (std::ostream& stream, const EQwDetectorPackage& i) {
92 stream << "?12#"[i]; return stream;
93}
94typedef std::map < char, EQwDetectorPackage > QwPackageMap;
96{
97 QwPackageMap map;
98 map['?'] = kPackageNull;
99 map['1'] = kPackage1;
100 map['2'] = kPackage2;
101 return map;
102}
104
107 kTypeSciFiber, // Scintillating Fiber detector
108 kTypeDriftHDC, // HDC Drift chamber
109 kTypeDriftVDC, // VDC Drift chamber
110 kTypeTrigscint, // Trigger scintillator
111 kTypeCerenkov, // Cerenkov detector
112 kTypeScanner, // Focal plane scanner
114};
115inline std::ostream& operator<< (std::ostream& stream, const EQwDetectorType& i) {
116 stream << "?fhvtcs#"[i]; return stream;
117}
118typedef std::map < char, EQwDetectorType > QwTypeMap;
120{
121 QwTypeMap map;
122 map['?'] = kTypeNull;
123 map['f'] = kTypeSciFiber;
124 map['h'] = kTypeDriftHDC;
125 map['v'] = kTypeDriftVDC;
126 map['t'] = kTypeTrigscint;
127 map['c'] = kTypeCerenkov;
128 map['s'] = kTypeScanner;
129 return map;
130}
132
133// Enumerator type for the instrument type, used in subsystems that have to
134// distinguish between various detector types.
136 kQwUnknownPMT = 0, // Unknown PMT type
137 kQwIntegrationPMT, // Integration PMT
138 kQwScalerPMT, // Scaler PMT
139 kQwCombinedPMT, // Combined PMT
140 kNumInstrumentTypes // This should be the last enum; it provides the number of know types.
141};
142
157
158//Beamline device errorflags
159static const UInt_t kErrorFlag_VQWK_Sat = 0x01; // in Decimal 1 to identify a VQWK is saturating
160static const UInt_t kErrorFlag_sample = 0x2; // in Decimal 2 for sample size check
161static const UInt_t kErrorFlag_SW_HW = 0x4; // in Decimal 4 HW_sum==SW_sum check
162static const UInt_t kErrorFlag_Sequence = 0x8; // in Decimal 8 sequence number check
163static const UInt_t kErrorFlag_SameHW = 0x10; // in Decimal 16 check to see ADC returning same HW value
164static const UInt_t kErrorFlag_ZeroHW = 0x20; // in Decimal 32 check to see ADC returning zero
165static const UInt_t kErrorFlag_EventCut_L = 0x40; // in Decimal 64 check to see ADC failed lower limit of the event cut
166static const UInt_t kErrorFlag_EventCut_U = 0x80; // in Decimal 128 check to see ADC failed upper limit of the event cut
167
168static const UInt_t kBCMErrorFlag = 0x100; // in Decimal 256 to identify the single event cut is failed for a BCM (regular or combo)
169static const UInt_t kErrorFlag_BlinderFail = 0x200;// in Decimal 512 to identify the blinder flag
170static const UInt_t kBPMErrorFlag = 0x400; // in Decimal 1024 to identify the single event cut is failed for a BPM (Stripline or cavity or comboBPM)
171static const UInt_t kPMTErrorFlag = 0x800; // in Decimal 2048 to identify the single event cut is failed for a PMT (Combined or regular)
172static const UInt_t kBModFFBErrorFlag = 0x1000; // in Decimal 4096 (2^12) to identify the FFB OFF periods for Energy modulation
173static const UInt_t kBModErrorFlag = 0x8000; // in Decimal 32768 (2^15) to identify the single event cut is failed for a BMod channel
174static const UInt_t kEventCutMode3 = 0x10000; // in Decimal 65536 to identify the mode 3 where we only flag event cut failed events
175static const UInt_t kErrorFlag_Helicity = 0x20000; // Any type of helicity decoding problem
176
177
178//static const UInt_t kErrorFlag_BurpCut = 0x800000;// in Decimal 2^23 to identify a burp cut failure
179static const UInt_t kErrorFlag_BurpCut = 0x20000000;// promote to Decimal 2^29 to skip default accumulation mask.
180static const UInt_t kBeamStabilityError= 0x10000000;//in Decimal 2^28(268435456) to identify the a stability cut
181static const UInt_t kBeamTripError = 0x8000000;// in Decimal 2^27(134217728) to identify the an event within a beam trip range set by ring parameters
182static const UInt_t kGlobalCut = 0x4000000;// in Decimal 2^26 to identify the single event cut is a global cut
183static const UInt_t kLocalCut = 0x2000000;// in Decimal 2^25 to identify the single event cut is a local cut
184static const UInt_t kStabilityCut = 0x1000000;// in Decimal 2^24 (16777216) to identify the single event cut is a stability cut. NOT IN USE CURRENTLY
185static const UInt_t kBadEventRangeError= 0x80000000;//in Decimal 2^31 to identify an event range we don't like anymore
186static const UInt_t kPreserveError = 0x2FF;//when AND-ed with this it will only keep HW errors and blinder
187
188//To generate the error code based on global/local and stability cut value
189UInt_t GetGlobalErrorFlag(TString evtype,Int_t evMode,Double_t stabilitycut);
190
191
194
197
198static const UInt_t kInvalidSubelementIndex = 999999;
199
200//=======
201// Enumerator increments
202inline EQwRegionID& operator++ (EQwRegionID &region, int) {
203 return region = EQwRegionID(region + 1);
204}
205inline EQwDirectionID& operator++ (EQwDirectionID &direction, int) {
206 return direction = EQwDirectionID(direction + 1);
207}
209 return package = EQwDetectorPackage(package + 1);
210}
212 return type = EQwDetectorType(type + 1);
213}
214
215
216/// Helicity enumerator (don't use this as a signed int)
222/// Use the static map kMapHelicity to get the helicity sign
223/// e.g.: kMapHelicity[kHelicityPositive] will return +1
224typedef std::map < EQwHelicity, int > QwHelicityMap;
226{
227 QwHelicityMap map;
228 map[kHelicityUndefined] = 0;
229 map[kHelicityPositive] = +1;
230 map[kHelicityNegative] = -1;
231 return map;
232}
234
235
236/**
237 * \class QwDetectorID
238 * \ingroup QwAnalysis
239 * \brief Detector identification structure for tracking system components
240 *
241 * Encapsulates the complete identification of a detector element including
242 * region, package, octant, plane, direction, and element number. Used
243 * throughout the tracking system for detector mapping and data organization.
244 */
246{
247 public:
251
253 const EQwDetectorPackage package,
254 const Int_t octant,
255 const Int_t plane,
256 const EQwDirectionID direction,
257 const Int_t wire)
258 : fRegion(region),fPackage(package),fOctant(octant),
259 fPlane(plane),fDirection(direction),fElement(wire) { };
260
261 public:
262 EQwRegionID fRegion; ///< region 1, 2, 3, triggg. scint or cerenkov
263 EQwDetectorPackage fPackage; ///< which arm of the rotator or octant number
264 Int_t fOctant; ///< octant of this detector
265 Int_t fPlane; ///< R or theta index for R1; plane index for R2 & R3
266 EQwDirectionID fDirection; ///< direction of the wire plane X,Y,U,V etc - Rakitha (10/23/2008)
267 Int_t fElement; ///< trace number for R1; wire number for R2 & R3; PMT number for others
268
269 friend std::ostream& operator<<(std::ostream& os, const QwDetectorID &detectorID) {
270 os << " Region ";
271 os << detectorID.fRegion;
272 os << " Package ";
273 os << detectorID.fPackage;
274 os << " Octant ";
275 os << detectorID.fOctant;
276 os << " Plane ";
277 os << detectorID.fPlane;
278 os << " Direction";
279 os <<detectorID.fDirection;
280 os << " fElement ";
281 os << detectorID.fElement;
282
283 return os;
284 }
285};
286
287
288/**
289 * \class QwDelayLineID
290 * \ingroup QwAnalysis
291 * \brief Identification structure for delay line detector components
292 *
293 * Specifies the location of delay line elements using backplane number,
294 * line number, and side identification. Used for delay line detector
295 * mapping and data processing.
296 */
298 public:
300 QwDelayLineID(const int backplane, const int linenumber, const int side):fBackPlane(backplane),fLineNumber(linenumber),fSide(side){};
301
304 Int_t fSide;
305};
306
307/// Double Wien configuration
315std::string WienModeName(EQwWienMode type);
316EQwWienMode WienModeIndex(TString name);
317
318/// Definitions for beam parameter quantities; use these types rather than
319/// the raw "QwVQWK_Channel" to allow for future specification.
Physical units and constants for Qweak analysis.
EQwWienMode WienModeIndex(TString name)
Definition QwTypes.cc:156
static const UInt_t kErrorFlag_Helicity
Definition QwTypes.h:175
static const UInt_t kBadEventRangeError
Definition QwTypes.h:185
static const UInt_t kGlobalCut
Definition QwTypes.h:182
std::map< EQwHelicity, int > QwHelicityMap
Definition QwTypes.h:224
std::map< char, EQwDetectorPackage > QwPackageMap
Definition QwTypes.h:94
EQwRegionID & operator++(EQwRegionID &region, int)
Definition QwTypes.h:202
static const UInt_t kErrorFlag_BurpCut
Definition QwTypes.h:179
EQwPMTInstrumentType GetQwPMTInstrumentType(TString name)
Definition QwTypes.cc:16
std::ostream & operator<<(std::ostream &stream, const EQwRegionID &i)
Definition QwTypes.h:33
static const QwHelicityMap kMapHelicity
Definition QwTypes.h:233
QwTypeMap CreateTypeMap()
Definition QwTypes.h:119
QwRegionMap CreateRegionMap()
Definition QwTypes.h:37
static const QwTypeMap kQwTypeMap
Definition QwTypes.h:131
class QwMollerADC_Channel QwBeamCharge
Definition QwTypes.h:321
static const UInt_t kBModErrorFlag
Definition QwTypes.h:173
TString GetQwPMTInstrumentTypeName(EQwPMTInstrumentType type)
Definition QwTypes.cc:81
static const QwRegionMap kQwRegionMap
Definition QwTypes.h:49
static const UInt_t kBeamStabilityError
Definition QwTypes.h:180
static const UInt_t kErrorFlag_ZeroHW
Definition QwTypes.h:164
std::map< char, EQwDetectorType > QwTypeMap
Definition QwTypes.h:118
static const UInt_t kStabilityCut
Definition QwTypes.h:184
class QwMollerADC_Channel QwBeamEnergy
Definition QwTypes.h:324
static const QwPackageMap kQwPackageMap
Definition QwTypes.h:103
static const UInt_t kBPMErrorFlag
Definition QwTypes.h:170
static const UInt_t kErrorFlag_EventCut_L
Definition QwTypes.h:165
EQwDirectionID
Definition QwTypes.h:52
@ kDirectionY
Definition QwTypes.h:54
@ kDirectionX
Definition QwTypes.h:54
@ kNumDirections
Definition QwTypes.h:58
@ kDirectionNull
Definition QwTypes.h:53
@ kDirectionU
Definition QwTypes.h:55
@ kDirectionRight
Definition QwTypes.h:57
@ kDirectionLeft
Definition QwTypes.h:57
@ kDirectionPhi
Definition QwTypes.h:56
@ kDirectionV
Definition QwTypes.h:55
@ kDirectionR
Definition QwTypes.h:56
QwHelicityMap CreateHelicityMap()
Definition QwTypes.h:225
static const UInt_t kErrorFlag_BlinderFail
Definition QwTypes.h:169
static const QwDirectionMap kQwDirectionMap
Definition QwTypes.h:78
static const UInt_t kInvalidSubelementIndex
Definition QwTypes.h:198
std::string WienModeName(EQwWienMode type)
Definition QwTypes.cc:150
static const UInt_t kPMTErrorFlag
Definition QwTypes.h:171
std::map< char, EQwDirectionID > QwDirectionMap
Definition QwTypes.h:63
EQwDetectorType
Definition QwTypes.h:105
@ kTypeTrigscint
Definition QwTypes.h:110
@ kNumTypes
Definition QwTypes.h:113
@ kTypeDriftHDC
Definition QwTypes.h:108
@ kTypeCerenkov
Definition QwTypes.h:111
@ kTypeDriftVDC
Definition QwTypes.h:109
@ kTypeNull
Definition QwTypes.h:106
@ kTypeSciFiber
Definition QwTypes.h:107
@ kTypeScanner
Definition QwTypes.h:112
ULong64_t BankID_t
Definition QwTypes.h:21
static const UInt_t kEventCutMode3
Definition QwTypes.h:174
static const UInt_t kBModFFBErrorFlag
Definition QwTypes.h:172
EQwHelicity
Helicity enumerator (don't use this as a signed int)
Definition QwTypes.h:217
@ kHelicityNegative
Definition QwTypes.h:220
@ kHelicityUndefined
Definition QwTypes.h:218
@ kHelicityPositive
Definition QwTypes.h:219
static const UInt_t kBCMErrorFlag
Definition QwTypes.h:168
static const UInt_t kErrorFlag_EventCut_U
Definition QwTypes.h:166
static const BankID_t kNullBankID
Definition QwTypes.h:23
static const UInt_t kErrorFlag_SW_HW
Definition QwTypes.h:161
UInt_t GetGlobalErrorFlag(TString evtype, Int_t evMode, Double_t stabilitycut)
Definition QwTypes.cc:132
EQwBeamInstrumentType GetQwBeamInstrumentType(TString name)
Definition QwTypes.cc:34
static const UInt_t kErrorFlag_sample
Definition QwTypes.h:160
class QwMollerADC_Channel QwBeamAngle
Definition QwTypes.h:323
EQwWienMode
Double Wien configuration.
Definition QwTypes.h:308
@ kWienIndeterminate
Definition QwTypes.h:309
@ kWienBackward
Definition QwTypes.h:311
@ kWienVertTrans
Definition QwTypes.h:312
@ kWienForward
Definition QwTypes.h:310
@ kWienHorizTrans
Definition QwTypes.h:313
QwPackageMap CreatePackageMap()
Definition QwTypes.h:95
EQwPMTInstrumentType
Definition QwTypes.h:135
@ kQwUnknownPMT
Definition QwTypes.h:136
@ kQwCombinedPMT
Definition QwTypes.h:139
@ kNumInstrumentTypes
Definition QwTypes.h:140
@ kQwIntegrationPMT
Definition QwTypes.h:137
@ kQwScalerPMT
Definition QwTypes.h:138
static const UInt_t kPreserveError
Definition QwTypes.h:186
QwDirectionMap CreateDirectionMap()
Definition QwTypes.h:64
static const UInt_t kErrorFlag_VQWK_Sat
Definition QwTypes.h:159
static const UInt_t kBeamTripError
Definition QwTypes.h:181
static const ROCID_t kNullROCID
Bank ID will combine both bank and marker words.
Definition QwTypes.h:22
EQwRegionID
Definition QwTypes.h:27
@ kRegionIDTrig
Definition QwTypes.h:30
@ kRegionID1
Definition QwTypes.h:29
@ kNumRegions
Definition QwTypes.h:31
@ kRegionIDScanner
Definition QwTypes.h:30
@ kRegionID2
Definition QwTypes.h:29
@ kRegionIDCer
Definition QwTypes.h:30
@ kRegionIDNull
Definition QwTypes.h:28
@ kRegionID3
Definition QwTypes.h:29
UInt_t ROCID_t
Definition QwTypes.h:20
static const UInt_t kLocalCut
Definition QwTypes.h:183
std::map< char, EQwRegionID > QwRegionMap
Definition QwTypes.h:36
static const UInt_t kErrorFlag_SameHW
Definition QwTypes.h:163
class QwMollerADC_Channel QwBeamPosition
Definition QwTypes.h:322
EQwBeamInstrumentType
Definition QwTypes.h:143
@ kBeamDevTypes
Definition QwTypes.h:155
@ kQwEnergyCalculator
Definition QwTypes.h:151
@ kQwHaloMonitor
Definition QwTypes.h:152
@ kQwCombinedBPM
Definition QwTypes.h:150
@ kQwBPMStripline
Definition QwTypes.h:145
@ kQwClock
Definition QwTypes.h:154
@ kQwLinearArray
Definition QwTypes.h:147
@ kQwCombinedBCM
Definition QwTypes.h:149
@ kQwQPD
Definition QwTypes.h:146
@ kQwBCM
Definition QwTypes.h:148
@ kQwUnknownDeviceType
Definition QwTypes.h:144
@ kQwBPMCavity
Definition QwTypes.h:153
static const UInt_t kErrorFlag_Sequence
Definition QwTypes.h:162
TString GetQwBeamInstrumentTypeName(EQwBeamInstrumentType type)
Definition QwTypes.cc:100
EQwDetectorPackage
Definition QwTypes.h:81
@ kPackageNull
Definition QwTypes.h:82
@ kPackage1
Definition QwTypes.h:83
@ kPackage2
Definition QwTypes.h:84
@ kNumPackages
Definition QwTypes.h:85
unsigned long long ULong64_t
Definition QwBlinder.h:41
Concrete hardware channel for Moller ADC modules (6x32-bit words)
Int_t fElement
trace number for R1; wire number for R2 & R3; PMT number for others
Definition QwTypes.h:267
Int_t fPlane
R or theta index for R1; plane index for R2 & R3.
Definition QwTypes.h:265
EQwDirectionID fDirection
direction of the wire plane X,Y,U,V etc - Rakitha (10/23/2008)
Definition QwTypes.h:266
Int_t fOctant
octant of this detector
Definition QwTypes.h:264
EQwRegionID fRegion
region 1, 2, 3, triggg. scint or cerenkov
Definition QwTypes.h:262
friend std::ostream & operator<<(std::ostream &os, const QwDetectorID &detectorID)
Definition QwTypes.h:269
EQwDetectorPackage fPackage
which arm of the rotator or octant number
Definition QwTypes.h:263
QwDetectorID(const EQwRegionID region, const EQwDetectorPackage package, const Int_t octant, const Int_t plane, const EQwDirectionID direction, const Int_t wire)
Definition QwTypes.h:252
QwDelayLineID(const int backplane, const int linenumber, const int side)
Definition QwTypes.h:300
Int_t fSide
Definition QwTypes.h:304
Int_t fBackPlane
Definition QwTypes.h:302
Int_t fLineNumber
Definition QwTypes.h:303