CMS 3D CMS Logo

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

EcalBarrelDigisValidation Class Reference

#include <EcalBarrelDigisValidation.h>

Inheritance diagram for EcalBarrelDigisValidation:
edm::EDAnalyzer

List of all members.

Public Member Functions

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

Protected Member Functions

void analyze (edm::Event const &e, edm::EventSetup const &c)
 Analyze.
void beginRun (edm::Run const &, edm::EventSetup const &c)
void checkCalibrations (edm::EventSetup const &c)
void endJob (void)

Private Types

typedef std::map< uint32_t,
float, std::less< uint32_t > > 
MapType

Private Attributes

double barrelADCtoGeV_
DQMStoredbe_
edm::InputTag EBdigiCollection_
double endcapADCtoGeV_
std::map< int, double,
std::less< int > > 
gainConv_
MonitorElementmeEBDigiADCAnalog_ [10]
MonitorElementmeEBDigiADCg12_ [10]
MonitorElementmeEBDigiADCg1_ [10]
MonitorElementmeEBDigiADCg6_ [10]
MonitorElementmeEBDigiADCGlobal_
MonitorElementmeEBDigiADCgS_ [10]
MonitorElementmeEBDigiGain_ [10]
MonitorElementmeEBDigiMultiplicity_
MonitorElementmeEBDigiOccupancy_
MonitorElementmeEBMaximumgt100ADC_
MonitorElementmeEBMaximumgt10ADC_
MonitorElementmeEBnADCafterSwitch_
MonitorElementmeEBPedestal_
std::string outputFile_
bool verbose_

Detailed Description

Definition at line 36 of file EcalBarrelDigisValidation.h.


Member Typedef Documentation

typedef std::map<uint32_t,float,std::less<uint32_t> > EcalBarrelDigisValidation::MapType [private]

Definition at line 38 of file EcalBarrelDigisValidation.h.


Constructor & Destructor Documentation

EcalBarrelDigisValidation::EcalBarrelDigisValidation ( const edm::ParameterSet ps)

Constructor.

Definition at line 18 of file EcalBarrelDigisValidation.cc.

References barrelADCtoGeV_, dbe_, endcapADCtoGeV_, gainConv_, edm::ParameterSet::getUntrackedParameter(), trackerHits::histo, i, meEBDigiADCAnalog_, meEBDigiADCg12_, meEBDigiADCg1_, meEBDigiADCg6_, meEBDigiADCGlobal_, meEBDigiADCgS_, meEBDigiGain_, meEBDigiMultiplicity_, meEBDigiOccupancy_, meEBMaximumgt100ADC_, meEBMaximumgt10ADC_, meEBnADCafterSwitch_, meEBPedestal_, cmsCodeRules::cppFunctionSkipper::operator, and verbose_.

                                                                          :
  EBdigiCollection_(ps.getParameter<edm::InputTag>("EBdigiCollection"))
{
  
  // verbosity switch
  verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
    
  dbe_ = 0;
                                                                                                                                          
  // get hold of back-end interface
  dbe_ = Service<DQMStore>().operator->();
                                                                                                                                          
  if ( dbe_ ) {
    if ( verbose_ ) {
      dbe_->setVerbose(1);
    } else {
      dbe_->setVerbose(0);
    }
  }
                                                                                                                                          
  if ( dbe_ ) {
    if ( verbose_ ) dbe_->showDirStructure();
  }

  gainConv_[1] = 1.;
  gainConv_[2] = 2.;
  gainConv_[3] = 12.;
  gainConv_[0] = 12.;   // saturated channels
  barrelADCtoGeV_ = 0.035;
  endcapADCtoGeV_ = 0.06;
 
  meEBDigiOccupancy_ = 0;

  meEBDigiMultiplicity_ = 0;

  meEBDigiADCGlobal_ = 0;

  for (int i = 0; i < 10 ; i++ ) {
    meEBDigiADCAnalog_[i] = 0;
    meEBDigiADCgS_[i]  = 0;
    meEBDigiADCg1_[i]  = 0;
    meEBDigiADCg6_[i]  = 0;
    meEBDigiADCg12_[i] = 0;
    meEBDigiGain_[i] = 0;
  }

  meEBPedestal_ = 0;
                                 
  meEBMaximumgt100ADC_ = 0; 
                                 
  meEBMaximumgt10ADC_ = 0; 

  meEBnADCafterSwitch_ = 0;
 
  Char_t histo[200];
 
  
  if ( dbe_ ) {
    dbe_->setCurrentFolder("EcalDigisV/EcalDigiTask");
  
    sprintf (histo, "EcalDigiTask Barrel occupancy" ) ;
    meEBDigiOccupancy_ = dbe_->book2D(histo, histo, 360, 0., 360., 170, -85., 85.);

    sprintf (histo, "EcalDigiTask Barrel digis multiplicity" ) ;
    meEBDigiMultiplicity_ = dbe_->book1D(histo, histo, 612, 0., 61200);
  
    sprintf (histo, "EcalDigiTask Barrel global pulse shape" ) ;
    meEBDigiADCGlobal_ = dbe_->bookProfile(histo, histo, 10, 0, 10, 10000, 0., 1000.) ;
    
    for (int i = 0; i < 10 ; i++ ) {

      sprintf (histo, "EcalDigiTask Barrel analog pulse %02d", i+1) ;
      meEBDigiADCAnalog_[i] = dbe_->book1D(histo, histo, 4000, 0., 400.);

      sprintf (histo, "EcalDigiTask Barrel ADC pulse %02d Gain 0 - Saturated", i+1) ;
      meEBDigiADCgS_[i] = dbe_->book1D(histo, histo, 4096, -0.5, 4095.5);

      sprintf (histo, "EcalDigiTask Barrel ADC pulse %02d Gain 1", i+1) ;
      meEBDigiADCg1_[i] = dbe_->book1D(histo, histo, 4096, -0.5, 4095.5);

      sprintf (histo, "EcalDigiTask Barrel ADC pulse %02d Gain 6", i+1) ;
      meEBDigiADCg6_[i] = dbe_->book1D(histo, histo, 4096, -0.5, 4095.5);

      sprintf (histo, "EcalDigiTask Barrel ADC pulse %02d Gain 12", i+1) ;
      meEBDigiADCg12_[i] = dbe_->book1D(histo, histo, 4096, -0.5, 4095.5);

      sprintf (histo, "EcalDigiTask Barrel gain pulse %02d", i+1) ;
      meEBDigiGain_[i] = dbe_->book1D(histo, histo, 4, 0, 4);

    }
    
    sprintf (histo, "EcalDigiTask Barrel pedestal for pre-sample" ) ;
    meEBPedestal_ = dbe_->book1D(histo, histo, 4096, -0.5, 4095.5) ;

    sprintf (histo, "EcalDigiTask Barrel maximum position gt 100 ADC" ) ;
    meEBMaximumgt100ADC_ = dbe_->book1D(histo, histo, 10, 0., 10.) ;

    sprintf (histo, "EcalDigiTask Barrel maximum position gt 10 ADC" ) ;
    meEBMaximumgt10ADC_ = dbe_->book1D(histo, histo, 10, 0., 10.) ;

    sprintf (histo, "EcalDigiTask Barrel ADC counts after gain switch" ) ;
    meEBnADCafterSwitch_ = dbe_->book1D(histo, histo, 10, 0., 10.) ;

  }
 
}
EcalBarrelDigisValidation::~EcalBarrelDigisValidation ( )

Destructor.

Definition at line 125 of file EcalBarrelDigisValidation.cc.

                                                     {
 
}

Member Function Documentation

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

Analyze.

Implements edm::EDAnalyzer.

Definition at line 139 of file EcalBarrelDigisValidation.cc.

References EcalMGPASample::adc(), barrelADCtoGeV_, EBdigiCollection_, MonitorElement::Fill(), gainConv_, EcalMGPASample::gainId(), edm::Event::getByLabel(), i, EBDataFrame::id(), EBDetId::ieta(), EBDetId::iphi(), edm::HandleBase::isValid(), LogDebug, EcalDataFrame::MAXSAMPLES, meEBDigiADCAnalog_, meEBDigiADCg12_, meEBDigiADCg1_, meEBDigiADCg6_, meEBDigiADCGlobal_, meEBDigiADCgS_, meEBDigiGain_, meEBDigiMultiplicity_, meEBDigiOccupancy_, meEBMaximumgt100ADC_, meEBMaximumgt10ADC_, meEBnADCafterSwitch_, meEBPedestal_, edm::Handle< T >::product(), DetId::rawId(), and EcalDataFrame::size().

                                                                            {

  //LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event();

  Handle<EBDigiCollection> EcalDigiEB;

  e.getByLabel( EBdigiCollection_ , EcalDigiEB );

  //Return if no Barrel data 
  if( !EcalDigiEB.isValid() ) return;

  // BARREL

  // loop over Digis

  const EBDigiCollection * barrelDigi = EcalDigiEB.product () ;

  std::vector<double> ebAnalogSignal ;
  std::vector<double> ebADCCounts ;
  std::vector<double> ebADCGains ;
  ebAnalogSignal.reserve(EBDataFrame::MAXSAMPLES);
  ebADCCounts.reserve(EBDataFrame::MAXSAMPLES);
  ebADCGains.reserve(EBDataFrame::MAXSAMPLES);

  int nDigis = 0;
  
  for (unsigned int digis=0; digis<EcalDigiEB->size(); ++digis) 
    {
      
      EBDataFrame ebdf = (*barrelDigi)[digis];
      int nrSamples = ebdf.size();
      
      EBDetId ebid = ebdf.id () ;

      nDigis++;
      if (meEBDigiOccupancy_) meEBDigiOccupancy_->Fill( ebid.iphi(), ebid.ieta() );
      
      double Emax = 0. ;
      int Pmax = 0 ;
      double pedestalPreSample = 0.;
      double pedestalPreSampleAnalog = 0.;
      int countsAfterGainSwitch = -1;
      double higherGain = 1.;
      int higherGainSample = 0;
      
      for (int sample = 0 ; sample < nrSamples; ++sample) {
        ebAnalogSignal[sample] = 0.;
        ebADCCounts[sample] = 0.;
        ebADCGains[sample] = 0.;
      }
      
      for (int sample = 0 ; sample < nrSamples; ++sample) 
        {
          EcalMGPASample thisSample = ebdf[sample];
          
          ebADCCounts[sample] = (thisSample.adc());
          ebADCGains[sample]  = (thisSample.gainId());
          ebAnalogSignal[sample] = (ebADCCounts[sample]*gainConv_[(int)ebADCGains[sample]]*barrelADCtoGeV_);
          
          if (Emax < ebAnalogSignal[sample] ) {
            Emax = ebAnalogSignal[sample] ;
            Pmax = sample ;
          }
          
          if ( sample < 3 ) {
            pedestalPreSample += ebADCCounts[sample] ;
            pedestalPreSampleAnalog += ebADCCounts[sample]*gainConv_[(int)ebADCGains[sample]]*barrelADCtoGeV_ ;
          }
          
          if ( sample > 0 && ( ((ebADCGains[sample] > ebADCGains[sample-1]) && (ebADCGains[sample-1]!=0)) || (countsAfterGainSwitch<0 && ebADCGains[sample]==0)) ) {
            higherGain = ebADCGains[sample];
            higherGainSample = sample;
            countsAfterGainSwitch = 1;
          }
          
          if ( (higherGain > 1 && (higherGainSample != sample) && (ebADCGains[sample] == higherGain)) || (higherGain==3 && (higherGainSample != sample) && (ebADCGains[sample]==0)) || (higherGain==0 && (higherGainSample != sample) && ((ebADCGains[sample] == 3) || (ebADCGains[sample]==0))) ) { countsAfterGainSwitch++ ; }
        }
      
      pedestalPreSample /= 3. ; 
      pedestalPreSampleAnalog /= 3. ; 
      
      LogDebug("DigiInfo") << "Barrel Digi for EBDetId = " << ebid.rawId() << " eta,phi " << ebid.ieta() << " " << ebid.iphi() ;
      for ( int i = 0; i < 10 ; i++ ) {
        LogDebug("DigiInfo") << "sample " << i << " ADC = " << ebADCCounts[i] << " gain = " << ebADCGains[i] << " Analog = " << ebAnalogSignal[i];  
      }
      LogDebug("DigiInfo") << "Maximum energy = " << Emax << " in sample " << Pmax << " Pedestal from pre-sample = " << pedestalPreSampleAnalog;
      if ( countsAfterGainSwitch > 0 ) LogDebug("DigiInfo") << "Counts after switch " << countsAfterGainSwitch;
      
      if ( countsAfterGainSwitch > 0 && countsAfterGainSwitch < 5 ) {
        edm::LogWarning("DigiWarning") << "Wrong number of counts after gain switch before next switch! " << countsAfterGainSwitch ;
        for ( int i = 0; i < 10 ; i++ ) {
          edm::LogWarning("DigiWarning") << "sample " << i << " ADC = " << ebADCCounts[i] << " gain = " << ebADCGains[i] << " Analog = " << ebAnalogSignal[i];
        } 
      }
      
      for ( int i = 0 ; i < 10 ; i++ ) {
        if (meEBDigiADCGlobal_ && (Emax-pedestalPreSampleAnalog*gainConv_[(int)ebADCGains[Pmax]]) > 100.*barrelADCtoGeV_) meEBDigiADCGlobal_->Fill( i , ebAnalogSignal[i] ) ;
        if (meEBDigiADCAnalog_[i]) meEBDigiADCAnalog_[i]->Fill( ebAnalogSignal[i] ) ;
        
        if ( ebADCGains[i] == 0) {
          if (meEBDigiADCgS_[i]) meEBDigiADCgS_[i]->Fill( ebADCCounts[i] ) ;
        }
        else if ( ebADCGains[i] == 3 ) {
          if (meEBDigiADCg1_[i]) meEBDigiADCg1_[i]->Fill( ebADCCounts[i] ) ;
        }
        else if ( ebADCGains[i] == 2 ) {
          if (meEBDigiADCg6_[i]) meEBDigiADCg6_[i]->Fill( ebADCCounts[i] ) ;
        }
        else if ( ebADCGains[i] == 1 ) {
          if (meEBDigiADCg12_[i]) meEBDigiADCg12_[i]->Fill( ebADCCounts[i] ) ;
        }
        if (meEBDigiGain_[i]) meEBDigiGain_[i]->Fill( ebADCGains[i] ) ;
      }
      
      if (meEBPedestal_) meEBPedestal_->Fill ( pedestalPreSample ) ;
      if (meEBMaximumgt10ADC_ && (Emax-pedestalPreSampleAnalog*gainConv_[(int)ebADCGains[Pmax]]) > 10.*barrelADCtoGeV_) meEBMaximumgt10ADC_->Fill( Pmax ) ;
      if (meEBMaximumgt100ADC_ && (Emax-pedestalPreSampleAnalog*gainConv_[(int)ebADCGains[Pmax]]) > 100.*barrelADCtoGeV_) meEBMaximumgt100ADC_->Fill( Pmax ) ;
      if (meEBnADCafterSwitch_) meEBnADCafterSwitch_->Fill( countsAfterGainSwitch ) ;
      
    }
  
  if ( meEBDigiMultiplicity_ ) meEBDigiMultiplicity_->Fill(nDigis);
    
}
void EcalBarrelDigisValidation::beginRun ( edm::Run const &  ,
edm::EventSetup const &  c 
) [protected, virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 129 of file EcalBarrelDigisValidation.cc.

References checkCalibrations().

void EcalBarrelDigisValidation::checkCalibrations ( edm::EventSetup const &  c) [protected]

Definition at line 264 of file EcalBarrelDigisValidation.cc.

References barrelADCtoGeV_, endcapADCtoGeV_, EcalMGPAGainRatio::gain12Over6(), EcalMGPAGainRatio::gain6Over1(), gainConv_, edm::EventSetup::get(), EcalADCToGeVConstant::getEBValue(), EcalADCToGeVConstant::getEEValue(), LogDebug, and edm::ESHandle< T >::product().

Referenced by beginRun().

  {
    
  // ADC -> GeV Scale
  edm::ESHandle<EcalADCToGeVConstant> pAgc;
  eventSetup.get<EcalADCToGeVConstantRcd>().get(pAgc);
  const EcalADCToGeVConstant* agc = pAgc.product();
  
  EcalMGPAGainRatio * defaultRatios = new EcalMGPAGainRatio();

  gainConv_[1] = 1.;
  gainConv_[2] = defaultRatios->gain12Over6() ;
  gainConv_[3] = gainConv_[2]*(defaultRatios->gain6Over1()) ;
  gainConv_[0] = gainConv_[2]*(defaultRatios->gain6Over1()) ;

  LogDebug("EcalDigi") << " Gains conversions: " << "\n" << " g0 = " << gainConv_[0] << "\n" << " g1 = " << gainConv_[1] << "\n" << " g2 = " << gainConv_[2]  << "\n" << " g3 = " << gainConv_[3]; 

  delete defaultRatios;

  const double barrelADCtoGeV_  = agc->getEBValue();
  LogDebug("EcalDigi") << " Barrel GeV/ADC = " << barrelADCtoGeV_;
  const double endcapADCtoGeV_ = agc->getEEValue();
  LogDebug("EcalDigi") << " Endcap GeV/ADC = " << endcapADCtoGeV_;

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

Reimplemented from edm::EDAnalyzer.

Definition at line 135 of file EcalBarrelDigisValidation.cc.

                                      {

}

Member Data Documentation

Definition at line 65 of file EcalBarrelDigisValidation.h.

Referenced by EcalBarrelDigisValidation().

Definition at line 69 of file EcalBarrelDigisValidation.h.

Referenced by analyze().

Definition at line 74 of file EcalBarrelDigisValidation.h.

Referenced by checkCalibrations(), and EcalBarrelDigisValidation().

std::map<int, double, std::less<int> > EcalBarrelDigisValidation::gainConv_ [private]

Definition at line 82 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 87 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 85 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 86 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 80 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 84 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 89 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 78 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 76 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 93 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 95 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 97 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 91 of file EcalBarrelDigisValidation.h.

Referenced by analyze(), and EcalBarrelDigisValidation().

Definition at line 67 of file EcalBarrelDigisValidation.h.

Definition at line 63 of file EcalBarrelDigisValidation.h.

Referenced by EcalBarrelDigisValidation().