tensor-of-inertia C++ API Reference

class I3TensorOfInertia : public I3ConditionalModule

This is an IceTray module to implement the Inertia tensor fit first guess algorithm. It works by calculating a Tensor of Inertia from the hit optical modules in the event, using the amplitudes as virtual masses. From the tensor the eigenvales and eigenvectors can be calculated, the smallest eigenvalue corresponds to the longest axis, which approximates the direction of the track.

The tensor of inertia algorithm treats the pulse amplitidues of the PMTs as virtual masses, with each PMT The amplitudes of the OMs at position r_i from the center of gravity of the hits. The center of gravity of the virtual mass distribution is given by

\[ \vec{COG}= \sum_{i=1}^N a_i^w*\vec{r_i} \]
where a_i is the ith PMT amplitude. The Inertia Tensor itself is given by the usual formula with PMT amplitudes replacing the masses:
\[ I^{k,l}=\sum_{i=1}^N a_i^w*(\delta^{kl}*\vec{r_i}^2-r_i^k*r_i^j). \]

The amplitude weight w can be set arbitrarily, with 0 and 1 the two most common values. (1 itself is the default value) The smallest eigenvalue of the inertia tensor corresponds to the longest axis, which approximates the track if the smallest eigenvalue is much smaller than the other two eigenvalues.

Public Functions

I3TensorOfInertia(const I3Context &ctx)
inline ~I3TensorOfInertia()
void Configure()
void Physics(I3FramePtr frame)

Excecute the Inertia Tensor fit first guess reconstruction on the event in the provided frame. The algorithm is adapted from the one used in Siegmund.

Private Functions

I3TensorOfInertia(const I3TensorOfInertia &source)
I3TensorOfInertia &operator=(const I3TensorOfInertia &source)
SET_LOGGER ("I3TensorOfInertia")

Private Members

std::string moduleName_
std::string inputSelection_
std::string inputReadout_
int minHits_
double ampWeight_
class I3TensorOfInertiaCalculator

Public Functions

inline I3TensorOfInertiaCalculator(double ampWeight)
I3Matrix CalculateTOI(I3RecoPulseSeriesMapConstPtr pulse_series, const I3OMGeoMap &om_geo, const I3Position &cogPosition)

Calculates the Tensor of Inertia

int CorrectDirection(I3RecoPulseSeriesMapConstPtr pulse_series, const I3OMGeoMap &om_geo, const I3Position &cog, const std::vector<double> &minevect)

Corrects the direction of a reconstructed particle.

eval_tuple_t DiagonalizeTOI(I3Matrix &inertiatensor, double &mineval, double &eval2, double &eval3, double &evalratio)

Diagonalizes the Tensor of Inertia

Private Members

double ampWeight_
namespace std

STL namespace.

file I3TensorOfInertia.cxx
#include <boost/tuple/tuple.hpp>
#include <boost/iterator/filter_iterator.hpp>
#include <boost/foreach.hpp>
#include “recclasses/I3TensorOfInertiaFitParams.h”
#include “icetray/I3TrayHeaders.h”
#include “dataclasses/physics/I3Particle.h”
#include “dataclasses/I3Position.h”
#include “icetray/OMKey.h”
#include “dataclasses/physics/I3RecoPulse.h”
#include “phys-services/I3Cuts.h”

copyright (C) 2004 the icecube collaboration $Id$

Version

Rcs

1.6

Date

$Date$

Author

grullon

Functions

I3_MODULE(I3TensorOfInertia)
file I3TensorOfInertia.h
#include “icetray/I3ConditionalModule.h”
#include “icetray/I3Logging.h”
#include “dataclasses/geometry/I3Geometry.h”
#include “dataclasses/physics/I3RecoPulse.h”
#include “dataclasses/I3Map.h”

copyright (C) 2004 the icecube collaboration

Version $Id$

Version

Rcs

1.3

Date

$Date$

Author

Sean Grullon grullon@icecube.wisc.edu

file I3TensorOfInertiaCalculator.cxx
#include <gsl/gsl_eigen.h>
#include <dataclasses/geometry/I3Geometry.h>
#include <icetray/OMKey.h>
file I3TensorOfInertiaCalculator.hpp
#include <boost/tuple/tuple.hpp>
#include <dataclasses/I3Matrix.h>
#include <dataclasses/physics/I3RecoPulse.h>
#include <dataclasses/geometry/I3OMGeo.h>
#include <dataclasses/I3Position.h>

copyright (C) 2006 the icecube collaboration

Rcs

I3TensorOfInertiaCalculator.h 18552 2006-04-19 15:45:25Z grullon

Version

Rcs

1.3

Date

Rcs

2006-04-19 10:45:25 -0500 (Wed, 19 Apr 2006)

Typedefs

typedef boost::tuples::tuple<std::vector<double>, std::vector<double>, std::vector<double>> eval_tuple_t

This class contains a series of functions to calculate the tensor of inertia and related quantities. With this, you can calculate the inertia tensor of the hits, diagonalize the inertia tensor, and correct the direction of the longest eigenvector.

dir icetray
dir private
dir public
dir tensor-of-inertia
dir tensor-of-inertia
dir tensor-of-inertia