ATLAS Offline Software
BJetRetriever.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
9 #include "CLHEP/Units/SystemOfUnits.h"
10 
11 namespace JiveXML {
12 
19  BJetRetriever::BJetRetriever(const std::string& type,const std::string& name,const IInterface* parent):
21  m_typeName("BJet"){
22 
23  //Only declare the interface
24  declareInterface<IDataRetriever>(this);
25 
26  declareProperty("FavouriteJetCollection" ,m_sgKeyFavourite = "AntiKt4TopoEMJets",
27  "Collection to be first in output, shown in Atlantis without switching");
28  declareProperty("OtherJetCollections" ,m_otherKeys,
29  "Other collections to be retrieved. If list left empty, all available retrieved");
30  declareProperty("DoWriteHLT", m_doWriteHLT = false,"Ignore HLTAutokey object by default."); // ignore HLTAutoKey objects
31  declareProperty("WeightCut", m_weightCut = 2.4,"Weight cut flavourTagWeight, to assign lhSig = 1. Currently: JetFitterCOMBNN");
32  // >2.4 is recommended cut for JetFitterCOMBNN. 30Nov11
33  }
34 
40  StatusCode BJetRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
41 
42  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "in retrieveAll()" << endmsg;
43 
45  const JetCollection* jets;
46 
47  //obtain the default collection first
48  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve " << dataTypeName() << " (" << m_sgKeyFavourite << ")" << endmsg;
49  StatusCode sc = evtStore()->retrieve(jets, m_sgKeyFavourite);
50  if (sc.isFailure() ) {
51  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << m_sgKeyFavourite << " not found in SG " << endmsg;
52  }else{
54  if ( FormatTool->AddToEvent(dataTypeName(), m_sgKeyFavourite+"_AOD", &data).isFailure()){
55  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << m_sgKeyFavourite << " not found in SG " << endmsg;
56  }else{
57  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << " (" << m_sgKeyFavourite << ") BJet retrieved" << endmsg;
58  }
59  }
60 
61  if ( m_otherKeys.empty() ) {
62  //obtain all other collections from StoreGate
63  if (( evtStore()->retrieve(iterator, end)).isFailure()){
64  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Unable to retrieve iterator for Jet collection" << endmsg;
65 // return false;
66  }
67 
68  for (; iterator!=end; ++iterator) {
69 
70  std::string::size_type position = iterator.key().find("HLTAutoKey",0);
71  if ( m_doWriteHLT ){ position = 99; } // override SG key find
72 
73 // if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " BJet: HLTAutoKey in " << iterator.key() << " at position "
74 // << position << endmsg;
75  if ( position != 0 ){ // SG key doesn't contain HLTAutoKey
76  if (iterator.key()!=m_sgKeyFavourite) {
77  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve all " << dataTypeName() << " (" << iterator.key() << ")" << endmsg;
79  if ( FormatTool->AddToEvent(dataTypeName(), iterator.key()+"_AOD", &data).isFailure()){
80  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << iterator.key() << " not found in SG " << endmsg;
81  }else{
82  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << " (" << iterator.key() << ") BJet retrieved" << endmsg;
83  }
84  }
85  }
86  }
87  }else {
88  //obtain all collections with the given keys
89  std::vector<std::string>::const_iterator keyIter;
90  for ( keyIter=m_otherKeys.begin(); keyIter!=m_otherKeys.end(); ++keyIter ){
91  if ( !evtStore()->contains<JetCollection>( (*keyIter) ) ){ continue; } // skip if not in SG
92  StatusCode sc = evtStore()->retrieve( jets, (*keyIter) );
93  if (!sc.isFailure()) {
94  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve selected " << dataTypeName() << " (" << (*keyIter) << ")" << endmsg;
96  if ( FormatTool->AddToEvent(dataTypeName(), (*keyIter)+"_AOD", &data).isFailure()){
97  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << (*keyIter) << " not found in SG " << endmsg;
98  }else{
99  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << " (" << (*keyIter) << ") retrieved" << endmsg;
100  }
101  }
102  }
103  }
104  //All collections retrieved okay
105  return StatusCode::SUCCESS;
106  }
107 
108 
117 
118  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "retrieve()" << endmsg;
119 
121 
122  DataVect phi; phi.reserve(jets->size());
123  DataVect eta; eta.reserve(jets->size());
124  DataVect pt; pt.reserve(jets->size());
125  DataVect energy; energy.reserve(jets->size());
126 
127  DataVect mass; mass.reserve(jets->size());
128  DataVect px; px.reserve(jets->size());
129  DataVect py; py.reserve(jets->size());
130  DataVect pz; pz.reserve(jets->size());
131 
132  DataVect weight; weight.reserve(jets->size());
133  DataVect lhSig; lhSig.reserve(jets->size());
134  DataVect charge; charge.reserve(jets->size());
135  DataVect label; label.reserve(jets->size());
136 
137  float dummyLhSig = 0.;
138 
139  std::string myLabel ="none";
140 
141  if ( jets->size() == 0 ){
142  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "JetCollection for BJets is empty" << endmsg;
143  }else{
144  JetCollection::const_iterator itr = jets->begin();
145  for (; itr != jets->end(); ++itr) {
146 
147  // lhSig obsolete from 14.2.x ! Now: weight.
148  // for backwards compatibility: AtlantisJava uses still lhSig.
150  // if ( (*itr)->getFlavourTagWeight() > m_weightCut ){ // 'good' BJet
153  //
154  if ( (*itr)->getFlavourTagWeight("JetFitterCOMBNN") > m_weightCut ){ // 'good' BJet
155  dummyLhSig = 1.;
156  }else{
157  dummyLhSig = 0.;
158  }
159  std::string myLabel ="none";
160  myLabel =
161  "weight_JetFitterCOMBNN=" + DataType( (*itr)->getFlavourTagWeight("JetFitterCOMBNN") ).toString() + "_"
162  + "WeightJetFitterTagNN=" + DataType( (*itr)->getFlavourTagWeight("JetFitterTagNN") ).toString() + "_"
163  + "WeightIP3DSV1=" + DataType( (*itr)->getFlavourTagWeight() ).toString() + "_"
164  + "WeightIP2D=" + DataType( (*itr)->getFlavourTagWeight("IP2D") ).toString() + "_"
165  + "WeightIP3D=" + DataType( (*itr)->getFlavourTagWeight("IP3D") ).toString() + "_"
166  + "WeightSV1=" + DataType( (*itr)->getFlavourTagWeight("SV1") ).toString() + "_"
167  + "WeightSV2=" + DataType( (*itr)->getFlavourTagWeight("SV2") ).toString() + "_";
168 
169  phi.push_back(DataType((*itr)->phi()));
170  eta.push_back(DataType((*itr)->eta()));
171  pt.push_back(DataType((*itr)->pt()/CLHEP::GeV));
172  energy.push_back( DataType((*itr)->e()/CLHEP::GeV ) );
173  mass.push_back(DataType((*itr)->m()/CLHEP::GeV));
174  px.push_back( DataType((*itr)->px()/CLHEP::GeV ) );
175  py.push_back( DataType((*itr)->py()/CLHEP::GeV ) );
176  pz.push_back( DataType((*itr)->pz()/CLHEP::GeV ) );
177  weight.push_back( DataType((*itr)->getFlavourTagWeight("JetFitterCOMBNN"))); // recommended choice 30Nov11
178  lhSig.push_back( DataType( dummyLhSig )); // dummy only ! See above.
179  charge.push_back( DataType((*itr)->charge()));
180  label.push_back( DataType( myLabel ));
181  }
182  }
183  // Start with mandatory entries
184  DataMap["phi"] = phi;
185  DataMap["eta"] = eta;
186  DataMap["pt"] = pt;
187  DataMap["energy"] = energy;
188  // four-vectors
189  DataMap["mass"] = mass;
190  DataMap["px"] = px;
191  DataMap["py"] = py;
192  DataMap["pz"] = pz;
193 
194  // further details
195  DataMap["weight"] = weight;
196  DataMap["lhSig"] = lhSig;
197  DataMap["charge"] = charge;
198  DataMap["label"] = label;
199 
200  //Be verbose
201  if (msgLvl(MSG::DEBUG)) {
202  msg(MSG::DEBUG) << dataTypeName() << " BJets (AOD, no cells), collection: " << dataTypeName();
203  msg(MSG::DEBUG) << " retrieved with " << phi.size() << " entries, weight cut set to: "
204  << m_weightCut << endmsg;
205  }
206 
207  //All collections retrieved okay
208  return DataMap;
209 
210  } // retrieve
211 
212 } // JiveXML namespace
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
test_pyathena.px
px
Definition: test_pyathena.py:18
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
PlotCalibFromCool.label
label
Definition: PlotCalibFromCool.py:78
JiveXML::DataVect
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition: DataType.h:58
DataType
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
Definition: RoIBResultByteStreamTool.cxx:25
test_pyathena.pt
pt
Definition: test_pyathena.py:11
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
BJetRetriever.h
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
JiveXML::BJetRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type.
Definition: BJetRetriever.h:46
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
JetCollection.h
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Amg::pz
@ pz
Definition: GeoPrimitives.h:40
test_pyathena.parent
parent
Definition: test_pyathena.py:15
JiveXML::BJetRetriever::m_otherKeys
std::vector< std::string > m_otherKeys
Definition: BJetRetriever.h:53
JiveXML::BJetRetriever::BJetRetriever
BJetRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: BJetRetriever.cxx:19
JiveXML
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
Definition: BadLArRetriever.cxx:21
Amg::py
@ py
Definition: GeoPrimitives.h:39
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
JiveXML::BJetRetriever::m_doWriteHLT
bool m_doWriteHLT
Definition: BJetRetriever.h:54
charge
double charge(const T &p)
Definition: AtlasPID.h:494
JiveXML::BJetRetriever::getData
const DataMap getData(const JetCollection *)
Retrieve basic parameters, mainly four-vectors.
Definition: BJetRetriever.cxx:116
JiveXML::BJetRetriever::m_sgKeyFavourite
std::string m_sgKeyFavourite
Definition: BJetRetriever.h:52
JetCollection
Container for Jets
Definition: JetCollection.h:30
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
JiveXML::BJetRetriever::m_weightCut
float m_weightCut
Definition: BJetRetriever.h:55
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
AthAlgTool
Definition: AthAlgTool.h:26
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
SG::ConstIterator
Definition: SGIterator.h:163
JiveXML::BJetRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
Definition: BJetRetriever.cxx:40