diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorAlg.h b/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorAlg.h index 3d5dab4c2aa9f84c64436053f5190f2132f2892e..ed6e8764df360ba0b2ca3440f3115adfa730d717 100644 --- a/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorAlg.h +++ b/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorAlg.h @@ -56,8 +56,8 @@ namespace Rec { SG::ReadDecorHandleKey<xAOD::JetContainer> m_jetReadKey{this, "jetDecoReadKey", "", "Jet GNN Deco Read Key"}; /// Gaudi Props - Gaudi::Property<std::string> m_deco_suffix{this, "suffix", "", "Suffix to add after the decoration"}; - Gaudi::Property<std::string> m_jetContainerName{this, "JetContainerName", "AntiKt4EMPFlowJets", "Jet Container Name"}; + //Gaudi::Property<std::string> m_deco_suffix{this, "suffix", "", "Suffix to add after the decoration"}; + //Gaudi::Property<std::string> m_jetContainerName{this, "JetContainerName", "AntiKt4EMPFlowJets", "Jet Container Name"}; //GNN Properties GNNProperties m_props; diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorTool.h b/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorTool.h index 15b210d0fd258097d6672e9f14643b7894a9fc47..19b744133b0a3eb466aa02d640061c2b909d1d11 100644 --- a/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorTool.h +++ b/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/GNNVertexConstructorTool.h @@ -87,21 +87,9 @@ namespace Rec { StatusCode initKey(const std::string&, SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> &decokey) const; - unsigned int addTwoNumbers( const unsigned int & NoOne, const unsigned int & NoTwo) const final; //can be removed later - virtual StatusCode decorateTracks( const xAOD::TrackParticleContainer* trkCont, const EventContext& ctx ) const; //can be removed later - virtual StatusCode readDecorTracks( const xAOD::TrackParticleContainer* trkCont, const EventContext& ctx ) const; //can be removed later - - virtual StatusCode readDecorJet( const xAOD::JetContainer* jetCont, const EventContext& ctx ) const; - - - //virtual StatusCode vrtFitter( std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > > > & vrt ) const; - virtual StatusCode GNNDecoJet( const xAOD::JetContainer* jetCont, const EventContext& ctx ) const; - - - //Read and Write Decor Handles SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> m_decorTrackKey{ this, "TrackDecorKey", ".passGNN", "if track passes some GNN criteria"}; SG::ReadDecorHandleKey<xAOD::TrackParticleContainer> m_decorReadKey{ this, "TrackReadKey", "", "read tracks that pass GNN criteria"}; @@ -192,20 +180,43 @@ namespace Rec { //Making Histograms - TH1F* m_vertex_pos{}; -/* struct DevTuple; + //TH1F* m_vertex_pos{}; + double m_w_1{}; + struct DevTuple; struct Hists{ StatusCode book (ITHistSvc& histSvc, const std::string& histDir); TTree* m_tuple{}; DevTuple* m_curTup; - TH2F* m_vertex_chi{}; + TH1F* m_vertex_chi2{}; TH1F* m_vertex_mass{}; TH1F* m_vertex_pT{}; + TH1F* m_vertex_d0{}; + TH1F* m_vertex_r{}; + TH1F* m_vertex_chiTrk{}; + TH1F* m_vertex_charge{}; }; - std::unique_ptr<Hists> m_h; - -*/ + + std::unique_ptr<Hists> m_h; + + + + std::string m_calibFileName; + + Hists& getHists() const; + +struct DevTuple + { + static constexpr int maxNTrk=100; + static constexpr int maxNVrt=100; + float chi2; + float mass; + float pT; + float d0; + float r; + float chiTrk; + float charge; + }; }; } diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/IGNNVertexConstructorInterface.h b/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/IGNNVertexConstructorInterface.h index 856f38abe323c529ed7b4610cd3f17102d38c1b9..ed068bd54b79c3fbc8caf13c476ff8f9a2b217c2 100644 --- a/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/IGNNVertexConstructorInterface.h +++ b/Reconstruction/VKalVrt/GNNVertexConstructor/GNNVertexConstructor/IGNNVertexConstructorInterface.h @@ -24,12 +24,8 @@ namespace Rec { */ - virtual unsigned int addTwoNumbers( const unsigned int & NoOne, const unsigned int & NoTwo) const =0; - virtual StatusCode decorateTracks( const xAOD::TrackParticleContainer* trkCont, const EventContext& ctx ) const = 0; - virtual StatusCode readDecorTracks( const xAOD::TrackParticleContainer* trkCont, const EventContext& ctx ) const = 0; virtual StatusCode readDecorJet( const xAOD::JetContainer* jetCont, const EventContext& ctx ) const = 0; virtual StatusCode GNNDecoJet( const xAOD::JetContainer* jetCont, const EventContext& ctx ) const = 0; - //virtual StatusCode vrtFitter( std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > > > & vrt ) const = 0; }; diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVC_dev_job_options.py b/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVC_dev_job_options.py index 27b459c0b6157cec90ba20cc1aa8b3d98a3facb2..cee90fdec6364c111d45e7d6efb3d0390b7abb5b 100644 --- a/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVC_dev_job_options.py +++ b/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVC_dev_job_options.py @@ -15,7 +15,8 @@ inputDir = "/tank/awharton/ForLME/Data/mc21_13p6TeV.601237.PhPy8EG_A14_ttbar_hda #inputDir = "/home/atlas/lukem/QT-SecVtxTool/data/data22_13p6TeV.00427884.physics_Main.deriv.DAOD_PHYS.r13928_p5279_p5514/" #inputDir = "/home/atlas/lukem/QT-SecVtxTool/data/data22_13p6TeV.00427882.physics_Main.deriv.DAOD_PHYS.r13928_p5279_p5514/" #inputDir = "/cvmfs/atlas.cern.ch/repo/tutorials/asg/cern-jun2022/mc21_13p6TeV.601229.PhPy8EG_A14_ttbar_hdamp258p75_SingleLep.deriv.DAOD_PHYS.e8357_s3802_r13508_p5057" -maxEvents = 4 +maxEvents = 6 + ##--- @@ -76,34 +77,51 @@ def main(): ##--- from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper - TRUTH0SlimmingHelper = SlimmingHelper("TRUTH0SlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, ConfigFlags = flags) - TRUTH0SlimmingHelper.AppendToDictionary = {'EventInfo':'xAOD::EventInfo','EventInfoAux':'xAOD:EventAuxInfo', + from AthenaConfiguration.Enums import MetadataCategory + from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg + + + GNNSlimmingHelper = SlimmingHelper("GNNSlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, ConfigFlags = flags) + + GNNSlimmingHelper.AppendToDictionary = {'EventInfo':'xAOD::EventInfo','EventInfoAux':'xAOD:EventAuxInfo', 'TruthEvents':'xAOD::TruthEventContainer','TruthEventsAux':'xAOD::TruthEventAuxContainer', 'TruthVertices':'xAOD::TruthVertexContainer','TruthVerticesAux':'xAOD::TruthVertexAuxContainer', 'TruthParticles':'xAOD::TruthParticleContainer','TruthParticlesAux':'xAOD::TruthParticleAuxContainer', 'AntiKt4EMPFlowJets':'xAOD::JetContainer', 'AntiKt4EMPFlowJetsAux': 'xAOD::JetAuxContainer', 'BTagging':'xAOD::BTaggingContainer', 'BTaggingAux': 'xAOD::BTaggingAuxContainer', 'TrackParticle':'xAOD::TrackParticleContainer', 'TrackParticleAux': 'xAOD::TrackParticleAuxContainer', - 'VertexContainer':'xAOD::VertexContainer', 'VertexContainerAux':'xAOD::VertexAuxContainer'} + 'GNNVertex':'xAOD::VertexContainer', 'GNNVertexAux':'xAOD::VertexAuxContainer'} - TRUTH0SlimmingHelper.AllVariables = [ 'EventInfo', - 'TruthEvents', - 'TruthVertices', - 'TruthParticles', - 'AntiKt4EMPFlowJets', - 'BTagging', - 'TrackParticle', - 'Vertex'] + GNNSlimmingHelper.AllVariables = [ 'EventInfo', + 'TruthEvents', + 'TruthVertices', + 'TruthParticles', + 'AntiKt4EMPFlowJets', + 'BTagging', + 'TrackParticle', + 'GNNVertex'] # Metadata #TRUTH0MetaDataItems = [ "xAOD::TruthMetaDataContainer#TruthMetaData", "xAOD::TruthMetaDataAuxContainer#TruthMetaDataAux." ] # Create output stream from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - TRUTH0ItemList = TRUTH0SlimmingHelper.GetItemList() - TRUTH0ItemList+=["xAOD::TrackParticleContainer#DecoratedTrackParticles","xAOD::TrackParticleContainer#DecoratedTrackParticlesAux."] - TRUTH0ItemList+=["xAOD::VertexContainer#GNNvertexContainer", "xAOD::VertexContainer#GNNvertexContainerAux"] - acc.merge(OutputStreamCfg(flags, "GNNVertexOutputDecoNew", ItemList=TRUTH0ItemList)) + + #GNNItemList = GNNSlimmingHelper.GetItemList() + + #GNNItemList+=["xAOD::TrackParticleContainer#DecoratedTrackParticles","xAOD::TrackParticleContainer#DecoratedTrackParticlesAux."] + + StaticContent=[] + StaticContent+=["xAOD::VertexContainer#GNNVertex."] + StaticContent+=["xAOD::VertexAuxContainer#GNNVertexAux."] + + GNNSlimmingHelper.StaticContent=StaticContent + + GNNItemList = GNNSlimmingHelper.GetItemList() + + acc.merge(OutputStreamCfg(flags, "GNNVertex", ItemList=GNNItemList)) + #acc.merge(SetupMetaDataForStreamCfg(flags, "GNNVertex", createMetadata=[MetadataCategory.CutFlowMetaData])) + acc.printConfig(withDetails=True, summariseProps=True) @@ -111,6 +129,7 @@ def main(): print (status) + return(acc) ##--- if "__main__" == __name__: diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVertexConstructorToolConfig.py b/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVertexConstructorToolConfig.py index 15fbb21b64a066b090e21eef4dac0cc99210f7cd..a475a8c04db9f572c037c0100ccff462d067b0f9 100644 --- a/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVertexConstructorToolConfig.py +++ b/Reconstruction/VKalVrt/GNNVertexConstructor/python/GNNVertexConstructorToolConfig.py @@ -15,8 +15,8 @@ def GNNVertexConstructorToolCfg(flags, name="LMEdevTool", **kwargs): gnnTool = acc.getPrimaryAndMerge( GNNToolCfg( flags, - NNFile="../network.onnx", - trackLinkType="IPARTICLE", #Either IPARTICLE or TRACK_PARTICLE + NNFile ="../network.onnx", + trackLinkType ="IPARTICLE", #Either IPARTICLE or TRACK_PARTICLE variableRemapping={"BTagTrackToJetAssociator" : "GhostTrack"}, ) ) diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorAlg.cxx b/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorAlg.cxx index 246e6215d0a42a18ce278e0009f79f5cd58fbbfc..10080f31c65df8c188b7b698ed1cb2f4ec9e09a3 100644 --- a/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorAlg.cxx +++ b/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorAlg.cxx @@ -73,6 +73,7 @@ namespace Rec { ATH_CHECK(m_VtxTool->GNNDecoJet(jetsDecoHandle.ptr(), ctx)); + ATH_MSG_DEBUG("Test debug"); ATH_CHECK(m_VtxTool->readDecorJet(jetsDecoHandle.ptr(), ctx)); //ATH_CHECK(m_VtxTool->vrtFitter(inTracks.ptr(), ctx)); diff --git a/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorTool.cxx b/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorTool.cxx index d1e3820e3fc812906334a89e52bcb6a65452cc75..f516fb01e9c7afaf638b50b8b7846970b805dafd 100644 --- a/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorTool.cxx +++ b/Reconstruction/VKalVrt/GNNVertexConstructor/src/GNNVertexConstructorTool.cxx @@ -19,6 +19,8 @@ #include "MVAUtils/BDT.h" #include "VxSecVertex/VxSecVertexInfo.h" #include "boost/graph/bron_kerbosch_all_cliques.hpp" +#include "PathResolver/PathResolver.h" + //#include "alorgithm" @@ -30,12 +32,12 @@ namespace Rec { : AthAlgTool(type,name,parent), m_VrtFit("Trk::TrkVKalVrtFitter/VertexFitterTool",this), m_thePV(nullptr), - m_vertex_pos (nullptr) + m_calibFileName("myGNNDecoOutputNew.pool.root") + //m_vertex_chi2 (nullptr) //, m_fillHist(true) { - declareInterface< IGNNVertexConstructorInterface >(this); declareProperty("ReadKey", m_decorReadKey="InDetTrackParticles.passGNN"); @@ -46,7 +48,8 @@ namespace Rec { declareProperty("GNNTool",m_gnn_Tool, "The GNN Tool"); declareProperty("VertexFitterTool", m_VrtFit, "The vertex fitting tool"); - //declareProperty(" + declareProperty("calibFileName", m_calibFileName, " GNN vertex file" ); + //m_instanceName="Test-Plot"; ATH_MSG_DEBUG("GNNVertexConstructorTool constructor called"); @@ -55,12 +58,10 @@ namespace Rec { /* Destructor */ GNNVertexConstructorTool::~GNNVertexConstructorTool(){ - ATH_MSG_DEBUG("GNNVertexConstructorTool destructor called"); } -//Initialize the decoration key - +//--------Initialize the decoration key StatusCode GNNVertexConstructorTool::initKey(const std::string &containerKey, SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> &decokey) const { @@ -71,7 +72,7 @@ namespace Rec { return StatusCode::SUCCESS; } -//Initialize +//---------Initialize StatusCode GNNVertexConstructorTool::initialize(){ ATH_MSG_DEBUG("GNNVertexConstructor Tool in initialize()"); @@ -93,36 +94,54 @@ namespace Rec { //ATH_CHECK(m_jetContainerKey.initialize()); ATH_CHECK( m_eventInfoKey.initialize()); - -/* ITHistSvc* hist_root=0; + //ATH_CHECK( book (TH1F("Vertex_chi2", "Vertex_chi2", 20, 0, 500))); + + + ITHistSvc* hist_root=0; StatusCode sc = service( "THistSvc", hist_root); + if( sc.isFailure() ) ATH_MSG_DEBUG("Could not find THistSvc service"); + else ATH_MSG_DEBUG("GNNCONST-Tool Histograms found"); std::string histDir; - histDir="GNNVertex/"; + histDir="/myGNNVertex/"; m_h = std::make_unique<Hists>(); ATH_CHECK( m_h->book (*hist_root, histDir) ); + + m_w_1 = 1.; + +/* std::string rootFilePath = PathResolver::find_calib_file("GNNBuild/run/"+m_calibFileName); + TFile* rootFile = TFile::Open(rootFilePath.c_str(), "READ"); + if (!rootFile) { + ATH_MSG_FATAL("Could not retrieve root file: " << m_calibFileName); + return StatusCode::FAILURE; + } + TTree * training = (TTree*)rootFile->Get("BDT"); */ - - - - - + + return StatusCode::SUCCESS; } -/* //Histograms +//------------Histograms StatusCode GNNVertexConstructorTool::Hists::book (ITHistSvc& histSvc, const std::string& histDir) { - m_vertex_pos=new TH2F ("vertex_pos", "vertex_pos", 10, 0., 500, 10, 0., 1000); + m_vertex_chi2=new TH1F("Vertex_chi2", "Vertex_chi2", 20, 0, 500); - ATH_CHECK( histSvc.regHist(histDir+"vertex_pos", m_vertex_pos) ); - }*/ - - - + ATH_CHECK( histSvc.regHist(histDir+"vertex_chi2", m_vertex_chi2) ); + + m_tuple = new TTree("GNNVertices","GNNVertices"); + + ATH_CHECK( histSvc.regTree(histDir, m_tuple) ); + + m_curTup=new DevTuple(); + m_tuple->Branch("Chi2", &m_curTup->chi2, "Chi2/I"); + + + return StatusCode::SUCCESS; + } //Finalize StatusCode GNNVertexConstructorTool::finalize(){ @@ -132,79 +151,30 @@ namespace Rec { return StatusCode::SUCCESS; } -//Will be called in the excute section in the Algorithm cxx file -//Dummy Tool that adds 2 numbers - unsigned int GNNVertexConstructorTool::addTwoNumbers( const unsigned int & NoOne, const unsigned int & NoTwo) const { - unsigned int sum=NoOne+NoTwo; - return sum; - } - - -//Decoration Tool that adds a decoration to the container - StatusCode GNNVertexConstructorTool::decorateTracks( const xAOD::TrackParticleContainer* trkCont, const EventContext& ctx ) const { - - ATH_MSG_DEBUG("GNNVertexConstructor Tool decorating tracks"); - - int sum = trkCont->size(); - ATH_MSG_DEBUG("Size is = " << sum ); - - SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::string> decorTrackKey(m_decorTrackKey, ctx ); - - for ( auto track : *trkCont ){ - - float pt = track->pt()/1000.; - - if(pt > 150){ - - ATH_MSG_DEBUG("Track pt is = " << pt ); - ATH_MSG_DEBUG("Decorator added!!!!"); - decorTrackKey( *track ) = "pass"; - - } - } - - return StatusCode::SUCCESS; - } - - -//Read a decoration tool from a Track Particle Container - StatusCode GNNVertexConstructorTool::readDecorTracks( const xAOD::TrackParticleContainer* trkCont, const EventContext& ctx ) const { - - - ATH_MSG_DEBUG("GNNVertexConstructor Tool reading decorations from a container"); - - SG::ReadDecorHandle<xAOD::TrackParticleContainer, std::string> readTrackKey(m_decorReadKey, ctx); - - for ( auto track : *trkCont ){ - - float pt = track->pt()/1000.; - - if(pt > 150){ - ATH_MSG_DEBUG("Contains a decorator"); - ATH_MSG_DEBUG("Decorator is " << readTrackKey( *track )); - } - - - } - return StatusCode::SUCCESS; - } -//Decorating the jets using the GNN +//-------------Decorating the jets using the GNN StatusCode GNNVertexConstructorTool::GNNDecoJet ( const xAOD::JetContainer* jetCont, const EventContext& ctx ) const{ ATH_MSG_DEBUG("Using GNN within Tool"); + ATH_MSG_DEBUG(jetCont->size()); // apply the GNNTool to the jets - for (auto jet : *jetCont) + if (jetCont->size()!=0){ + ATH_MSG_DEBUG(jetCont->size() << "did it work"); + for (auto jet : *jetCont) + { + //ATH_MSG_INFO("Jet size " << (*jet)->size()); + m_gnn_Tool->decorate(*jet); + } + } + else { - m_gnn_Tool->decorate(*jet); + ATH_MSG_DEBUG("No Jets"); } - - return StatusCode::SUCCESS; } -//Read Decoration from a Jet Container +//------------Read Decoration from a Jet Container StatusCode GNNVertexConstructorTool::readDecorJet ( const xAOD::JetContainer* jetCont, const EventContext& ctx ) const{ //ATH_MSG_DEBUG("Reading a Decor in Jet"); @@ -215,19 +185,18 @@ namespace Rec { //Create a map of track links and track vertexing values (Using mutlimap) - std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > > > VertexMap; //empty Multi Vertex Map Container - - // Create the new container and its auxiliary store. auto GNNvertexContainer = std::make_unique<xAOD::VertexContainer>(); auto GNNvertexAuxContainer = std::make_unique<xAOD::AuxContainerBase>(); GNNvertexContainer->setStore (GNNvertexAuxContainer.get()); //< Connect the two + //xAOD::VertexContainer* GNNvertexContainer = new xAOD::VertexContainer; + //xAOD::VertexAuxContainer* GNNvertexAuxContainer = new xAOD::VertexAuxContainer; + //GNNvertexContainer->setStore(GNNvertexAuxContainer); - - + for (auto jet : *jetCont) { //Loop over Jets VertexMap.clear(); auto vertexCollection=readJetHandle_TV(*jet); @@ -245,9 +214,9 @@ namespace Rec { //ATH_MSG_DEBUG("Printing Map"); workVectorArrxAOD * tmpVectxAOD=new workVectorArrxAOD(); - // tmpVectxAOD->inpTrk.resize(inpTrk.size()); - // tmpVectxAOD->inpTrk.resize(VertexMap.size()); - // std::copy(inpTrk.begin(),inpTrk.end(), tmpVectxAOD->inpTrk.begin()); +// tmpVectxAOD->inpTrk.resize(inpTrk.size()); +// tmpVectxAOD->inpTrk.resize(VertexMap.size()); +// std::copy(inpTrk.begin(),inpTrk.end(), tmpVectxAOD->inpTrk.begin()); SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx }; tmpVectxAOD->beamX=beamSpotHandle->beamPos().x(); tmpVectxAOD->beamY=beamSpotHandle->beamPos().y(); @@ -256,26 +225,26 @@ namespace Rec { tmpVectxAOD->tanBeamTiltY=tan(beamSpotHandle->beamTilt(1)); - auto GNNVTX=GNNVertexConstructorTool::vrtFitter(tmpVectxAOD, VertexMap, ctx, GNNvertexContainer); delete tmpVectxAOD; - - - + } ATH_MSG_INFO("Vertex Container " << GNNvertexContainer->size()); StatusCode sc; + sc= (evtStore()->record (GNNvertexContainer.release(), "GNNVtxs")); sc= (evtStore()->record (GNNvertexAuxContainer.release(), "GNNVtxsAux.")); - + + ATH_MSG_INFO("Container WRitten?"); + return StatusCode::SUCCESS; } - //Vertex Fitting +//--------Vertex Fitting std::vector<xAOD::Vertex*> GNNVertexConstructorTool::vrtFitter( workVectorArrxAOD * xAODwrk, std::multimap<int, ElementLink<DataVector<xAOD::TrackParticle_v1 > > > & vrt, @@ -287,43 +256,13 @@ namespace Rec { std::vector<xAOD::Vertex*>finalVertices(0); ATH_MSG_DEBUG("Added Vertexes 0= " << VtxCont->size()); - - - - -/* xAOD::VertexContainer *TestVertexContainer( nullptr ); - ATH_CHECK( evtStore()->retrieve( TestVertexContainer, "BTagging_AntiKt4EMPFlowSecVtx" ) ); - - - - xAOD::TrackParticle *Test =new xAOD::TrackParticle; - ATH_MSG_DEBUG("GNNblah" ); - //Test->setTime(0.5); - - xAOD::Vertex *GNNvertex = new xAOD::Vertex; - ATH_MSG_DEBUG("GNNblah 2" ); - TestVertexContainer->emplace_back(GNNvertex); - - - GNNvertex->setX(59.6); - ATH_MSG_DEBUG(GNNvertex->x()); - //GNNvertex->setVertexType(xAOD::VxType::SecVtx); - ATH_MSG_DEBUG("GNNblah 3" );*/ - - /* ATH_CHECK(evtStore()->retrieve( m_vertexTES, "PrimaryVertices")); - - if( sc.isFailure() || !m_vertexTES ) { - ATH_MSG_WARNING("No xAOD vertex container found in TDS"); - return StatusCode::SUCCESS; - } - else { - } - - for (auto *vertex : *m_vertexTES ){ + + /*for (auto *vertex : *m_vertexTES ){ if( xAOD::VxType::PriVtx != vertex->vertexType() ) continue; m_thePV = vertex; }*/ + std::unique_ptr<std::vector<WrkVrt>> wrkVrtSet = std::make_unique<std::vector<WrkVrt>>(); //int inpNPart=xAODwrk->inpTrk.size(); //int inpNPart=xAODwrk->vrt.size(); @@ -333,8 +272,6 @@ namespace Rec { StatusCode sc; - - xAODwrk->tmpListTracks.clear(); auto lastKey = (vrt.end())->first; //returns next value after last key - easier for "for loop" @@ -344,19 +281,9 @@ namespace Rec { //Need at least 2 tracks to perform a fit auto elements = vrt.equal_range(k); for (auto i = elements.first; i != elements.second; ++i){ //printing the map - //ATH_MSG_DEBUG(" test " << i->first << ": " << i->second << '\n'); xAODwrk->listSelTracks.push_back(*(i->second)); - - auto trkLink= i->second; - //ATH_MSG_DEBUG(*trkLink->type()); - //GNNvertex->addTrackAtVertex(trkLink, 1.); - } - - - - sc =(m_VrtFit->VKalVrtFit(xAODwrk->listSelTracks, neutralPartDummy, newvrt.vertex, newvrt.vertexMom, newvrt.vertexCharge, newvrt.vertexCov, @@ -371,15 +298,26 @@ namespace Rec { //m_vertex_pos->Fill(newvrt.vertex[0]); + Hists& h = getHists(); + h.m_tuple->Fill(); + h.m_vertex_chi2->Fill(newvrt.chi2, m_w_1); - //hist("Vertex_chi2")->Fill(r, newvrt.chi2); - // Compatibility to the primary vertex. + +//----------Compatibility to the primary vertex. + Amg::Vector3D vDist = newvrt.vertex ;// - m_thePV->position(); double vPos=(vDist.x()*newvrt.vertexMom.Px()+vDist.y()*newvrt.vertexMom.Py()+vDist.z()*newvrt.vertexMom.Pz())/newvrt.vertexMom.Rho(); xAOD::Vertex *GNNvertex = new xAOD::Vertex; + + + // xAOD::Vertex * tmpVertex = nullptr; + + //tmpVertex = m_VrtFit->makeXAODVertex( newvrt.vertex, newvrt.chi2PerTrk, newvrt.trkAtVrt, newvrt.chi2, state ); + VtxCont->emplace_back(GNNvertex); + GNNvertex->setVertexType(xAOD::VxType::SecVtx); GNNvertex->setPosition( newvrt.vertex); GNNvertex->setFitQuality(newvrt.chi2, 1); @@ -389,13 +327,17 @@ namespace Rec { GNNvertex->auxdata<float>("vPos") = vPos; GNNvertex->auxdata<bool> ("isFake") = true; - ATH_MSG_DEBUG("Test 6"); - - } - + } } - return finalVertices; - } + } + + GNNVertexConstructorTool::Hists& + GNNVertexConstructorTool::getHists() const + { + // We earlier checked that no more than one thread is being used. + Hists* h ATLAS_THREAD_SAFE = m_h.get(); + return *h; + } } // end Rec namespace