inline double ParticleLine::scalarSumOfTransverseMomentum( std::list< ParticleLine const* >& linesToSum ) { double scalarSum( 0.0 ); for( std::list< ParticleLine const* >::iterator lineIterator( linesToSum.begin() ); linesToSum.end() != lineIterator; ++lineIterator ) { scalarSum += (*lineIterator)->getTransverseMomentum(); } return scalarSum; }
inline double ParticleLine::transverseMomentumSquaredOfVectorSum( std::list< ParticleLine const* >& linesToSum ) { double xTotal( 0.0 ); double yTotal( 0.0 ); for( std::list< ParticleLine const* >::iterator lineIterator( linesToSum.begin() ); linesToSum.end() != lineIterator; ++lineIterator ) { xTotal += (*lineIterator)->getXMomentum(); yTotal += (*lineIterator)->getYMomentum(); } return ( ( xTotal * xTotal ) + ( yTotal * yTotal ) ); }
void Class::enterNotify (int objectId, bool instantUpdate) { SVIterator lineIterator(objectObjectSimilarities->getLine(objectId)); for (lineIterator.start(); lineIterator.hasMore(); lineIterator.toNext()) averageSimilarityAccumulator[lineIterator.getIndex()] += lineIterator.getValue(); if (instantUpdate) { quality = ((nbObjects-1)*quality + 2*classObjectSimilarities[id][objectId])/(nbObjects+1); flt n = (flt)(nbObjects+1); for (int i=0; i<nbUniverseObjects; i++) classObjectSimilarities[id][i] = averageSimilarityAccumulator[i]/n; } else { change = true; } objects[objectId] = true; nbObjects++; }
void Class::leaveNotify (int objectId, bool instantUpdate) { if (nbObjects<=2) return; SVIterator lineIterator(objectObjectSimilarities->getLine(objectId)); for (lineIterator.start(); lineIterator.hasMore(); lineIterator.toNext()) averageSimilarityAccumulator[lineIterator.getIndex()] -= lineIterator.getValue(); if (instantUpdate) { quality = (nbObjects*quality - 2*classObjectSimilarities[id][objectId])/(nbObjects-2); flt n = (flt)(nbObjects-1); for (int i=0; i<nbUniverseObjects; i++) classObjectSimilarities[id][i] = averageSimilarityAccumulator[i]/n; } else { change = true; } objects[objectId] = false; nbObjects--; }
inline ParticleLine& ParticleLine::sumMomentaAsLine( ParticleLine& lineToBecomeSum, std::list< ParticleLine const* >& linesToSum ) { lineToBecomeSum.tMomentum = 0.0; lineToBecomeSum.xMomentum = 0.0; lineToBecomeSum.yMomentum = 0.0; lineToBecomeSum.zMomentum = 0.0; for( std::list< ParticleLine const* >::iterator lineIterator( linesToSum.begin() ); linesToSum.end() != lineIterator; ++lineIterator ) { lineToBecomeSum.tMomentum += (*lineIterator)->getEnergy(); lineToBecomeSum.xMomentum += (*lineIterator)->getXMomentum(); lineToBecomeSum.yMomentum += (*lineIterator)->getYMomentum(); lineToBecomeSum.zMomentum += (*lineIterator)->getZMomentum(); } return lineToBecomeSum; }