Skip to content
Snippets Groups Projects
Commit 1ecda465 authored by Tamara Vazquez Schroeder's avatar Tamara Vazquez Schroeder
Browse files

Merge branch 'r21-nTracksTau-MC' into '21.0-mc16a'

R21 n tracks tau mc

See merge request atlas/athena!2826

Former-commit-id: ab86d371f8f8407a416b33af1e7dd23cea105d3e
parents 5fd60c79 6b8a2779
No related branches found
No related tags found
No related merge requests found
......@@ -9,8 +9,10 @@ atlas_subdir( xAODTauAthenaPool )
atlas_depends_on_subdirs( PRIVATE
Control/AthContainers
Control/AthenaKernel
Control/StoreGate
Database/AthenaPOOL/AthenaPoolCnvSvc
Database/AthenaPOOL/AthenaPoolUtilities
Event/xAOD/xAODTracking
Event/xAOD/xAODTau
GaudiKernel )
......@@ -20,5 +22,5 @@ atlas_add_poolcnv_library( xAODTauAthenaPoolPoolCnv
FILES xAODTau/TauJetContainer.h xAODTau/TauJetAuxContainer.h xAODTau/DiTauJetContainer.h xAODTau/DiTauJetAuxContainer.h xAODTau/TauTrackContainer.h xAODTau/TauTrackAuxContainer.h
TYPES_WITH_NAMESPACE xAOD::TauJetContainer xAOD::TauJetAuxContainer xAOD::DiTauJetContainer xAOD::DiTauJetAuxContainer xAOD::TauTrackContainer xAOD::TauTrackAuxContainer
CNV_PFX xAOD
LINK_LIBRARIES AthContainers AthenaKernel AthenaPoolCnvSvcLib AthenaPoolUtilities xAODTau GaudiKernel )
LINK_LIBRARIES AthContainers AthenaKernel StoreGateLib AthenaPoolCnvSvcLib AthenaPoolUtilities xAODTracking xAODTau GaudiKernel )
......@@ -2,7 +2,7 @@
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
// $Id: xAODTauJetAuxContainerCnv.cxx 749546 2016-05-25 01:31:32Z griffith $
// $Id: xAODTauJetAuxContainerCnv.cxx 800296 2017-03-10 18:16:40Z griffith $
// System include(s):
#include <exception>
......@@ -32,6 +32,17 @@ createPersistent( xAOD::TauJetAuxContainer* trans ) {
return SG::copyThinned (*trans, IThinningSvc::instance());
}
StatusCode xAODTauJetAuxContainerCnv::
createObj( IOpaqueAddress* pAddr, DataObject*& pObj ){
// Get the key of the container that we'll be creating:
m_key = *( pAddr->par() + 1 );
ATH_MSG_VERBOSE( "Key of xAOD::TauJetAuxContainer: " << m_key );
// Let the base class do its thing now:
return AthenaPoolConverter::createObj( pAddr, pObj );
}
xAOD::TauJetAuxContainer* xAODTauJetAuxContainerCnv::createTransient() {
// The known ID(s) for this container:
......@@ -48,7 +59,7 @@ xAOD::TauJetAuxContainer* xAODTauJetAuxContainerCnv::createTransient() {
} else if(compareClassGuid( v2_guid )) {
// The v2 converter:
static xAODTauJetAuxContainerCnv_v2 converter;
converter.setKey(m_key);
// std::cout << "Converting TauJet_v2 --> v3 not fully supported" << std::endl;
// Read in the v2 object:
......
......@@ -4,10 +4,13 @@
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
// $Id: xAODTauJetAuxContainerCnv.h 581660 2014-02-05 15:52:29Z janus $
// $Id: xAODTauJetAuxContainerCnv.h 800296 2017-03-10 18:16:40Z griffith $
#ifndef XAODTAUATHENAPOOL_XAODTAUJETAUXCONTAINERCNV_H
#define XAODTAUATHENAPOOL_XAODTAUJETAUXCONTAINERCNV_H
// stystem includes
#include <string>
// Gaudi/Athena include(s):
#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h"
......@@ -31,8 +34,8 @@ typedef T_AthenaPoolCustomCnv< xAOD::TauJetAuxContainer,
* @author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch>
* @author Michel Janus <janus@cern.ch>
*
* $Revision: 581660 $
* $Date: 2014-02-05 16:52:29 +0100 (Wed, 05 Feb 2014) $
* $Revision: 800296 $
* $Date: 2017-03-10 19:16:40 +0100 (Fri, 10 Mar 2017) $
*/
class xAODTauJetAuxContainerCnv :
public xAODTauJetAuxContainerCnvBase {
......@@ -50,6 +53,13 @@ protected:
/// Function reading in the object from the input file
virtual xAOD::TauJetAuxContainer* createTransient();
/// Re-implemented function in order to get access to the SG key
virtual StatusCode createObj( IOpaqueAddress* pAddr, DataObject*& pObj );
private:
std::string m_key;
}; // class xAODTauJetAuxContainerCnv
#endif // XAODTAUATHENAPOOL_XAODTAUJETAUXCONTAINERCNV_H
......@@ -14,10 +14,16 @@
#include "xAODTau/versions/TauJetContainer_v2.h"
#include "xAODTau/TauJetContainer.h"
#include "xAODTau/TauTrackContainer.h"
#include "xAODTau/TauTrackAuxContainer.h"
#include "xAODTracking/TrackParticleContainer.h"
// Local include(s):
#include "xAODTauJetAuxContainerCnv_v2.h"
// StoreGateSvc
#include "StoreGate/StoreGateSvc.h"
#include "GaudiKernel/ServiceHandle.h"
/// Convenience macro for setting the level of output messages
#define MSGLVL MSG::DEBUG
......@@ -35,14 +41,35 @@ xAODTauJetAuxContainerCnv_v2::xAODTauJetAuxContainerCnv_v2()
}
ServiceHandle<StoreGateSvc> evtStore ("StoreGateSvc", "tauJetCnv_v2");
void xAODTauJetAuxContainerCnv_v2::
persToTrans( const xAOD::TauJetAuxContainer_v2* oldObj,
xAOD::TauJetAuxContainer* newObj,
MsgStream& log ) {
if (evtStore.retrieve().isFailure()) {
ATH_MSG("Cannot get StoreGateHandle");
return;
}
// Greet the user:
ATH_MSG( "Converting xAOD::TauJetAuxContainer_v2 to current version..." );
xAOD::TauTrackContainer* pTracks = nullptr;
xAOD::TauTrackAuxContainer* pAuxTracks = nullptr;
if(m_key.length()){
//m_key is set in xAODTauJetAuxContainerCnv.cxx
//if reading data, then trigger calls T/P converter directly
//and the key is not set. In this case, forget about TauTracks
pTracks = new xAOD::TauTrackContainer();
pAuxTracks = new xAOD::TauTrackAuxContainer();
pTracks->setStore(pAuxTracks);
}
// Clear the transient object:
newObj->resize( 0 );
......@@ -55,12 +82,7 @@ persToTrans( const xAOD::TauJetAuxContainer_v2* oldObj,
xAOD::TauJetContainer newInt;
newInt.setStore( newObj );
// xAOD::TauTrackContainer* pTracks = new xAOD::TauTrackContainer();
// ATH_CHECK( evtStore()->record( pTracks, "TauTracks") );
// xAOD::TauTrackAuxContainer* pAuxTracks = new xAOD::TauTrackAuxContainer();
// ATH_CHECK( evtStore()->record( pAuxTracks, "TauTracksAux." ));
// pTracks->setStore( pAuxTracks );
// Loop over the interface objects, and do the conversion with their help:
for( const xAOD::TauJet_v2* oldTau : oldInt ) {
......@@ -243,33 +265,96 @@ persToTrans( const xAOD::TauJetAuxContainer_v2* oldObj,
newTau->setProtoNeutralPFOLinks( oldTau->protoNeutralPFOLinks() );
newTau->setProtoChargedPFOLinks( oldTau->protoChargedPFOLinks() );
newTau->setProtoPi0PFOLinks( oldTau->protoPi0PFOLinks() );
// //
// //set per track track variables
// //
// for (unsigned int i = 0; i < oldTau->nTracks(); ++i)
// {
// //set track filter info
// newTau->setTrackFlag(oldTau->track(i), xAOD::TauJetParameters::failTrackFilter, oldTau->trackFilterPass(i) );
// //set extrapolated track position
// newTau->setTrackEtaStrip( i , oldTau->trackEtaStrip(i) );
// newTau->setTrackPhiStrip( i , oldTau->trackPhiStrip(i) );
// }
// for (unsigned int i = 0; i < oldTau->nConversionTracks(); ++i)
// {
// //set conversion track flags
// newTau->setTrackFlag(oldTau->conversionTrack(i), xAOD::TauJetParameters::isConversion, true );
// }
if(m_key.length()==0) continue;
for(unsigned int i = 0; i < oldTau->nTracks(); ++i){
ElementLink< xAOD::TrackParticleContainer > linkToTrackParticle = oldTau->trackLinks()[i];
if(!linkToTrackParticle.isValid()) continue;
xAOD::TauTrack* track = new xAOD::TauTrack();
pTracks->push_back(track);
const xAOD::TrackParticle* trackParticle=oldTau->track(i);
track->addTrackLink(linkToTrackParticle);
track->setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::coreTrack, true);
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::passTrkSelector, true);
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::classifiedCharged, true);
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::unclassified, true);
ElementLink<xAOD::TauTrackContainer> linkToTauTrack;
linkToTauTrack.toContainedElement(*pTracks, track);
newTau->addTauTrackLink(linkToTauTrack);
}
for(unsigned int i = 0; i < oldTau->nWideTracks(); ++i){
ElementLink< xAOD::TrackParticleContainer > linkToTrackParticle = oldTau->wideTrackLinks()[i];
if(!linkToTrackParticle.isValid()) continue;
xAOD::TauTrack* track = new xAOD::TauTrack();
pTracks->push_back(track);
const xAOD::TrackParticle* trackParticle=oldTau->wideTrack(i);
track->addTrackLink(linkToTrackParticle);
track->setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::wideTrack, true);
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::passTrkSelector, true);
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::classifiedIsolation, true);
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::modifiedIsolationTrack, true);
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::unclassified, true);
ElementLink<xAOD::TauTrackContainer> linkToTauTrack;
linkToTauTrack.toContainedElement(*pTracks, track);
newTau->addTauTrackLink(linkToTauTrack);
}
for(unsigned int i = 0; i < oldTau->nOtherTracks(); ++i){
ElementLink< xAOD::TrackParticleContainer > linkToTrackParticle = oldTau->otherTrackLinks()[i];
if(!linkToTrackParticle.isValid()) continue;
xAOD::TauTrack* track = new xAOD::TauTrack();
pTracks->push_back(track);
const xAOD::TrackParticle* trackParticle=oldTau->otherTrack(i);
track->addTrackLink(linkToTrackParticle);
track->setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
float dR=oldTau->p4(xAOD::TauJetParameters::IntermediateAxis).DeltaR(trackParticle->p4());
if(dR<=0.2) track->setFlag(xAOD::TauJetParameters::TauTrackFlag::coreTrack, true);
else track->setFlag(xAOD::TauJetParameters::TauTrackFlag::wideTrack, true);
track->setFlag(xAOD::TauJetParameters::TauTrackFlag::unclassified, true);
ElementLink<xAOD::TauTrackContainer> linkToTauTrack;
linkToTauTrack.toContainedElement(*pTracks, track);
newTau->addTauTrackLink(linkToTauTrack);
}
newTau->setDetail(xAOD::TauJetParameters::nChargedTracks, (int) oldTau->nTracks());
newTau->setDetail(xAOD::TauJetParameters::nIsolatedTracks, (int) oldTau->nWideTracks());
}
if(m_key.length()){
std::string tauTrackContName=m_key;
tauTrackContName.replace(tauTrackContName.find("Aux."),4,"");
//example names:
//TauJets : Jets --> Tracks
//HLT_xAOD__TauJetContainer_TrigTauRecMerged Jet --> Track; +=Tracks
//HLT_xAOD__TauJetContainer_TrigTauRecPreselection ""
if(tauTrackContName.find("Jet") != std::string::npos){
tauTrackContName.replace( tauTrackContName.find("Jet"), 3, "Track" );
if(tauTrackContName.find("HLT") != std::string::npos) tauTrackContName+="Tracks";
}
else {
ATH_MSG("Cannot decipher name TauTrackConatiner should have");
return;
}
std::string tauTrackAuxContName=tauTrackContName+"Aux.";
if(evtStore->record(pTracks, tauTrackContName).isFailure() ||
evtStore->record(pAuxTracks, tauTrackAuxContName)){
ATH_MSG("Couldn't Record TauTracks");
return;
}
}
// Print what happened:
ATH_MSG( "Converting xAOD::TauJetAuxContainer_v2 to current version "
"[OK]" );
return;
}
......
......@@ -44,6 +44,10 @@ public:
xAOD::TauJetAuxContainer_v2*,
MsgStream& log );
inline void setKey(const std::string& k){ m_key=k;}
private:
std::string m_key;
}; // class xAODTauJetAuxContainer_v2
#endif // XAODTAUATHENAPOOL_XAODTAUJETAUXCONTAINERCNV_V2_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment