20 #include "TLorentzVector.h" 23 #include "cetlib_except/exception.h" 76 if (
this == &rhs )
return *
this;
100 typedef std::set< key_type > keyList_type;
101 keyList_type keyList;
106 Double_t totalInitialEnergy = particle->
E();
107 if ( totalInitialEnergy < cut ) {
108 keyList.insert( (*i).first );
113 for ( keyList_type::const_iterator
i = keyList.begin();
i != keyList.end(); ++
i ){
122 std::advance(i,index);
130 std::advance(i,index);
138 std::advance(i,index);
159 std::advance( primary, index );
168 return (*entry).second;
176 std::advance( primary, index );
185 return (*entry).second;
222 result.
insert( adjusted );
251 else if ( (*insertion).first == trackID ){
252 throw cet::exception(
"ParticleNavigator") <<
"sim::ParticleNavigator::insert - ERROR - " 253 <<
"track ID=" << trackID
254 <<
" is already in the list";
265 if ( particle->
Process().find(
"rimary") != std::string::npos )
279 eveIdCalculator.reset();
289 delete (*entry).second;
298 int numberOfDigits = (
int)
std::log10( (
double) numberOfParticles ) + 1;
301 output.width( numberOfDigits );
302 output <<
"#" <<
": < ID, particle >" <<
std::endl;
307 particle != list.
end(); ++particle, ++nParticle ){
308 output.width( numberOfDigits );
309 output << nParticle <<
": " 310 <<
"<" << (*particle).first
311 <<
"," << *((*particle).second)
324 throw cet::exception(
"ParticleNavigator") <<
"track id is not in map";
334 throw cet::exception(
"ParticleNavigator") <<
"track id is not in map";
345 if ( eveIdCalculator.get() == 0 ){
352 if ( saveEveIdCalculator != eveIdCalculator.get() ) {
353 saveEveIdCalculator = eveIdCalculator.get();
354 eveIdCalculator->
Init(
this );
356 if ( eveIdCalculator->ParticleNavigator() != this ){
357 eveIdCalculator->Init(
this );
362 return eveIdCalculator->CalculateEveId( trackID );
369 eveIdCalculator.reset(calc);
double E(const int i=0) const
list_type::size_type size_type
list_type::key_type key_type
unsigned int NumberTrajectoryPoints() const
const TVector3 & Polarization() const
const TLorentzVector & Position(const int i=0) const
list_type fParticleList
Sorted list of particles in the event.
void AddDaughter(const int trackID)
friend std::ostream & operator<<(std::ostream &output, const ParticleNavigator &)
void AddTrajectoryPoint(TLorentzVector const &position, TLorentzVector const &momentum)
static void AdoptEveIdCalculator(EveIdCalculator *)
list_type::const_iterator const_iterator
::xsd::cxx::tree::exception< char > exception
std::string Process() const
list_type::iterator iterator
int NumberDaughters() const
size_type erase(const key_type &key)
list_type::mapped_type mapped_type
int Daughter(const int i) const
const key_type & TrackId(const size_type) const
void SetPolarization(const TVector3 &p)
ParticleNavigator operator+(const int &value) const
void Init(const sim::ParticleNavigator *list)
Initialize this calculator for a particular ParticleNavigator.
const sim::Particle * Primary(const int) const
const XML_Char int const XML_Char * value
virtual ~ParticleNavigator()
primaries_type::const_iterator primaries_const_iterator
Example routine for calculating the "ultimate e-m mother" of a particle in a simulated event...
bool IsPrimary(int trackID) const
static std::unique_ptr< EveIdCalculator > eveIdCalculator
void insert(sim::Particle *value)
const TLorentzVector & Momentum(const int i=0) const
mapped_type operator[](const key_type &key) const
ParticleNavigator Add(const int &offset) const
ParticleNavigator & operator=(const ParticleNavigator &rhs)
list_type::value_type value_type
primaries_type fPrimaries
Sorted list of the track IDs of primary particles.
int NumberOfPrimaries() const
mapped_type Particle(const size_type) const
int EveId(const int trackID) const