34 std::vector<int32_t> activeBXs = ps.
getParameter< std::vector<int32_t> >(
"activeBXs");
36 for (
unsigned int ibx=0; ibx<activeBXs.size(); ++ibx) {
37 activeBX.coeffRef(ibx) = activeBXs[ibx];
44 if (useLumiInfoRunHeader_) {
132 int bunchspacing = 450;
153 bunchspacing = *bunchSpacingH;
156 if (bunchspacing == 25) {
158 activeBX << -5,-4,-3,-2,-1,0,1,2,3,4;
180 const std::vector<float>& amplitudeBins,
181 const std::vector<float>& shiftBins) {
185 double theCorrection = 0;
188 if (amplitudeBins.size() == 0) {
190 <<
"timeCorrAmplitudeBins is empty, forcing no time bias corrections.";
195 if (amplitudeBins.size() != shiftBins.size()) {
197 <<
"Size of timeCorrAmplitudeBins different from "
198 "timeCorrShiftBins. Forcing no time bias corrections. ";
204 for (
int bin = 0;
bin < (int) amplitudeBins.size();
bin++) {
205 if (ampli > amplitudeBins.at(
bin)) {
213 theCorrection = shiftBins.at(0);
214 }
else if (myBin == ((
int)(amplitudeBins.size() - 1))) {
215 theCorrection = shiftBins.at(myBin);
216 }
else if (-1 < myBin && myBin < ((
int) amplitudeBins.size() - 1)) {
218 theCorrection = (shiftBins.at(myBin + 1) - shiftBins.at(myBin));
219 theCorrection *= (((double) ampli) - amplitudeBins.at(myBin)) /
220 (amplitudeBins.at(myBin + 1) - amplitudeBins.at(myBin));
221 theCorrection += shiftBins.at(myBin);
224 <<
"Assigning time correction impossible. Setting it to 0 ";
229 return theCorrection / 25.;
245 float offsetTime = 0;
255 aped = &
peds->endcap(hashedIndex);
256 aGain = &
gains->endcap(hashedIndex);
257 gid = &
grps->endcap(hashedIndex);
262 offsetTime =
offtime->getEEValue();
265 aped = &
peds->barrel(hashedIndex);
266 aGain = &
gains->barrel(hashedIndex);
267 gid = &
grps->barrel(hashedIndex);
272 offsetTime =
offtime->getEBValue();
286 for (
int i=0;
i<nnoise; ++
i) {
287 for (
int j=0;
j<nnoise; ++
j) {
303 for(
int k=0;
k<
std::pow(EcalPulseShape::TEMPLATESAMPLES,2); ++
k) {
313 if( it !=
itime->end() ) {
316 edm::LogError(
"EcalRecHitError") <<
"No time intercalib const found for xtal "
318 <<
"! something wrong with EcalTimeCalibConstants in your DB? ";
322 int leadingSample = ((
EcalDataFrame)(*itdg)).lastUnsaturatedSample();
324 if ( leadingSample == 4 ) {
329 }
else if ( leadingSample >= 0 ) {
331 double gainratio = 1.;
334 if (gainId==0 || gainId==3) {
338 else if (gainId==1) {
342 else if (gainId==2) {
346 double amplitude = ((double)(((
EcalDataFrame)(*itdg)).sample(5).adc()) - pedestal) * gainratio;
368 if(
timealgo_.compare(
"RatioMethod")==0) {
370 float const clockToNsConstant = 25.;
379 uncalibRecHit.
setJitter( crh.timeMax - 5 + theTimeCorrectionEE);
398 float correctedTime = (crh.timeMax-5) * clockToNsConstant + itimeconst + offsetTime;
402 float sigmat =
std::sqrt( nterm*nterm + cterm*cterm );
403 if ( ( correctedTime > sigmat*outOfTimeThreshP ) ||
404 ( correctedTime < (-1.*sigmat*outOfTimeThreshM) ))
418 uncalibRecHit.
setJitter( crh.timeMax - 5 + theTimeCorrectionEB);
436 float correctedTime = (crh.timeMax-5) * clockToNsConstant + itimeconst + offsetTime;
440 float sigmat =
std::sqrt( nterm*nterm + cterm*cterm );
441 if ( ( correctedTime > sigmat*outOfTimeThreshP ) ||
442 ( correctedTime < (-1.*sigmat*outOfTimeThreshM) ))
447 }
else if(
timealgo_.compare(
"WeightsMethod")==0) {
449 std::vector<double> amplitudes;
454 EcalTBWeights::EcalTBWeightMap::const_iterator wit;
455 wit = wgtsMap.find( std::make_pair(*gid,tdcid) );
456 if( wit == wgtsMap.end() ) {
457 edm::LogError(
"EcalUncalibRecHitError") <<
"No weights found for EcalGroupId: "
458 << gid->
id() <<
" and EcalTDCId: " << tdcid
459 <<
"\n skipping digi with id: " <<
detid.rawId();
479 }
else if(
timealgo_.compare(
"None")==0) {
483 edm::LogError(
"EcalUncalibRecHitError") <<
"No time estimation algorithm called "
485 <<
"\n setting jitter to 0. and jitter uncertainty to 10000. ";
566 psd0.
addNode((
edm::ParameterDescription<std::vector<double>>(
"EBPulseShapeTemplate", {1.13979e-02, 7.58151e-01, 1.00000e+00, 8.87744e-01, 6.73548e-01, 4.74332e-01, 3.19561e-01, 2.15144e-01, 1.47464e-01, 1.01087e-01, 6.93181e-02, 4.75044e-02},
true) and
567 edm::ParameterDescription<std::vector<double>>(
"EEPulseShapeTemplate", {1.16442e-01, 7.56246e-01, 1.00000e+00, 8.97182e-01, 6.86831e-01, 4.91506e-01, 3.44111e-01, 2.45731e-01, 1.74115e-01, 1.23361e-01, 8.74288e-02, 6.19570e-02},
true)));
573 edm::ParameterDescription<std::vector<double>>(
"EBCorrNoiseMatrixG12", {1.00000, 0.71073, 0.55721, 0.46089, 0.40449, 0.35931, 0.33924, 0.32439, 0.31581, 0.30481 },
true) and
574 edm::ParameterDescription<std::vector<double>>(
"EECorrNoiseMatrixG12", {1.00000, 0.71373, 0.44825, 0.30152, 0.21609, 0.14786, 0.11772, 0.10165, 0.09465, 0.08098 },
true) and
575 edm::ParameterDescription<std::vector<double>>(
"EBCorrNoiseMatrixG06", {1.00000, 0.70946, 0.58021, 0.49846, 0.45006, 0.41366, 0.39699, 0.38478, 0.37847, 0.37055 },
true) and
576 edm::ParameterDescription<std::vector<double>>(
"EECorrNoiseMatrixG06", {1.00000, 0.71217, 0.47464, 0.34056, 0.26282, 0.20287, 0.17734, 0.16256, 0.15618, 0.14443 },
true) and
577 edm::ParameterDescription<std::vector<double>>(
"EBCorrNoiseMatrixG01", {1.00000, 0.73354, 0.64442, 0.58851, 0.55425, 0.53082, 0.51916, 0.51097, 0.50732, 0.50409 },
true) and
578 edm::ParameterDescription<std::vector<double>>(
"EECorrNoiseMatrixG01", {1.00000, 0.72698, 0.62048, 0.55691, 0.51848, 0.49147, 0.47813, 0.47007, 0.46621, 0.46265 },
true) and
582 psd0.
addOptionalNode((
edm::ParameterDescription<std::vector<double>>(
"EBPulseShapeCovariance", {3.001e-06, 1.233e-05, 0.000e+00, -4.416e-06, -4.571e-06, -3.614e-06, -2.636e-06, -1.286e-06, -8.410e-07, -5.296e-07, 0.000e+00, 0.000e+00,
583 1.233e-05, 6.154e-05, 0.000e+00, -2.200e-05, -2.309e-05, -1.838e-05, -1.373e-05, -7.334e-06, -5.088e-06, -3.745e-06, -2.428e-06, 0.000e+00,
584 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,
585 -4.416e-06, -2.200e-05, 0.000e+00, 8.319e-06, 8.545e-06, 6.792e-06, 5.059e-06, 2.678e-06, 1.816e-06, 1.223e-06, 8.245e-07, 5.589e-07,
586 -4.571e-06, -2.309e-05, 0.000e+00, 8.545e-06, 9.182e-06, 7.219e-06, 5.388e-06, 2.853e-06, 1.944e-06, 1.324e-06, 9.083e-07, 6.335e-07,
587 -3.614e-06, -1.838e-05, 0.000e+00, 6.792e-06, 7.219e-06, 6.016e-06, 4.437e-06, 2.385e-06, 1.636e-06, 1.118e-06, 7.754e-07, 5.556e-07,
588 -2.636e-06, -1.373e-05, 0.000e+00, 5.059e-06, 5.388e-06, 4.437e-06, 3.602e-06, 1.917e-06, 1.322e-06, 9.079e-07, 6.529e-07, 4.752e-07,
589 -1.286e-06, -7.334e-06, 0.000e+00, 2.678e-06, 2.853e-06, 2.385e-06, 1.917e-06, 1.375e-06, 9.100e-07, 6.455e-07, 4.693e-07, 3.657e-07,
590 -8.410e-07, -5.088e-06, 0.000e+00, 1.816e-06, 1.944e-06, 1.636e-06, 1.322e-06, 9.100e-07, 9.115e-07, 6.062e-07, 4.436e-07, 3.422e-07,
591 -5.296e-07, -3.745e-06, 0.000e+00, 1.223e-06, 1.324e-06, 1.118e-06, 9.079e-07, 6.455e-07, 6.062e-07, 7.217e-07, 4.862e-07, 3.768e-07,
592 0.000e+00, -2.428e-06, 0.000e+00, 8.245e-07, 9.083e-07, 7.754e-07, 6.529e-07, 4.693e-07, 4.436e-07, 4.862e-07, 6.509e-07, 4.418e-07,
593 0.000e+00, 0.000e+00, 0.000e+00, 5.589e-07, 6.335e-07, 5.556e-07, 4.752e-07, 3.657e-07, 3.422e-07, 3.768e-07, 4.418e-07, 6.142e-07},
true) and
594 edm::ParameterDescription<std::vector<double>>(
"EEPulseShapeCovariance", {3.941e-05, 3.333e-05, 0.000e+00, -1.449e-05, -1.661e-05, -1.424e-05, -1.183e-05, -6.842e-06, -4.915e-06, -3.411e-06, 0.000e+00, 0.000e+00,
595 3.333e-05, 2.862e-05, 0.000e+00, -1.244e-05, -1.431e-05, -1.233e-05, -1.032e-05, -5.883e-06, -4.154e-06, -2.902e-06, -2.128e-06, 0.000e+00,
596 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,
597 -1.449e-05, -1.244e-05, 0.000e+00, 5.840e-06, 6.649e-06, 5.720e-06, 4.812e-06, 2.708e-06, 1.869e-06, 1.330e-06, 9.186e-07, 6.446e-07,
598 -1.661e-05, -1.431e-05, 0.000e+00, 6.649e-06, 7.966e-06, 6.898e-06, 5.794e-06, 3.157e-06, 2.184e-06, 1.567e-06, 1.084e-06, 7.575e-07,
599 -1.424e-05, -1.233e-05, 0.000e+00, 5.720e-06, 6.898e-06, 6.341e-06, 5.347e-06, 2.859e-06, 1.991e-06, 1.431e-06, 9.839e-07, 6.886e-07,
600 -1.183e-05, -1.032e-05, 0.000e+00, 4.812e-06, 5.794e-06, 5.347e-06, 4.854e-06, 2.628e-06, 1.809e-06, 1.289e-06, 9.020e-07, 6.146e-07,
601 -6.842e-06, -5.883e-06, 0.000e+00, 2.708e-06, 3.157e-06, 2.859e-06, 2.628e-06, 1.863e-06, 1.296e-06, 8.882e-07, 6.108e-07, 4.283e-07,
602 -4.915e-06, -4.154e-06, 0.000e+00, 1.869e-06, 2.184e-06, 1.991e-06, 1.809e-06, 1.296e-06, 1.217e-06, 8.669e-07, 5.751e-07, 3.882e-07,
603 -3.411e-06, -2.902e-06, 0.000e+00, 1.330e-06, 1.567e-06, 1.431e-06, 1.289e-06, 8.882e-07, 8.669e-07, 9.522e-07, 6.717e-07, 4.293e-07,
604 0.000e+00, -2.128e-06, 0.000e+00, 9.186e-07, 1.084e-06, 9.839e-07, 9.020e-07, 6.108e-07, 5.751e-07, 6.717e-07, 7.911e-07, 5.493e-07,
605 0.000e+00, 0.000e+00, 0.000e+00, 6.446e-07, 7.575e-07, 6.886e-07, 6.146e-07, 4.283e-07, 3.882e-07, 4.293e-07, 5.493e-07, 7.027e-07},
true)),
true);
608 psd.
addNode(
edm::ParameterDescription<std::vector<int>>(
"activeBXs", {-5,-4,-3,-2,-1,0,1,2,3,4},
true) and
616 edm::ParameterDescription<std::vector<double>>(
"EBtimeFitParameters", {-2.015452e+00, 3.130702e+00, -1.234730e+01, 4.188921e+01, -8.283944e+01, 9.101147e+01, -5.035761e+01, 1.105621e+01},
true) and
617 edm::ParameterDescription<std::vector<double>>(
"EEtimeFitParameters", {-2.390548e+00, 3.553628e+00, -1.762341e+01, 6.767538e+01, -1.332130e+02, 1.407432e+02, -7.541106e+01, 1.620277e+01},
true) and
639 edm::ParameterDescription<std::vector<double>>(
"ebPulseShape", {5.2e-05,-5.26e-05 , 6.66e-05, 0.1168, 0.7575, 1., 0.8876, 0.6732, 0.4741, 0.3194},
true) and
640 edm::ParameterDescription<std::vector<double>>(
"eePulseShape", {5.2e-05,-5.26e-05 , 6.66e-05, 0.1168, 0.7575, 1., 0.8876, 0.6732, 0.4741, 0.3194},
true) and
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::map< std::pair< EcalXtalGroupId, EcalTDCId >, EcalWeightSet > EcalTBWeightMap
T getParameter(std::string const &) const
int hashedIndex() const
get a compact index for arrays
void computeAmplitude(std::vector< double > &litudeFitParameters)
unsigned size(int bx) const
EcalUncalibRecHitMultiFitAlgo multiFitMethod_
SampleMatrix noisecorEEg6
FullSampleVector fullpulseEE
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
const SampleMatrix & noisecor(bool barrel, int gain) const
void setJitter(float jitter)
int gainId(sample_type sample)
get the gainId (2 bits)
EcalUncalibRecHitTimeWeightsAlgo< EEDataFrame > weightsMethod_endcap_
double EEtimeConstantTerm_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
bool useLumiInfoRunHeader_
double time(const C &dataFrame, const std::vector< double > &litudes, const EcalPedestals::Item *aped, const EcalMGPAGainRatio *aGain, const FullSampleVector &fullpulse, const EcalWeightSet::EcalWeightMatrix **weights)
Compute time.
CalculatedRecHit getCalculatedRecHit()
double outOfTimeThreshG12pEE_
EcalUncalibratedRecHit makeRecHit(const EcalDataFrame &dataFrame, const EcalPedestals::Item *aped, const EcalMGPAGainRatio *aGain, const SampleMatrix &noisecor, const FullSampleVector &fullpulse, const FullSampleMatrix &fullpulsecov, const BXVector &activeBX)
compute rechits
void computeTime(std::vector< double > &timeFitParameters, std::pair< double, double > &timeFitLimits, std::vector< double > &litudeFitParameters)
static const int TEMPLATESAMPLES
edm::ESHandle< EcalWeightXtalGroups > grps
void push_back(T const &t)
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
double amplitudeThreshEE_
std::pair< double, double > EEtimeFitLimits_
void setJitterError(float jitterErr)
double outOfTimeThreshG61pEE_
Eigen::Matrix< double, 19, 19 > FullSampleMatrix
edm::ESHandle< EcalGainRatios > gains
EcalUncalibRecHitRatioMethodAlgo< EBDataFrame > ratioMethod_barrel_
const unsigned int id() const
bool run(const edm::Event &evt, const EcalDigiCollection::const_iterator &digi, EcalUncalibratedRecHitCollection &result) override
FullSampleMatrix fullpulsecovEE
SampleMatrix noisecorEEg12
edm::ESHandle< EcalPedestals > peds
SampleMatrix noisecorEBg1
int hashedIndex(int ieta, int iphi)
edm::EDGetTokenT< int > bunchSpacing_
std::vector< double > EBtimeFitParameters_
std::vector< double > ebPulseShape_
float outOfTimeAmplitude(int bx) const
std::vector< double > EBamplitudeFitParameters_
EcalUncalibRecHitRatioMethodAlgo< EEDataFrame > ratioMethod_endcap_
edm::ESHandle< EcalPulseShapes > pulseshapes
Abs< T >::type abs(const T &t)
ParameterDescriptionNode * addOptionalNode(ParameterDescriptionNode const &node, bool writeToCfi)
FullSampleMatrix fullpulsecovEB
edm::ESHandle< EcalTimeCalibConstants > itime
double timeCorrection(float ampli, const std::vector< float > &litudeBins, const std::vector< float > &shiftBins)
double outOfTimeThreshG12mEB_
void disableErrorCalculation()
double outOfTimeThreshG61mEB_
double outOfTimeThreshG12mEE_
Eigen::Matrix< double, 19, 1 > FullSampleVector
EcalWeightMatrix & getWeightsAfterGainSwitch()
SampleMatrix noisecorEBg6
double outOfTimeThreshG12pEB_
float covval[EcalPulseShape::TEMPLATESAMPLES][EcalPulseShape::TEMPLATESAMPLES]
std::vector< double > eePulseShape_
edm::ESHandle< EcalTimeBiasCorrections > timeCorrBias_
edm::ParameterSetDescription getAlgoDescription()
SampleMatrix noisecorEEg1
bool ampErrorCalculation_
void set(const edm::EventSetup &es) override
edm::ESHandle< EcalPulseCovariances > pulsecovariances
void setPrefitMaxChiSq(double x)
EcalWeightMatrix & getWeightsBeforeGainSwitch()
bool fixMGPAslew(const C &dataFrame)
double outOfTimeThreshG61mEE_
FullSampleVector fullpulseEB
std::vector< Item >::const_iterator const_iterator
void resize(int bx, unsigned size)
T const * product() const
float gain12Over6() const
std::pair< double, double > EBtimeFitLimits_
EcalUncalibRecHitTimeWeightsAlgo< EBDataFrame > weightsMethod_barrel_
SampleMatrix noisecorEBg12
edm::ESHandle< EcalTimeOffsetConstant > offtime
float pdfval[TEMPLATESAMPLES]
float EcalTimeCalibConstant
math::Matrix< 3, 10 >::type EcalWeightMatrix
double outOfTimeThreshG61pEB_
void setFlagBit(Flags flag)
#define DEFINE_EDM_PLUGIN(factory, type, name)
edm::ESHandle< EcalSampleMask > sampleMaskHand_
const EcalWeightSet::EcalWeightMatrix * weights[2]
edm::ESHandle< EcalSamplesCorrelation > noisecovariances
Eigen::Matrix< double, 10, 10 > SampleMatrix
void init(const C &dataFrame, const EcalSampleMask &sampleMask, const double *pedestals, const double *pedestalRMSes, const double *gainRatios)
double amplitudeThreshEB_
edm::ESHandle< EcalTBWeights > wgts
static const int MAXSAMPLES
std::vector< double > EEamplitudeFitParameters_
Power< A, B >::type pow(const A &a, const B &b)
EcalUncalibRecHitWorkerMultiFit()
std::vector< double > EEtimeFitParameters_
double EBtimeConstantTerm_