|
ATLAS Offline Software
|
Go to the documentation of this file.
30 ATH_MSG_FATAL(
"If you're trying to apply only the Residual pile up correction, it needs to be specify in the Calibration Sequence. ApplyOnlyResidual should be true in the configuration file and the PileupStartScale should be specified.");
31 return StatusCode::FAILURE;
42 else ATH_MSG_DEBUG(
"The pileup residual calibrations will be applied simultaneously (default).");
50 "Sequential residual calibration can not be applied in doMuOnly or doNPVOnly or doNJetOnly cases.");
53 "Conflicting configuation, UseNjet true but doMuOnly or doNPVOnly also true.");
56 "It was requested to apply only the mu-based AND the NPV-based calibrations.");
59 "It was requested to apply only the mu-based AND the NJet-based calibrations.");
62 "It was requested to apply only the NJet-based calibration but not to use Njet instead of NPV.");
65 "It was requested to apply NJet-based and NPV calibrations.");
71 "OffsetCorrection.DefaultMuRef not specified.");
74 "OffsetCorrection.DefaultNPVRef not specified.");
77 "OffsetCorrection.DefaultNjetRef not specified.");
84 "Incorrect specification of MuTerm binning" );
89 "Incorrect specification of nJetTerm binning." );
92 "Incorrect specification of NPVTerm binning." );
96 ATH_MSG_INFO(
"\n NPV beamspot correction will be applied.");
100 return StatusCode::SUCCESS;
109 double mu = eventInfoDecor(0) ;
120 "Could not retrieve xAOD::EventShape::Density from xAOD::EventShape "<<
m_rhoKey.key() );
134 static const double toGeV = 0.001;
144 const double E_det = jetStartP4.e();
145 const double pT_det = jetStartP4.pt();
146 const double eta_det = jetStartP4.eta();
147 const double mass_det = jetStartP4.mass();
149 if ( E_det < mass_det ) {
150 ATH_MSG_ERROR(
"JetPileupCorrection::calibrateImpl : Current jet has mass=" << mass_det*
toGeV <<
" GeV, which is greater than it's energy=" << E_det*
toGeV <<
" GeV?? Aborting." );
151 return StatusCode::FAILURE;
158 double pT_offset = pT_det;
159 double pileup_SF = 1;
167 pT_offset =
m_doJetArea ? pT_det -
rho*jetareaP4.pt() - offsetET : pT_det - offsetET;
170 pileup_SF = pT_offset >= 0 ? pT_offset / pT_det : 10./pT_det;
172 calibP4 = jetStartP4*pileup_SF;
177 pT_offset =
m_doJetArea ? pT_det -
rho*jetareaP4.pt() - offsetET : pT_det - offsetET;
178 double muSF = pT_offset >= 0 ? pT_offset / pT_det : 10./pT_det;
180 calibP4 = jetStartP4*muSF;
184 double pT_afterMuCalib = calibP4.pt();
185 pT_offset = pT_afterMuCalib - offsetET;
186 double SF = pT_offset >= 0 ? pT_offset / pT_afterMuCalib : 10./pT_afterMuCalib;
187 calibP4 = calibP4*
SF;
192 puCorrectedAcc(*
jet) = 1 ;
195 jet->setJetP4( calibP4 );
200 return StatusCode::SUCCESS;
205 int nJet,
bool MuOnly,
bool NOnly )
const {
211 int nJet,
bool MuOnly,
bool NOnly,
212 const std::vector<double>&
OffsetMu,
214 const std::vector<double>& OffsetNjet,
215 const TAxis *OffsetBins )
const {
217 static const double toMeV= 1000.;
224 double alpha,
beta, etaEdge;
225 if(!MuOnly){
beta = OffsetNjet[0];
228 }
else { alpha = 0; }
231 for (;
bin<=OffsetBins->GetNbins();++
bin) {
232 etaEdge = OffsetBins->GetBinLowEdge(
bin);
233 const double width=OffsetBins->GetBinWidth(
bin);
234 if (abseta<etaEdge+
width)
break;
238 if(!NOnly) alpha +=
OffsetMu[
bin]*(abseta-etaEdge);
239 if(!MuOnly)
beta += OffsetNjet[
bin]*(abseta-etaEdge);
245 double alpha,
beta, etaEdge;
249 }
else { alpha = 0; }
252 for (;
bin<=OffsetBins->GetNbins();++
bin) {
253 etaEdge = OffsetBins->GetBinLowEdge(
bin);
254 const double width=OffsetBins->GetBinWidth(
bin);
255 if (abseta<etaEdge+
width)
break;
259 if(!NOnly) alpha +=
OffsetMu[
bin]*(abseta-etaEdge);
bool getDensity(EventDensityID id, double &v) const
Get a density variable from the object.
virtual StatusCode calibrate(xAOD::JetContainer &jetCont) const override
Apply calibration to a jet container.
Gaudi::Property< bool > m_applyNPVBeamspotCorrection
Gaudi::Property< bool > m_doOnlyResidual
Helper class to provide type-safe access to aux data.
double getNPVBeamspotCorrection(double NPV) const
void setAttribute(SG::AuxElement &p, const TYPE &v) const
const float SF[NF]
Cross sections for Fluor.
void getAttribute(const SG::AuxElement &p, TYPE &v) const
bool isPresent() const
Is the referenced container present in SG?
Gaudi::Property< bool > m_doMuOnly
#define ATH_MSG_VERBOSE(x)
Gaudi::Property< bool > m_isData
NPVBeamspotCorrection * m_npvBeamspotCorr
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Handle class for reading a decoration on an object.
Gaudi::Property< std::vector< double > > m_offsetEtaBins
SG::ReadHandleKey< xAOD::JetContainer > m_nJetContainerKey
Gaudi::Property< std::vector< double > > m_resOffsetNjet
::StatusCode StatusCode
StatusCode definition for legacy code.
#define CHECK_THEN_ERROR(checkcode, message)
SG::ReadDecorHandleKey< xAOD::EventInfo > m_muKey
Gaudi::Property< float > m_nJet_ref
Gaudi::Property< bool > m_useNjet
Gaudi::Property< float > m_mu_ref
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Gaudi::Property< bool > m_doSequentialResidual
double getResidualOffset(double abseta, double mu, double NPV, int nJet, bool MuOnly, bool NOnly) const
Pileup1DResidualCalibStep(const std::string &name="Pileup1DResidualCalibStep")
Gaudi::Property< float > m_NPV_ref
Gaudi::Property< bool > m_doNJetOnly
Gaudi::Property< bool > m_doNPVOnly
Gaudi::Property< int > m_njetThreshold
Gaudi::Property< std::vector< double > > m_resOffsetNPV
SG::ReadHandleKey< xAOD::EventShape > m_rhoKey
SG::ReadHandleKey< xAOD::VertexContainer > m_pvKey
int countNPV(const VXCONT &vxCont)
Gaudi::Property< float > m_muSF
Gaudi::Property< bool > m_doJetArea
This header defines wrapper classes around SG::AuxElement::Accessor used internally in the Jet EDM.
Gaudi::Property< std::vector< double > > m_resOffsetMu
double getResidualOffsetET(double abseta, double mu, double NPV, int nJet, bool MuOnly, bool NOnly, const std::vector< double > &OffsetMu, const std::vector< double > &OffsetNPV, const std::vector< double > &OffsetNjet, const TAxis *OffsetBins) const