Skip to content

Commit

Permalink
Merge pull request #17259 from emanueledimarco/multifit_gainswitch_ma…
Browse files Browse the repository at this point in the history
…xsample_8024_legacy

Use of Max-Sample algorithm for gain-switch cases in the barrel
  • Loading branch information
davidlange6 committed Apr 5, 2017
2 parents cfbc028 + c8b69f0 commit b869ac7
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 7 deletions.
Expand Up @@ -26,6 +26,7 @@ class EcalUncalibRecHitMultiFitAlgo
EcalUncalibRecHitMultiFitAlgo();
~EcalUncalibRecHitMultiFitAlgo() { };
EcalUncalibratedRecHit makeRecHit(const EcalDataFrame& dataFrame, const EcalPedestals::Item * aped, const EcalMGPAGainRatio * aGain, const SampleMatrix &noisecor, const FullSampleVector &fullpulse, const FullSampleMatrix &fullpulsecov, const BXVector &activeBX);
void setGainSwitchUseMaxSample(bool b) { _gainSwitchUseMaxSample = b; }
void disableErrorCalculation() { _computeErrors = false; }
void setDoPrefit(bool b) { _doPrefit = b; }
void setPrefitMaxChiSq(double x) { _prefitMaxChiSq = x; }
Expand All @@ -36,6 +37,7 @@ class EcalUncalibRecHitMultiFitAlgo
bool _computeErrors;
bool _doPrefit;
double _prefitMaxChiSq;
bool _gainSwitchUseMaxSample;
BXVector _singlebx;

};
Expand Down
31 changes: 25 additions & 6 deletions RecoLocalCalo/EcalRecAlgos/src/EcalUncalibRecHitMultiFitAlgo.cc
Expand Up @@ -8,7 +8,8 @@
EcalUncalibRecHitMultiFitAlgo::EcalUncalibRecHitMultiFitAlgo() :
_computeErrors(true),
_doPrefit(false),
_prefitMaxChiSq(1.0) {
_prefitMaxChiSq(1.0),
_gainSwitchUseMaxSample(false){

_singlebx.resize(1);
_singlebx << 0;
Expand All @@ -27,9 +28,12 @@ EcalUncalibratedRecHit EcalUncalibRecHitMultiFitAlgo::makeRecHit(const EcalDataF
const unsigned int nsample = EcalDataFrame::MAXSAMPLES;

double maxamplitude = -std::numeric_limits<double>::max();

const unsigned int iSampleMax = 5;
const unsigned int iFullPulseMax = 9;

double pedval = 0.;
double pedrms = 0.;
int iGainSwitch = 0;

SampleVector amplitudes;
for(unsigned int iSample = 0; iSample < nsample; iSample++) {
Expand All @@ -38,7 +42,7 @@ EcalUncalibratedRecHit EcalUncalibRecHitMultiFitAlgo::makeRecHit(const EcalDataF

double amplitude = 0.;
int gainId = sample.gainId();

double pedestal = 0.;
double pederr = 0.;
double gainratio = 1.;
Expand All @@ -58,6 +62,7 @@ EcalUncalibratedRecHit EcalUncalibRecHitMultiFitAlgo::makeRecHit(const EcalDataF
pederr = aped->rms_x6;
gainratio = aGain->gain12Over6();
}
if ( (gainId != 1) && (iSample==4 || iSample==5 || iSample==6) ) iGainSwitch = 1;

amplitude = ((double)(sample.adc()) - pedestal) * gainratio;

Expand All @@ -68,8 +73,7 @@ EcalUncalibratedRecHit EcalUncalibRecHitMultiFitAlgo::makeRecHit(const EcalDataF

amplitudes[iSample] = amplitude;

if (amplitude>maxamplitude) {
//if (iSample==5) {
if (iSample==iSampleMax) {
maxamplitude = amplitude;
pedval = pedestal;
pedrms = pederr*gainratio;
Expand All @@ -79,7 +83,22 @@ EcalUncalibratedRecHit EcalUncalibRecHitMultiFitAlgo::makeRecHit(const EcalDataF

double amplitude, amperr, chisq;
bool status = false;


// for legacy re-reco of 2016 data, max-sample can be used for EB w/o impact on data/MC consistency
// in case of gain switch, just use max-sample
if(iGainSwitch && _gainSwitchUseMaxSample) {
double maxpulseamplitude = maxamplitude / fullpulse[iFullPulseMax];
EcalUncalibratedRecHit rh( dataFrame.id(), maxpulseamplitude, pedval, 0., 0., flags );
rh.setAmplitudeError(0.);
for (unsigned int ipulse=0; ipulse<_pulsefunc.BXs().rows(); ++ipulse) {
int bx = _pulsefunc.BXs().coeff(ipulse);
if (bx!=0) {
rh.setOutOfTimeAmplitude(bx+5, 0.0);
}
}
return rh;
}

//optimized one-pulse fit for hlt
bool usePrefit = false;
if (_doPrefit) {
Expand Down
Expand Up @@ -47,6 +47,8 @@ EcalUncalibRecHitWorkerMultiFit::EcalUncalibRecHitWorkerMultiFit(const edm::Para
bunchSpacingManual_ = ps.getParameter<int>("bunchSpacing");
}

gainSwitchUseMaxSampleEB_ = ps.getParameter<bool>("gainSwitchUseMaxSampleEB");
gainSwitchUseMaxSampleEE_ = ps.getParameter<bool>("gainSwitchUseMaxSampleEE");
doPrefitEB_ = ps.getParameter<bool>("doPrefitEB");
doPrefitEE_ = ps.getParameter<bool>("doPrefitEE");

Expand Down Expand Up @@ -263,6 +265,7 @@ EcalUncalibRecHitWorkerMultiFit::run( const edm::Event & evt,
aPulseCov = &pulsecovariances->endcap(hashedIndex);
multiFitMethod_.setDoPrefit(doPrefitEE_);
multiFitMethod_.setPrefitMaxChiSq(prefitMaxChiSqEE_);
multiFitMethod_.setGainSwitchUseMaxSample(gainSwitchUseMaxSampleEE_);
offsetTime = offtime->getEEValue();
} else {
unsigned int hashedIndex = EBDetId(detid).hashedIndex();
Expand All @@ -273,6 +276,7 @@ EcalUncalibRecHitWorkerMultiFit::run( const edm::Event & evt,
aPulseCov = &pulsecovariances->barrel(hashedIndex);
multiFitMethod_.setDoPrefit(doPrefitEB_);
multiFitMethod_.setPrefitMaxChiSq(prefitMaxChiSqEB_);
multiFitMethod_.setGainSwitchUseMaxSample(gainSwitchUseMaxSampleEB_);
offsetTime = offtime->getEBValue();
}

Expand Down Expand Up @@ -573,6 +577,8 @@ EcalUncalibRecHitWorkerMultiFit::getAlgoDescription() {
edm::ParameterDescription<bool>("ampErrorCalculation", true, true) and
edm::ParameterDescription<bool>("useLumiInfoRunHeader", true, true) and
edm::ParameterDescription<int>("bunchSpacing", 0, true) and
edm::ParameterDescription<bool>("gainSwitchUseMaxSampleEB", false, true) and
edm::ParameterDescription<bool>("gainSwitchUseMaxSampleEE", false, true) and
edm::ParameterDescription<bool>("doPrefitEB", false, true) and
edm::ParameterDescription<bool>("doPrefitEE", false, true) and
edm::ParameterDescription<double>("prefitMaxChiSqEB", 25., true) and
Expand Down
Expand Up @@ -93,6 +93,8 @@ class EcalUncalibRecHitWorkerMultiFit final : public EcalUncalibRecHitWorkerBase
const EcalWeightSet::EcalWeightMatrix* weights[2];
EcalUncalibRecHitTimeWeightsAlgo<EBDataFrame> weightsMethod_barrel_;
EcalUncalibRecHitTimeWeightsAlgo<EEDataFrame> weightsMethod_endcap_;
bool gainSwitchUseMaxSampleEB_;
bool gainSwitchUseMaxSampleEE_;
bool doPrefitEB_;
bool doPrefitEE_;
double prefitMaxChiSqEB_;
Expand Down
Expand Up @@ -14,7 +14,9 @@
activeBXs = cms.vint32(-5,-4,-3,-2,-1,0,1,2,3,4),
ampErrorCalculation = cms.bool(True),
useLumiInfoRunHeader = cms.bool(True),


gainSwitchUseMaxSampleEB = cms.bool(False),
gainSwitchUseMaxSampleEE = cms.bool(False),
doPrefitEB = cms.bool(False),
doPrefitEE = cms.bool(False),
prefitMaxChiSqEB = cms.double(25.),
Expand Down

0 comments on commit b869ac7

Please sign in to comment.