dchain::CombinatoricList< CandidateClass > Class Template Reference

#include <CombinatoricList.h>

Inheritance diagram for dchain::CombinatoricList< CandidateClass >:

dchain::DecayList< DecayClass, CandidateClass > dchain::ConjugateList< CandidateClass > dchain::CandidateList< CandidateClass > List of all members.

Public Types

typedef DCCandidateTraits<
CandidateClass >::DecayClass 
DecayClass
typedef dchain::DecayList<
DecayClass, CandidateClass
>::iterator 
iterator
typedef dchain::DecayList<
DecayClass, CandidateClass
>::const_iterator 
const_iterator
typedef dchain::DecayList<
DecayClass, CandidateClass
>::const_partial_iterator 
const_partial_iterator
typedef DecayClass value_type
typedef DecayList< DecayClass,
CandidateClass > 
self_type

Public Member Functions

virtual ~CombinatoricList ()
 CombinatoricList (const ConjugateList< CandidateClass > &aList)
virtual conjugation::Label label () const
virtual dchain::CandidateList<
CandidateClass >::iterator 
begin ()
virtual dchain::CandidateList<
CandidateClass >::iterator 
end ()
virtual dchain::DecayList<
DecayClass, CandidateClass
>::iterator 
particle_begin ()
virtual dchain::DecayList<
DecayClass, CandidateClass
>::iterator 
particle_end ()
virtual const dchain::DecayList<
DecayClass, CandidateClass > 
bar () const
virtual const dchain::DecayList<
DecayClass, CandidateClass > & 
operator() () const
virtual bool isSelfConjugate () const
virtual dchain::CandidateList<
CandidateClass >::const_iterator 
begin () const
virtual dchain::CandidateList<
CandidateClass >::const_iterator 
end () const
virtual dchain::CandidateList<
CandidateClass >::const_partial_iterator 
partial_begin () const
virtual dchain::CandidateList<
CandidateClass >::const_partial_iterator 
partial_end () const
virtual const_iterator particle_begin () const
virtual const_iterator particle_end () const
virtual const_partial_iterator partial_particle_begin () const
virtual const_partial_iterator partial_particle_end () const
template<class TAnalyze>
void iterate (const TAnalyze &analyze) const
template<class TAnalyzer>
void conjugation_iterate (const TAnalyzer &analyze) const
template<class TAnalyze>
void partial_iterate (TAnalyze &analyze) const
 CombinatoricList (const CombinatoricList< CandidateClass > &aOtherList)
template<class TList>
void operator+= (const TList &aOtherList)
template<class TSelector>
FillListWithSelection< self_type,
TSelector > 
operator[] (const TSelector &iSel)
template<class TAnalyze>
void iterate (TAnalyze &analyze) const
template<class TAnalyzer>
void iterate (const TAnalyzer &analyze) const
template<class TAnalyzer>
void partial_iterate (const TAnalyzer &analyze) const
void eraseContents ()
void erase ()
template<class TSelect>
bool attempt_insert (DecayClass *pPossible, const conjugation::Label aLabel, const TSelect &aSelect)
template<class THolder>
void insert (THolder &pPossible, const conjugation::Label aLabel)
template<class TDecayList, class TSelector>
void fill (const TDecayList &aList, const TSelector &aSel=SelectAll< DecayClass >())
bool isConjugateOf (const ConjugateList< CandidateClass > &aList) const
int partial_size () const
const_partial_iterator conjugate_partial_begin () const
const_partial_iterator conjugate_partial_end () const
virtual bool empty () const
virtual int size () const

Protected Member Functions

 CombinatoricList (const ConjugateList< CandidateClass > &lhs, const ConjugateList< CandidateClass > &rhs)
 CombinatoricList (const CombinatoricList< CandidateClass > &lhs, const ConjugateList< CandidateClass > &rhs)
 CombinatoricList (const ConjugateList< CandidateClass > &lhs, const CombinatoricList< CandidateClass > &rhs)
 CombinatoricList (const CombinatoricList< CandidateClass > &lhs, const CombinatoricList< CandidateClass > &rhs)
virtual dchain::LabeledCandidateList<
CandidateClass > & 
labeledCandidateList ()
virtual const dchain::LabeledCandidateList<
CandidateClass > & 
labeledCandidateList () const
virtual LabeledParticleList<
DecayClass, CandidateClass > & 
labeledParticleList ()
virtual const LabeledParticleList<
DecayClass, CandidateClass > & 
labeledParticleList () const
void setLabel (const conjugation::Label aLabel)

Private Member Functions

 CombinatoricList (void)
const CombinatoricList< CandidateClass > & operator= (const CombinatoricList< CandidateClass > &aOtherList)
void determineConjugation () const
void fill () const

Private Attributes

_combinatoriclist_vector_ & m_listOfLists
bool m_listFilled
bool m_conjugationKnown

Friends

class dchain::DecayList< DecayClass, CandidateClass >
CombinatoricList< CandidateClass > operator * (const ConjugateList< CandidateClass > &lhs, const ConjugateList< CandidateClass > &rhs)
CombinatoricList< CandidateClass > operator * (const CombinatoricList< CandidateClass > &lhs, const ConjugateList< CandidateClass > &rhs)
CombinatoricList< CandidateClass > operator * (const ConjugateList< CandidateClass > &lhs, const CombinatoricList< CandidateClass > &rhs)
CombinatoricList< CandidateClass > operator * (const CombinatoricList< CandidateClass > &lhs, const CombinatoricList< CandidateClass > &rhs)

Detailed Description

template<class CandidateClass>
class dchain::CombinatoricList< CandidateClass >

Definition at line 96 of file CombinatoricList.h.


Member Typedef Documentation

template<class CandidateClass>
typedef dchain::DecayList< DecayClass , CandidateClass >::const_iterator dchain::CombinatoricList< CandidateClass >::const_iterator

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 125 of file CombinatoricList.h.

template<class CandidateClass>
typedef dchain::DecayList< DecayClass , CandidateClass >::const_partial_iterator dchain::CombinatoricList< CandidateClass >::const_partial_iterator

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 126 of file CombinatoricList.h.

template<class CandidateClass>
typedef DCCandidateTraits<CandidateClass>::DecayClass dchain::CombinatoricList< CandidateClass >::DecayClass

Definition at line 99 of file CombinatoricList.h.

template<class CandidateClass>
typedef dchain::DecayList< DecayClass , CandidateClass >::iterator dchain::CombinatoricList< CandidateClass >::iterator

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 124 of file CombinatoricList.h.

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
typedef DecayList< DecayClass , CandidateClass > dchain::DecayList< DecayClass, CandidateClass >::self_type [inherited]

Definition at line 89 of file DecayList.h.

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
typedef DecayClass dchain::DecayList< DecayClass, CandidateClass >::value_type [inherited]

Reimplemented from dchain::CandidateList< CandidateClass >.

Reimplemented in DCDecayList< DecayClass, CandidateClass >.

Definition at line 87 of file DecayList.h.


Constructor & Destructor Documentation

template<class CandidateClass>
dchain::CombinatoricList< CandidateClass >::~CombinatoricList (  )  [virtual]

Definition at line 355 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::m_listOfLists.

00356 {
00357    delete &m_listOfLists ;
00358 }

template<class CandidateClass>
dchain::CombinatoricList< CandidateClass >::CombinatoricList ( const ConjugateList< CandidateClass > &  aList  ) 

Definition at line 290 of file CombinatoricList.cc.

00290                                                                                                    :
00291    m_listOfLists( *(new _combinatoriclist_vector_( 1 ,
00292                                                    &aList ) ) ) ,
00293    m_listFilled( false ) ,
00294    m_conjugationKnown( false )
00295 {
00296 }

template<class CandidateClass>
dchain::CombinatoricList< CandidateClass >::CombinatoricList ( const ConjugateList< CandidateClass > &  lhs,
const ConjugateList< CandidateClass > &  rhs 
) [protected]

Definition at line 299 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::m_listOfLists.

00300                                                                                  :
00301    m_listOfLists( *(new _combinatoriclist_vector_( 1 ,
00302                                                    &lhs ) ) ) ,
00303    m_listFilled( false ) ,
00304    m_conjugationKnown( false )
00305 {
00306    //std::cout << "@CombinatoricList::CombinatoricList() 11" << std::endl;
00307    //typedef typename ConjugateList< CandidateClass >::const_partial_iterator test_it;
00308    //std::cout << "lhs ...................... : " << std::endl;
00309    //for ( test_it it = lhs.partial_begin(); it != lhs.partial_end(); it++ ) {
00310    //   std::cout << (*it)().footPrint() << std::endl;
00311    //}
00312    //std::cout << "rhs ...................... : " << std::endl;
00313    //for ( test_it it = rhs.partial_begin(); it != rhs.partial_end(); it++ ) {
00314    //   std::cout << (*it)().footPrint() << std::endl;
00315    //}
00316    m_listOfLists.push_back( &rhs ) ;
00317 }

template<class CandidateClass>
dchain::CombinatoricList< CandidateClass >::CombinatoricList ( const CombinatoricList< CandidateClass > &  lhs,
const ConjugateList< CandidateClass > &  rhs 
) [protected]

Definition at line 320 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::m_listOfLists.

00321                                                                                  :
00322    m_listOfLists( *(new _combinatoriclist_vector_( lhs.m_listOfLists ) ) ) ,
00323    m_listFilled( false ) ,
00324    m_conjugationKnown( false )
00325 {
00326    m_listOfLists.push_back( &rhs ) ;
00327 }

template<class CandidateClass>
dchain::CombinatoricList< CandidateClass >::CombinatoricList ( const ConjugateList< CandidateClass > &  lhs,
const CombinatoricList< CandidateClass > &  rhs 
) [protected]

Definition at line 330 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::begin(), dchain::CombinatoricList< CandidateClass >::end(), and dchain::CombinatoricList< CandidateClass >::m_listOfLists.

00331                                                                                     :
00332    m_listOfLists( *(new _combinatoriclist_vector_( 1 ,
00333                                                    &lhs ) ) ) ,
00334    m_listFilled( false ) ,
00335    m_conjugationKnown( false )
00336 {
00337    m_listOfLists.insert( m_listOfLists.end() ,
00338                          (rhs.m_listOfLists).begin() ,
00339                          (rhs.m_listOfLists).end() ) ;
00340 }

template<class CandidateClass>
dchain::CombinatoricList< CandidateClass >::CombinatoricList ( const CombinatoricList< CandidateClass > &  lhs,
const CombinatoricList< CandidateClass > &  rhs 
) [protected]

Definition at line 343 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::begin(), dchain::CombinatoricList< CandidateClass >::end(), and dchain::CombinatoricList< CandidateClass >::m_listOfLists.

00344                                                                                     :
00345    m_listOfLists( *(new _combinatoriclist_vector_( lhs.m_listOfLists ) ) ) ,
00346    m_listFilled( false ) ,
00347    m_conjugationKnown( false )
00348 {
00349    m_listOfLists.insert( m_listOfLists.end() ,
00350                          (rhs.m_listOfLists).begin() ,
00351                          (rhs.m_listOfLists).end() ) ;
00352 }

template<class CandidateClass>
dchain::CombinatoricList< CandidateClass >::CombinatoricList ( void   )  [private]

template<class CandidateClass>
dchain::CombinatoricList< CandidateClass >::CombinatoricList ( const CombinatoricList< CandidateClass > &  aOtherList  ) 

Definition at line 281 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::m_listOfLists.

00281                                                                                                    :
00282    m_listOfLists( *(new _combinatoriclist_vector_() ) ),
00283    m_listFilled( iRHS.m_listFilled ) ,
00284    m_conjugationKnown( iRHS.m_conjugationKnown )
00285 {
00286    m_listOfLists.swap(const_cast<CombinatoricList<CandidateClass>&>(iRHS).m_listOfLists);
00287 }


Member Function Documentation

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
template<class TSelect>
bool dchain::DecayList< DecayClass, CandidateClass >::attempt_insert ( DecayClass *  pPossible,
const conjugation::Label  aLabel,
const TSelect &  aSelect 
) [inline, inherited]

Definition at line 206 of file DecayList.h.

Referenced by dchain::DecayList< DCCandidateTraits< CandidateClass >::DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::fill(), and dchain::operator+().

00208                                      {
00209          ReferenceHolder<DecayClass> pHolder( pPossible );
00210          bool returnValue = aSelect(*pPossible);
00211          if (returnValue) {
00212             this->insert(pPossible,aLabel);
00213          }
00214          return returnValue;
00215       }

template<class CandidateClass>
const dchain::DecayList< typename CombinatoricList< CandidateClass >::DecayClass, CandidateClass > dchain::CombinatoricList< CandidateClass >::bar (  )  const [virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 413 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill(), dchain::CombinatoricList< CandidateClass >::label(), dchain::DecayList< DecayClass, CandidateClass >::labeledParticleList(), and dchain::otherLabel().

00414 {
00415    fill() ;
00416 // Need to cast away 'const' to get the right type of LabelList returned
00417    return ( dchain::DecayList< DecayClass , CandidateClass >(
00418       (*(CombinatoricList< CandidateClass >*)this).labeledParticleList() ,
00419       otherLabel( label() ) ) ) ;
00420 }

template<class CandidateClass>
dchain::CandidateList< CandidateClass >::const_iterator dchain::CombinatoricList< CandidateClass >::begin (  )  const [virtual]

Reimplemented from dchain::CandidateList< CandidateClass >.

Definition at line 442 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

00443 {
00444    fill() ;
00445    return ( dchain::DecayList< DecayClass , CandidateClass >::begin() ) ;
00446 }

template<class CandidateClass>
dchain::CandidateList< CandidateClass >::iterator dchain::CombinatoricList< CandidateClass >::begin (  )  [virtual]

Reimplemented from dchain::CandidateList< CandidateClass >.

Definition at line 372 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

Referenced by dchain::CombinatoricList< CandidateClass >::CombinatoricList(), and dchain::CombinatoricList< CandidateClass >::fill().

00373 {
00374    fill() ;
00375    return ( dchain::DecayList< DecayClass , CandidateClass >::begin() ) ;
00376 }

template<class CandidateClass>
ConjugateList< CandidateClass >::const_partial_iterator dchain::ConjugateList< CandidateClass >::conjugate_partial_begin (  )  const [inherited]

Definition at line 152 of file ConjugateList.cc.

References dchain::ConjugateList< CandidateClass >::m_label, and dchain::otherLabel().

Referenced by dchain::CombinatoricList< CandidateClass >::fill().

00153 {
00154    return ( this->labeledCandidateList().begin( otherLabel( m_label ) ) ) ;
00155 }

template<class CandidateClass>
ConjugateList< CandidateClass >::const_partial_iterator dchain::ConjugateList< CandidateClass >::conjugate_partial_end (  )  const [inherited]

Definition at line 158 of file ConjugateList.cc.

References dchain::ConjugateList< CandidateClass >::m_label, and dchain::otherLabel().

Referenced by dchain::CombinatoricList< CandidateClass >::fill().

00159 {
00160    return ( this->labeledCandidateList().end( otherLabel( m_label ) ) ) ;
00161 }

template<class CandidateClass>
template<class TAnalyzer>
void dchain::CombinatoricList< CandidateClass >::conjugation_iterate ( const TAnalyzer &  analyze  )  const [inline]

TAnalyzer takes two arguments 1) const CandidateClass& 2) a bool which is 'true' if the candiate matches the present conjugation

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 166 of file CombinatoricList.h.

References dchain::DecayList< DecayClass, CandidateClass >::conjugation_iterate(), and dchain::CombinatoricList< CandidateClass >::fill().

template<class CandidateClass>
void dchain::CombinatoricList< CandidateClass >::determineConjugation (  )  const [private]

Definition at line 519 of file CombinatoricList.cc.

References _combinatoriclist_vector_, false, dchain::ConjugateList< CandidateClass >::isConjugateOf(), dchain::CombinatoricList< CandidateClass >::isSelfConjugate(), dchain::kBaseLabel, dchain::conjugation::kNone, dchain::CombinatoricList< CandidateClass >::m_conjugationKnown, and dchain::CombinatoricList< CandidateClass >::m_listOfLists.

Referenced by dchain::CombinatoricList< CandidateClass >::isSelfConjugate(), and dchain::CombinatoricList< CandidateClass >::label().

00520 {
00521    if ( m_conjugationKnown ) {
00522       return ;
00523    }
00524    _combinatoriclist_vector_ unConjugatedLists ;
00525    typename _combinatoriclist_vector_::const_iterator finishedTesting ( m_listOfLists.end() ) ;
00526    for ( typename _combinatoriclist_vector_::const_iterator list( m_listOfLists.begin() ) ;
00527          list != finishedTesting ;
00528          ++list ) {
00529       if ( ! (*(*list)).isSelfConjugate() ) {
00530          bool noMatchFound( !false ) ;
00531          typename _combinatoriclist_vector_::iterator matchToCheck( unConjugatedLists.begin() ) ;
00532          typename _combinatoriclist_vector_::iterator finishedMatching ( unConjugatedLists.end() ) ;
00533          while ( noMatchFound &&
00534                  ( matchToCheck != finishedMatching ) ) {
00535             if ( (*(*list)).isConjugateOf( (*(*matchToCheck)) ) ) {
00536                unConjugatedLists.erase( matchToCheck ) ;
00537                noMatchFound = false ;
00538             }
00539             ++matchToCheck ;
00540          }
00541          if ( noMatchFound ) {
00542             unConjugatedLists.push_back( *list ) ;
00543          }
00544       }
00545    }
00546    if ( 0 == unConjugatedLists.size() ) {
00547 // have to cast away 'const' to set the real value of the label
00548       (*(CombinatoricList< CandidateClass >*)this).setLabel( conjugation::kNone ) ;
00549    }
00550    else {
00551 // have to cast away 'const' to set the real value of the label
00552       (*(CombinatoricList< CandidateClass >*)this).setLabel( kBaseLabel ) ;
00553    }
00554 // have to cast away 'const' to set the real value of the flag
00555    (*(CombinatoricList< CandidateClass >*)this).m_conjugationKnown = !false ;
00556 }

template<class CandidateClass>
bool dchain::CandidateList< CandidateClass >::empty (  )  const [virtual, inherited]

Definition at line 135 of file CandidateList.cc.

References dchain::CandidateList< CandidateClass >::labeledCandidateList().

00136 {
00137    return ( labeledCandidateList().empty() ) ;
00138 }

template<class CandidateClass>
dchain::CandidateList< CandidateClass >::const_iterator dchain::CombinatoricList< CandidateClass >::end (  )  const [virtual]

Reimplemented from dchain::CandidateList< CandidateClass >.

Definition at line 449 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

00450 {
00451    fill() ;
00452    return ( dchain::DecayList< DecayClass , CandidateClass >::end() ) ;
00453 }

template<class CandidateClass>
dchain::CandidateList< CandidateClass >::iterator dchain::CombinatoricList< CandidateClass >::end (  )  [virtual]

Reimplemented from dchain::CandidateList< CandidateClass >.

Definition at line 379 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

Referenced by dchain::CombinatoricList< CandidateClass >::CombinatoricList(), and dchain::CombinatoricList< CandidateClass >::fill().

00380 {
00381    fill() ;
00382    return ( dchain::DecayList< DecayClass , CandidateClass >::end() ) ;
00383 }

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
void dchain::DecayList< DecayClass, CandidateClass >::erase (  )  [inline, inherited]

Definition at line 187 of file DecayList.h.

Referenced by DCDecayList< DecayClass, CandidateClass >::operator=().

00187                 {
00188       eraseContents();
00189    }

template<class DecayClass, class CandidateClass>
void dchain::DecayList< DecayClass, CandidateClass >::eraseContents (  )  [inherited]

Definition at line 243 of file DecayList.cc.

References dchain::DecayList< DecayClass, CandidateClass >::m_list.

Referenced by dchain::DecayList< DCCandidateTraits< CandidateClass >::DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::erase().

00244 {
00245    m_list->erase( m_list->begin() ,
00246                  m_list->end() ) ;
00247 }

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
template<class TDecayList, class TSelector>
void dchain::DecayList< DecayClass, CandidateClass >::fill ( const TDecayList< DecayClass, CandidateClass > &  aList,
const TSelector &  aSel = SelectAll<DecayClass>() 
) [inline, inherited]

Definition at line 227 of file DecayList.h.

Referenced by dchain::DecayList< DecayClass, CandidateClass >::DecayList(), dchain::operator+(), dchain::DecayList< DCCandidateTraits< CandidateClass >::DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::operator+=(), dchain::DecayList< DecayClass, CandidateClass >::operator=(), and dchain::DecayList< DCCandidateTraits< CandidateClass >::DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::operator=().

00227                                                                                             {
00228          //std::cout << "@DecayList::fill()" << std::endl;
00229          setLabel( aList.label() ) ;
00230          typename TDecayList::const_iterator finished( aList.particle_end() ) ;
00231          for ( typename TDecayList::const_iterator entry( aList.particle_begin() ) ;
00232                entry != finished ;
00233                ++entry ) {
00234             //std::cout << "@ DecayList::fill()" << std::endl;
00235             DecayClass* localCopy = new DecayClass( (*entry).particle() ) ;
00236             attempt_insert( localCopy ,
00237                   (*entry).label(),
00238                   aSel ) ;
00239          }
00240       }

template<class CandidateClass>
void dchain::CombinatoricList< CandidateClass >::fill (  )  const [private]

Definition at line 559 of file CombinatoricList.cc.

References _combinatoricloop_vector_, dchain::CombinatoricList< CandidateClass >::begin(), dchain::ConjugateList< CandidateClass >::conjugate_partial_begin(), dchain::ConjugateList< CandidateClass >::conjugate_partial_end(), dchain::CombinatoricList< CandidateClass >::end(), false, fill(), dchain::CombinatoricList< CandidateClass >::isSelfConjugate(), dchain::kBaseLabel, dchain::conjugation::kNone, dchain::DecayList< DecayClass, CandidateClass >::labeledParticleList(), dchain::CombinatoricList< CandidateClass >::m_listFilled, dchain::CombinatoricList< CandidateClass >::m_listOfLists, dchain::otherLabel(), dchain::CombinatoricList< CandidateClass >::partial_begin(), and dchain::CombinatoricList< CandidateClass >::partial_end().

Referenced by dchain::CombinatoricList< CandidateClass >::bar(), dchain::CombinatoricList< CandidateClass >::begin(), dchain::CombinatoricList< CandidateClass >::conjugation_iterate(), dchain::CombinatoricList< CandidateClass >::end(), dchain::CombinatoricList< CandidateClass >::iterate(), dchain::CombinatoricList< CandidateClass >::labeledCandidateList(), dchain::CombinatoricList< CandidateClass >::operator()(), dchain::CombinatoricList< CandidateClass >::partial_begin(), dchain::CombinatoricList< CandidateClass >::partial_end(), dchain::CombinatoricList< CandidateClass >::partial_iterate(), dchain::CombinatoricList< CandidateClass >::partial_particle_begin(), dchain::CombinatoricList< CandidateClass >::partial_particle_end(), dchain::CombinatoricList< CandidateClass >::particle_begin(), and dchain::CombinatoricList< CandidateClass >::particle_end().

00560 {
00561    //std::cout << "@CombinatoricList::fill(), filled = " << m_listFilled << std::endl;
00562    if ( m_listFilled ) {
00563       return ;
00564    }
00565 //
00566 // Create CombinatoricLoop lists for `primary' half of the list.
00567 // If list is not self-conjugate, fill CombinatoricLoop lists for `conjugate'
00568 //   half of the list as well.
00569 //
00570    const short kPrimary = 0 ;
00571    const short kConjugate = 1 ;
00572    const short kEndLoopType = 2 ;
00573    _combinatoricloop_vector_ loopList[ 2 ] ;
00574    typename _combinatoricloop_vector_::iterator initialLoop[ 2 ] ;
00575    typename _combinatoricloop_vector_::iterator secondLoop[ 2 ] ;
00576    typename _combinatoricloop_vector_::iterator endLoop[ 2 ] ;
00577    for ( short loopType( kPrimary ) ;
00578          loopType != kEndLoopType ;
00579          ++loopType ) {
00580       if ( ( kConjugate != loopType ) ||
00581            ( ! isSelfConjugate() ) ) {
00582          loopList[ loopType ].reserve( m_listOfLists.size() ) ;
00583          typename _combinatoriclist_vector_::const_iterator finishedBuilding( m_listOfLists.end() ) ;
00584          for ( typename _combinatoriclist_vector_::const_iterator listForLoop( m_listOfLists.begin() ) ;
00585                listForLoop != finishedBuilding ;
00586                ++listForLoop ) {
00587             CombinatoricLoop< CandidateClass >* newLoop ;
00588             if ( kPrimary == loopType ) {
00589                newLoop = new CombinatoricLoop< CandidateClass >( (*(*listForLoop)).partial_begin() ,
00590                                                              (*(*listForLoop)).partial_end() ,
00591                                                              loopList[ loopType ] ) ;
00592             }
00593             else {
00594                newLoop = new CombinatoricLoop< CandidateClass >( (*(*listForLoop)).conjugate_partial_begin() ,
00595                                                              (*(*listForLoop)).conjugate_partial_end() ,
00596                                                              loopList[ loopType ] ) ;
00597             }
00598             loopList[ loopType ].push_back( newLoop ) ;
00599          }
00600          initialLoop[ loopType ] = loopList[ loopType ].begin() ;
00601          secondLoop[ loopType ] = initialLoop[ loopType ] + 1 ;
00602          endLoop[ loopType ] = loopList[ loopType ].end() ;
00603       }
00604    }
00605 //
00606 // do loop through initial ConjugateList
00607 //
00608    conjugation::Label conjugationLabel = kBaseLabel;
00609    if( isSelfConjugate() ) {
00610       conjugationLabel = conjugation::kNone;
00611    } 
00612       
00613    FillDecayList< DecayClass , CandidateClass >::fill(
00614       *(*initialLoop[ kPrimary ]),
00615       secondLoop[ kPrimary ] ,
00616       endLoop[ kPrimary ] ,
00617       conjugationLabel,
00618       const_cast<CombinatoricList< CandidateClass >*>(this)->labeledParticleList() );
00619 
00620    if( !isSelfConjugate() ) {
00621       FillDecayList< DecayClass , CandidateClass >::fill(
00622          *(*initialLoop[ kConjugate ]),
00623          secondLoop[ kConjugate ] ,
00624          endLoop[ kConjugate ] ,
00625          otherLabel(conjugationLabel),
00626          const_cast<CombinatoricList< CandidateClass >*>(this)->labeledParticleList() );
00627    }
00628    /*
00629 #if defined(THIS_IS_NEVER_TRUE)
00630    conjugation::Label entryLabel[ 2 ] ;
00631    if ( ! isSelfConjugate() ) {
00632       entryLabel[ 0 ] = kBaseLabel ;
00633       entryLabel[ 1 ] = otherLabel( kBaseLabel ) ;
00634    }
00635    else {
00636       entryLabel[ 0 ] = conjugation::kNone ;
00637    }
00638    const ConjugateList< CandidateClass >& initialList( (*(*(m_listOfLists.begin()))) ) ;
00639    typename dchain::CandidateList< CandidateClass >::const_partial_iterator initialListEntry[ 2 ] ;
00640    initialListEntry[ kPrimary ] = initialList.partial_begin() ;
00641    if ( ! isSelfConjugate() ) {
00642       initialListEntry[ kConjugate ] = initialList.conjugate_partial_begin() ;
00643    }
00644    typename dchain::CandidateList< CandidateClass >::const_iterator finished( initialList.end() ) ;
00645    for ( typename dchain::CandidateList< CandidateClass >::const_iterator entry( initialList.begin() ) ;
00646          entry != finished ;
00647          ++entry ) {
00648 //
00649 // if entry is in `primary' half of list build all decays for this
00650 //   entry, otherwise, if list is not self-conjugate build all decays
00651 //   for this `conjugate' entry
00652 //
00653       short entryType( kConjugate ) ;
00654       if ( &(*entry) == &(*initialListEntry[ kPrimary ]) ) {
00655          entryType = kPrimary ;
00656       }
00657       if ( ( kConjugate != entryType ) ||
00658            ( ! isSelfConjugate() ) ) {
00659          (*(*initialLoop[ entryType ])).setCurrentIterator( initialListEntry[ entryType ] ) ;
00660          ReferenceHolder<DecayClass> initialDecay( new DecayClass( (*initialListEntry[ entryType ]).labeledClass() ) );
00661 //
00662 // Note: need to cast way `const' to make sure a non-const LabeledParticleList
00663 //         is returned 
00664 //
00665          typename FillDecayList<DecayClass, CandidateClass>::ChildList childList(initialDecay.pointer());
00666 
00667          FillDecayList< DecayClass , CandidateClass >::
00668             doIt( secondLoop[ entryType ] ,
00669                   endLoop[ entryType ] ,
00670                   childList,
00671                   entryLabel[ entryType ] ,
00672                   (*(CombinatoricList< CandidateClass >*)this).labeledParticleList()
00673                   //this->labeledParticleList()
00674                   ) ;
00675          ++initialListEntry[ entryType ] ;
00676       }
00677    }
00678 #endif
00679    */
00680 //
00681 // delete contents of CombinatoricLoop lists.
00682 //
00683    for ( short halfType( kPrimary ) ;
00684          halfType != kEndLoopType ;
00685          ++halfType ) {
00686       if ( ( kConjugate != halfType ) ||
00687            ( ! isSelfConjugate() ) ) {
00688          typename _combinatoricloop_vector_::iterator finishedDeletion( loopList[ halfType ].end() ) ;
00689          for ( typename _combinatoricloop_vector_::iterator loopInList( loopList[ halfType ].begin() ) ;
00690                loopInList != finishedDeletion ;
00691                ++loopInList ) {
00692             delete *loopInList ;
00693          }
00694       }
00695    }
00696    m_listFilled = !false ;
00697 }

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
template<class THolder>
void dchain::DecayList< DecayClass, CandidateClass >::insert ( THolder &  pPossible,
const conjugation::Label  aLabel 
) [inline, inherited]

Definition at line 218 of file DecayList.h.

Referenced by dchain::DecayList< DCCandidateTraits< CandidateClass >::DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::attempt_insert().

00219                                            {
00220          m_list->push_back( LabeledParticle< DecayClass >( pPossible ,
00221                   aLabel ) ) ;
00222       }

template<class CandidateClass>
bool dchain::ConjugateList< CandidateClass >::isConjugateOf ( const ConjugateList< CandidateClass > &  aList  )  const [inherited]

Definition at line 127 of file ConjugateList.cc.

References dchain::ConjugateList< CandidateClass >::label(), dchain::CandidateList< CandidateClass >::labeledCandidateList(), and dchain::otherLabel().

Referenced by dchain::CombinatoricList< CandidateClass >::determineConjugation().

00128 {
00129    return ( ( &(this->labeledCandidateList()) == &(aList.labeledCandidateList()) ) &&
00130             ( label() == otherLabel( aList.label() ) ) ) ;
00131 }

template<class CandidateClass>
bool dchain::CombinatoricList< CandidateClass >::isSelfConjugate (  )  const [virtual]

Reimplemented from dchain::ConjugateList< CandidateClass >.

Definition at line 435 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::determineConjugation().

Referenced by dchain::CombinatoricList< CandidateClass >::determineConjugation(), and dchain::CombinatoricList< CandidateClass >::fill().

template<class CandidateClass>
template<class TAnalyzer>
void dchain::CandidateList< CandidateClass >::iterate ( const TAnalyzer &  analyze  )  const [inline, inherited]

Reimplemented in dchain::ChosenChargeList< Charged, CandidateClass >, dchain::ChosenConjugateList< Conjugate, CandidateClass >, dchain::ChosenChargeList< Charged, Charged::CandidateClass >, dchain::ChosenConjugateList< NeutralNC, NeutralNC::CandidateClass >, and dchain::ChosenConjugateList< NeutralNC, CandidateClass >.

Definition at line 102 of file CandidateList.h.

00102                                                         {
00103             const_iterator finished ( end() );
00104             for ( const_iterator entry ( begin() ) ;
00105                   entry != finished ;
00106                   ++entry ) {
00107                analyze( (*entry)() ) ;
00108             }
00109          }

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
template<class TAnalyze>
void dchain::DecayList< DecayClass, CandidateClass >::iterate ( TAnalyze &  analyze  )  const [inline, inherited]

Definition at line 165 of file DecayList.h.

00165                                              {
00166          const_iterator finished ( particle_end() ) ;
00167          for ( const_iterator entry ( particle_begin() ) ;
00168                entry != finished ;
00169                ++entry ) {
00170             analyze( (*entry).particle() ) ;
00171          }
00172       }

template<class CandidateClass>
template<class TAnalyze>
void dchain::CombinatoricList< CandidateClass >::iterate ( const TAnalyze &  analyze  )  const [inline]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 160 of file CombinatoricList.h.

References dchain::CombinatoricList< CandidateClass >::fill(), and dchain::DecayList< DecayClass, CandidateClass >::iterate().

00160                                                    {
00161          fill();
00162          dchain::DecayList<DecayClass,CandidateClass>::iterate(analyze);
00163       }

template<class CandidateClass>
conjugation::Label dchain::CombinatoricList< CandidateClass >::label (  )  const [virtual]

Reimplemented from dchain::ConjugateList< CandidateClass >.

Definition at line 505 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::determineConjugation().

Referenced by dchain::CombinatoricList< CandidateClass >::bar().

template<class CandidateClass>
const dchain::LabeledCandidateList< CandidateClass > & dchain::CombinatoricList< CandidateClass >::labeledCandidateList (  )  const [protected, virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 512 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

template<class CandidateClass>
dchain::LabeledCandidateList< CandidateClass > & dchain::CombinatoricList< CandidateClass >::labeledCandidateList (  )  [protected, virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 401 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

template<class DecayClass, class CandidateClass>
const LabeledParticleList< DecayClass, CandidateClass > & dchain::DecayList< DecayClass, CandidateClass >::labeledParticleList (  )  const [protected, virtual, inherited]

Definition at line 258 of file DecayList.cc.

References dchain::DecayList< DecayClass, CandidateClass >::m_list.

00259 {
00260    return ( *m_list ) ;
00261 }

template<class DecayClass, class CandidateClass>
dchain::LabeledParticleList< DecayClass, CandidateClass > & dchain::DecayList< DecayClass, CandidateClass >::labeledParticleList (  )  [protected, virtual, inherited]

Definition at line 188 of file DecayList.cc.

References dchain::DecayList< DecayClass, CandidateClass >::m_list.

Referenced by dchain::CombinatoricList< CandidateClass >::bar(), and dchain::CombinatoricList< CandidateClass >::fill().

00189 {
00190    return ( *m_list ) ;
00191 }

template<class CandidateClass>
const dchain::DecayList< typename CombinatoricList< CandidateClass >::DecayClass, CandidateClass > & dchain::CombinatoricList< CandidateClass >::operator() (  )  const [virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 424 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

00425 {
00426    fill() ;
00427 // // Need to cast away 'const' to get the right type of LabelList returned
00428 //    return ( dchain::DecayList< DecayClass , CandidateClass >( (*(CombinatoricList< CandidateClass >*)this).labeledDecayList() ,
00429 //                                 label() ) ) ;
00430    return ( *this ) ;
00431 }

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
template<class TList>
void dchain::DecayList< DecayClass, CandidateClass >::operator+= ( const TList &  aOtherList  )  [inline, inherited]

Reimplemented in DCDecayList< DecayClass, CandidateClass >.

Definition at line 112 of file DecayList.h.

00112                                                 {
00113 
00114          if(this->size() != 0 ) {
00115             //only check compatable conjugation if something already in
00116             // this list, otherwise could have problem with default value
00117             bool can_only_add_lists_with_same_conjugation =
00118                this->isSelfConjugate()== aOtherList.isSelfConjugate();
00119             assert(can_only_add_lists_with_same_conjugation);
00120          }
00121          fill(aOtherList);
00122       }

template<class CandidateClass>
const CombinatoricList< CandidateClass >& dchain::CombinatoricList< CandidateClass >::operator= ( const CombinatoricList< CandidateClass > &  aOtherList  )  [private]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

template<class DecayClass, class CandidateClass = typename DecayClass::CandidateClass>
template<class TSelector>
FillListWithSelection<self_type, TSelector> dchain::DecayList< DecayClass, CandidateClass >::operator[] ( const TSelector &  iSel  )  [inline, inherited]

Definition at line 125 of file DecayList.h.

00125                                                                                     {
00126          return FillListWithSelection<self_type,TSelector>(*this, iSel);
00127       }

template<class CandidateClass>
dchain::CandidateList< CandidateClass >::const_partial_iterator dchain::CombinatoricList< CandidateClass >::partial_begin (  )  const [virtual]

Reimplemented from dchain::ConjugateList< CandidateClass >.

Definition at line 456 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

Referenced by dchain::CombinatoricList< CandidateClass >::fill().

00457 {
00458    fill() ;
00459    return ( dchain::DecayList< DecayClass , CandidateClass >::partial_begin() ) ;
00460 }

template<class CandidateClass>
dchain::CandidateList< CandidateClass >::const_partial_iterator dchain::CombinatoricList< CandidateClass >::partial_end (  )  const [virtual]

Reimplemented from dchain::ConjugateList< CandidateClass >.

Definition at line 463 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

Referenced by dchain::CombinatoricList< CandidateClass >::fill().

00464 {
00465    fill() ;
00466    return ( dchain::DecayList< DecayClass , CandidateClass >::partial_end() ) ;
00467 }

template<class CandidateClass>
template<class TAnalyzer>
void dchain::ConjugateList< CandidateClass >::partial_iterate ( const TAnalyzer &  analyze  )  const [inline, inherited]

Reimplemented in dchain::ChosenChargeList< Charged, CandidateClass >, dchain::ChosenConjugateList< Conjugate, CandidateClass >, dchain::ChosenChargeList< Charged, Charged::CandidateClass >, dchain::ChosenConjugateList< NeutralNC, NeutralNC::CandidateClass >, and dchain::ChosenConjugateList< NeutralNC, CandidateClass >.

Definition at line 128 of file ConjugateList.h.

00128                                                              {
00129          const_partial_iterator finished ( partial_end() ) ;
00130          for ( const_partial_iterator entry ( partial_begin() ) ;
00131                entry != finished ;
00132                ++entry ) {
00133             analyze( (*entry)() ) ;
00134          }
00135       }

template<class CandidateClass>
template<class TAnalyze>
void dchain::CombinatoricList< CandidateClass >::partial_iterate ( TAnalyze &  analyze  )  const [inline]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 173 of file CombinatoricList.h.

References dchain::CombinatoricList< CandidateClass >::fill(), and dchain::DecayList< DecayClass, CandidateClass >::partial_iterate().

template<class CandidateClass>
dchain::DecayList< typename DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::const_partial_iterator dchain::CombinatoricList< CandidateClass >::partial_particle_begin (  )  const [virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 489 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

template<class CandidateClass>
dchain::DecayList< typename DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::const_partial_iterator dchain::CombinatoricList< CandidateClass >::partial_particle_end (  )  const [virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 497 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

template<class CandidateClass>
int dchain::ConjugateList< CandidateClass >::partial_size (  )  const [inherited]

Definition at line 134 of file ConjugateList.cc.

References dchain::ConjugateList< CandidateClass >::m_label.

00135 {
00136    return ( this->labeledCandidateList().size( m_label ) ) ;
00137 }

template<class CandidateClass>
dchain::DecayList< typename DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::const_iterator dchain::CombinatoricList< CandidateClass >::particle_begin (  )  const [virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 471 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

00472 {
00473    //std::cout << "@CombinatoricList::particle_begin() -- iterator" << std::endl;
00474    fill() ;
00475    return ( dchain::DecayList< DecayClass , CandidateClass >::particle_begin() ) ;
00476 }

template<class CandidateClass>
dchain::DecayList< typename DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::iterator dchain::CombinatoricList< CandidateClass >::particle_begin (  )  [virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 386 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

00387 {
00388    //std::cout << "@CombinatoricList::particle_begin() -- iterator" << std::endl;
00389    fill() ;
00390    return ( dchain::DecayList< DecayClass , CandidateClass >::particle_begin() ) ;
00391 }

template<class CandidateClass>
dchain::DecayList< typename DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::const_iterator dchain::CombinatoricList< CandidateClass >::particle_end (  )  const [virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 480 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

00481 {
00482    //std::cout << "@CombinatoricList::particle_end() -- const_iterator" << std::endl;
00483    fill() ;
00484    return ( dchain::DecayList< DecayClass , CandidateClass >::particle_end() ) ;
00485 }

template<class CandidateClass>
dchain::DecayList< typename DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::iterator dchain::CombinatoricList< CandidateClass >::particle_end (  )  [virtual]

Reimplemented from dchain::DecayList< DecayClass, CandidateClass >.

Definition at line 394 of file CombinatoricList.cc.

References dchain::CombinatoricList< CandidateClass >::fill().

00394                                                                                                                                                            {
00395    //std::cout << "@CombinatoricList::particle_end() -- iterator" << std::endl;
00396    fill() ;
00397    return ( dchain::DecayList< DecayClass , CandidateClass >::particle_end() ) ;
00398 }

template<class CandidateClass>
void dchain::ConjugateList< CandidateClass >::setLabel ( const conjugation::Label  aLabel  )  [protected, inherited]

Definition at line 111 of file ConjugateList.cc.

References dchain::ConjugateList< CandidateClass >::m_label.

Referenced by dchain::DecayList< DCCandidateTraits< CandidateClass >::DCCandidateTraits< CandidateClass >::DecayClass, CandidateClass >::fill().

00112 {
00113    m_label = aLabel ;
00114 }

template<class CandidateClass>
int dchain::CandidateList< CandidateClass >::size (  )  const [virtual, inherited]

Definition at line 143 of file CandidateList.cc.

References dchain::CandidateList< CandidateClass >::labeledCandidateList().

Referenced by NeutralDReconstruction::execute(), DsReconstruction::execute(), and ChargedDReconstruction::execute().

00144 {
00145    return ( labeledCandidateList().size() ) ;
00146 }


Friends And Related Function Documentation

template<class CandidateClass>
friend class dchain::DecayList< DecayClass, CandidateClass > [friend]

Definition at line 104 of file CombinatoricList.h.

template<class CandidateClass>
CombinatoricList< CandidateClass > operator * ( const CombinatoricList< CandidateClass > &  lhs,
const CombinatoricList< CandidateClass > &  rhs 
) [friend]

template<class CandidateClass>
CombinatoricList< CandidateClass > operator * ( const ConjugateList< CandidateClass > &  lhs,
const CombinatoricList< CandidateClass > &  rhs 
) [friend]

template<class CandidateClass>
CombinatoricList< CandidateClass > operator * ( const CombinatoricList< CandidateClass > &  lhs,
const ConjugateList< CandidateClass > &  rhs 
) [friend]

template<class CandidateClass>
CombinatoricList< CandidateClass > operator * ( const ConjugateList< CandidateClass > &  lhs,
const ConjugateList< CandidateClass > &  rhs 
) [friend]


Member Data Documentation

template<class CandidateClass>
bool dchain::CombinatoricList< CandidateClass >::m_conjugationKnown [private]

Definition at line 230 of file CombinatoricList.h.

Referenced by dchain::CombinatoricList< CandidateClass >::determineConjugation().

template<class CandidateClass>
bool dchain::CombinatoricList< CandidateClass >::m_listFilled [mutable, private]

Definition at line 229 of file CombinatoricList.h.

Referenced by dchain::CombinatoricList< CandidateClass >::fill().

template<class CandidateClass>
_combinatoriclist_vector_& dchain::CombinatoricList< CandidateClass >::m_listOfLists [private]

Definition at line 228 of file CombinatoricList.h.

Referenced by dchain::CombinatoricList< CandidateClass >::CombinatoricList(), dchain::CombinatoricList< CandidateClass >::determineConjugation(), dchain::CombinatoricList< CandidateClass >::fill(), and dchain::CombinatoricList< CandidateClass >::~CombinatoricList().


Generated on Tue Nov 29 23:36:26 2016 for BOSS_7.0.2 by  doxygen 1.4.7