CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Protected Attributes
EcalDCCHeaderRuntypeDecoder Class Reference

#include <EcalDCCHeaderRuntypeDecoder.h>

Public Member Functions

bool Decode (unsigned long TrTy, unsigned long detTrTy, unsigned long runType, EcalDCCHeaderBlock *theHeader)
 
 EcalDCCHeaderRuntypeDecoder ()
 
 ~EcalDCCHeaderRuntypeDecoder ()
 

Protected Member Functions

void CleanEcalDCCSettingsInfo (EcalDCCHeaderBlock::EcalDCCEventSettings *theEventSettings)
 
void DecodeSetting (int settings, EcalDCCHeaderBlock *theHeader)
 
void DecodeSettingGlobal (unsigned long TrigType, unsigned long detTrigType, EcalDCCHeaderBlock *theHeader)
 

Protected Attributes

bool WasDecodingOk_ = true
 

Detailed Description

Definition at line 8 of file EcalDCCHeaderRuntypeDecoder.h.

Constructor & Destructor Documentation

EcalDCCHeaderRuntypeDecoder::EcalDCCHeaderRuntypeDecoder ( )

Definition at line 8 of file EcalDCCHeaderRuntypeDecoder.cc.

8 {;}
EcalDCCHeaderRuntypeDecoder::~EcalDCCHeaderRuntypeDecoder ( )

Definition at line 9 of file EcalDCCHeaderRuntypeDecoder.cc.

9 {;}

Member Function Documentation

void EcalDCCHeaderRuntypeDecoder::CleanEcalDCCSettingsInfo ( EcalDCCHeaderBlock::EcalDCCEventSettings theEventSettings)
protected

Definition at line 226 of file EcalDCCHeaderRuntypeDecoder.cc.

References EcalDCCHeaderBlock::EcalDCCEventSettings::delay, EcalDCCHeaderBlock::EcalDCCEventSettings::LaserFilter, EcalDCCHeaderBlock::EcalDCCEventSettings::LaserPower, EcalDCCHeaderBlock::EcalDCCEventSettings::MEMVinj, EcalDCCHeaderBlock::EcalDCCEventSettings::mgpa_content, EcalDCCHeaderBlock::EcalDCCEventSettings::ped_offset, and EcalDCCHeaderBlock::EcalDCCEventSettings::wavelength.

Referenced by DecodeSetting(), and DecodeSettingGlobal().

226  {
227  dummySettings->LaserPower =-1;
228  dummySettings->LaserFilter =-1;
229  dummySettings->wavelength =-1;
230  dummySettings->delay =-1;
231  dummySettings->MEMVinj =-1;
232  dummySettings->mgpa_content =-1;
233  dummySettings->ped_offset =-1;
234 }
bool EcalDCCHeaderRuntypeDecoder::Decode ( unsigned long  TrTy,
unsigned long  detTrTy,
unsigned long  runType,
EcalDCCHeaderBlock theHeader 
)

Definition at line 11 of file EcalDCCHeaderRuntypeDecoder.cc.

References EcalDCCHeaderBlock::BEAMH2, EcalDCCHeaderBlock::BEAMH4, EcalDCCHeaderBlock::CALIB_LOCAL, EcalDCCHeaderBlock::COSMIC, EcalDCCHeaderBlock::COSMICS_GLOBAL, EcalDCCHeaderBlock::COSMICS_LOCAL, DecodeSetting(), DecodeSettingGlobal(), EcalDCCHeaderBlock::HALO_GLOBAL, EcalDCCHeaderBlock::HALO_LOCAL, createfilelist::int, EcalDCCHeaderBlock::LASER_DELAY_SCAN, EcalDCCHeaderBlock::LASER_POWER_SCAN, EcalDCCHeaderBlock::LASER_STD, EcalDCCHeaderBlock::LED_STD, EcalDCCHeaderBlock::MTCC, EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN, EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN, EcalDCCHeaderBlock::PEDESTAL_STD, EcalDCCHeaderBlock::PHYSICS_GLOBAL, EcalDCCHeaderBlock::PHYSICS_LOCAL, lumiContext::sequence, EcalDCCHeaderBlock::setMemGain(), EcalDCCHeaderBlock::setMgpaGain(), EcalDCCHeaderBlock::setRunType(), DCCDataUnpacker::silentMode_, EcalDCCHeaderBlock::TESTPULSE_MGPA, EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM, and WasDecodingOk_.

Referenced by DCCEventBlock::addHeaderToCollection().

15 {
16 
17  // unsigned int DCCNumberMask = 63;//2^6-1
18 
19  unsigned int WhichHalfOffSet= 64;//2^6
20  unsigned int TypeOffSet = 256;//2^8
21  unsigned int SubTypeOffSet = 2048;//2^11
22  unsigned int SettingOffSet = 131072;//2^17;
23  unsigned int GainModeOffSet = 16384;//2^14
24 
25  unsigned int TwoBitsMask = 3;
26  unsigned int ThreeBitsMask = 7;
27  unsigned int ThirdBitMask = 4;
28 
29  EcalDCCHeaderInfos-> setRtHalf( int ((runType / WhichHalfOffSet) & TwoBitsMask) );
30  int type = int ((runType / TypeOffSet) & ThreeBitsMask);
31  int sequence = int ((runType / SubTypeOffSet) & ThreeBitsMask);
32  EcalDCCHeaderInfos->setMgpaGain(int ((runType / GainModeOffSet) & TwoBitsMask) );
33  EcalDCCHeaderInfos->setMemGain( int ((runType / GainModeOffSet) & ThirdBitMask)/ThirdBitMask );
34  // EcalDCCHeaderInfos.Setting = int ( runType / SettingOffSet);
35 
36  if (type ==0 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::COSMIC);}
37  // begin: added for XDAQ 3
38  else if (type ==0 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::COSMIC);}
39  else if (type ==0 && sequence == 2){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::BEAMH4);}
40  else if (type ==0 && sequence == 3){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::BEAMH2);}
41  else if (type ==0 && sequence == 4){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::MTCC);}
42  // end: added for XDAQ 3
43  else if (type ==1 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::LASER_STD);}
44  else if (type ==1 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::LASER_POWER_SCAN);}
45  else if (type ==1 && sequence == 2){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::LASER_DELAY_SCAN);}
46  else if (type ==2 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM);}
47  else if (type ==2 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::TESTPULSE_MGPA);}
48  else if (type ==3 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::PEDESTAL_STD);}
49  else if (type ==3 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN);}
50  else if (type ==3 && sequence == 2){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN);}
51  else if (type ==4 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::LED_STD);}
52 
53  else if (type ==5 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::PHYSICS_GLOBAL);}
54  else if (type ==5 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::COSMICS_GLOBAL);}
55  else if (type ==5 && sequence == 2){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::HALO_GLOBAL);}
56  //
57  // else if (type ==5 && sequence == 3){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::CALIB_GLOBAL);}
58 
59  else if (type ==6 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::PHYSICS_LOCAL);}
60  else if (type ==6 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::COSMICS_LOCAL);}
61  else if (type ==6 && sequence == 2){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::HALO_LOCAL);}
62  else if (type ==6 && sequence == 3){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::CALIB_LOCAL);}
63 
64  else {
66  edm::LogError("IncorrectHeader") <<"Unrecognized runtype and sequence: "<<type<<" "<<sequence;
67  }
68  EcalDCCHeaderInfos->setRunType(-1);
69  WasDecodingOk_ = false;
70  return WasDecodingOk_;
71  }
72 
73  // decoding of settings depends on whether run is global or local
74  if (type == 5 || type == 6){ DecodeSettingGlobal ( TrigType, detTrigType, EcalDCCHeaderInfos ); }
75  else { DecodeSetting (int ( runType / SettingOffSet),EcalDCCHeaderInfos); }
76 
77 
78  return WasDecodingOk_;
79 }
type
Definition: HCALResponse.h:21
void DecodeSetting(int settings, EcalDCCHeaderBlock *theHeader)
void DecodeSettingGlobal(unsigned long TrigType, unsigned long detTrigType, EcalDCCHeaderBlock *theHeader)
static std::atomic< bool > silentMode_
void EcalDCCHeaderRuntypeDecoder::DecodeSetting ( int  settings,
EcalDCCHeaderBlock theHeader 
)
protected

Definition at line 159 of file EcalDCCHeaderRuntypeDecoder.cc.

References EcalDCCHeaderBlock::BEAMH2, EcalDCCHeaderBlock::BEAMH4, CleanEcalDCCSettingsInfo(), EcalDCCHeaderBlock::COSMIC, EcalDCCHeaderBlock::COSMICS_LOCAL, EcalDCCHeaderBlock::EcalDCCEventSettings::delay, EcalDCCHeaderBlock::getRunType(), EcalDCCHeaderBlock::HALO_LOCAL, EcalDCCHeaderBlock::LASER_DELAY_SCAN, EcalDCCHeaderBlock::LASER_POWER_SCAN, EcalDCCHeaderBlock::LASER_STD, EcalDCCHeaderBlock::EcalDCCEventSettings::LaserFilter, EcalDCCHeaderBlock::EcalDCCEventSettings::LaserPower, EcalDCCHeaderBlock::LED_STD, EcalDCCHeaderBlock::EcalDCCEventSettings::MEMVinj, EcalDCCHeaderBlock::EcalDCCEventSettings::mgpa_content, EcalDCCHeaderBlock::MTCC, EcalDCCHeaderBlock::EcalDCCEventSettings::ped_offset, EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN, EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN, EcalDCCHeaderBlock::PEDESTAL_STD, EcalDCCHeaderBlock::PHYSICS_LOCAL, EcalDCCHeaderBlock::setEventSettings(), DCCDataUnpacker::silentMode_, EcalDCCHeaderBlock::TESTPULSE_MGPA, EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM, WasDecodingOk_, and EcalDCCHeaderBlock::EcalDCCEventSettings::wavelength.

Referenced by Decode().

160 {
162  CleanEcalDCCSettingsInfo(&theSettings);
163 
164  if( theHeader->getRunType() == EcalDCCHeaderBlock::COSMIC ||
165  theHeader->getRunType() == EcalDCCHeaderBlock::BEAMH2 ||
166  theHeader->getRunType() == EcalDCCHeaderBlock::BEAMH4 ||
167  theHeader->getRunType() == EcalDCCHeaderBlock::MTCC ||
171  {;}
172  //no settings foreseen
173 
174  else if(theHeader->getRunType() == EcalDCCHeaderBlock::LASER_STD)
175  {
176  theSettings.LaserPower = (Setting & 8128)/64;
177  theSettings.LaserFilter = (Setting & 56)/8;
178  theSettings.wavelength = Setting & 7;
179  }
180 
181  else if(theHeader->getRunType() == EcalDCCHeaderBlock::LASER_POWER_SCAN){
182  theSettings.LaserPower = (Setting & 8128)/64;
183  theSettings.LaserFilter = (Setting & 56)/8;
184  theSettings.wavelength = Setting & 7;
185  }
186 
187  else if(theHeader->getRunType() == EcalDCCHeaderBlock::LASER_DELAY_SCAN){
188  theSettings.wavelength = Setting & 7;
189  theSettings.delay = (Setting & 2040)/8;
190  }
191 
192  else if(theHeader->getRunType() == EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM){
193  theSettings.MEMVinj = Setting & 511;
194  }
195 
196  else if(theHeader->getRunType() == EcalDCCHeaderBlock::TESTPULSE_MGPA){
197  theSettings.mgpa_content = Setting & 255;
198  }
199 
200  else if(theHeader->getRunType() == EcalDCCHeaderBlock::PEDESTAL_STD){;}//no settings foreseen
201 
202  else if(theHeader->getRunType() == EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN){
203  theSettings.ped_offset = Setting;
204  }
205 
206  else if(theHeader->getRunType() == EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN ){
207  theSettings.delay = (Setting & 255);
208  }
209 
210  else if(theHeader->getRunType() == EcalDCCHeaderBlock::LED_STD){
211  theSettings.wavelength = Setting & 7;
212  }
213  else {
215  edm::LogError("IncorrectHeader") <<"Unrecognized run type: "<<theHeader->getRunType();
216  }
217  WasDecodingOk_ = false;
218  }
219 
220  theHeader->setEventSettings(theSettings);
221 
222 }
static std::atomic< bool > silentMode_
void setEventSettings(const EcalDCCEventSettings &EventSettings)
void CleanEcalDCCSettingsInfo(EcalDCCHeaderBlock::EcalDCCEventSettings *theEventSettings)
short getRunType() const
void EcalDCCHeaderRuntypeDecoder::DecodeSettingGlobal ( unsigned long  TrigType,
unsigned long  detTrigType,
EcalDCCHeaderBlock theHeader 
)
protected

Definition at line 85 of file EcalDCCHeaderRuntypeDecoder.cc.

References EcalDCCHeaderBlock::CALIB_LOCAL, CleanEcalDCCSettingsInfo(), EcalDCCHeaderBlock::getRunType(), H_DCCID_B, H_DCCID_MASK, H_HALF_B, H_HALF_MASK, H_TR_TYPE_B, H_TR_TYPE_MASK, H_WAVEL_B, H_WAVEL_MASK, EcalDCCHeaderBlock::LASER_GAP, EcalDCCHeaderBlock::LASER_STD, EcalDCCHeaderBlock::LED_GAP, EcalDCCHeaderBlock::LED_STD, EcalDCCHeaderBlock::PEDESTAL_GAP, EcalDCCHeaderBlock::PEDESTAL_STD, EcalDCCHeaderBlock::setEventSettings(), EcalDCCHeaderBlock::setRunType(), DCCDataUnpacker::silentMode_, EcalDCCHeaderBlock::TESTPULSE_GAP, EcalDCCHeaderBlock::TESTPULSE_MGPA, EcalDCCHeaderBlock::TTC_LASER, EcalDCCHeaderBlock::TTC_LED, EcalDCCHeaderBlock::TTC_PEDESTAL, EcalDCCHeaderBlock::TTC_TESTPULSE, WasDecodingOk_, and EcalDCCHeaderBlock::EcalDCCEventSettings::wavelength.

Referenced by Decode().

85  {
86 
87  // TCC commands are decoded both in global (type ==5) and in local (type ==6)
88  // keep an eye on the possible: EcalDCCHeaderBlock::CALIB_GLOBAL
89  bool isLocal = false;
90  if (theHeader->getRunType() == EcalDCCHeaderBlock::CALIB_LOCAL) isLocal = true;
91 
92  // if Trigger_Type is physics, only dccIdInTTCCommand is meaningful
93  if (TrigType == 1){
94  int dccIdInTTCCommand = (detTrigType >> H_DCCID_B) & H_DCCID_MASK;
95  theHeader-> setDccInTTCCommand( dccIdInTTCCommand );
96  return;
97  }
98 
99  // if calibration trigger (gap)
100  else if (TrigType == 2) {
101 
102 
104  CleanEcalDCCSettingsInfo(&theSettings);
105 
106  int dccIdInTTCCommand = (detTrigType >> H_DCCID_B) & H_DCCID_MASK;
107  int halfInTTCCommand = (detTrigType >> H_HALF_B) & H_HALF_MASK;
108  int detailedTriggerTypeInTTCCommand = (detTrigType >> H_TR_TYPE_B) & H_TR_TYPE_MASK;
109  int wavelengthInTTCCommand = (detTrigType >> H_WAVEL_B) & H_WAVEL_MASK;
110 
111 
112  theHeader-> setRtHalf( halfInTTCCommand );
113  theHeader-> setDccInTTCCommand( dccIdInTTCCommand );
114  if (detailedTriggerTypeInTTCCommand == EcalDCCHeaderBlock::TTC_LASER){
115  if(isLocal) theHeader-> setRunType(EcalDCCHeaderBlock::LASER_STD);
116  else theHeader-> setRunType(EcalDCCHeaderBlock::LASER_GAP);
117  theSettings.wavelength = wavelengthInTTCCommand; }
118 
119 
120  else if (detailedTriggerTypeInTTCCommand == EcalDCCHeaderBlock::TTC_LED){
121  if(isLocal) theHeader-> setRunType(EcalDCCHeaderBlock::LED_STD);
122  else theHeader-> setRunType(EcalDCCHeaderBlock::LED_GAP);
123  theSettings.wavelength = wavelengthInTTCCommand; }
124 
125  else if (detailedTriggerTypeInTTCCommand == EcalDCCHeaderBlock::TTC_TESTPULSE){
126  if(isLocal) theHeader-> setRunType(EcalDCCHeaderBlock::TESTPULSE_MGPA);
127  else theHeader-> setRunType(EcalDCCHeaderBlock::TESTPULSE_GAP);
128  }
129 
130  else if (detailedTriggerTypeInTTCCommand == EcalDCCHeaderBlock::TTC_PEDESTAL){
131  if(isLocal) theHeader-> setRunType(EcalDCCHeaderBlock::PEDESTAL_STD);
132  else theHeader-> setRunType(EcalDCCHeaderBlock::PEDESTAL_GAP);
133  }
134 
135  else {
137  edm::LogError("IncorrectHeader") <<"Unrecognized detailedTriggerTypeInTTCCommand: " << detailedTriggerTypeInTTCCommand;
138  }
139  theHeader->setRunType(-1);
140  WasDecodingOk_ = false;
141  }
142 
143  theHeader->setEventSettings(theSettings);
144 
145  }
146 
147  else {
149  edm::LogError("IncorrectHeader") <<"Unrecognized detailed trigger type";
150  }
151  theHeader->setRunType(-1);
152  WasDecodingOk_ = false;
153  }
154 
155 }
static std::atomic< bool > silentMode_
void setEventSettings(const EcalDCCEventSettings &EventSettings)
void CleanEcalDCCSettingsInfo(EcalDCCHeaderBlock::EcalDCCEventSettings *theEventSettings)
void setRunType(const short &runType)
short getRunType() const

Member Data Documentation

bool EcalDCCHeaderRuntypeDecoder::WasDecodingOk_ = true
protected

Definition at line 15 of file EcalDCCHeaderRuntypeDecoder.h.

Referenced by Decode(), DecodeSetting(), and DecodeSettingGlobal().