From 836645750dae3c4a068a4896fb7938d96bde1cc7 Mon Sep 17 00:00:00 2001
From: Bertram Kopf <bertram@pc14.ep1.rub.de>
Date: Thu, 7 Apr 2016 10:41:57 +0200
Subject: [PATCH] switched from   //  std::map<std::thread::id,
 std::map<std::string, complex<float> > > _cachedDynMap; to cachedAmpIdMap for
 performance improvement

---
 PwaUtils/AbsXdecAmp.cc    | 3 ++-
 PwaUtils/AbsXdecAmp.hh    | 5 ++---
 PwaUtils/HeliDecAmps.cc   | 3 ++-
 PwaUtils/LSDecAmps.cc     | 3 ++-
 PwaUtils/TensorDecAmps.cc | 3 ++-
 5 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/PwaUtils/AbsXdecAmp.cc b/PwaUtils/AbsXdecAmp.cc
index 5b8ad817..361a7939 100644
--- a/PwaUtils/AbsXdecAmp.cc
+++ b/PwaUtils/AbsXdecAmp.cc
@@ -137,7 +137,8 @@ void AbsXdecAmp::calcDynamics(EvtData* theData, AbsXdecAmp* grandmaAmp){
 
   if(!_absDyn->isLdependent()){
     theMutex.lock();
-    _cachedDynMap[std::this_thread::get_id()][_absDyn->grandMaKey(grandmaAmp)] = _absDyn->eval( theData, grandmaAmp);
+    //    _cachedDynMap[std::this_thread::get_id()][_absDyn->grandMaKey(grandmaAmp)] = _absDyn->eval( theData, grandmaAmp);
+    _cachedDynIdMap[std::this_thread::get_id()][_absDyn->grandMaId(grandmaAmp)] = _absDyn->eval( theData, grandmaAmp);
     theMutex.unlock();
   }
   if(!_daughter1IsStable) _decAmpDaughter1->calcDynamics(theData, this);
diff --git a/PwaUtils/AbsXdecAmp.hh b/PwaUtils/AbsXdecAmp.hh
index 4b778703..923d3a3f 100644
--- a/PwaUtils/AbsXdecAmp.hh
+++ b/PwaUtils/AbsXdecAmp.hh
@@ -45,7 +45,7 @@
 class AbsDecay;
 //class AbsDynamics;
 
-typedef CacheVector<std::map<std::string,std::map<Id2StringType, complex<float> > > >  intStringShortComplFloatMap;
+//typedef CacheVector<std::map<std::string,std::map<Id2StringType, complex<float> > > >  intStringShortComplFloatMap;
 typedef CacheVector<std::map<unsigned short, std::map<Id2StringType, complex<float> > > >  intUShortId2StringComplFloatMap;
 
 class AbsXdecAmp : public AbsParamHandler{
@@ -104,9 +104,8 @@ protected:
   Spin _lam2Min;
   Spin _lam2Max;
 
-  // intStringShortComplFloatMap _cachedAmpMap;
   intUShortId2StringComplFloatMap _cachedAmpIdMap;
-  std::map<std::thread::id, std::map<std::string, complex<float> > > _cachedDynMap;
+  std::map<std::thread::id, std::map<unsigned short, complex<float> > > _cachedDynIdMap;
 
 
 
diff --git a/PwaUtils/HeliDecAmps.cc b/PwaUtils/HeliDecAmps.cc
index ee1e9465..8684f0a5 100644
--- a/PwaUtils/HeliDecAmps.cc
+++ b/PwaUtils/HeliDecAmps.cc
@@ -260,7 +260,8 @@ complex<double> HeliDecAmps::XdecAmp(Spin& lamX, EvtData* theData, Spin& lamFs,
   //  result*=_preFactor*_isospinCG*sqrt(2.*_JPCPtr->J+1.);
 
   if (_absDyn->isLdependent()) result*=_cachedDynLMap.at(std::this_thread::get_id());
-  else result*=_cachedDynMap.at(std::this_thread::get_id()).at(_absDyn->grandMaKey(grandmaAmp));
+  //  else result*=_cachedDynMap.at(std::this_thread::get_id()).at(_absDyn->grandMaKey(grandmaAmp));
+  else result*=_cachedDynIdMap.at(std::this_thread::get_id()).at(_absDyn->grandMaId(grandmaAmp));
 
   if(result.real()!=result.real()){
     Alert << "result:\t" << result << endmsg;
diff --git a/PwaUtils/LSDecAmps.cc b/PwaUtils/LSDecAmps.cc
index 24c1a7b1..ab92ebea 100644
--- a/PwaUtils/LSDecAmps.cc
+++ b/PwaUtils/LSDecAmps.cc
@@ -173,7 +173,8 @@ complex<double> LSDecAmps::lsLoop(AbsXdecAmp* grandmaAmp, Spin& lamX, EvtData* t
       result+=amp;    
     }
   }
-  if (!_absDyn->isLdependent()) result *=_cachedDynMap.at(std::this_thread::get_id()).at(_absDyn->grandMaKey(grandmaAmp));
+  //  if (!_absDyn->isLdependent()) result *=_cachedDynMap.at(std::this_thread::get_id()).at(_absDyn->grandMaKey(grandmaAmp));
+  if (!_absDyn->isLdependent()) result *=_cachedDynIdMap.at(std::this_thread::get_id()).at(_absDyn->grandMaId(grandmaAmp));
   return result;
 }
 
diff --git a/PwaUtils/TensorDecAmps.cc b/PwaUtils/TensorDecAmps.cc
index e73b6637..8cb20982 100644
--- a/PwaUtils/TensorDecAmps.cc
+++ b/PwaUtils/TensorDecAmps.cc
@@ -140,7 +140,8 @@ complex<double> TensorDecAmps::lsLoop(AbsXdecAmp* grandmaAmp, Spin lamX, EvtData
     result+=tmpResult;
   }
   
-  if (!_absDyn->isLdependent()) result *=_cachedDynMap.at(std::this_thread::get_id()).at(_absDyn->grandMaKey(grandmaAmp));
+  //if (!_absDyn->isLdependent()) result *=_cachedDynMap.at(std::this_thread::get_id()).at(_absDyn->grandMaKey(grandmaAmp));
+  if (!_absDyn->isLdependent()) result *=_cachedDynIdMap.at(std::this_thread::get_id()).at(_absDyn->grandMaId(grandmaAmp));
   
   result*=_isospinCG;
   return result;
-- 
GitLab