Loading [MathJax]/jax/output/SVG/config.js
 |
ATLAS Offline Software
|
Go to the documentation of this file.
20 const double GeV = 1000.;
47 return StatusCode::FAILURE;
55 if (
m_OP==
"TIGHTER") {
57 }
else if (
m_OP==
"TIGHT" ) {
59 }
else if (
m_OP==
"DEFAULT" ||
m_OP==
"LOOSE" ) {
63 return StatusCode::FAILURE;
70 m_MVreader = std::make_unique< TMVA::Reader > (
"Silent" );
71 float fjvt,
width,
time,cllambda2,cletawidth,cle,cliso,clemprob;
75 m_MVreader->AddVariable(
"jet_LeadingClusterSecondLambda", &cllambda2 );
76 m_MVreader->AddVariable(
"cl_etaWidthLead", &cletawidth );
78 m_MVreader->AddVariable(
"cl_ISOLATIONsumE", &cliso );
79 m_MVreader->AddVariable(
"cl_EM_PROBABILITYsumE", &clemprob );
128 return StatusCode::SUCCESS;
137 if(pvind == -1) pvind =
getPV();
139 ATH_MSG_DEBUG(
"In JetForwardJvtToolBDT::modify: PV index = " << pvind);
141 ATH_MSG_WARNING(
"Something went wrong with the HS primary vertex identification." );
142 return StatusCode::FAILURE;
153 std::vector<TVector2> pileupMomenta;
157 outMVHandle(*jetF) = 1;
158 cllambda2Handle(*jetF) = 0;
159 clwidthHandle(*jetF) = 0;
160 cleHandle(*jetF) = 0;
161 clisoHandle(*jetF) = 0;
162 clemprobHandle(*jetF) = 0;
166 if( pileupMomenta.empty() ) {
168 if( pileupMomenta.empty() ) {
169 ATH_MSG_DEBUG(
"pileupMomenta is empty, this can happen for events with no PU vertices. fJVT won't be computed for this event and will be set to 0 instead." );
170 mvfjvtHandle(*jetF) = 0;
174 mvfjvt =
getMVfJVT(jetF, pvind, pileupMomenta);
176 mvfjvtHandle(*jetF) = mvfjvt;
179 return StatusCode::SUCCESS;
188 ATH_MSG_DEBUG(
"In JetForwardJvtToolBDT::getFJVT -----> Starting looping on vertices (pileupMomenta.size() = "<<pileupMomenta.size());
189 for (
size_t pui = 0; pui < pileupMomenta.size(); pui++) {
190 if (pui!=(
size_t)pvind){
191 double projection = pileupMomenta[pui]*fjet/fjet.Mod();
192 if (projection>fjvt) fjvt = projection;
205 if(
sc.isFailure() ) {
211 if ( !eventInfoHandle.
isValid() ) {
225 std::vector<float> MVinputs;
226 MVinputs.push_back(
getFJVT(
jet, pvind, pileupMomenta)/
jet->pt() );
227 MVinputs.push_back(
jet->getAttribute<
float>(
"Width") );
228 MVinputs.push_back(
jet->getAttribute<
float>(
"Timing") );
229 MVinputs.push_back( cllambda2Handle(*
jet) );
230 MVinputs.push_back( clwidthHandle(*
jet) );
231 MVinputs.push_back( cleHandle(*
jet) );
232 MVinputs.push_back( clisoHandle(*
jet) );
233 MVinputs.push_back( clemprobHandle(*
jet) );
236 float eta = fabs(
jet->eta());
242 std::lock_guard lock (
mutex);
243 if ( pt < 30. && pt >= 20. &&
eta >= 3.2 &&
mu>=50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_1" ,1.);
244 else if ( pt < 30. && pt >= 20. && eta < 3.2 && mu>=50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_2" ,1.);
245 else if ( pt < 40. && pt >= 30. &&
eta >= 3.2 &&
mu>=50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_3" ,1.);
246 else if ( pt < 40. && pt >= 30. && eta < 3.2 && mu>=50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_4" ,1.);
247 else if ( pt < 50. && pt >= 40. &&
eta >= 3.2 &&
mu>=50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_5" ,1.);
248 else if ( pt < 50. && pt >= 40. && eta < 3.2 && mu>=50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_6" ,1.);
249 else if ( pt < 120. && pt >= 50. &&
eta >= 3.2 &&
mu>=50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_7" ,1.);
250 else if ( pt < 120. && pt >= 50. && eta < 3.2 && mu>=50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_8" ,1.);
251 else if ( pt < 30. && pt >= 20. &&
eta >= 3.2 &&
mu<50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_9" ,1.);
252 else if ( pt < 30. && pt >= 20. &&
eta < 3.2 &&
mu<50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_10" ,1.);
253 else if ( pt < 40. && pt >= 30. &&
eta >= 3.2 &&
mu<50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_11" ,1.);
254 else if ( pt < 40. && pt >= 30. &&
eta < 3.2 &&
mu<50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_12" ,1.);
255 else if ( pt < 50. && pt >= 40. &&
eta >= 3.2 &&
mu<50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_13" ,1.);
256 else if ( pt < 50. && pt >= 40. &&
eta < 3.2 &&
mu<50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_14" ,1.);
257 else if ( pt < 120. && pt >= 50. &&
eta >= 3.2 &&
mu<50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_15" ,1.);
258 else if ( pt < 120. && pt >= 50. &&
eta < 3.2 &&
mu<50. )
score =
reader.EvaluateMVA( MVinputs,
"BDT_16" ,1.);
267 double mvfjvtThresh = -999.;
270 if ( !eventInfoHandle.
isValid() ) {
282 return mvfjvt==-2 || mvfjvt>mvfjvtThresh;
295 cllambda2Handle(*
jet) = lcllambda2NTHandle(*
jet);
299 if( !clustersHandle.
isValid() ) {
301 return StatusCode::FAILURE;
315 if(
cl->p4().DeltaR(
jet->p4())>0.6)
continue;
317 cle2 +=
cl->e()*
cl->e();
318 cliso1 += ISOLATIONAcc(*
cl)*
cl->e()*
cl->e();
319 clemprob1 += EM_PROBABILITYAcc(*
cl)*
cl->e()*
cl->e();
320 if(
cl->rawE()/cosh(
cl->rawEta()) > maxpt){
321 maxpt =
cl->rawE()/cosh(
cl->rawEta());
328 clwidthHandle(*
jet) = TMath::CosH(
cl->rawEta()) *
TMath::ATan2( TMath::Sqrt(SECOND_RAcc(*
cl)),
331 cleHandle(*
jet) = cle1;
332 clisoHandle(*
jet)= cliso1/cle2;
333 clemprobHandle(*
jet) =clemprob1/cle2;
342 cllambda2Handle(*
jet) = lcllambda2Handle(*
jet);
343 clwidthHandle(*
jet) = lclwidthHandle(*
jet);
344 clisoHandle(*
jet) = lclisoHandle(*
jet);
345 clemprobHandle(*
jet) = lclemprobHandle(*
jet);
346 cleHandle(*
jet) = lcleHandle(*
jet);
348 return StatusCode::SUCCESS;
353 std::vector<TVector2> pileupMomenta;
356 if( !trkMetHandle.
isValid() ) {
358 return pileupMomenta;
361 if( !vxContHandle.
isValid() ) {
363 return pileupMomenta;
365 ATH_MSG_DEBUG(
"In JetForwardJvtToolBDT::calculateVertexMomenta : Starting vertex loop ");
369 TString vname =
"PVTrack_vx";
370 vname += vx->index();
371 pileupMomenta.push_back((vx->index()==(
size_t)pvind?0:-(1./
m_jetScaleFactor))*TVector2(0.5*(*trkMetHandle)[vname.Data()]->mpx(),0.5*(*trkMetHandle)[vname.Data()]->mpy()));
376 if (jetvert>=0) pileupMomenta[jetvert] += TVector2(0.5*
jet->pt()*
cos(
jet->phi()),0.5*
jet->pt()*
sin(
jet->phi()));
379 return pileupMomenta;
402 std::vector<float> sumpts;
403 jet->getAttribute<std::vector<float> >(
"SumPtTrkPt500",sumpts);
406 for (
size_t i = 0;
i < sumpts.size();
i++) {
407 if (sumpts[
i]>firstVal) {
409 firstVal = sumpts[
i];
417 std::vector<float> sumpts;
418 jet->getAttribute<std::vector<float> >(
"SumPtTrkPt500",sumpts);
419 if (sumpts.size()<2)
return 0;
421 std::nth_element(sumpts.begin(),sumpts.begin()+sumpts.size()/2,sumpts.end(),std::greater<int>());
422 double median = sumpts[sumpts.size()/2];
423 std::nth_element(sumpts.begin(),sumpts.begin(),sumpts.end(),std::greater<int>());
424 double max = sumpts[0];
431 if( !vxContHandle.
isValid() ) {
435 ATH_MSG_DEBUG(
"Successfully retrieved primary vertex container");
440 ATH_MSG_DEBUG(
"Couldn't identify the hard-scatter primary vertex (no vertex with \"vx->vertexType()==xAOD::VxType::PriVtx\" in the container)!");
451 for(
const xAOD::Jet *tjet : *truthJets) {
452 if (tjet->p4().DeltaR(
jet->p4())<0.3 && tjet->pt()>10
e3) ishs =
true;
453 if (tjet->p4().DeltaR(
jet->p4())<0.6) ispu =
false;
455 isHSHandle(*
jet)=ishs;
456 isPUHandle(*
jet)=ispu;
458 return StatusCode::SUCCESS;
Scalar eta() const
pseudorapidity method
float median(std::vector< float > &Vec)
const std::string & key() const
Return the StoreGate ID for the referenced object.
Description of a calorimeter cluster.
Handle class for reading a decoration on an object.
::StatusCode StatusCode
StatusCode definition for legacy code.
Handle class for adding a decoration to an object.
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Class describing a Vertex.
def time(flags, cells_name, *args, **kw)
#define ATH_MSG_WARNING(x)
#define ATLAS_THREAD_SAFE
Helper class to provide constant type-safe access to aux data.
reader
read the goodrunslist xml file(s)
Define macros for attributes used to control the static checker.
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
float actualInteractionsPerCrossing() const
Average interactions per crossing for the current BCID - for in-time pile-up.
GeoGenfun::FunctionNoop ATan2(GeoGenfun::GENFUNCTION y, GeoGenfun::GENFUNCTION x)