14 using namespace DecayTreeFitter;
23 os <<
"Constraints in decay tree: " << m_constraintlist.size() << std::endl ;
24 for( ParticleBase::constraintlist::const_iterator
25 it = m_constraintlist.begin() ;
26 it != m_constraintlist.end(); ++it)
31 : m_dim(0),m_mother(0),m_isOwner(true)
44 : m_dim(0),m_mother(0),m_isOwner(true)
56 : m_dim(0),m_mother(0),m_isOwner(true)
68 : m_dim(0),m_mother(0),m_isOwner(true)
81 if(m_mother && m_isOwner)
delete m_mother ;
87 if( m_dim==0 ) m_mother->updateIndex(m_dim) ;
88 m_constraintlist.clear() ;
89 m_mother->addToConstraintList(m_constraintlist,0) ;
92 std::sort(m_constraintlist.begin(),m_constraintlist.end()) ;
95 m_mergedconstraintlist.clear() ;
98 for( ParticleBase::constraintlist::iterator it = m_constraintlist.begin() ;
99 it != m_constraintlist.end(); ++it) {
100 if( it->isLineair() ) m_mergedconstraintlist.push_back(&(*it)) ;
101 else m_mergedconstraint.push_back(&(*it)) ;
103 if( m_mergedconstraint.dim()>0 )
104 m_mergedconstraintlist.push_back(&m_mergedconstraint) ;
107 std::cout <<
"DecayTreeFitter::DecayChain::initConstraintList(): " << m_constraintlist.size() <<
" "
108 << m_mergedconstraintlist.size()<< std::endl ;
116 if(
vtxverbose>5){std::cout<<
"DecayChain::init(): - start"<<std::endl;}
120 if(
vtxverbose>5){std::cout<<
"DecayChain::init(): - update index"<<std::endl;}
121 m_mother->updateIndex(m_dim) ;
124 if( par->
dim() != m_dim ){
125 if(
vtxverbose>5){std::cout<<
"DecayChain::init(): - reset 1"<<std::endl;}
129 if(
vtxverbose>5){std::cout<<
"DecayChain::init(): - reset 2"<<std::endl;}
134 if(
vtxverbose>5){std::cout<<
"DecayChain::init(): - initpar"<<std::endl;}
135 status |= m_mother->initPar1(par) ;
136 if(
vtxverbose>5){std::cout<<
"DecayChain::init(): - initcov"<<std::endl;}
137 status |= m_mother->initCov(par) ;
139 if(
vtxverbose>=2){ std::cout <<
"status after init: "; status.
Print(std::cout); std::cout<< std::endl ;}
147 if(
vtxverbose>=4){std::cout<<
"DecayChain::filter(): - ok, let's do this! Btw. we're "<<( firstpass ?
"" :
"not ")<<
"on first pass."<<std::endl;}
149 if(m_constraintlist.empty()){
150 if(
vtxverbose>=4){std::cout<<
"DecayChain::filter(): - init constrains"<<std::endl;}
151 initConstraintList() ;
156 if(firstpass || !par->
testCov()){
157 status |= m_mother->initCov(par) ;
158 if(
vtxverbose>=3){std::cout<<
"DecayChain::filter(): - initcov done"<<std::endl;}
162 std::cout <<
"DecayTreeFitter::DecayChain::filter, after initialization: " << std::endl ;
163 m_mother->print(par) ;
168 if(m_mergedconstraintlist.empty() ) {
169 for( ParticleBase::constraintlist::const_iterator it = m_constraintlist.begin() ;
170 it != m_constraintlist.end(); ++it) {
171 status |= it->filter(par,reference) ;
173 std::cout <<
"DecayChain::filter(): status is failure after parsing constraint: " ;
178 for( std::vector<Constraint*>::const_iterator it = m_mergedconstraintlist.begin() ;
179 it != m_mergedconstraintlist.end(); ++it) {
180 status |= (*it)->filter(par,reference) ;
182 std::cout <<
"DecayChain::filter(): status is failure after parsing constraint: " ;
189 if(
vtxverbose>=3) {std::cout <<
"DecayChain::filter: status = "; status.
Print(std::cout); std::cout<< std::endl ;}
190 if(reference)
delete reference;
197 return m_mother->chiSquareD(par) ;
204 ParticleMap::const_iterator it = m_particleMap.find(bc) ;
205 if( it == m_particleMap.end() ) {
206 rc = m_mother->
locate(bc) ;
209 if(rc) m_particleMap[rc->
particle()] = rc ;
222 m_constraintlist.clear() ;
233 m_constraintlist.clear() ;
275 if(base) rc = base->
index() ;
282 return base ? base->
posIndex() : -1 ;
288 return base ? base->
momIndex() : -1 ;
294 return base ? base->
lenIndex() : 0 ;
int momIndex(RhoCandidate *bc) const
int lenIndex(RhoCandidate *bc) const
ErrCode init(FitParams *par)
const ParticleBase * locate(RhoCandidate *bc) const
RhoCandidate * particle() const
virtual int momIndex() const
virtual int lenIndex() const
void initConstraintList()
void Print(std::ostream &os)
ErrCode filter(FitParams *par, bool firstpass=true)
virtual int index() const
virtual int posIndex() const
virtual void updateIndex(int &offset)
int index(RhoCandidate *bc) const
const ParticleBase * m_cand
ChiSquare chiSquare(const FitParams *fitparams) const
void resetCov(double scale=100)
int posIndex(RhoCandidate *bc) const
void printConstraints(std::ostream &os=std::cout) const
bool setMassConstraint(bool add)
const ParticleBase * locate(RhoCandidate *bc) const
double chiSquare(const FitParams *par) const
const ParticleBase * mother() const
void setMassConstraint(RhoCandidate *bc, bool add=true)