001 #include "GaudiKernel/ToolFactory.h"
002 #include "GaudiKernel/SmartDataPtr.h"
003 #include "GaudiKernel/IDataProviderSvc.h"
004
005
006 #include "muonEvent/Muon.h"
007 #include "muonEvent/MuonContainer.h"
008
009 #include "Particle/TrackParticle.h"
010 #include "Particle/TrackParticleContainer.h"
011
012 #include "IsolationTool/IIsolationTool.h"
013
014
015 #include "STACOTools/TrackParticleToAnalysisMuonExtrTool.h"
016
017
018 #include "STACOToolsInterfaces/IStacoEDMHelper.h"
019 #include "StacoMuonQualityWordHelper.h"
020
021 TrackParticleToAnalysisMuonExtrTool::TrackParticleToAnalysisMuonExtrTool(const std::string& t,
022 const std::string& n,
023 const IInterface* p ):AthAlgTool(t,n,p),
024 p_OwnEDMHelper ( "StacoEDMHelper/ConfiguredStacoEDMHelper" ) ,
025 p_IIsolationTool("MuonIsolationTool/MuonIsolationTool")
026 {
027
028 declareInterface<ITrackParticleToAnalysisMuonExtrTool>(this);
029
030 declareProperty("StacoEDMHelper" , p_OwnEDMHelper ) ;
031 declareProperty("IIsolationTool" ,p_IIsolationTool );
032
033 }
034
035 TrackParticleToAnalysisMuonExtrTool::~TrackParticleToAnalysisMuonExtrTool(){}
036
037
038 StatusCode TrackParticleToAnalysisMuonExtrTool::initialize() {
039
040 msg(MSG::INFO) << "Initialisation started " << endreq;
041
042 StatusCode sc = AthAlgTool::initialize();
043 if ( sc.isFailure() ) {
044 msg(MSG::FATAL) << " AthAlgTool::initialize() failed" << endreq;
045 return( StatusCode::FAILURE );
046 }
047
048
049
050 if ( p_OwnEDMHelper.retrieve().isFailure() ) {
051 msg(MSG::FATAL) << "Failed to retrieve tool " << p_OwnEDMHelper << endreq;
052 return StatusCode::FAILURE;
053 }
054 msg(MSG::INFO) << "Retrieved tool " << p_OwnEDMHelper << endreq;
055
056
057 if ( p_IIsolationTool.retrieve().isFailure() ) {
058 msg(MSG::WARNING) << "Failed to retrieve tool " << p_IIsolationTool << endreq;
059 p_IIsolationTool = 0 ;
060 }else{
061 msg(MSG::INFO) << "Retrieved tool " << p_IIsolationTool << endreq;
062 }
063
064 msg(MSG::INFO) << "Initialisation ended " << endreq;
065
066 return StatusCode::SUCCESS;
067
068 }
069
070
071 StatusCode TrackParticleToAnalysisMuonExtrTool::finalize(){return StatusCode::SUCCESS;}
072
073
074 StatusCode TrackParticleToAnalysisMuonExtrTool::convertCollection(
075 const Rec::TrackParticleContainer* pTrackParticleContainer ,
076 const Rec::TrackParticleContainer* pTrackParticleContainer_MSonly,
077 Analysis::MuonContainer* pCombinedMuonContainer
078 ){
079
080
081
082 std::vector<const Rec::TrackParticle*> AuxVecColl_Aligned =
083 p_OwnEDMHelper->AlignTrackParticleContainers(pTrackParticleContainer,pTrackParticleContainer_MSonly);
084
085 std::vector<const Rec::TrackParticle*>::iterator it_AuxVecColl_Aligned = AuxVecColl_Aligned.begin();
086 Rec::TrackParticleContainer::const_iterator it = pTrackParticleContainer->begin() ;
087 Rec::TrackParticleContainer::const_iterator it_End = pTrackParticleContainer->end() ;
088 for ( ; it!=it_End ; ++it,++it_AuxVecColl_Aligned){
089 const Rec::TrackParticle* pTrackParticle = *it;
090 const Rec::TrackParticle* pTrackParticleMSONly = *it_AuxVecColl_Aligned;
091
092 Analysis::Muon* pCombinedMuon = convert(
093 pTrackParticleContainer,
094 pTrackParticleContainer_MSonly,
095 pTrackParticle,
096 pTrackParticleMSONly
097 );
098
099 if (!pCombinedMuon ) msg(MSG::DEBUG) << " convert failed " <<endreq;
100
101 if ( pCombinedMuon ) pCombinedMuonContainer->push_back(pCombinedMuon);
102
103 }
104
105
106 return StatusCode::SUCCESS;
107
108 }
109
110 Analysis::Muon* TrackParticleToAnalysisMuonExtrTool::convert(
111 const Rec::TrackParticleContainer* pTrackParticleContainer ,
112 const Rec::TrackParticleContainer* pTrackParticleContainer_MSonly,
113 const Rec::TrackParticle* pTrackParticle,
114 const Rec::TrackParticle* pTrackParticleMSONly
115 ){
116
117 StatusCode sc = StatusCode::SUCCESS;
118
119
120
121 Analysis::Muon* pCombinedMuon = new Analysis::Muon(
122 MuonParameters::Muonboy,
123 pTrackParticle,
124 true);
125
126 pCombinedMuon->set_muonExtrapolatedTrackParticleContainer(pTrackParticleContainer);
127
128
129 if (pTrackParticleMSONly){
130 pCombinedMuon->set_muonSpectrometerTrackParticle(pTrackParticleContainer_MSonly,pTrackParticleMSONly);
131 }else{
132 pCombinedMuon->set_muonSpectrometerTrackParticle(pTrackParticleContainer,pTrackParticle);
133 }
134
135 pCombinedMuon->set_bestMatch(false);
136
137
138 double Eloss = 3000.;
139 sc = p_OwnEDMHelper->BackTrackingEloss(pTrackParticle ,Eloss) ;
140 if ( sc.isFailure() ) Eloss = 3000. ;
141
142 double paramEnergy = Eloss;
143 double paramEnergyErr = 0.20 * paramEnergy ;
144 Trk::EnergyLoss aEnergyLoss (paramEnergy, paramEnergyErr);
145
146 if (p_IIsolationTool){
147 sc = p_IIsolationTool->dressing( pCombinedMuon, &aEnergyLoss );
148 if ( sc.isFailure() ) msg(MSG::WARNING) << "fail to dress muon " << endreq;
149 }
150
151 if ( pCombinedMuon ) {
152 StacoMuonQualityWordHelper aStacoMuonQualityWordHelper ;
153 MuonQualityWord aMuonQualityWord ;
154 aStacoMuonQualityWordHelper.Set_isTight(aMuonQualityWord) ;
155 pCombinedMuon->set_isMuonBits(aMuonQualityWord);
156 }
157
158 return pCombinedMuon ;
159
160 }
161
| Due to the LXR bug, the updates fail sometimes to remove references to deleted files. The Saturday's full rebuilds fix these problems |
|
This page was automatically generated by the
LXR engine.
|
|