Skip to content
Snippets Groups Projects
Forked from atlas / athena
69619 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
InDetGlobalPrimaryVertexMonAlg.h 2.65 KiB
/*
  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
*/


/** @file InDetGlobalPrimaryVertexMonAlg.h
 * Implementation of inner detector global primary vertex monitoring tool
 *
 *@author
 * Leonid Serkin <lserkin@cern.ch> @n
 * 
 * based on InDetGlobalPrimaryVertexMonTool.h 
 * 
 ****************************************************************************/

#ifndef InDetGlobalPrimaryVertexMonAlg_H
#define InDetGlobalPrimaryVertexMonAlg_H

#include "AthenaMonitoring/AthMonitorAlgorithm.h"

// tracking vertex
#include "StoreGate/ReadHandleKey.h"
#include "xAODTracking/VertexContainer.h"

//Standard c++
#include <string>

//------------------------------

namespace Trk {
  class Vertex;
  class VxCandidate;
}



class InDetGlobalPrimaryVertexMonAlg : public AthMonitorAlgorithm {
  
 public:
  
  InDetGlobalPrimaryVertexMonAlg( const std::string & name, ISvcLocator* pSvcLocator );
  virtual ~InDetGlobalPrimaryVertexMonAlg();
  virtual StatusCode initialize() override;
  virtual StatusCode fillHistograms( const EventContext& ctx ) const override;
  std::string findComponentString(int bec, int ld) const;
  
  
  
 private:
  
  SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerName{this,"vxContainerName","PrimaryVertices","Primary Vertices for Global Monitoring"};
  SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerNameSplit{this,"vxContainerNameSplit","VxPrimaryCandidateSplitStream","Split Vertices for Global Monitoring"};
  
  int         m_splitVertexTrkInvFraction; ///< store inverse of the fraction of input tracks used for probe vertex (1:N)
  float       m_distanceSplitVxMatch; ///< store maximum distance for matching split vertices to original non-BC vertex
  /** store metric to be used for split vertex matching in selection efficiency
   * Values currently implemented:
   * 0: dummy metric; returns zero distance
   * 1: simple delta-z metric
   * 2: 3-D distance divided by the error (dominated by Delta z)
   * 3: quadratic sum of distances divided by their errors in the 3 directions. Expected RMS = 1. Default.
   */
  
  int      m_splitMatchingMetric; 
  bool     m_doEnhancedMonitoring; // trigger the enhanced monitoring (to be activated by InDetFlags.doMonitoringPrimaryVertexingEnhanced because split vertexing and vertexing with no beam constraint need to be run as well)
  
  // Helper functions
  /** Returns matching distance between split and original vertex.
   * @param splitVx pointer to split vertex 
   * @param originalVx pointer to original non-BC vertex
   * @return distance for matching split to original Vertex
   */
  double getSplitMatchDistance(const xAOD::Vertex* splitVx, const xAOD::Vertex* originalVx);
  
};
#endif