CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Protected Attributes

EcalDCCTBHeaderRuntypeDecoder Class Reference

#include <EcalDCCHeaderRuntypeDecoder.h>

List of all members.

Public Member Functions

bool Decode (unsigned long headerWord, EcalDCCHeaderBlock *theHeader)
 EcalDCCTBHeaderRuntypeDecoder ()
 ~EcalDCCTBHeaderRuntypeDecoder ()

Protected Member Functions

void CleanEcalDCCSettingsInfo (EcalDCCHeaderBlock::EcalDCCEventSettings *theEventSettings)
void DecodeSetting (int settings, EcalDCCHeaderBlock *theHeader)

Protected Attributes

bool WasDecodingOk_

Detailed Description

Definition at line 6 of file EcalDCCHeaderRuntypeDecoder.h.


Constructor & Destructor Documentation

EcalDCCTBHeaderRuntypeDecoder::EcalDCCTBHeaderRuntypeDecoder ( )

Definition at line 8 of file EcalDCCHeaderRuntypeDecoder.cc.

{;}
EcalDCCTBHeaderRuntypeDecoder::~EcalDCCTBHeaderRuntypeDecoder ( )

Definition at line 9 of file EcalDCCHeaderRuntypeDecoder.cc.

{;}

Member Function Documentation

void EcalDCCTBHeaderRuntypeDecoder::CleanEcalDCCSettingsInfo ( EcalDCCHeaderBlock::EcalDCCEventSettings theEventSettings) [protected]

Definition at line 114 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().

                                                                                                                   {
  dummySettings->LaserPower =-1;
  dummySettings->LaserFilter =-1;
  dummySettings->wavelength =-1;
  dummySettings->delay =-1;
  dummySettings->MEMVinj =-1;
  dummySettings->mgpa_content =-1;
  dummySettings->ped_offset =-1;
}
bool EcalDCCTBHeaderRuntypeDecoder::Decode ( unsigned long  headerWord,
EcalDCCHeaderBlock theHeader 
)

Definition at line 11 of file EcalDCCHeaderRuntypeDecoder.cc.

References EcalDCCHeaderBlock::BEAMH2, EcalDCCHeaderBlock::BEAMH4, EcalDCCHeaderBlock::COSMIC, DecodeSetting(), 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::setMemGain(), EcalDCCHeaderBlock::setMgpaGain(), EcalDCCHeaderBlock::setRunType(), EcalDCCHeaderBlock::TESTPULSE_MGPA, EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM, and WasDecodingOk_.

Referenced by EcalTB07DaqFormatter::interpretRawData(), and EcalTBDaqFormatter::interpretRawData().

                                                                                                          {
  
  //  unsigned long DCCNumberMask      = 63;//2^6-1

  unsigned long WhichHalfOffSet   = 64;//2^6 
  unsigned long TypeOffSet        = 256;//2^8
  unsigned long SubTypeOffSet     = 2048;//2^11
  unsigned long SettingOffSet     = 131072;//2^17;
  unsigned long GainModeOffSet    = 16384;//2^14
  
  unsigned long TwoBitsMask = 3;
  unsigned long ThreeBitsMask = 7;
  unsigned long ThirdBitMask = 4;
  
  //  EcalDCCTBHeaderInfos->setId( int ( headerWord & DCCNumberMask) );
  EcalDCCHeaderInfos-> setRtHalf( int ((headerWord / WhichHalfOffSet) & TwoBitsMask) );
  int type = int ((headerWord / TypeOffSet)      & ThreeBitsMask);
  int sequence  = int ((headerWord / SubTypeOffSet)   & ThreeBitsMask);
  EcalDCCHeaderInfos->setMgpaGain(int ((headerWord / GainModeOffSet)  & TwoBitsMask) );
  EcalDCCHeaderInfos->setMemGain( int ((headerWord / GainModeOffSet)  & ThirdBitMask)/ThirdBitMask );
  //  EcalDCCHeaderInfos.Setting       = int ( headerWord / SettingOffSet);


  if (type ==0 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::COSMIC);}
// begin: added for XDAQ 3
  else if (type ==0 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::COSMIC);}
  else if (type ==0 && sequence == 2){
    EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::BEAMH4);}
  else if (type ==0 && sequence == 3){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::BEAMH2);}
  else if (type ==0 && sequence == 4){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::MTCC);}
// end: added for XDAQ 3
  else if (type ==1 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::LASER_STD);}
  else if (type ==1 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::LASER_POWER_SCAN);}
  else if (type ==1 && sequence == 2){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::LASER_DELAY_SCAN);}
  else if (type ==2 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM);}
  else if (type ==2 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::TESTPULSE_MGPA);}
  else if (type ==3 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::PEDESTAL_STD);}
  else if (type ==3 && sequence == 1){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN);}
  else if (type ==3 && sequence == 2){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN);}
  else if (type ==4 && sequence == 0){EcalDCCHeaderInfos->setRunType(EcalDCCHeaderBlock::LED_STD);}
  else {
    edm::LogWarning("EcalTBRawToDigi") <<"@SUB=EcalDCCHeaderRuntypeDecoder::Decode unrecognized runtype and sequence: "<<type<<" "<<sequence;
    EcalDCCHeaderInfos->setRunType(-1);
    WasDecodingOk_ = false;
  }


  DecodeSetting (int ( headerWord / SettingOffSet),EcalDCCHeaderInfos);


  return WasDecodingOk_;
}
void EcalDCCTBHeaderRuntypeDecoder::DecodeSetting ( int  settings,
EcalDCCHeaderBlock theHeader 
) [protected]

Definition at line 64 of file EcalDCCHeaderRuntypeDecoder.cc.

References EcalDCCHeaderBlock::BEAMH2, EcalDCCHeaderBlock::BEAMH4, CleanEcalDCCSettingsInfo(), EcalDCCHeaderBlock::COSMIC, EcalDCCHeaderBlock::EcalDCCEventSettings::delay, EcalDCCHeaderBlock::getRunType(), 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::setEventSettings(), EcalDCCHeaderBlock::TESTPULSE_MGPA, EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM, WasDecodingOk_, and EcalDCCHeaderBlock::EcalDCCEventSettings::wavelength.

Referenced by Decode().

{
  EcalDCCHeaderBlock::EcalDCCEventSettings theSettings;// = new EcalDCCEventSettings;
  CleanEcalDCCSettingsInfo(&theSettings);

  if( theHeader->getRunType() == EcalDCCHeaderBlock::COSMIC || 
      theHeader->getRunType() == EcalDCCHeaderBlock::BEAMH2 || 
      theHeader->getRunType() == EcalDCCHeaderBlock::BEAMH4 || 
      theHeader->getRunType() == EcalDCCHeaderBlock::MTCC 
      )
    {;}//no settings foreseen
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::LASER_STD)
    {
      theSettings.LaserPower = (Setting & 8128)/64;
      theSettings.LaserFilter = (Setting & 56)/8;
      theSettings.wavelength = Setting & 7;
    }
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::LASER_POWER_SCAN){
    theSettings.LaserPower = (Setting & 8128)/64;
    theSettings.LaserFilter = (Setting & 56)/8;
    theSettings.wavelength = Setting & 7;
  }
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::LASER_DELAY_SCAN){
    theSettings.wavelength = Setting & 7;  
    theSettings.delay = (Setting & 2040)/8;
  }
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM){
    theSettings.MEMVinj = Setting & 511;
  }
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::TESTPULSE_MGPA){
      theSettings.mgpa_content =  Setting & 255;
  }
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::PEDESTAL_STD){;}//no settings foreseen
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN){
    theSettings.ped_offset  =  Setting;
  }
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN ){
    theSettings.delay = (Setting & 255);  
  }
  else if(theHeader->getRunType() == EcalDCCHeaderBlock::LED_STD){
    theSettings.wavelength = Setting & 7;
  }
  else {
    edm::LogWarning("EcalTBRawToDigi") <<"@SUB=EcalDCCTBHeaderRuntypeDecoder::DecodeSettings unrecognized run type: "<<theHeader->getRunType();
    WasDecodingOk_ = false;
  }
  theHeader->setEventSettings(theSettings);
  
}

Member Data Documentation

Definition at line 13 of file EcalDCCHeaderRuntypeDecoder.h.

Referenced by Decode(), and DecodeSetting().