diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py index c216278fe058fb8e37312c3df18aab58fadaaf2d..4a8efdd4a4162b4b3e36338da0ac9a494d853961 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py +++ b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py @@ -291,6 +291,7 @@ def MuonChi2TrackFitter(name='MuonChi2TrackFitter',**kwargs): kwargs.setdefault("StraightLine" , False) kwargs.setdefault("OutlierCut" , 3.0) kwargs.setdefault("GetMaterialFromTrack" , False) + kwargs.setdefault("RejectLargeNScat" , True) # take propagator and navigator from the extrapolator Extrapolator = getPublicTool(kwargs["ExtrapolationTool"]) diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h b/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h index e35eef1e441aa0dccf445e4c306f2ae7e8b6b7d2..7a39417723c73e48b05bd30faf43a927f54159c9 100755 --- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h +++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h @@ -255,7 +255,7 @@ private: bool m_useCaloTG; ToolHandle<Trk::ITrkMaterialProviderTool> m_caloMaterialProvider; - + bool m_rejectLargeNScat; #ifdef GXFDEBUGCODE diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx index 4482c9689a96ac2043d8ac5077dd20565570c47b..2cc6df2927f8e337fe1872df95d96ba7675f51e6 100755 --- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx +++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx @@ -147,7 +147,8 @@ namespace Trk { m_residuals{}, m_updatescat{}, m_useCaloTG(false), - m_caloMaterialProvider("Trk::TrkMaterialProviderTool/TrkMaterialProviderTool") { + m_caloMaterialProvider("Trk::TrkMaterialProviderTool/TrkMaterialProviderTool"), + m_rejectLargeNScat(false){ // tools and services declareProperty("ExtrapolationTool", m_extrapolator); declareProperty("MeasurementUpdateTool", m_updator); @@ -207,6 +208,7 @@ namespace Trk { #endif declareProperty("FixBrem", m_fixbrem = -1); + declareProperty("RejectLargeNScat", m_rejectLargeNScat=false); declareInterface<IGlobalTrackFitter>(this); // m_miniter=1; @@ -1269,7 +1271,6 @@ namespace Trk { else secondpseudostate=trajectory.trackStates().back(); }*/ } - Track *track = myfit(trajectory, *startPar, false, (m_fieldService->toroidOn() || m_fieldService->solenoidOn()) ? muon : nonInteracting); if (startPar != lastidpar && startPar != indettrack->perigeeParameters()) { @@ -1710,7 +1711,6 @@ namespace Trk { trajectory.reset(); trajectory.setPrefit(0); trajectory.setNumberOfPerigeeParameters(5); - track = myfit(trajectory, *firstidpar, false, muon); m_matfilled = false; } @@ -1944,7 +1944,6 @@ namespace Trk { } ATH_MSG_DEBUG("call myfit(GXFTrajectory,TP,,)"); - Track *track = myfit(trajectory, *minpar, runOutlier, matEffects); if (deleteminpar) { delete minpar; @@ -3733,6 +3732,10 @@ public: *states.back()->surface(), alongMomentum, false, Trk::nonInteractingMuon); matvec = m_matvecmuondownstream; + if(matvec->size()>1000 && m_rejectLargeNScat){ + ATH_MSG_DEBUG("too many scatterers: "<<matvec->size()); + return; + } if (matvec && !matvec->empty()) { for (int j = 0; j < (int) matvec->size(); j++) { const MaterialEffectsBase *meb = (*matvec)[j]->materialEffectsOnTrack(); @@ -3859,6 +3862,7 @@ public: bool addlayer = true; while (addlayer && layerno < (int) matstates.size()) { addlayer = false; + //std::cout<<"add "<<matstates.size()<<" states"<<std::endl; const TrackParameters *layerpar = matstates[layerno]->trackParameters(); @@ -3921,6 +3925,7 @@ public: const MaterialProperties *matprop = lay ? lay->fullUpdateMaterialProperties(*layerpar) : 0; meff->setMaterialProperties(matprop); } + /* if (msgLvl(MSG::DEBUG)) { msg(MSG::DEBUG) << "X0: " << meff->x0(); if (layerpar) { @@ -3930,6 +3935,7 @@ public: msg(MSG::DEBUG) << " eloss: " << meff->deltaE() << " sigma eloss: " << meff->sigmaDeltaE(); msg(MSG::DEBUG) << endmsg; } + */ layerno++; } }