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 ) );
 }
示例#3
0
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++;
}
示例#4
0
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;
 }