|
ATLAS Offline Software
|
Go to the documentation of this file.
13 using fastjet::PseudoJet;
17 namespace JetIsolation {
37 double isoPar(
const TVector3 &unitV){
return m_isoP.Vect().Dot(unitV);}
38 double isoPerp(
const TVector3 &unitV){
return m_isoP.Vect().Perp(unitV);}
63 virtual std::map<std::string, float>
66 std::map<std::string, float> result_map;
70 result_map.insert(std::pair<std::string, float>(
s_kname[
i],
result.isoPerp(
jet->p4().Vect()) ));
73 result_map.insert(std::pair<std::string, float>(
s_kname[
i],
result.isoSumPt() ));
76 result_map.insert(std::pair<std::string, float>(
s_kname[
i],
result.isoPar(
jet->p4().Vect()) ));
79 result_map.insert(std::pair<std::string, float>(
s_kname[
i],
result.isoP().Vect().Mag() ));
87 for(
size_t i=0;
i<4 ;
i++){
99 std::cout <<
"Isolation calculator "<<
baseName() <<std::endl;
115 return TLorentzVector(
p.px(),
p.py(),
p.pz(),
p.e());
120 template<
typename ISOCRITERIA,
typename KINEMATICGETTER = PseudoJetKinematicGetter>
126 virtual IsolationResult
130 for (
size_t i=0 ;
i<nearbyConstit.size(); ++
i ) {
131 if (
m_iso.inIsolationArea(
jet, nearbyConstit[
i]) ) {
145 isoT->m_iso.setup(j);
164 double dr2 = JetDistances::deltaR(j->
eta(), j->
phi(),
part.x(),
part.y());
187 #define ISOAREA( calcName, deltaRcode , additionalDecl ) struct calcName : public IsolationAreaBase { \
188 calcName(double p) : IsolationAreaBase(p, #calcName){} \
189 virtual void setup(const xAOD::Jet* j) {double jetRadius=j->getSizeParameter(); double param = m_parameter; m_deltaRmax2=deltaRcode ; m_deltaRmax2*=m_deltaRmax2; param=jetRadius*param;} additionalDecl }
196 ISOAREA( IsoFixedArea, sqrt(jetRadius*jetRadius+param*M_1_PI) , ) ;
201 double dr2 = JetDistances::deltaR2(j->
eta(), j->
phi(), constit.
x(), constit.
y());
202 return ( (dr2<0.8*0.8) && (dr2>0.6*0.6) );
223 std::stringstream
str(in);
224 std::getline(
str, s1,
':' );
225 std::getline(
str,
s2,
':');
226 std::getline(
str,
s3);
246 declareInterface<IJetDecorator>(
this);
259 std::map<string, IsolationCalculator*> calcMap;
263 for (
size_t i=0;
i<nmom; ++
i ) {
264 string isocriteria, param_s, kinematic;
266 string calcId = isocriteria + param_s;
268 if ( isoC ==
nullptr ) {
271 if( isoC ==
nullptr ) {
273 return StatusCode::FAILURE;
278 return StatusCode::FAILURE;
283 ATH_MSG_ERROR(
"JetIsolationTool needs to have its input jet container configured!");
284 return StatusCode::FAILURE;
289 for (
auto& pair : calcMap ){
291 ATH_MSG_DEBUG(
"Will use iso calculation : "<< pair.second->baseName() );
303 return StatusCode::FAILURE;
319 return StatusCode::SUCCESS;
329 if (
jets.empty() )
return StatusCode::SUCCESS;
339 std::vector<IsolationCalculator*> calculators;
342 calculators.push_back( cloned );
360 std::vector<jet::ParticlePosition> nearbyC;
361 nearbyC.reserve( 30 );
364 for (
unsigned int ippj=0; ippj<inputConstits->
size(); ++ippj ) {
367 string label =
"none";
370 ppar = uin.particle();
376 string msg =
"Skipping";
378 if ( ppar !=
nullptr ) {
379 for (
unsigned int icon=0; icon<pjet->numConstituents(); ++icon ) {
380 if ( ippj == 0 )
ATH_MSG_VERBOSE(
" Jet con: " <<
long(pjet->rawConstituent(icon)));
381 if ( pjet->rawConstituent(icon) == ppar ) {
389 nearbyC.push_back(
pos);
392 <<
" @" <<
long(ppar) <<
" " <<
label);
394 if ( nearbyC.size() + pjet->numConstituents() != inputConstits->
size() ) {
395 ATH_MSG_WARNING(
"Inconsistent number of jet constituents found in jet.");
399 << nearbyC.size() <<
", in jet: "<< pjet->numConstituents()
400 <<
", total: "<< inputConstits->
size() );
402 std::map<std::string, const SG::WriteDecorHandleKeyArray<xAOD::JetContainer>* > decorKeyMap;
409 for (
size_t iCalc = 0; iCalc < calculators.size(); iCalc++ ) {
410 std::map<std::string, float>
results = calculators.at(iCalc)->calcIsolationAttributes(pjet, nearbyC);
413 decorHandle(*pjet) =
value;
425 return StatusCode::SUCCESS;
435 return StatusCode::SUCCESS;
virtual ~IsolationCalculator()=default
IsolationCalculator * createCalulator(const std::string &n, double parameter)
virtual string baseName() const
virtual IsolationResult jetIsolation(const xAOD::Jet *jet, std::vector< jet::ParticlePosition > &nearbyConstit) const
Compute the isolation momentum from jet and jet inputs.
std::vector< Kinematics > m_kinematics
virtual IsolationCalculator * clone(const xAOD::Jet *j) const
virtual double phi() const
The azimuthal angle ( ) of the particle.
#define ATH_MSG_VERBOSE(x)
const std::string & key() const
Return the StoreGate ID for the referenced object.
bool empty() const
Test if the key is blank.
Class providing the definition of the 4-vector interface.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
virtual IsolationResult jetIsolation(const xAOD::Jet *, std::vector< jet::ParticlePosition > &) const
Compute the isolation momentum from jet and jet inputs.
double isoPerp(const TVector3 &unitV)
Handle class for reading a decoration on an object.
bool isConstituent(const xAOD::IParticle *p, const xAOD::Jet *j)
Kinematics
Define the availble isolation variables.
::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.
bool inIsolationArea(const xAOD::Jet *j, jet::ParticlePosition &part) const
virtual double eta() const
The pseudorapidity ( ) of the particle.
const FourMom_t getP(jet::ParticlePosition &p) const
IsolationAreaBase(double p, const string &n)
const IParticle * rawConstituent(size_t i) const
Direct access to constituents. WARNING expert use only.
IsolationCalculator : base class for isolation calculations.
virtual IsolationCalculator * clone(const xAOD::Jet *) const
double getPt(jet::ParticlePosition &p) const
virtual string baseName() const
void colonSplit(const string &in, string &s1, string &s2, string &s3)
helper
#define ATH_MSG_WARNING(x)
IsolationCalculatorT(double param=0.)
bool scheduleKinematicCalculation(const std::string &kname)
virtual std::map< std::string, float > calcIsolationAttributes(const xAOD::Jet *jet, std::vector< jet::ParticlePosition > &nearbyConstit) const
const std::vector< PseudoJet > * casVectorPseudoJet() const
Holds the 4-vector of all constituents contributing to isolation.
double isoPar(const TVector3 &unitV)
virtual void copyFrom(const IsolationCalculator *o, const xAOD::Jet *)
size_t numConstituents() const
Number of constituents in this jets (this is valid even when reading a file where the constituents ha...
std::vector< string > m_attNames
kinematics isolation vars to be computed
static const string s_kname[4]
names for isolation variables
ISOAREA(IsoKR, jetRadius *param,)