|  | ATLAS Offline Software
    | 
 
 
 
Go to the documentation of this file.
   12 #include "Acts/EventData/TrackContainer.hpp" 
   13 #include "Acts/EventData/TrackParameters.hpp" 
   15 #include "Gaudi/Property.h" 
   16 #include "GaudiKernel/Algorithm.h" 
   17 #include "GaudiKernel/MsgStream.h" 
   31                                                ISvcLocator *pSvcLocator)
 
   60     ATH_MSG_WARNING(
"No extrapolator found. Will not be able to extrapolate tracks.");
 
   62     ATH_MSG_INFO(
"Extrapolator found. Will be able to extrapolate tracks.");
 
   68   return StatusCode::SUCCESS;
 
   72                                                    const Acts::GeometryContext& gctx) {
 
   81   const Acts::BoundTrackParameters trackparams(
track.referenceSurface().getSharedPtr(),
 
   83   auto trackPosition = trackparams.position(gctx);;
 
   84   data[
"pos"].push_back(trackPosition.x());
 
   85   data[
"pos"].push_back(trackPosition.y());
 
   86   data[
"pos"].push_back(trackPosition.z());
 
   88   unsigned int nTrackStates = 
track.nTrackStates();
 
   92   std::vector<typename ActsTrk::TrackContainer::ConstTrackStateProxy> trackStates;
 
   93   trackStates.reserve(nTrackStates);
 
   94   for (
auto trackstate : 
track.trackStatesReversed()) {
 
   95     trackStates.push_back(trackstate);
 
  100   unsigned int count = 0;
 
  101   for (
auto trackstate : trackStates) {
 
  103     if (trackstate.hasSmoothed() && trackstate.hasReferenceSurface()) {
 
  104       const Acts::BoundTrackParameters 
params(trackstate.referenceSurface().getSharedPtr(),
 
  105                                                      trackstate.smoothed(),
 
  106                                                      trackstate.smoothedCovariance(), 
 
  111       data[
"pos"].push_back(
pos.x());
 
  112       data[
"pos"].push_back(
pos.y());
 
  113       data[
"pos"].push_back(
pos.z());
 
  118       ATH_MSG_WARNING(
"TrackState "<<
count<<
" does not have smoothed state ["<<trackstate.hasSmoothed()<<
"] or reference surface ["<<trackstate.hasReferenceSurface()<<
"]. Skipping.");
 
  131     return StatusCode::SUCCESS;
 
  144   j[
"run number"] = eventInfo->
runNumber();
 
  163     ATH_MSG_VERBOSE(
"TrackStateContainer has "<< tcHandle->size() << 
" elements");
 
  165     ATH_MSG_VERBOSE(
"Trying to load " << tcHandle.key() << 
" with " << tcHandle->size() << 
" tracks");
 
  167     for (
auto track : *tc) {
 
  169       j[
"TrackContainers"][tcHandle.key()].push_back(
tmp);
 
  192   return StatusCode::SUCCESS;
 
  200   auto writeEtaPhiLabel = [](
float eta, 
float phi) {
 
  204   j[
"event number"] = 999;
 
  205   j[
"run number"] = 999;
 
  208   unsigned int maxSteps = 3;
 
  212     phi = 
static_cast<float>(
nPhi) / 
static_cast<float>(maxSteps) *
 
  215       eta = 
static_cast<float>(
nEta) / 
static_cast<float>(maxSteps) *
 
  220       cluster[
"phi"] = 
phi;
 
  221       cluster[
"eta"] = 
eta;
 
  222       cluster[
"energy"] = 999.9;
 
  223       cluster[
"label"] = writeEtaPhiLabel(
eta, 
phi);
 
  225       j[
"CaloClusters"][
"TestClusters"].push_back(cluster);
 
  231       jet[
"energy"] = 99999.9;
 
  232       jet[
"label"] = writeEtaPhiLabel(
eta, 
phi);
 
  233       j[
"Jets"][
"TestJets"].push_back(
jet);
 
  243       for (
unsigned int i = 0; 
i < 4; ++
i) {
 
  245         track[
"pos"].push_back({trackPos.x(), trackPos.y(), trackPos.z()});
 
  248       j[
"Tracks"][
"TestTracks"].push_back(
track);
 
  254 template <
class TYPE>
 
  257     const std::string &jsonType) {
 
  263     for (
auto object : *handle) {
 
  265       event[jsonType][handle.key()].push_back(
tmp);
 
  268   return StatusCode::SUCCESS;
 
  287   data[
"energy"] = clust.
e();
 
  309   data[
"chi2"] = 
tp.chiSquared();
 
  310   data[
"dof"] = 
tp.numberDoF();
 
  311   data[
"dparams"] = {
tp.d0(), 
tp.z0(), 
tp.phi0(), 
tp.theta(), 
tp.qOverP()};
 
  314     ATH_MSG_VERBOSE(
"Physlite mode enabled. Not adding track parameters.");
 
  319     data[
"pos"] = {
tp.perigeeParameters().position().x(),
 
  320                    tp.perigeeParameters().position().y(),
 
  321                    tp.perigeeParameters().position().z()};
 
  322     for (
unsigned int i = 0; 
i < 
tp.numberOfParameters(); ++
i) {
 
  323       data[
"pos"].push_back(
tp.parameterX(
i));
 
  324       data[
"pos"].push_back(
tp.parameterY(
i));
 
  325       data[
"pos"].push_back(
tp.parameterZ(
i));
 
  328     std::vector<Amg::Vector3D> positions;
 
  330     positions.push_back(
Amg::Vector3D(peri.position().x(), peri.position().y(),
 
  331                                       peri.position().z()));
 
  348           positions.push_back(
pos);
 
  355       for (
auto pos : positions) {
 
  356         data[
"pos"].push_back(
pos.x());
 
  357         data[
"pos"].push_back(
pos.y());
 
  358         data[
"pos"].push_back(
pos.z());
 
  363           "Failure in extrapolation for Track with start parameters " 
  392       track.trackParameters();
 
  395       data[
"pos"].push_back(param->position().x());
 
  396       data[
"pos"].push_back(param->position().y());
 
  397       data[
"pos"].push_back(param->position().z());
 
  401         track.measurementsOnTrack();
 
  404         data[
"pos"].push_back(meas->globalPosition().x());
 
  405         data[
"pos"].push_back(meas->globalPosition().y());
 
  406         data[
"pos"].push_back(meas->globalPosition().z());
 
  421   std::vector<std::string> 
quality = {
"Tight", 
"Medium", 
"Loose", 
"VeryLoose"};
 
  423   std::vector<std::string> 
type = {
"Combined", 
"Standalone", 
"SegmentTagged",
 
  424                                    "CaloTagged", 
"SiAssociatedForward"};
 
  425   data[
"Type"] = 
type[
static_cast<unsigned int>(
muon.muonType())];
 
  429   addLink(
muon.muonSpectrometerTrackParticleLink(), 
data[
"LinkedTracks"]);
 
  430   addLink(
muon.extrapolatedMuonSpectrometerTrackParticleLink(),
 
  431           data[
"LinkedTracks"]);
 
  442   data[
"energy"] = tauJet.
e();
 
  471 template <
class TYPE>
 
  473   if (link.isValid()) {
 
  482     return StatusCode::FAILURE;
 
  485   return StatusCode::SUCCESS;
 
  488 template <
class TYPE>
 
  491     const std::string &jsonType) {
 
  493     return StatusCode::SUCCESS;
 
  500                                << 
" collections: ");
 
  503   if (!
tmp.is_null()) {
 
  505                                << 
tmp.size() << 
" elements:");
 
  506     event[jsonType][handle.
key()] = 
tmp;
 
  508   return StatusCode::SUCCESS;
 
  512 template <
class TYPE>
 
  516   for (
const auto &coll : container) {
 
  517     for (
const auto &prd : *coll) {
 
  519       data[
"pos"] = {prd->globalPosition().x(), prd->globalPosition().y(),
 
  520                      prd->globalPosition().z()};
 
  522       data[
"id"] = 
id.get_compact();
 
  523       colldata.push_back(
data);
 
  
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual StatusCode initialize() override
inherited from Algorithm
char data[hepevt_bytes_allocation_ATLAS]
Scalar phi() const
phi method
uint64_t eventNumber() const
The current event's event number.
virtual double eta() const
The pseudorapidity ( ) of the particle.
ToolHandle< Trk::IExtrapolationEngine > m_extrapolator
Scalar eta() const
pseudorapidity method
const Amg::Vector3D & position() const
Access method for the position.
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
SG::ReadHandleKey< ActsTrk::GeometryContext > m_geometryContextKey
SG::ReadHandleKey< Muon::sTgcPrepDataContainer > m_stgcPrepRawDataKey
Scalar theta() const
theta method
SG::ReadHandleKeyArray< TrackCollection > m_trackCollectionKeys
SG::ReadHandleKey< InDet::PixelClusterContainer > m_pixelPrepRawDataKey
StatusCode getAndFillArrayOfContainers(nlohmann::json &event, const SG::ReadHandleKeyArray< TYPE > &keys, const std::string &jsonType)
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_rpcPrepRawDataKey
SG::ReadHandleKey< InDet::TRT_DriftCircleContainer > m_trtPrepRawDataKey
#define ATH_MSG_VERBOSE(x)
Property holding a SG store/key/clid from which a ReadHandle is made.
std::string to_string(const SectorProjector proj)
bool empty() const
Test if the key is blank.
void prependTestEvent()
Dumps a dummy event with some objects at specific eta/phi coordinates for calibration.
virtual double e() const
The total energy of the particle.
virtual StatusCode finalize() override
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
constexpr int nPhi
Default bin number of phi for vertex map.
uint32_t runNumber() const
The current event's run number.
SG::ReadHandleKeyArray< ActsTrk::TrackContainer > m_trackContainerKeys
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_tgcPrepRawDataKey
virtual double phi() const
The azimuthal angle ( ) of the particle.
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_mmPrepRawDataKey
SG::ReadHandleKeyArray< xAOD::TauJetContainer > m_tauJetKeys
Description of a calorimeter cluster.
Gaudi::Property< bool > m_dumpTestEvent
POOL::TEvent event(POOL::TEvent::kClassAccess)
virtual double eta() const
The pseudorapidity ( ) of the particle.
SG::ReadHandleKeyArray< xAOD::JetContainer > m_jetKeys
::StatusCode StatusCode
StatusCode definition for legacy code.
Class describing a tau jet.
Gaudi::Property< std::string > m_outputJSON_Name
SG::ReadHandleKey< InDet::SCT_ClusterContainer > m_sctPrepRawDataKey
Class to represent and store fit qualities from track reconstruction in terms of  and number of degre...
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_mdtPrepRawDataKey
nlohmann::json m_eventData
virtual bool isValid() override final
Can the handle be successfully dereferenced?
#define TYPE(CODE, TYP, IOTYP)
StatusCode getAndFillContainer(nlohmann::json &event, const SG::ReadHandleKey< TYPE > &key, const std::string &jsonType)
virtual StatusCode execute() override
nlohmann::json getActsData(const typename ActsTrk::TrackContainer::ConstTrackProxy &track, const Acts::GeometryContext &gctx)
void addLink(const TYPE &link, nlohmann::json &data)
SG::ReadHandleKeyArray< xAOD::CaloClusterContainer > m_caloClustersKeys
nlohmann::json getData(const TYPE &object)
SG::ReadHandleKey< Muon::CscPrepDataContainer > m_cscPrepRawDataKey
Gaudi::Property< bool > m_physlite
DumpEventDataToJsonAlg(const std::string &name, ISvcLocator *pService)
Algorithm constructor.
Eigen::Matrix< double, 3, 1 > Vector3D
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
SG::ReadHandleKeyArray< xAOD::ElectronContainer > m_electronKeys
SG::ReadHandleKeyArray< xAOD::PhotonContainer > m_photonKeys
Data object for each calorimeter readout cell.
#define ATH_MSG_WARNING(x)
void setRThetaPhi(Amg::Vector3D &v, double r, double theta, double phi)
sets radius, the theta and phi angle of a vector.
SG::ReadHandleKeyArray< CaloCellContainer > m_caloCellKey
Class describing a TrackParticle.
constexpr int nEta
Default bin number of eta for vertex map.
virtual double e() const
The total energy of the particle.
SG::ReadHandleKeyArray< xAOD::TrackParticleContainer > m_trackParticleKeys
SG::ReadHandleKeyArray< xAOD::MuonContainer > m_muonKeys