diff --git a/Simulation/TruthJiveXML/TruthJiveXML/TruthMuonTrackRetriever.h b/Simulation/TruthJiveXML/TruthJiveXML/TruthMuonTrackRetriever.h new file mode 100755 index 0000000000000000000000000000000000000000..d26c42c70af1e121402eb46435a95fbff284db6f --- /dev/null +++ b/Simulation/TruthJiveXML/TruthJiveXML/TruthMuonTrackRetriever.h @@ -0,0 +1,65 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef JIVEXML_TRUTHMUONTRACKRETRIEVER_H +#define JIVEXML_TRUTHMUONTRACKRETRIEVER_H + +#include <string> + +#include "JiveXML/IDataRetriever.h" +#include "AthenaBaseComps/AthAlgTool.h" +#include "GaudiKernel/ToolHandle.h" + +namespace HepPDT{ + class ParticleDataTable; +} + + +namespace JiveXML{ + + /** + * @class TruthMuonTrackRetriever + * @brief Retrieves the muons information from the @c TrackRecordCollection + * + * - @b Properties + * - <em>TrackRecCollNames</em><tt> = ["MuonEntryLayer","MuonEntryRecord"]</tt> : @copydoc TrackRecCollNames + * + * - @b Retrieved @b Data + * - <em>code</em> : the PDG ID of the particle + * - <em>id</em> : the particle barcode + * - <em>pt</em> : transverse momentum + * - <em>eta, phi</em> : @f$\eta@f$ and @f$\phi@f$ of the momentum vector + * - <em>rhoVertex,phiVertex,zVertex</em> : position of the production vertex in @f$\rho@f$, @f$\phi@f$ and @f$z@f$ + * . + * + */ + + class TruthMuonTrackRetriever : virtual public IDataRetriever, public AthAlgTool { + + public: + + /// Standard Constructor + TruthMuonTrackRetriever(const std::string& type ,const std::string& name,const IInterface* parent); + + /// Retrieve all the data + virtual StatusCode retrieve(ToolHandle<IFormatTool> FormatTool); + + /// Return the name of the data type + virtual std::string dataTypeName() const { return typeName; }; + + ///Default AthAlgTool methods + StatusCode initialize(); + + private: + ///The data type that is generated by this retriever + const std::string typeName; + + /// A list of StoreGate names to probe in this order for the muon record collecton. + std::vector<std::string> TrackRecCollNames; + + }; + +} +#endif + diff --git a/Simulation/TruthJiveXML/TruthJiveXML/TruthTrackRetriever.h b/Simulation/TruthJiveXML/TruthJiveXML/TruthTrackRetriever.h new file mode 100755 index 0000000000000000000000000000000000000000..a96237c05fe94fcb8189fcb2c18ffe23d11a40ff --- /dev/null +++ b/Simulation/TruthJiveXML/TruthJiveXML/TruthTrackRetriever.h @@ -0,0 +1,70 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef JIVEXML_TRUTHTRACKRETRIEVER_H +#define JIVEXML_TRUTHTRACKRETRIEVER_H + +#include "JiveXML/IDataRetriever.h" +#include "GaudiKernel/IPartPropSvc.h" + +#include "AthenaBaseComps/AthAlgTool.h" + +#include "GaudiKernel/ToolHandle.h" +#include "GaudiKernel/ServiceHandle.h" + +//Forward declarations +namespace Trk{ class IExtrapolator; } +namespace HepPDT{ class ParticleDataTable; } + +namespace JiveXML{ + + /** + * @class TruthTrackRetriever + * @brief Retrieves the @c McEventCollection or the @c TrackRecordCollection in simulated cosmics + * + * - @b Properties + * - <em> StoreGateKey </em><tt> = TruthEvent </tt>: @copydoc m_McEvtCollName + * - <em> UnstableMinPtCut </em><tt> = 100*MeV </tt> @copydoc m_MinPtCut + * - <em> UnstableMinRhoCut </em><tt> = 40*mm </tt> @copydoc m_MinRhoCut + * + * - @b Retrieved @b Data + * - <em>code</em> : the PDG ID of the particle + * - <em>id</em> : the particle barcode + * - <em>pt</em> : transverse momentum + * - <em>eta, phi</em> : @f$\eta@f$ and @f$\phi@f$ of the momentum vector + * - <em>rhoVertex,phiVertex,zVertex</em> : position of the production vertex in @f$\rho@f$, @f$\phi@f$ and @f$z@f$ + * - <em>rhoEndVertex,phiEndVertex,zEndVertex</em> : position of the end-vertex in @f$\rho@f$, @f$\phi@f$ and @f$z@f$ + * . + */ + + class TruthTrackRetriever : virtual public IDataRetriever, public AthAlgTool { + + public: + + /// Standard Constructor + TruthTrackRetriever(const std::string& type, const std::string& name, const IInterface* parent); + + /// Retrieve all the data + virtual StatusCode retrieve(ToolHandle<IFormatTool> FormatTool); + + /// Return the name of the data type + virtual std::string dataTypeName() const { return typeName; }; + + ///Default AthAlgTool methods + StatusCode initialize(); + + private: + ///The data type that is generated by this retriever + const std::string typeName; + + /// Storegate key for the McEventCollection (different between RDO/ESD and AOD) + std::string m_McEvtCollName; + /// Minimum pT for a particle to get accepted + double m_MinPtCut; + /// Minium radius of the end-vertex for the particle to get accepted + double m_MinRhoCut; + }; + +} +#endif diff --git a/Simulation/TruthJiveXML/cmt/requirements b/Simulation/TruthJiveXML/cmt/requirements new file mode 100755 index 0000000000000000000000000000000000000000..664163158d831c3f6963a82cbada10ae8ac74ef8 --- /dev/null +++ b/Simulation/TruthJiveXML/cmt/requirements @@ -0,0 +1,29 @@ +package TruthJiveXML + +public + +use AtlasPolicy AtlasPolicy-* +use AthenaBaseComps AthenaBaseComps-* Control + +use JiveXML JiveXML-* graphics +use GaudiInterface GaudiInterface-* External + +private + +use HepPDT v* LCG_Interfaces + +use StoreGate StoreGate-* Control +use AtlasHepMC AtlasHepMC-* External +use AtlasCLHEP AtlasCLHEP-* External +use GeneratorObjects GeneratorObjects-* Generators + +use TrackRecord TrackRecord-* Simulation/G4Sim +use EventPrimitives EventPrimitives-* Event + +public + +apply_pattern declare_joboptions files="*.py" +apply_pattern component_library +library TruthJiveXML *.cxx components/*.cxx + + diff --git a/Simulation/TruthJiveXML/doc/mainpage.h b/Simulation/TruthJiveXML/doc/mainpage.h new file mode 100755 index 0000000000000000000000000000000000000000..e76c6a6eafa01511055eee58e5bb6563a0c60fca --- /dev/null +++ b/Simulation/TruthJiveXML/doc/mainpage.h @@ -0,0 +1,37 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/** + +@mainpage TruthJiveXML +@author Nikos.Konstantinidis -at- cern.ch, Juergen.Thomas -at- cern.ch, Sebastian.Boeser -at- cern.ch + +@section TruthJiveXMLIntro Introduction + +This package contains the @c AthAlgTools that retrieve truth information ( @c McEventCollection and @c TrackRecordCollection ) from @c StoreGate and +forward them to the formatting tool. Each tool implements the IDataRetriever interface, through which it is called from the @c AlgoJiveXML. + +@section TruthJiveXMLTools Retrievers + +- JiveXML::TruthTrackRetriever @copydoc JiveXML::TruthTrackRetriever + +- JiveXML::TruthMuonTrackRetriever @copydoc JiveXML::TruthMuonTrackRetriever + +- JiveXML::TruthCosmicsTrackRetriever @copydoc JiveXML::TruthCosmicsTrackRetriever + +@section TruthJiveXMLEnv Environment + - @ref used_TruthJiveXML + - @ref requirements_TruthJiveXML + +*/ + +/** +@page used_TruthJiveXML Used Packages +@htmlinclude used_packages.html +*/ + +/** +@page requirements_TruthJiveXML Requirements +@include requirements +*/ diff --git a/Simulation/TruthJiveXML/share/TruthJiveXML_DataTypes.py b/Simulation/TruthJiveXML/share/TruthJiveXML_DataTypes.py new file mode 100644 index 0000000000000000000000000000000000000000..72a3742abda9f9618643cdd78888f26418784e8f --- /dev/null +++ b/Simulation/TruthJiveXML/share/TruthJiveXML_DataTypes.py @@ -0,0 +1,22 @@ +#Avoid multiple includes +include.block("TruthJiveXML/TruthJiveXML_DataTypes.py") + +if not "AtlasExtrapolator" in dir(): + from TrkExTools.AtlasExtrapolator import AtlasExtrapolator + AtlasExtrapolator = AtlasExtrapolator('AtlasExtrapolator') + ToolSvc+=AtlasExtrapolator + +# Include the base options if the user didn't already do that +if not "theEventData2XML" in dir(): + include ("JiveXML/JiveXML_jobOptionBase.py") + +if not "JiveXML::TruthTrackRetriever/TruthTrackRetriever" in theEventData2XML.DataTypes: + theEventData2XML.DataTypes += ["JiveXML::TruthTrackRetriever/TruthTrackRetriever"] + +theEventData2XML.DataTypes += ["JiveXML::TruthMuonTrackRetriever/TruthMuonTrackRetriever"] + +# Configuration of the data retrievers can be done as follows: +from TruthJiveXML.TruthJiveXMLConf import JiveXML__TruthTrackRetriever +theTruthTrackRetriever = JiveXML__TruthTrackRetriever (name = "TruthTrackRetriever") +#theTruthTrackRetriever.StoreGateKey = "TruthEvent" +ToolSvc += theTruthTrackRetriever diff --git a/Simulation/TruthJiveXML/src/TruthMuonTrackRetriever.cxx b/Simulation/TruthJiveXML/src/TruthMuonTrackRetriever.cxx new file mode 100755 index 0000000000000000000000000000000000000000..30ccff33420afc816480dcf8c5fe0443f29fcf70 --- /dev/null +++ b/Simulation/TruthJiveXML/src/TruthMuonTrackRetriever.cxx @@ -0,0 +1,142 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "TruthJiveXML/TruthMuonTrackRetriever.h" + +//#include "GaudiKernel/Bootstrap.h" +//#include "GaudiKernel/ISvcLocator.h" +#include "GaudiKernel/IPartPropSvc.h" +#include "StoreGate/StoreGateSvc.h" + +#include "HepMC/GenParticle.h" +#include "TrackRecord/TrackRecord.h" +#include "TrackRecord/TrackRecordCollection.h" +#include "HepPDT/ParticleData.hh" +#include "HepPDT/ParticleDataTable.hh" +#include "CLHEP/Geometry/Point3D.h" +#include "CLHEP/Geometry/Vector3D.h" +#include "CLHEP/Units/SystemOfUnits.h" + + +namespace JiveXML { + + /** + * This is the standard AthAlgTool constructor + * @param type AlgTool type name + * @param name AlgTool instance name + * @param parent AlgTools parent owning this tool + **/ + TruthMuonTrackRetriever::TruthMuonTrackRetriever(const std::string& type ,const std::string& name,const IInterface* parent): + AthAlgTool(type, name, parent), + typeName("SMTr") { + + //Declare the interface + declareInterface<IDataRetriever>(this); + + //Fill the list with the names of track record collections to try + TrackRecCollNames.push_back("MuonEntryLayer"); + TrackRecCollNames.push_back("MuonEntryRecord"); + + //Declare the properties + declareProperty("TrackRecCollNames",TrackRecCollNames,"List of track records collections to try in this order - only one is retrieved"); + + } + + + /** + * Initialize before event loop + */ + StatusCode TruthMuonTrackRetriever::initialize(){ + + //Nothing to be done here + return StatusCode::SUCCESS; + } + + /** + * Loop over all true particles, find the muons and get their basic parameters + * @param FormatTool the tool that will create formated output from the DataMap + */ + StatusCode TruthMuonTrackRetriever::retrieve(ToolHandle<IFormatTool> FormatTool) { + + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Retrieving " << dataTypeName() << endreq; + + //Try to retrieve the track record collection + const TrackRecordCollection* TrackRecordColl = NULL ; + //Loop over all the collections and try a retrieve (more efficenct than + //contain-retrieve combination) + std::vector<std::string>::const_iterator CollNameItr = TrackRecCollNames.begin(); + for ( ; CollNameItr != TrackRecCollNames.end(); ++CollNameItr) { + //be verbose + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve " << (*CollNameItr) << endreq; + //try to retrive + if ( !evtStore()->contains<TrackRecordCollection>( (*CollNameItr) )){ continue; } // skip if not in SG + if (evtStore()->retrieve(TrackRecordColl, (*CollNameItr)).isSuccess()) break ; + } + + //If we didnt' get any, return + if (TrackRecordColl == NULL ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Unable to retrieve any track collection from " << TrackRecCollNames << endreq; + return StatusCode::RECOVERABLE; + } + + //Reserve space for the output + DataVect pt; pt.reserve(TrackRecordColl->size()); + DataVect phi; phi.reserve(TrackRecordColl->size()); + DataVect eta; eta.reserve(TrackRecordColl->size()); + DataVect rhoVertex; rhoVertex.reserve(TrackRecordColl->size()); + DataVect phiVertex; phiVertex.reserve(TrackRecordColl->size()); + DataVect zVertex; zVertex.reserve(TrackRecordColl->size()); + DataVect code; code.reserve(TrackRecordColl->size()); + DataVect id; id.reserve(TrackRecordColl->size()); + + //Now loop over the collection and retrieve data + TrackRecordCollection::const_iterator record; + for (record=TrackRecordColl->begin(); record!=TrackRecordColl->end(); record++) { + + //Get the pdg code + int pdgCode = (*record)->GetPDGCode(); + + //Only accept muons + if (abs(pdgCode) != 13) { + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Reject non-muon track with PDG ID " << pdgCode << endreq; + continue; + } + + //Get vertex and momentum + HepGeom::Point3D<double> vertex = (*record)->GetPosition(); + HepGeom::Vector3D<double> momentum = (*record)->GetMomentum(); + + //And store output + pt.push_back(DataType( momentum.perp()/CLHEP::GeV )); + phi.push_back(DataType( momentum.phi() < 0 ? momentum.phi() + 2*M_PI : momentum.phi() )); + eta.push_back(DataType( momentum.pseudoRapidity() )); + rhoVertex.push_back(DataType( vertex.perp()*CLHEP::mm/CLHEP::cm )); + phiVertex.push_back(DataType( vertex.phi() < 0 ? vertex.phi() + 2*M_PI : vertex.phi() )); + zVertex.push_back(DataType( vertex.z()*CLHEP::mm/CLHEP::cm )); + code.push_back(DataType( pdgCode )); + id.push_back(DataType( (*record)->GetBarCode() )); + } + + //Finall add everything to the datamap + DataMap dataMap; + dataMap["pt"] = pt; + dataMap["phi"] = phi; + dataMap["eta"] = eta; + dataMap["rhoVertex"] = rhoVertex; + dataMap["phiVertex"] = phiVertex; + dataMap["zVertex"] = zVertex; + dataMap["code"] = code; + dataMap["id"] = id; + + //some summary + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << ": "<< pt.size() << endreq; + + //forward data to formating tool + //return FormatTool->AddToEvent(dataTypeName(), (*CollNameItr), &dataMap); + //// Atlantis can't deal with sgkey in xml output in SMTr (freezes) + //// So no sgkey printed for now. jpt 20Aug09 + std::string emptyStr=""; + return FormatTool->AddToEvent(dataTypeName(), emptyStr, &dataMap); + } +} diff --git a/Simulation/TruthJiveXML/src/TruthTrackRetriever.cxx b/Simulation/TruthJiveXML/src/TruthTrackRetriever.cxx new file mode 100755 index 0000000000000000000000000000000000000000..05df5b8232fa59de6c03e8130ed266545268deee --- /dev/null +++ b/Simulation/TruthJiveXML/src/TruthTrackRetriever.cxx @@ -0,0 +1,162 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "TruthJiveXML/TruthTrackRetriever.h" + +#include "HepPDT/ParticleData.hh" +#include "HepPDT/ParticleDataTable.hh" +#include "GaudiKernel/SystemOfUnits.h" +#include "EventPrimitives/EventPrimitives.h" + +#include "GeneratorObjects/McEventCollection.h" +#include "TrackRecord/TrackRecord.h" +#include "TrackRecord/TrackRecordCollection.h" + +namespace JiveXML { + + + /** + * This is the standard AthAlgTool constructor + * @param type AlgTool type name + * @param name AlgTool instance name + * @param parent AlgTools parent owning this tool + **/ + TruthTrackRetriever::TruthTrackRetriever(const std::string& type,const std::string& name,const IInterface* parent): + AthAlgTool(type,name,parent), + typeName("STr") + { + + declareInterface<IDataRetriever>(this); + + declareProperty("StoreGateKey", m_McEvtCollName = "TruthEvent", "Name of the McEventCollection"); + declareProperty("UnstableMinPtCut", m_MinPtCut = 100*Gaudi::Units::MeV, "Minimum pT for an unstable particle to get accepted"); + declareProperty("UnstableMinRhoCut", m_MinRhoCut = 40*Gaudi::Units::mm, "Minium radius of the end-vertex for unstable particle to get accepted"); + + } + + /** + * Initialize before event loop + */ + StatusCode TruthTrackRetriever::initialize(){ + //Nothing to do here + return StatusCode::SUCCESS; + } + + /** + * Loop over all true particles and get their basic parameters + * @param FormatTool the tool that will create formated output from the DataMap + */ + StatusCode TruthTrackRetriever::retrieve(ToolHandle<IFormatTool> FormatTool) { + + //be verbose + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Retrieving " << dataTypeName() << endreq; + + //Retrieve the collection + const McEventCollection* McEvtColl = NULL; + if ( !evtStore()->contains<McEventCollection>( m_McEvtCollName )){ + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Could not find McEventCollection " << m_McEvtCollName << endreq; + return StatusCode::SUCCESS; + } + if( evtStore()->retrieve(McEvtColl, m_McEvtCollName).isFailure() ){ + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Could not retrieve McEventCollection " << m_McEvtCollName << endreq; + return StatusCode::SUCCESS; + } + + // Calculate the size + long NParticles=0; + McEventCollection::const_iterator McEvtCollItr = McEvtColl->begin(); + for ( ; McEvtCollItr != McEvtColl->end(); ++McEvtCollItr) + NParticles += (*McEvtCollItr)->particles_size(); + + //Show in verbose mode + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Total number of particles in McEventCollection \"" + << m_McEvtCollName << "\" is " << NParticles << endreq; + + //Reserve space for the output data + DataVect pt; pt.reserve(NParticles); + DataVect phi; phi.reserve(NParticles); + DataVect eta; eta.reserve(NParticles); + DataVect rhoVertex; rhoVertex.reserve(NParticles); + DataVect phiVertex; phiVertex.reserve(NParticles); + DataVect zVertex; zVertex.reserve(NParticles); + DataVect code; code.reserve(NParticles); + DataVect id; id.reserve(NParticles); + DataVect rhoEndVertex; rhoEndVertex.reserve(NParticles); + DataVect phiEndVertex; phiEndVertex.reserve(NParticles); + DataVect zEndVertex; zEndVertex.reserve(NParticles); + + + //Now loop events and retrieve + for ( McEvtCollItr = McEvtColl->begin(); McEvtCollItr != McEvtColl->end(); ++McEvtCollItr){ + + //Loop over particles in the event + HepMC::GenEvent::particle_const_iterator ParticleItr = (*McEvtCollItr)->particles_begin(); + for ( ; ParticleItr!=(*McEvtCollItr)->particles_end(); ++ParticleItr ) { + + //Get the particle + HepMC::GenParticle* particle = (*ParticleItr); + + //Additional cuts for decaying particles + if ( particle->end_vertex() ) { + //Reject particles that fail the pt cut + if ( particle->momentum().perp() < m_MinPtCut) continue ; + //Reject particles that fail the minimum end-vertex cut + if (particle->end_vertex()->point3d().perp() < m_MinRhoCut ) continue ; + } + + //Get basic parameters (eta, phi, pt, ...) + pt.push_back(DataType(particle->momentum().perp()/Gaudi::Units::GeV)); + float thePhi = particle->momentum().phi(); + phi.push_back(DataType( (thePhi<0) ? thePhi+=2*M_PI : thePhi )); + eta.push_back(DataType( particle->momentum().pseudoRapidity() )); + code.push_back(DataType( particle->pdg_id() )); + id.push_back(DataType( particle->barcode() )); + + // Get the vertex information + HepMC::GenVertex* vertex = particle->production_vertex(); + if (vertex) { + rhoVertex.push_back(DataType( vertex->point3d().r()*Gaudi::Units::mm/Gaudi::Units::cm )); + float vtxPhi = vertex->point3d().phi(); + phiVertex.push_back(DataType( (vtxPhi<0)? vtxPhi+=2*M_PI : vtxPhi )); + zVertex.push_back(DataType( vertex->point3d().z()*Gaudi::Units::mm/Gaudi::Units::cm )); + } else { + rhoVertex.push_back(DataType( 0. )); + phiVertex.push_back(DataType( 0. )); + zVertex.push_back(DataType( 0. )); + } + //Do the same for the end vertex + vertex = particle->end_vertex(); + if ( vertex ) { + rhoEndVertex.push_back(DataType(vertex->point3d().r()*Gaudi::Units::mm/Gaudi::Units::cm)); + float vtxPhi = vertex->point3d().phi(); + phiEndVertex.push_back(DataType( (vtxPhi<0)? vtxPhi+=2*M_PI : vtxPhi )); + zEndVertex.push_back(DataType(vertex->point3d().z()*Gaudi::Units::mm/Gaudi::Units::cm)); + } else { + rhoEndVertex.push_back(DataType( 0. )); + phiEndVertex.push_back(DataType( 0. )); + zEndVertex.push_back(DataType( 0. )); + } + } + } + + DataMap myDataMap; + myDataMap["pt"] = pt; + myDataMap["phi"] = phi; + myDataMap["eta"] = eta; + myDataMap["code"] = code; + myDataMap["id"] = id; + myDataMap["rhoVertex"] = rhoVertex; + myDataMap["phiVertex"] = phiVertex; + myDataMap["zVertex"] = zVertex; + myDataMap["rhoEndVertex"] = rhoEndVertex; + myDataMap["phiEndVertex"] = phiEndVertex; + myDataMap["zEndVertex"] = zEndVertex; + + //Be verbose + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << ": "<< pt.size() << endreq; + + //forward data to formating tool + return FormatTool->AddToEvent(dataTypeName(), m_McEvtCollName, &myDataMap); + } +} diff --git a/Simulation/TruthJiveXML/src/components/TruthJiveXML_entries.cxx b/Simulation/TruthJiveXML/src/components/TruthJiveXML_entries.cxx new file mode 100755 index 0000000000000000000000000000000000000000..c877be3092614693c1cefc97deabbe0058dcfb3f --- /dev/null +++ b/Simulation/TruthJiveXML/src/components/TruthJiveXML_entries.cxx @@ -0,0 +1,13 @@ +#include "TruthJiveXML/TruthTrackRetriever.h" +#include "TruthJiveXML/TruthMuonTrackRetriever.h" +#include "GaudiKernel/DeclareFactoryEntries.h" + +using namespace JiveXML; + +DECLARE_TOOL_FACTORY(TruthTrackRetriever) +DECLARE_TOOL_FACTORY(TruthMuonTrackRetriever) + +DECLARE_FACTORY_ENTRIES(TruthJiveXML) { + DECLARE_ALGTOOL(TruthTrackRetriever) + DECLARE_ALGTOOL(TruthMuonTrackRetriever) +} diff --git a/Simulation/TruthJiveXML/src/components/TruthJiveXML_load.cxx b/Simulation/TruthJiveXML/src/components/TruthJiveXML_load.cxx new file mode 100755 index 0000000000000000000000000000000000000000..855cb65e9071a628d7f3d6b58a1f52a8f1406b6b --- /dev/null +++ b/Simulation/TruthJiveXML/src/components/TruthJiveXML_load.cxx @@ -0,0 +1,3 @@ +#include "GaudiKernel/LoadFactoryEntries.h" + +LOAD_FACTORY_ENTRIES(TruthJiveXML)