38#include "CLHEP/Units/PhysicalConstants.h"
40#include "CLHEP/Vector/LorentzVector.h"
52 bool loadHitLists(std::map<SimBarCode,SimHitList> & hitLists);
54 template <
class collT>
97 m_d->updateGUICounter = 0;
98 m_d->cut_fromIROnly =
false;
99 m_d->cut_excludeBarcodeZero =
false;
100 m_d->cut_excludeNeutrals =
false;
101 m_d->displayAscObjs =
false;
117 connect(controller,SIGNAL(cutTruthExcludeNeutralsChanged(
bool)),
this,SLOT(
setCutExcludeNeutrals(
bool)));
120 connect(controller,SIGNAL(showTruthAscObjsChanged(
bool)),
this,SLOT(
setShowAscObjs(
bool)));
127 if (
m_d->displayAscObjs==b)
129 m_d->displayAscObjs=b;
131 m_d->updateVisibleAssociatedObjects();
135template <
class collT>
138 std::map<SimBarCode,SimHitList>::iterator itHitList;
140 theclass->message(
"Entered addHitCollections " + QString(
typeid(collT).
name()));
144 const collT * hitColl;
145 theclass->message(
"Try to retrieve "+QString(
typeid(collT).
name())+
" collection with key = "+key);
146 if (!sgaccess.
retrieve(hitColl, key)) {
147 theclass->message(
"Error: Could not retrieve "+QString(
typeid(collT).
name())+
" collection with key = "+key);
150 theclass->messageVerbose(
"Retrieved hit collection of type "+QString(
typeid(collT).
name())+
" with key = "+key);
151 typename collT::const_iterator it, itE(hitColl->end());
152 int itot(0), iadded(0);
153 for (it=hitColl->begin();it!=itE;++it) {
164 itHitList = hitLists.find(trackID);
165 if ( itHitList == hitLists.end() ) {
167 l.push_back(std::pair<double,SimHitHandleBase*>(handle->
hitTime(),handle));
168 hitLists[trackID] = l;
170 itHitList->second.emplace_back(handle->
hitTime(),handle);
174 theclass->messageVerbose(
" => used "+
str(iadded)+
" of "+
str(itot)+
" hits");
183 theclass->messageVerbose(
"Searching " +
str( hitLists.size() ) +
" lists of sim. hits.");
187 theclass->messageVerbose(
"Found " +
str( hitLists.size() ) +
" lists of sim. hits.");
190 std::map<SimBarCode,SimHitList>::iterator it, itE(hitLists.end());
191 for (it = hitLists.begin(); it!=itE; ++it) {
192 if (it->first.unknownPdgCode())
198 SimHitList::iterator itHit(it->second.begin()), itHitE(it->second.end());
199 for (;itHit!=itHitE;++itHit)
200 itHit->second->setCharge(
charge);
205 for (it = hitLists.begin(); it!=itE; ++it) {
206 sort(it->second.begin(),it->second.end());
218 std::map<SimBarCode,SimHitList> hitLists;
219 if (!
m_d->loadHitLists(hitLists))
222 +
": Found "+
str(hitLists.size())+
" truth particles from simhits");
227 std::map<SimBarCode,SimHitList>::iterator itHitList, itHitListEnd(hitLists.end()), itHitListTemp;
229 for (itHitList = hitLists.begin();itHitList!=itHitListEnd;++itHitList) {
230 if (itHitList->second.empty()) {
231 message(
"load WARNING: Ignoring empty hit list.");
238 m_d->updateVisibleAssociatedObjects();
252 std::map<SimBarCode::ExtBarCode,int>::const_iterator it =
m_d->extBarCode2pdg.find(extBarCode);
253 if ( !isNonUniqueSecondary && it==
m_d->extBarCode2pdg.end())
254 m_d->extBarCode2pdg[extBarCode] = pdgfromsimhit;
257 if (isNonUniqueSecondary)
259 std::map<SimBarCode::ExtBarCode,int>::const_iterator it =
m_d->extBarCode2pdg.find(extBarCode);
260 if (it!=
m_d->extBarCode2pdg.end()) {
261 handle->
setPDG(it->second);
281 if (
m_d->cut_excludeBarcodeZero==b)
283 m_d->cut_excludeBarcodeZero=b;
293 if (
m_d->cut_excludeNeutrals==b)
295 m_d->cut_excludeNeutrals=b;
310 theclass->message(
"updateVisibleAssociatedObjects");
312 theclass->trackHandleIterationBegin();
double charge(const T &p)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
std::vector< std::pair< double, SimHitHandleBase * > > SimHitList
AtlasHitsVector< SimulationHit > SimulationHitCollection
Header file for AthHistogramAlgorithm.
std::pair< int, HepMcParticleLink::index_type > ExtBarCode
ExtBarCode extBarCode() const
static const int unknownPDG
bool isNonUniqueSecondary() const
virtual double hitTime() const =0
virtual int actualPDGCodeFromSimHit() const
SimBarCode simBarCode() const
void recheckCutStatusOfAllVisibleHandles()
const QString & name() const
virtual bool cut(TrackHandleBase *)
void addTrackHandle(TrackHandleBase *)
TrackCollHandleBase(TrackSysCommonData *, const QString &name, TrackType::Type)
void recheckCutStatusOfAllNotVisibleHandles()
std::map< SimBarCode::ExtBarCode, int > extBarCode2pdg
bool loadHitLists(std::map< SimBarCode, SimHitList > &hitLists)
bool cut_excludeBarcodeZero
static const int maxPdgCode
TrackCollHandle_SimulationTracks * theclass
void addHitCollections(std::map< SimBarCode, SimHitList > &hitLists)
static SimHitHandleBase * createHitHandle(const SimulationHit &h)
void updateVisibleAssociatedObjects() const
void setShowAscObjs(bool)
TrackCollHandle_SimulationTracks(TrackSysCommonData *, const QString &name)
virtual void setupSettingsFromControllerSpecific(TrackSystemController *)
void setCutExcludeNeutrals(bool)
void fixPDGCode(SimHitHandleBase *) const
static QStringList availableCollections(IVP1System *)
virtual ~TrackCollHandle_SimulationTracks()
void setCutExcludeBarcodeZero(bool)
virtual bool cut(TrackHandleBase *)
bool hasBarCodeZero() const
void setAscObjsVisible(bool)
bool showTruthAscObjs() const
bool cutTruthExcludeNeutrals() const
bool cutExcludeBarcodeZero() const
void messageVerbose(const QString &) const
void message(const QString &) const
void setHelperClassName(const QString &n)
static double particleCharge(const int &pdgcode, bool &ok)
bool retrieve(const T *&, const QString &key) const
QStringList getKeys() const