CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Private Types | Private Attributes

EBRawDataTask Class Reference

#include <EBRawDataTask.h>

Inheritance diagram for EBRawDataTask:
edm::EDAnalyzer

List of all members.

Public Member Functions

 EBRawDataTask (const edm::ParameterSet &ps)
 Constructor.
virtual ~EBRawDataTask ()
 Destructor.

Protected Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c)
 Analyze.
void beginJob (void)
 BeginJob.
void beginLuminosityBlock (const edm::LuminosityBlock &lumiBlock, const edm::EventSetup &iSetup)
 BeginLuminosityBlock.
void beginRun (const edm::Run &r, const edm::EventSetup &c)
 BeginRun.
void cleanup (void)
 Cleanup.
void endJob (void)
 EndJob.
void endLuminosityBlock (const edm::LuminosityBlock &lumiBlock, const edm::EventSetup &iSetup)
 EndLuminosityBlock.
void endRun (const edm::Run &r, const edm::EventSetup &c)
 EndRun.
void reset (void)
 Reset.
void setup (void)
 Setup.

Private Types

enum  activeEVM { TCS, FDLEVM }

Private Attributes

float calibrationBX_
DQMStoredqmStore_
edm::InputTag EcalRawDataCollection_
bool enableCleanup_
edm::InputTag FEDRawDataCollection_
int ievt_
bool init_
MonitorElementmeEBBunchCrossingDCCErrors_
MonitorElementmeEBBunchCrossingFEErrors_
MonitorElementmeEBBunchCrossingSRPErrors_
MonitorElementmeEBBunchCrossingTCCErrors_
MonitorElementmeEBCalibrationEventErrors_
MonitorElementmeEBCRCErrors_
MonitorElementmeEBEventTypeCalibrationBX_
MonitorElementmeEBEventTypePostCalibrationBX_
MonitorElementmeEBEventTypePreCalibrationBX_
MonitorElementmeEBL1ADCCErrors_
MonitorElementmeEBL1AFEErrors_
MonitorElementmeEBL1ASRPErrors_
MonitorElementmeEBL1ATCCErrors_
MonitorElementmeEBOrbitNumberErrors_
MonitorElementmeEBRunNumberErrors_
MonitorElementmeEBSynchronizationErrorsByLumi_
MonitorElementmeEBTriggerTypeErrors_
bool mergeRuns_
std::string prefixME_

Detailed Description

Definition at line 20 of file EBRawDataTask.h.


Member Enumeration Documentation

enum EBRawDataTask::activeEVM [private]
Enumerator:
TCS 
FDLEVM 

Definition at line 100 of file EBRawDataTask.h.

{ TCS, FDLEVM };

Constructor & Destructor Documentation

EBRawDataTask::EBRawDataTask ( const edm::ParameterSet ps)

Constructor.

Definition at line 32 of file EBRawDataTask.cc.

References calibrationBX_, dqmStore_, EcalRawDataCollection_, enableCleanup_, FEDRawDataCollection_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), init_, meEBBunchCrossingDCCErrors_, meEBBunchCrossingFEErrors_, meEBBunchCrossingSRPErrors_, meEBBunchCrossingTCCErrors_, meEBCalibrationEventErrors_, meEBCRCErrors_, meEBEventTypeCalibrationBX_, meEBEventTypePostCalibrationBX_, meEBEventTypePreCalibrationBX_, meEBL1ADCCErrors_, meEBL1AFEErrors_, meEBL1ASRPErrors_, meEBL1ATCCErrors_, meEBOrbitNumberErrors_, meEBRunNumberErrors_, meEBSynchronizationErrorsByLumi_, meEBTriggerTypeErrors_, mergeRuns_, cmsCodeRules::cppFunctionSkipper::operator, and prefixME_.

EBRawDataTask::~EBRawDataTask ( ) [virtual]

Destructor.

Definition at line 70 of file EBRawDataTask.cc.

                              {
}

Member Function Documentation

void EBRawDataTask::analyze ( const edm::Event e,
const edm::EventSetup c 
) [protected, virtual]

Analyze.

Implements edm::EDAnalyzer.

Definition at line 378 of file EBRawDataTask.cc.

References edm::EventBase::bunchCrossing(), calibrationBX_, EcalDCCHeaderBlock::COSMIC, EcalDCCHeaderBlock::COSMICS_GLOBAL, EcalDCCHeaderBlock::COSMICS_LOCAL, FEDRawData::data(), EcalBarrel, EcalRawDataCollection_, edm::EventBase::experimentType(), FEDRawDataCollection_, MonitorElement::Fill(), edm::Event::getByLabel(), H_BX_MASK, H_L1_MASK, H_ORBITCOUNTER_MASK, H_TTYPE_MASK, MultipleCompare::header, i, edm::EventBase::id(), ievt_, init_, Numbers::iSM(), ecalpyutils::ism(), edm::EventBase::isRealData(), MAX_TCC_SIZE, meEBBunchCrossingDCCErrors_, meEBBunchCrossingFEErrors_, meEBBunchCrossingSRPErrors_, meEBBunchCrossingTCCErrors_, meEBCalibrationEventErrors_, meEBCRCErrors_, meEBEventTypeCalibrationBX_, meEBEventTypePostCalibrationBX_, meEBEventTypePreCalibrationBX_, meEBL1ADCCErrors_, meEBL1AFEErrors_, meEBL1ASRPErrors_, meEBL1ATCCErrors_, meEBOrbitNumberErrors_, meEBRunNumberErrors_, meEBSynchronizationErrorsByLumi_, meEBTriggerTypeErrors_, EcalDCCHeaderBlock::MTCC, edm::EventBase::orbitNumber(), EcalDCCHeaderBlock::PHYSICS_GLOBAL, EcalDCCHeaderBlock::PHYSICS_LOCAL, edm::EventID::run(), setup(), FEDRawData::size(), ntuplemaker::status, and Numbers::subDet().

                                                                    {

  if ( ! init_ ) this->setup();

  ievt_++;

  // fill bin 0 with number of events in the lumi
  if ( meEBSynchronizationErrorsByLumi_ ) meEBSynchronizationErrorsByLumi_->Fill(0.);

  int evt_runNumber = e.id().run();

  int GT_L1A=0, GT_OrbitNumber=0, GT_BunchCrossing=0, GT_TriggerType=0;

  edm::Handle<FEDRawDataCollection> allFedRawData;

  int gtFedDataSize = 0;

  int ECALDCC_L1A_MostFreqId = -1;
  int ECALDCC_OrbitNumber_MostFreqId = -1;
  int ECALDCC_BunchCrossing_MostFreqId = -1;
  int ECALDCC_TriggerType_MostFreqId = -1;

  if ( e.getByLabel(FEDRawDataCollection_, allFedRawData) ) {

    // GT FED data
    const FEDRawData& gtFedData = allFedRawData->FEDData(812);

    gtFedDataSize = gtFedData.size()/sizeof(uint64_t);

    if ( gtFedDataSize > 0 ) {

      FEDHeader header(gtFedData.data());

#define  H_L1_MASK           0xFFFFFF
#define  H_ORBITCOUNTER_MASK 0xFFFFFFFF
#define  H_BX_MASK           0xFFF
#define  H_TTYPE_MASK        0xF

      GT_L1A           = header.lvl1ID()    & H_L1_MASK;
      GT_OrbitNumber   = e.orbitNumber()    & H_ORBITCOUNTER_MASK;
      GT_BunchCrossing = e.bunchCrossing()  & H_BX_MASK;
      GT_TriggerType   = e.experimentType() & H_TTYPE_MASK;

    } else {

      // use the most frequent among the ECAL FEDs

      std::map<int,int> ECALDCC_L1A_FreqMap;
      std::map<int,int> ECALDCC_OrbitNumber_FreqMap;
      std::map<int,int> ECALDCC_BunchCrossing_FreqMap;
      std::map<int,int> ECALDCC_TriggerType_FreqMap;

      int ECALDCC_L1A_MostFreqCounts = 0;
      int ECALDCC_OrbitNumber_MostFreqCounts = 0;
      int ECALDCC_BunchCrossing_MostFreqCounts = 0;
      int ECALDCC_TriggerType_MostFreqCounts = 0;

      edm::Handle<EcalRawDataCollection> dcchs;

      if ( e.getByLabel(EcalRawDataCollection_, dcchs) ) {

        for ( EcalRawDataCollection::const_iterator dcchItr = dcchs->begin(); dcchItr != dcchs->end(); ++dcchItr ) {

          if ( Numbers::subDet( *dcchItr ) != EcalBarrel ) continue;

          int ECALDCC_L1A = dcchItr->getLV1();
          int ECALDCC_OrbitNumber = dcchItr->getOrbit();
          int ECALDCC_BunchCrossing = dcchItr->getBX();
          int ECALDCC_TriggerType = dcchItr->getBasicTriggerType();

          ++ECALDCC_L1A_FreqMap[ECALDCC_L1A];
          ++ECALDCC_OrbitNumber_FreqMap[ECALDCC_OrbitNumber];
          ++ECALDCC_BunchCrossing_FreqMap[ECALDCC_BunchCrossing];
          ++ECALDCC_TriggerType_FreqMap[ECALDCC_TriggerType];

          if ( ECALDCC_L1A_FreqMap[ECALDCC_L1A] > ECALDCC_L1A_MostFreqCounts ) {
            ECALDCC_L1A_MostFreqCounts = ECALDCC_L1A_FreqMap[ECALDCC_L1A];
            ECALDCC_L1A_MostFreqId = ECALDCC_L1A;
          }

          if ( ECALDCC_OrbitNumber_FreqMap[ECALDCC_OrbitNumber] > ECALDCC_OrbitNumber_MostFreqCounts ) {
            ECALDCC_OrbitNumber_MostFreqCounts = ECALDCC_OrbitNumber_FreqMap[ECALDCC_OrbitNumber];
            ECALDCC_OrbitNumber_MostFreqId = ECALDCC_OrbitNumber;
          }

          if ( ECALDCC_BunchCrossing_FreqMap[ECALDCC_BunchCrossing] > ECALDCC_BunchCrossing_MostFreqCounts ) {
            ECALDCC_BunchCrossing_MostFreqCounts = ECALDCC_BunchCrossing_FreqMap[ECALDCC_BunchCrossing];
            ECALDCC_BunchCrossing_MostFreqId = ECALDCC_BunchCrossing;
          }

          if ( ECALDCC_TriggerType_FreqMap[ECALDCC_TriggerType] > ECALDCC_TriggerType_MostFreqCounts ) {
            ECALDCC_TriggerType_MostFreqCounts = ECALDCC_TriggerType_FreqMap[ECALDCC_TriggerType];
            ECALDCC_TriggerType_MostFreqId = ECALDCC_TriggerType;
          }

        }

      } else {
        edm::LogWarning("EBRawDataTask") << EcalRawDataCollection_ << " not available";
      }

    }

    // ECAL barrel FEDs
    int EBFirstFED=610;
    for(int i=0; i<36; i++) {

      const FEDRawData& fedData = allFedRawData->FEDData(EBFirstFED+i);

      int length = fedData.size()/sizeof(uint64_t);

      if ( length > 0 ) {

        uint64_t * pData = (uint64_t *)(fedData.data());
        uint64_t * fedTrailer = pData + (length - 1);
        bool crcError = (*fedTrailer >> 2 ) & 0x1;

        if (crcError) meEBCRCErrors_->Fill( i+1 );

      }

    }

  } else {
    edm::LogWarning("EBRawDataTask") << FEDRawDataCollection_ << " not available";
  }

  edm::Handle<EcalRawDataCollection> dcchs;

  if ( e.getByLabel(EcalRawDataCollection_, dcchs) ) {

    for ( EcalRawDataCollection::const_iterator dcchItr = dcchs->begin(); dcchItr != dcchs->end(); ++dcchItr ) {

      if ( Numbers::subDet( *dcchItr ) != EcalBarrel ) continue;

      int ism = Numbers::iSM( *dcchItr, EcalBarrel );
      float xism = ism+0.5;

      int ECALDCC_runNumber     = dcchItr->getRunNumber();

      int ECALDCC_L1A           = dcchItr->getLV1();
      int ECALDCC_OrbitNumber   = dcchItr->getOrbit();
      int ECALDCC_BunchCrossing = dcchItr->getBX();
      int ECALDCC_TriggerType   = dcchItr->getBasicTriggerType();

      if ( evt_runNumber != ECALDCC_runNumber ) meEBRunNumberErrors_->Fill( xism );

      if ( gtFedDataSize > 0 ) {

        if ( GT_L1A != ECALDCC_L1A ) meEBL1ADCCErrors_->Fill( xism );

        if ( GT_BunchCrossing != ECALDCC_BunchCrossing ) meEBBunchCrossingDCCErrors_->Fill( xism );

        if ( GT_TriggerType != ECALDCC_TriggerType ) meEBTriggerTypeErrors_->Fill ( xism );

      } else {

        if ( ECALDCC_L1A_MostFreqId != ECALDCC_L1A ) meEBL1ADCCErrors_->Fill( xism );

        if ( ECALDCC_BunchCrossing_MostFreqId != ECALDCC_BunchCrossing ) meEBBunchCrossingDCCErrors_->Fill( xism );

        if ( ECALDCC_TriggerType_MostFreqId != ECALDCC_TriggerType ) meEBTriggerTypeErrors_->Fill ( xism );

      }

      if ( gtFedDataSize == 0 ) {

        if ( GT_OrbitNumber != ECALDCC_OrbitNumber ) meEBOrbitNumberErrors_->Fill ( xism );

      } else {

        if ( ECALDCC_OrbitNumber_MostFreqId != ECALDCC_OrbitNumber ) meEBOrbitNumberErrors_->Fill ( xism );

      }

      // DCC vs. FE,TCC, SRP syncronization
      const std::vector<short> feBxs = dcchItr->getFEBxs();
      const std::vector<short> tccBx = dcchItr->getTCCBx();
      const short srpBx = dcchItr->getSRPBx();
      const std::vector<short> status = dcchItr->getFEStatus();

      std::vector<int> BxSynchStatus;
      BxSynchStatus.reserve((int)feBxs.size());

      for(int fe=0; fe<(int)feBxs.size(); fe++) {
        // do not consider desynch errors if the DCC detected them
        if( ( status[fe] == 10 || status[fe] == 11 )) continue;
        if(feBxs[fe] != ECALDCC_BunchCrossing && feBxs[fe] != -1 && ECALDCC_BunchCrossing != -1) {
          meEBBunchCrossingFEErrors_->Fill( xism, 1/(float)feBxs.size() );
          BxSynchStatus[fe] = 0;
        } else BxSynchStatus[fe] = 1;
      }

      // vector of TCC channels has 4 elements for both EB and EE.
      // EB uses [0], EE uses [0-3].
      if(tccBx.size() == MAX_TCC_SIZE) {
        if(tccBx[0] != ECALDCC_BunchCrossing && tccBx[0] != -1 && ECALDCC_BunchCrossing != -1) meEBBunchCrossingTCCErrors_->Fill( xism );
      }

      if(srpBx != ECALDCC_BunchCrossing && srpBx != -1 && ECALDCC_BunchCrossing != -1) meEBBunchCrossingSRPErrors_->Fill( xism );

      const std::vector<short> feLv1 = dcchItr->getFELv1();
      const std::vector<short> tccLv1 = dcchItr->getTCCLv1();
      const short srpLv1 = dcchItr->getSRPLv1();

      // Lv1 in TCC,SRP,FE are limited to 12 bits(LSB), while in the DCC Lv1 has 24 bits
      int ECALDCC_L1A_12bit = ECALDCC_L1A & 0xfff;
      int feLv1Offset = ( e.isRealData() ) ? 1 : 0; // in MC FE Lv1A counter starts from 1, in data from 0

      for(int fe=0; fe<(int)feLv1.size(); fe++) {
        // do not consider desynch errors if the DCC detected them
        if( ( status[fe] == 9 || status[fe] == 11 )) continue;
        if(feLv1[fe]+feLv1Offset != ECALDCC_L1A_12bit && feLv1[fe] != -1 && ECALDCC_L1A_12bit - 1 != -1) {
          meEBL1AFEErrors_->Fill( xism, 1/(float)feLv1.size() );
          meEBSynchronizationErrorsByLumi_->Fill( xism, 1/(float)feLv1.size() );
        } else if( BxSynchStatus[fe]==0 ) meEBSynchronizationErrorsByLumi_->Fill( xism, 1/(float)feLv1.size() );
      }

      // vector of TCC channels has 4 elements for both EB and EE.
      // EB uses [0], EE uses [0-3].
      if(tccLv1.size() == MAX_TCC_SIZE) {
        if(tccLv1[0] != ECALDCC_L1A_12bit && tccLv1[0] != -1 && ECALDCC_L1A_12bit - 1 != -1) meEBL1ATCCErrors_->Fill( xism );
      }

      if(srpLv1 != ECALDCC_L1A_12bit && srpLv1 != -1 && ECALDCC_L1A_12bit - 1 != -1) meEBL1ASRPErrors_->Fill( xism );

      if ( gtFedDataSize == 0 ) {

        if ( GT_OrbitNumber != ECALDCC_OrbitNumber ) meEBOrbitNumberErrors_->Fill ( xism );

      } else {

        if ( ECALDCC_OrbitNumber_MostFreqId != ECALDCC_OrbitNumber ) meEBOrbitNumberErrors_->Fill ( xism );

      }

      float evtType = dcchItr->getRunType();

      if ( evtType < 0 || evtType > 22 ) evtType = -1;

      if ( ECALDCC_BunchCrossing < calibrationBX_ ) meEBEventTypePreCalibrationBX_->Fill( evtType+0.5, 1./36. );
      if ( ECALDCC_BunchCrossing == calibrationBX_ ) meEBEventTypeCalibrationBX_->Fill( evtType+0.5, 1./36. );
      if ( ECALDCC_BunchCrossing > calibrationBX_ ) meEBEventTypePostCalibrationBX_->Fill ( evtType+0.5, 1./36. );

      if ( ECALDCC_BunchCrossing != calibrationBX_ ) {
        if ( evtType != EcalDCCHeaderBlock::COSMIC &&
             evtType != EcalDCCHeaderBlock::MTCC &&
             evtType != EcalDCCHeaderBlock::COSMICS_GLOBAL &&
             evtType != EcalDCCHeaderBlock::PHYSICS_GLOBAL &&
             evtType != EcalDCCHeaderBlock::COSMICS_LOCAL &&
             evtType != EcalDCCHeaderBlock::PHYSICS_LOCAL &&
             evtType != -1 ) meEBCalibrationEventErrors_->Fill( xism );
      } else {
        if ( evtType == EcalDCCHeaderBlock::COSMIC ||
             evtType == EcalDCCHeaderBlock::MTCC ||
             evtType == EcalDCCHeaderBlock::COSMICS_GLOBAL ||
             evtType == EcalDCCHeaderBlock::PHYSICS_GLOBAL ||
             evtType == EcalDCCHeaderBlock::COSMICS_LOCAL ||
             evtType == EcalDCCHeaderBlock::PHYSICS_LOCAL ) meEBCalibrationEventErrors_->Fill( xism );
      }

    }

  } else {
    edm::LogWarning("EBRawDataTask") << EcalRawDataCollection_ << " not available";
  }

}
void EBRawDataTask::beginJob ( void  ) [protected, virtual]

BeginJob.

Reimplemented from edm::EDAnalyzer.

Definition at line 73 of file EBRawDataTask.cc.

References dqmStore_, ievt_, prefixME_, DQMStore::rmdir(), and DQMStore::setCurrentFolder().

                                {

  ievt_ = 0;

  if ( dqmStore_ ) {
    dqmStore_->setCurrentFolder(prefixME_ + "/EBRawDataTask");
    dqmStore_->rmdir(prefixME_ + "/EBRawDataTask");
  }

}
void EBRawDataTask::beginLuminosityBlock ( const edm::LuminosityBlock lumiBlock,
const edm::EventSetup iSetup 
) [protected, virtual]

BeginLuminosityBlock.

Reimplemented from edm::EDAnalyzer.

Definition at line 84 of file EBRawDataTask.cc.

References meEBSynchronizationErrorsByLumi_, and MonitorElement::Reset().

void EBRawDataTask::beginRun ( const edm::Run r,
const edm::EventSetup c 
) [protected, virtual]

BeginRun.

Reimplemented from edm::EDAnalyzer.

Definition at line 90 of file EBRawDataTask.cc.

References Numbers::initGeometry(), mergeRuns_, and reset().

                                                                    {

  Numbers::initGeometry(c, false);

  if ( ! mergeRuns_ ) this->reset();

}
void EBRawDataTask::cleanup ( void  ) [protected]

Cleanup.

Definition at line 303 of file EBRawDataTask.cc.

References dqmStore_, MonitorElement::getName(), init_, meEBBunchCrossingDCCErrors_, meEBBunchCrossingFEErrors_, meEBBunchCrossingSRPErrors_, meEBBunchCrossingTCCErrors_, meEBCalibrationEventErrors_, meEBCRCErrors_, meEBEventTypeCalibrationBX_, meEBEventTypePostCalibrationBX_, meEBEventTypePreCalibrationBX_, meEBL1ADCCErrors_, meEBL1AFEErrors_, meEBL1ASRPErrors_, meEBL1ATCCErrors_, meEBOrbitNumberErrors_, meEBRunNumberErrors_, meEBSynchronizationErrorsByLumi_, meEBTriggerTypeErrors_, prefixME_, DQMStore::removeElement(), and DQMStore::setCurrentFolder().

Referenced by endJob().

                               {

  if ( ! init_ ) return;

  if ( dqmStore_ ) {
    dqmStore_->setCurrentFolder(prefixME_ + "/EBRawDataTask");

    if ( meEBEventTypePreCalibrationBX_ ) dqmStore_->removeElement( meEBEventTypePreCalibrationBX_->getName() );
    meEBEventTypePreCalibrationBX_ = 0;

    if ( meEBEventTypeCalibrationBX_ ) dqmStore_->removeElement( meEBEventTypeCalibrationBX_->getName() );
    meEBEventTypeCalibrationBX_ = 0;

    if ( meEBEventTypePostCalibrationBX_ ) dqmStore_->removeElement( meEBEventTypePostCalibrationBX_->getName() );
    meEBEventTypePostCalibrationBX_ = 0;

    if ( meEBCRCErrors_ ) dqmStore_->removeElement( meEBCRCErrors_->getName() );
    meEBCRCErrors_ = 0;

    if ( meEBRunNumberErrors_ ) dqmStore_->removeElement( meEBRunNumberErrors_->getName() );
    meEBRunNumberErrors_ = 0;

    if ( meEBOrbitNumberErrors_ ) dqmStore_->removeElement( meEBOrbitNumberErrors_->getName() );
    meEBOrbitNumberErrors_ = 0;

    if ( meEBTriggerTypeErrors_ ) dqmStore_->removeElement( meEBTriggerTypeErrors_->getName() );
    meEBTriggerTypeErrors_ = 0;

    if ( meEBCalibrationEventErrors_ ) dqmStore_->removeElement( meEBCalibrationEventErrors_->getName() );
    meEBCalibrationEventErrors_ = 0;

    if ( meEBL1ADCCErrors_ ) dqmStore_->removeElement( meEBL1ADCCErrors_->getName() );
    meEBL1ADCCErrors_ = 0;

    if ( meEBBunchCrossingDCCErrors_ ) dqmStore_->removeElement( meEBBunchCrossingDCCErrors_->getName() );
    meEBBunchCrossingDCCErrors_ = 0;

    if ( meEBL1AFEErrors_ ) dqmStore_->removeElement( meEBL1AFEErrors_->getName() );
    meEBL1AFEErrors_ = 0;

    if ( meEBBunchCrossingFEErrors_ ) dqmStore_->removeElement( meEBBunchCrossingFEErrors_->getName() );
    meEBBunchCrossingFEErrors_ = 0;

    if ( meEBL1ATCCErrors_ ) dqmStore_->removeElement( meEBL1ATCCErrors_->getName() );
    meEBL1ATCCErrors_ = 0;

    if ( meEBBunchCrossingTCCErrors_ ) dqmStore_->removeElement( meEBBunchCrossingTCCErrors_->getName() );
    meEBBunchCrossingTCCErrors_ = 0;

    if ( meEBL1ASRPErrors_ ) dqmStore_->removeElement( meEBL1ASRPErrors_->getName() );
    meEBL1ASRPErrors_ = 0;

    if ( meEBBunchCrossingSRPErrors_ ) dqmStore_->removeElement( meEBBunchCrossingSRPErrors_->getName() );
    meEBBunchCrossingSRPErrors_ = 0;

    if ( meEBSynchronizationErrorsByLumi_ ) dqmStore_->removeElement( meEBSynchronizationErrorsByLumi_->getName() );
    meEBSynchronizationErrorsByLumi_ = 0;

  }

  init_ = false;

}
void EBRawDataTask::endJob ( void  ) [protected, virtual]

EndJob.

Reimplemented from edm::EDAnalyzer.

Definition at line 370 of file EBRawDataTask.cc.

References cleanup(), enableCleanup_, and ievt_.

                               {

  edm::LogInfo("EBRawDataTask") << "analyzed " << ievt_ << " events";

  if ( enableCleanup_ ) this->cleanup();

}
void EBRawDataTask::endLuminosityBlock ( const edm::LuminosityBlock lumiBlock,
const edm::EventSetup iSetup 
) [protected, virtual]

EndLuminosityBlock.

Reimplemented from edm::EDAnalyzer.

Definition at line 367 of file EBRawDataTask.cc.

                                                                                                         {
}
void EBRawDataTask::endRun ( const edm::Run r,
const edm::EventSetup c 
) [protected, virtual]

EndRun.

Reimplemented from edm::EDAnalyzer.

Definition at line 98 of file EBRawDataTask.cc.

                                                                  {

}
void EBRawDataTask::reset ( void  ) [protected]

Reset.

Definition at line 102 of file EBRawDataTask.cc.

References meEBBunchCrossingDCCErrors_, meEBBunchCrossingFEErrors_, meEBBunchCrossingSRPErrors_, meEBBunchCrossingTCCErrors_, meEBCalibrationEventErrors_, meEBCRCErrors_, meEBEventTypeCalibrationBX_, meEBEventTypePostCalibrationBX_, meEBEventTypePreCalibrationBX_, meEBL1ADCCErrors_, meEBL1AFEErrors_, meEBL1ASRPErrors_, meEBL1ATCCErrors_, meEBOrbitNumberErrors_, meEBRunNumberErrors_, meEBSynchronizationErrorsByLumi_, meEBTriggerTypeErrors_, and MonitorElement::Reset().

Referenced by beginRun().

void EBRawDataTask::setup ( void  ) [protected]

Setup.

Definition at line 124 of file EBRawDataTask.cc.

References EcalDCCHeaderBlock::BEAMH2, EcalDCCHeaderBlock::BEAMH4, DQMStore::book1D(), EcalDCCHeaderBlock::COSMIC, EcalDCCHeaderBlock::COSMICS_GLOBAL, EcalDCCHeaderBlock::COSMICS_LOCAL, dqmStore_, EcalDCCHeaderBlock::HALO_GLOBAL, EcalDCCHeaderBlock::HALO_LOCAL, i, init_, EcalDCCHeaderBlock::LASER_DELAY_SCAN, EcalDCCHeaderBlock::LASER_GAP, EcalDCCHeaderBlock::LASER_POWER_SCAN, EcalDCCHeaderBlock::LASER_STD, EcalDCCHeaderBlock::LED_GAP, EcalDCCHeaderBlock::LED_STD, meEBBunchCrossingDCCErrors_, meEBBunchCrossingFEErrors_, meEBBunchCrossingSRPErrors_, meEBBunchCrossingTCCErrors_, meEBCalibrationEventErrors_, meEBCRCErrors_, meEBEventTypeCalibrationBX_, meEBEventTypePostCalibrationBX_, meEBEventTypePreCalibrationBX_, meEBL1ADCCErrors_, meEBL1AFEErrors_, meEBL1ASRPErrors_, meEBL1ATCCErrors_, meEBOrbitNumberErrors_, meEBRunNumberErrors_, meEBSynchronizationErrorsByLumi_, meEBTriggerTypeErrors_, EcalDCCHeaderBlock::MTCC, mergeVDriftHistosByStation::name, EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN, EcalDCCHeaderBlock::PEDESTAL_GAP, EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN, EcalDCCHeaderBlock::PEDESTAL_STD, EcalDCCHeaderBlock::PHYSICS_GLOBAL, EcalDCCHeaderBlock::PHYSICS_LOCAL, prefixME_, Numbers::sEB(), MonitorElement::setBinLabel(), DQMStore::setCurrentFolder(), MonitorElement::setLumiFlag(), EcalDCCHeaderBlock::TESTPULSE_GAP, EcalDCCHeaderBlock::TESTPULSE_MGPA, and EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM.

Referenced by analyze().

                             {

  init_ = true;

  std::string name;

  if ( dqmStore_ ) {
    dqmStore_->setCurrentFolder(prefixME_ + "/EBRawDataTask");

    name = "EBRDT event type pre calibration BX";
    meEBEventTypePreCalibrationBX_ = dqmStore_->book1D(name, name, 31, -1., 30.);
    meEBEventTypePreCalibrationBX_->setBinLabel(1, "UNKNOWN", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMIC, "COSMIC", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::BEAMH4, "BEAMH4", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::BEAMH2, "BEAMH2", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::MTCC, "MTCC", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_STD, "LASER_STD", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_POWER_SCAN, "LASER_POWER_SCAN", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_DELAY_SCAN, "LASER_DELAY_SCAN", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM, "TESTPULSE_SCAN_MEM", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_MGPA, "TESTPULSE_MGPA", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_STD, "PEDESTAL_STD", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN, "PEDESTAL_OFFSET_SCAN", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN, "PEDESTAL_25NS_SCAN", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LED_STD, "LED_STD", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PHYSICS_GLOBAL, "PHYSICS_GLOBAL", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMICS_GLOBAL, "COSMICS_GLOBAL", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::HALO_GLOBAL, "HALO_GLOBAL", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_GAP, "LASER_GAP", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_GAP, "TESTPULSE_GAP");
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_GAP, "PEDESTAL_GAP");
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LED_GAP, "LED_GAP", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PHYSICS_LOCAL, "PHYSICS_LOCAL", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMICS_LOCAL, "COSMICS_LOCAL", 1);
    meEBEventTypePreCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::HALO_LOCAL, "HALO_LOCAL", 1);

    name = "EBRDT event type calibration BX";
    meEBEventTypeCalibrationBX_ = dqmStore_->book1D(name, name, 31, -1., 30.);
    meEBEventTypeCalibrationBX_->setBinLabel(1, "UNKNOWN", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMIC, "COSMIC", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::BEAMH4, "BEAMH4", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::BEAMH2, "BEAMH2", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::MTCC, "MTCC", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_STD, "LASER_STD", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_POWER_SCAN, "LASER_POWER_SCAN", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_DELAY_SCAN, "LASER_DELAY_SCAN", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM, "TESTPULSE_SCAN_MEM", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_MGPA, "TESTPULSE_MGPA", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_STD, "PEDESTAL_STD", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN, "PEDESTAL_OFFSET_SCAN", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN, "PEDESTAL_25NS_SCAN", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LED_STD, "LED_STD", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PHYSICS_GLOBAL, "PHYSICS_GLOBAL", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMICS_GLOBAL, "COSMICS_GLOBAL", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::HALO_GLOBAL, "HALO_GLOBAL", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_GAP, "LASER_GAP", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_GAP, "TESTPULSE_GAP");
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_GAP, "PEDESTAL_GAP");
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LED_GAP, "LED_GAP", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PHYSICS_LOCAL, "PHYSICS_LOCAL", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMICS_LOCAL, "COSMICS_LOCAL", 1);
    meEBEventTypeCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::HALO_LOCAL, "HALO_LOCAL", 1);

    name = "EBRDT event type post calibration BX";
    meEBEventTypePostCalibrationBX_ = dqmStore_->book1D(name, name, 31, -1., 30.);
    meEBEventTypePostCalibrationBX_->setBinLabel(1, "UNKNOWN", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMIC, "COSMIC", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::BEAMH4, "BEAMH4", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::BEAMH2, "BEAMH2", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::MTCC, "MTCC", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_STD, "LASER_STD", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_POWER_SCAN, "LASER_POWER_SCAN", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_DELAY_SCAN, "LASER_DELAY_SCAN", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_SCAN_MEM, "TESTPULSE_SCAN_MEM", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_MGPA, "TESTPULSE_MGPA", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_STD, "PEDESTAL_STD", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN, "PEDESTAL_OFFSET_SCAN", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_25NS_SCAN, "PEDESTAL_25NS_SCAN", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LED_STD, "LED_STD", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PHYSICS_GLOBAL, "PHYSICS_GLOBAL", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMICS_GLOBAL, "COSMICS_GLOBAL", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::HALO_GLOBAL, "HALO_GLOBAL", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LASER_GAP, "LASER_GAP", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::TESTPULSE_GAP, "TESTPULSE_GAP");
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PEDESTAL_GAP, "PEDESTAL_GAP");
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::LED_GAP, "LED_GAP", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::PHYSICS_LOCAL, "PHYSICS_LOCAL", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::COSMICS_LOCAL, "COSMICS_LOCAL", 1);
    meEBEventTypePostCalibrationBX_->setBinLabel(2+EcalDCCHeaderBlock::HALO_LOCAL, "HALO_LOCAL", 1);

    name = "EBRDT CRC errors";
    meEBCRCErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBCRCErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT run number errors";
    meEBRunNumberErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBRunNumberErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT orbit number errors";
    meEBOrbitNumberErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBOrbitNumberErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT trigger type errors";
    meEBTriggerTypeErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBTriggerTypeErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT calibration event errors";
    meEBCalibrationEventErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBCalibrationEventErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT L1A DCC errors";
    meEBL1ADCCErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBL1ADCCErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT bunch crossing DCC errors";
    meEBBunchCrossingDCCErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBBunchCrossingDCCErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT L1A FE errors";
    meEBL1AFEErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBL1AFEErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT bunch crossing FE errors";
    meEBBunchCrossingFEErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBBunchCrossingFEErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT L1A TCC errors";
    meEBL1ATCCErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBL1ATCCErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT bunch crossing TCC errors";
    meEBBunchCrossingTCCErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBBunchCrossingTCCErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT L1A SRP errors";
    meEBL1ASRPErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBL1ASRPErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT bunch crossing SRP errors";
    meEBBunchCrossingSRPErrors_ = dqmStore_->book1D(name, name, 36, 1, 37);
    for (int i = 0; i < 36; i++) {
      meEBBunchCrossingSRPErrors_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

    name = "EBRDT FE synchronization errors by lumi";
    meEBSynchronizationErrorsByLumi_ = dqmStore_->book1D(name, name, 36, 1, 37);
    meEBSynchronizationErrorsByLumi_->setLumiFlag();
    for (int i = 0; i < 36; i++) {
      meEBSynchronizationErrorsByLumi_->setBinLabel(i+1, Numbers::sEB(i+1), 1);
    }

  }

}

Member Data Documentation

Definition at line 98 of file EBRawDataTask.h.

Referenced by analyze(), and EBRawDataTask().

Definition at line 66 of file EBRawDataTask.h.

Referenced by beginJob(), cleanup(), EBRawDataTask(), and setup().

Definition at line 75 of file EBRawDataTask.h.

Referenced by analyze(), and EBRawDataTask().

Definition at line 70 of file EBRawDataTask.h.

Referenced by EBRawDataTask(), and endJob().

Definition at line 74 of file EBRawDataTask.h.

Referenced by analyze(), and EBRawDataTask().

int EBRawDataTask::ievt_ [private]

Definition at line 64 of file EBRawDataTask.h.

Referenced by analyze(), beginJob(), and endJob().

bool EBRawDataTask::init_ [private]

Definition at line 96 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), and setup().

Definition at line 86 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 88 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 92 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 90 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 84 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 77 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 79 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 80 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 78 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 85 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 87 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 91 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 89 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 82 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 81 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 94 of file EBRawDataTask.h.

Referenced by analyze(), beginLuminosityBlock(), cleanup(), EBRawDataTask(), reset(), and setup().

Definition at line 83 of file EBRawDataTask.h.

Referenced by analyze(), cleanup(), EBRawDataTask(), reset(), and setup().

bool EBRawDataTask::mergeRuns_ [private]

Definition at line 72 of file EBRawDataTask.h.

Referenced by beginRun(), and EBRawDataTask().

std::string EBRawDataTask::prefixME_ [private]

Definition at line 68 of file EBRawDataTask.h.

Referenced by beginJob(), cleanup(), EBRawDataTask(), and setup().