001 #include "GaudiKernel/ToolFactory.h"
002 #include "GaudiKernel/SmartDataPtr.h"
003 #include "GaudiKernel/IDataProviderSvc.h"
004
005
006 #include "TrkTrack/Track.h"
007
008
009 #include "muonEvent/Muon.h"
010 #include "Particle/TrackParticle.h"
011 #include "Particle/TrackParticleContainer.h"
012 #include "IsolationTool/IIsolationTool.h"
013
014
015 #include "STACOTools/StacoToCombinedMuonTool.h"
016 #include "StacoMuonQualityWordHelper.h"
017
018
019 #include "STACOEvent/StacoObject.h"
020
021 StacoToCombinedMuonTool::StacoToCombinedMuonTool(const std::string& t,
022 const std::string& n,
023 const IInterface* p ):AthAlgTool(t,n,p),
024 p_IIsolationTool("MuonIsolationTool/MuonIsolationTool")
025 {
026
027 declareInterface<IStacoToCombinedMuonTool>(this);
028
029 declareProperty("IIsolationTool" ,p_IIsolationTool );
030
031 }
032
033 StacoToCombinedMuonTool::~StacoToCombinedMuonTool(){}
034
035
036 StatusCode StacoToCombinedMuonTool::initialize() {
037
038 StatusCode sc = StatusCode::SUCCESS;
039
040 sc = AthAlgTool::initialize();
041 if ( sc.isFailure() ) {
042 msg(MSG::FATAL) << " AthAlgTool::initialize() failed" << endreq;
043 return( StatusCode::FAILURE );
044 }
045
046
047
048 if ( p_IIsolationTool.retrieve().isFailure() ) {
049 msg(MSG::WARNING) << "Failed to retrieve tool " << p_IIsolationTool << endreq;
050 p_IIsolationTool = 0 ;
051 }else{
052 msg(MSG::INFO) << "Retrieved tool " << p_IIsolationTool << endreq;
053 }
054
055 msg(MSG::INFO) << "Initialisation ended " << endreq;
056
057 return StatusCode::SUCCESS;
058
059 }
060
061
062 StatusCode StacoToCombinedMuonTool::finalize(){return StatusCode::SUCCESS;}
063
064
065 Analysis::Muon* StacoToCombinedMuonTool::convert(
066 const StacoObject* pStacoObject,
067 const Rec::TrackParticleContainer* pTPIDColl ,
068 const Rec::TrackParticleContainer* pTPMSColl ,
069 const Rec::TrackParticleContainer* pTPMSOnlyColl ,
070 const Rec::TrackParticleContainer* pTPStacoColl ,
071 const Rec::TrackParticle* pTrackPartStaco
072 ){
073
074
075 const Rec::TrackParticle* pTrackPartID = pStacoObject->MuIdet();
076
077 const Rec::TrackParticle* pTrackPartMS = pStacoObject->MuSpectro();
078
079 const Rec::TrackParticle* pTrackPartMSOnly = pStacoObject->MuSpectroMSOnly();
080
081
082 if(pTrackPartID==0) {
083 Analysis::Muon* MuonSA = new Analysis::Muon(
084 MuonParameters::STACO,
085 pTrackPartMS,
086 true);
087
088 MuonSA->set_muonExtrapolatedTrackParticleContainer(pTPMSColl);
089
090
091 if (pTrackPartMSOnly) {
092 MuonSA->set_muonSpectrometerTrackParticle(pTPMSOnlyColl,pTrackPartMSOnly);
093 }else{
094 MuonSA->set_muonSpectrometerTrackParticle(pTPMSColl,pTrackPartMS);
095 }
096
097
098 double paramEnergy = pStacoObject->Eloss();
099 double paramEnergyErr = 0.20 * paramEnergy ;
100 Trk::EnergyLoss aEnergyLoss (paramEnergy, paramEnergyErr);
101
102 MuonSA->set_bestMatch(false);
103
104 if (p_IIsolationTool){
105 StatusCode sc = p_IIsolationTool->dressing( MuonSA, &aEnergyLoss );
106 if ( sc.isFailure() ) msg(MSG::WARNING) << "Fail to dress muon " << endreq;
107 }
108
109 if ( MuonSA ) {
110 StacoMuonQualityWordHelper aStacoMuonQualityWordHelper ;
111 MuonQualityWord aMuonQualityWord ;
112 aStacoMuonQualityWordHelper.Set_isTight(aMuonQualityWord) ;
113 MuonSA->set_isMuonBits(aMuonQualityWord);
114 }
115
116 return MuonSA ;
117
118
119 }else{
120
121
122 Analysis::Muon* CBMuon = new Analysis::Muon(
123 MuonParameters::STACO,
124 pTrackPartID,
125 pTrackPartMS,
126 pTrackPartStaco);
127
128 CBMuon->set_muonExtrapolatedTrackParticleContainer(pTPMSColl);
129 CBMuon->set_inDetTrackParticleContainer(pTPIDColl);
130 CBMuon->set_combinedMuonTrackParticleContainer(pTPStacoColl);
131
132
133 if (pTrackPartMSOnly) {
134 CBMuon->set_muonSpectrometerTrackParticle(pTPMSOnlyColl,pTrackPartMSOnly);
135 }else{
136 CBMuon->set_muonSpectrometerTrackParticle(pTPMSColl,pTrackPartMS);
137 }
138
139
140 double paramEnergy = pStacoObject->Eloss();
141 double paramEnergyErr = 0.20 * paramEnergy ;
142 Trk::EnergyLoss aEnergyLoss (paramEnergy, paramEnergyErr);
143
144 CBMuon->set_bestMatch(true);
145
146 double chi2CB = pTrackPartStaco->fitQuality()->chiSquared()-
147 pTrackPartID->fitQuality()->chiSquared()-
148 pTrackPartMS->fitQuality()->chiSquared();
149
150 CBMuon->set_matchChi2(chi2CB);
151 int Nodf = 5;
152 CBMuon->set_matchNumberDoF(Nodf);
153
154 if (p_IIsolationTool){
155 StatusCode sc = p_IIsolationTool->dressing( CBMuon, &aEnergyLoss );
156 if ( sc.isFailure() ) msg(MSG::WARNING) << "Fail to dress muon " << endreq;
157 }
158
159 if ( CBMuon ) {
160 StacoMuonQualityWordHelper aStacoMuonQualityWordHelper ;
161 MuonQualityWord aMuonQualityWord ;
162 aStacoMuonQualityWordHelper.Set_isTight(aMuonQualityWord) ;
163 CBMuon->set_isMuonBits(aMuonQualityWord);
164 }
165
166 return CBMuon ;
167
168 }
169
170 return 0;
171
172 }
| 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.
|
|