CMS 3D CMS Logo

Public Member Functions | Private Attributes

ESRecHitFitAlgo Class Reference

#include <ESRecHitFitAlgo.h>

List of all members.

Public Member Functions

 ESRecHitFitAlgo ()
double * EvalAmplitude (const ESDataFrame &digi, double ped) const
EcalRecHit reconstruct (const ESDataFrame &digi) const
void setAngleCorrectionFactors (const ESAngleCorrectionFactors *ang)
void setChannelStatus (const ESChannelStatus *status)
void setESGain (const double &value)
void setIntercalibConstants (const ESIntercalibConstants *mips)
void setMIPGeV (const double &value)
void setPedestals (const ESPedestals *peds)
void setRatioCuts (const ESRecHitRatioCuts *ratioCuts)
 ~ESRecHitFitAlgo ()

Private Attributes

const ESAngleCorrectionFactorsang_
const ESChannelStatuschannelStatus_
TF1 * fit_
double gain_
double MIPGeV_
const ESIntercalibConstantsmips_
const ESPedestalspeds_
const ESRecHitRatioCutsratioCuts_

Detailed Description

Definition at line 14 of file ESRecHitFitAlgo.h.


Constructor & Destructor Documentation

ESRecHitFitAlgo::ESRecHitFitAlgo ( )

Definition at line 24 of file ESRecHitFitAlgo.cc.

References fit_, and fitf().

                                 {

  fit_ = new TF1("fit", fitf, -200, 200, 2);
  fit_->SetParameters(50, 10);

}
ESRecHitFitAlgo::~ESRecHitFitAlgo ( )

Definition at line 31 of file ESRecHitFitAlgo.cc.

References fit_.

                                  {
  delete fit_;
}

Member Function Documentation

double * ESRecHitFitAlgo::EvalAmplitude ( const ESDataFrame digi,
double  ped 
) const

Definition at line 35 of file ESRecHitFitAlgo.cc.

References ecalMGPA::adc(), ESSample::adc(), fit_, ESRecHitRatioCuts::getR12High(), ESRecHitRatioCuts::getR23High(), i, ratioCuts_, ESDataFrame::sample(), ESDataFrame::size(), and ntuplemaker::status.

Referenced by reconstruct().

                                                                                {
  
  double *fitresults = new double[3];
  double adc[3];  
  double tx[3];
  tx[0] = -5.; 
  tx[1] = 20.;
  tx[2] = 45.;

  for (int i=0; i<digi.size(); i++) 
    adc[i] = digi.sample(i).adc() - ped;

  double status = 0;
  if (adc[0] > 20) status = 14;
  if (adc[1] < 0 || adc[2] < 0) status = 10;
  if (adc[0] > adc[1] && adc[0] > adc[2]) status = 8;
  if (adc[2] > adc[1] && adc[2] > adc[0]) status = 9;  
  double r12 = (adc[1] != 0) ? adc[0]/adc[1] : 99999;
  double r23 = (adc[2] != 0) ? adc[1]/adc[2] : 99999;
  if (r12 > ratioCuts_->getR12High()) status = 5;
  if (r23 > ratioCuts_->getR23High()) status = 6;
  if (r23 < ratioCuts_->getR23Low()) status = 7;

  if (int(status) == 0) {
    double para[10];
    TGraph *gr = new TGraph(3, tx, adc);
    fit_->SetParameters(50, 10);
    gr->Fit("fit", "MQ");
    fit_->GetParameters(para); 
    fitresults[0] = para[0]; 
    fitresults[1] = para[1];  
    delete gr;

    if (adc[1] > 2800 && adc[2] > 2800) status = 11;
    else if (adc[1] > 2800) status = 12;
    else if (adc[2] > 2800) status = 13;

  } else {
    fitresults[0] = 0;
    fitresults[1] = -999;
  }

  fitresults[2] = status;

  return fitresults;
}
EcalRecHit ESRecHitFitAlgo::reconstruct ( const ESDataFrame digi) const

Definition at line 82 of file ESRecHitFitAlgo.cc.

References ang_, channelStatus_, funct::cos(), relval_parameters_module::energy, EvalAmplitude(), ESCondObjectContainer< T >::find(), ESCondObjectContainer< T >::getMap(), ESDataFrame::id(), EcalRecHit::kESBadRatioFor12, EcalRecHit::kESBadRatioFor23Lower, EcalRecHit::kESBadRatioFor23Upper, EcalRecHit::kESDead, EcalRecHit::kESGood, EcalRecHit::kESSaturated, EcalRecHit::kESTS13Sigmas, EcalRecHit::kESTS1Largest, EcalRecHit::kESTS2Saturated, EcalRecHit::kESTS3Largest, EcalRecHit::kESTS3Negative, EcalRecHit::kESTS3Saturated, LogDebug, MIPGeV_, mips_, peds_, python::entryComment::results, EcalRecHit::setFlag(), and ntuplemaker::status.

Referenced by ESRecHitWorker::run().

                                                                     {
  
  ESPedestals::const_iterator it_ped = peds_->find(digi.id());
  
  ESIntercalibConstantMap::const_iterator it_mip = mips_->getMap().find(digi.id());
  ESAngleCorrectionFactors::const_iterator it_ang = ang_->getMap().find(digi.id());

  ESChannelStatusMap::const_iterator it_status = channelStatus_->getMap().find(digi.id());

  double* results;

  results = EvalAmplitude(digi, it_ped->getMean());

  double energy = results[0];
  double t0 = results[1];
  int status = (int) results[2];
  delete[] results;

  double mipCalib = (std::fabs(cos(*it_ang)) != 0.) ? (*it_mip)/fabs(cos(*it_ang)) : 0.;
  energy *= (mipCalib != 0.) ? MIPGeV_/mipCalib : 0.;

  DetId detId = digi.id();

  LogDebug("ESRecHitFitAlgo") << "ESRecHitFitAlgo : reconstructed energy "<<energy<<" T0 "<<t0;

  EcalRecHit rechit(digi.id(), energy, t0);

  if (it_status->getStatusCode() == 1) {
      rechit.setFlag(EcalRecHit::kESDead);
  } else {
    if (status == 0) 
      rechit.setFlag(EcalRecHit::kESGood);
    else if (status == 5) 
      rechit.setFlag(EcalRecHit::kESBadRatioFor12);
    else if (status == 6) 
      rechit.setFlag(EcalRecHit::kESBadRatioFor23Upper);
    else if (status == 7) 
      rechit.setFlag(EcalRecHit::kESBadRatioFor23Lower);
    else if (status == 8) 
      rechit.setFlag(EcalRecHit::kESTS1Largest);
    else if (status == 9) 
      rechit.setFlag(EcalRecHit::kESTS3Largest);
    else if (status == 10) 
      rechit.setFlag(EcalRecHit::kESTS3Negative);
    else if (status == 11) 
      rechit.setFlag(EcalRecHit::kESSaturated);
    else if (status == 12) 
      rechit.setFlag(EcalRecHit::kESTS2Saturated);
    else if (status == 13) 
      rechit.setFlag(EcalRecHit::kESTS3Saturated);
    else if (status == 14) 
      rechit.setFlag(EcalRecHit::kESTS13Sigmas);
  }

  return rechit;
}
void ESRecHitFitAlgo::setAngleCorrectionFactors ( const ESAngleCorrectionFactors ang) [inline]

Definition at line 27 of file ESRecHitFitAlgo.h.

References ang_.

Referenced by ESRecHitWorker::set().

{ ang_ = ang; }
void ESRecHitFitAlgo::setChannelStatus ( const ESChannelStatus status) [inline]

Definition at line 25 of file ESRecHitFitAlgo.h.

References channelStatus_, and ntuplemaker::status.

Referenced by ESRecHitWorker::set().

void ESRecHitFitAlgo::setESGain ( const double &  value) [inline]

Definition at line 21 of file ESRecHitFitAlgo.h.

References gain_, and relativeConstraints::value.

Referenced by ESRecHitWorker::set().

{ gain_ = value; }
void ESRecHitFitAlgo::setIntercalibConstants ( const ESIntercalibConstants mips) [inline]

Definition at line 24 of file ESRecHitFitAlgo.h.

References mips_.

Referenced by ESRecHitWorker::set().

{ mips_ = mips; }
void ESRecHitFitAlgo::setMIPGeV ( const double &  value) [inline]

Definition at line 22 of file ESRecHitFitAlgo.h.

References MIPGeV_, and relativeConstraints::value.

Referenced by ESRecHitWorker::set().

{ MIPGeV_ = value; } 
void ESRecHitFitAlgo::setPedestals ( const ESPedestals peds) [inline]

Definition at line 23 of file ESRecHitFitAlgo.h.

References peds_.

Referenced by ESRecHitWorker::set().

{ peds_ = peds; }
void ESRecHitFitAlgo::setRatioCuts ( const ESRecHitRatioCuts ratioCuts) [inline]

Definition at line 26 of file ESRecHitFitAlgo.h.

References ratioCuts_.

Referenced by ESRecHitWorker::set().

{ ratioCuts_ = ratioCuts; }

Member Data Documentation

Definition at line 39 of file ESRecHitFitAlgo.h.

Referenced by reconstruct(), and setAngleCorrectionFactors().

Definition at line 37 of file ESRecHitFitAlgo.h.

Referenced by reconstruct(), and setChannelStatus().

TF1* ESRecHitFitAlgo::fit_ [private]

Definition at line 33 of file ESRecHitFitAlgo.h.

Referenced by ESRecHitFitAlgo(), EvalAmplitude(), and ~ESRecHitFitAlgo().

double ESRecHitFitAlgo::gain_ [private]

Definition at line 34 of file ESRecHitFitAlgo.h.

Referenced by setESGain().

double ESRecHitFitAlgo::MIPGeV_ [private]

Definition at line 40 of file ESRecHitFitAlgo.h.

Referenced by reconstruct(), and setMIPGeV().

Definition at line 36 of file ESRecHitFitAlgo.h.

Referenced by reconstruct(), and setIntercalibConstants().

Definition at line 35 of file ESRecHitFitAlgo.h.

Referenced by reconstruct(), and setPedestals().

Definition at line 38 of file ESRecHitFitAlgo.h.

Referenced by EvalAmplitude(), and setRatioCuts().