NCFS-Pack
A generic (astro)particle physics analysis framework
 
Loading...
Searching...
No Matches
IcePandel Class Reference

IceRecoBase derived TTask processor to perform Convoluted Pandel fitting. More...

#include "IcePandel.h"

Inheritance diagram for IcePandel:
IceRecoBase

Detailed Description

IceRecoBase derived TTask processor to perform Convoluted Pandel fitting.

Copyright(c) 2003, IceCube Experiment at the South Pole. All rights reserved.
Author: The IceCube NCFS-based Offline Project.
Contributors are mentioned in the code where appropriate.
Permission to use, copy, modify and distribute this software and its
documentation strictly for non-commercial purposes is hereby granted
without fee, provided that the above copyright notice appears in all
copies and that both the copyright notice and this permission notice
appear in the supporting documentation.
The authors make no claims about the suitability of this software for
any purpose. It is provided "as is" without express or implied warranty.
// Class IcePandel
// IceRecoBase derived TTask processor to perform track fitting via minimisation
// of a Gauss convoluted Pandel pdf.
//
// In case an event has been rejected by an NcEventSelector (based) processor,
// this task (and its sub-tasks) is not executed.
//
// The code in this processor is based on the algorithms as developed
// by Oladipo Fadiran, George Japaridze (Clark Atlanta University, USA)
// and Nick van Eijndhoven (Utrecht University, The Netherlands).
// For details please refer to Astroparticle Physics 28 (2007) 456-462.
//
// For the minimisation process the TFitter facility, which is basically Minuit,
// is used. Minimisation is performed by invokation of the SIMPLEX method,
// followed by an invokation of HESSE to determine the uncertainties on the results.
// The statistics of the TFitter result are stored as an NcSignal object
// in the track, which can be obtained via the GetFitDetails memberfunction.
// In the minimisation procedure an overall plausibility for the fitted track
// is determined based on a Gauss convoluted Pandel pdf value for each used hit.
// This track plausibility is expressed in terms of a Bayesian psi value
// w.r.t. a Gauss Convoluted Pandel PDF.
// The Baysian psi value is defined as -loglikelihood in a decibel scale.
// This implies psi=-10*log10(L) where L=p(D|HI) being the likelihood of
// the data D under the hypothesis H and prior information I.
// Since all (associated) hits contribute independently to the Bayesian psi
// value, this psi value is built up by summation of the various hit contributions.
// As such, the FitDetails entries contain the statistics of all the different
// hit contributions, like PsiMedian, PsiMean, and PsiSigma.
// The Bayesian psi value is available in the fit details under the name "PsiSum".
// In addition the standard Minuit results like IERFIT, FCN, EDM etc... are
// also available from the FitDetails.
//
// The Gauss convoluted Pandel value is evaluated in various areas in the distance-time
// space as described in Astropart. Phys. 28 (2007) 456-462 by N. van Eijndhoven,
// O. Fadiran and G. Japaridze
// In case the distance-time point of a certain hit falls outside the
// validity rectangle, the point is moved onto the corresponding side location
// of the rectangle. For this new location the Pandel value is evaluated for
// this hit and an extra penalty is added to the corresponding psi value
// for this hit.
// The penalty value can be specified via the memberfunction SetPenalty().
// This allows investigation/tuning of the sensitivity to hits with
// extreme distance and/or time residual values.
//
// As can be seen in the publication mentioned above, the pdf depends on
// the PMT time jitter, the photon scattering length and the photon absorption length.
// These parameters can be specified via the memberfunctions SetTimeJitter(),
// SetScatteringLength() and SetAbsorptionLength(), respectively.
//
// A separate treatment of the phase and group velocities is introduced
// which will provide more accurate time residuals due to the different
// velocities of the Cerenkov wave front (v_phase) and the actually detected
// photons (v_group).
// This distinction between v_phase and v_group can be (de)activated via the
// memberfunction SetVgroupUsage().
//
// Use the UseTracks memberfunction to specify the first guess tracks
// to be processed by the minimiser (e.g. IceDwalkIC, IceDwalkI, IceDwalkDC).
//
// Use the SelectHits() memberfunction to specify the hits to be used.
//
// Information about the actual parameter settings can be found in the event
// structure itself via the device named "IcePandel".
//
// The fit processor printlevel can be selected via the memberfunction SetPrintLevel().
// By default all printout is suppressed (i.e. level=-2).
//
// An example of how to invoke this processor after Xtalk, hit cleaning
// and a direct walk first guess estimate can be found in the ROOT example
// macro icepandel.cc which resides in the /macros subdirectory.
//
// The minimisation results are stored in the IceEvent structure as
// tracks with as default the basename "IcePandel".
// This track basename identifier can be modified by the user via the
// SetTrackName() memberfunction. This will allow unique identification
// of tracks which are produced when re-processing existing data with
// different criteria.
// A suffix "4..." will be added to the tracks basename automatically according
// to the input track class that was used for the fit.
// For instance, the produced track name is IcePandel4DwalkIC when the input track
// was an IceDwalkIC track.
//
// The mass and charge of the track are left 0, since no distinction can
// be made between positive or negative tracks and also no mass can be determined.
// However, the user can define the track charge by invokation of the
// memberfunction SetCharge().
// This facility may be used to distinguish tracks produced by the
// various reconstruction algorithms in a (3D) colour display
// (see the class NcHelix for further details).
//
// The produced track will be linked as a Track Hypothesis to the
// (first guess) track which was used as input, the so called parent track.
// As such, a pointer to the parent track is available via the GetParentTrack facility
// of the produced "IcePandel" tracks.
// Furthermore, all the hits that were used in the minisation are available
// via the GetSignal facility of the produced "IcePandel" tracks.
//
// An example of how the various data can be accessed is given below,
// where "evt" indicates the pointer to the IceEvent structure.
//
// Example for accessing data :
// ----------------------------
// TObjArray* tracks=evt->GetTracks("IcePandel4DwalkIC");
// if (!tracks) return;
// NcPosition* r0=0;
// Float_t fcn=0;
// for (Int_t jtk=0; jtk<tracks->GetEntries(); jtk++)
// {
// NcTrack* tx=(NcTrack*)tracks->At(jtk);
// if (!tx) continue;
// tx->Data("sph");
// r0=tx->GetReferencePoint();
// if (r0) r0->Data();
// sx=(NcSignal*)tx->GetFitDetails();
// if (sx) fcn=sx->GetSignal("FCN");
// NcTrack* parent=tx->GetParentTrack();
// if (!parent) continue;
// parent->Data("sph");
// r0=parent->GetReferencePoint();
// if (r0) r0->Data();
// }
//
// Notes :
// -------
// 1) This processor only works properly on data which are calibrated
// and contain tracks from first guess algorithms like e.g. IceDwalk.
// 2) In view of the usage of TFitter/Minuit minimisation, a global pointer
// to the instance of this class (gIcePandel) and a global static
// wrapper function (IcePandelFCN) have been introduced, to allow the
// actual minimisation to be performed via the memberfunction FitFCN.
// This implies that in a certain processing job only 1 instance of
// this IcePandel class may occur.
//
//--- Author: Nick van Eijndhoven 09-feb-2006 Utrecht University
//- Modified: NvE $Date: 2013-02-27 23:43:36 +0100 (Wed, 27 Feb 2013) $ IIHE-VUB, Brussels

Definition at line 17 of file IcePandel.h.

Public Member Functions

 IcePandel (const char *name="IcePandel", const char *title="Gauss convoluted Pandel fitting")
 
virtual ~IcePandel ()
 
virtual void Exec (Option_t *opt)
 
void FitFCN (Int_t &, Double_t *, Double_t &, Double_t *, Int_t)
 
void SelectHits (Int_t mode=1)
 
void SetPenalty (Float_t val)
 
void SetPrintLevel (Int_t level)
 
- Public Member Functions inherited from IceRecoBase
 IceRecoBase (const char *name="IceRecoBase", const char *title="Base class for IceCube reconstruction tasks")
 
virtual ~IceRecoBase ()
 
void SetAbsorptionLength (Float_t lambda, TString s)
 
void SetCharge (Float_t charge)
 
void SetCleaned (Int_t flag, TString s)
 
void SetFlipAngles (Float_t thetatrk, Float_t thetahits)
 
void SetMaxHits (Int_t nmax, TString s)
 
void SetMaxMod (Int_t nmax, TString s)
 
void SetMinAhits (Int_t nmin, TString s)
 
void SetMinAmods (Int_t nmin, TString s)
 
void SetMinMod (Int_t nmin, TString s)
 
void SetScatteringLength (Float_t lambda, TString s)
 
void SetSingleHit (Int_t ndoms, TString s, Int_t ndoms1=0)
 
void SetSLChitUsage (Int_t flag, TString s)
 
void SetTimeJitter (Float_t sigma, TString s)
 
void SetTrackName (TString s)
 
void SetVgroupUsage (Int_t flag, TString s)
 
void UseTracks (TString classname, Int_t n=-1)
 

Protected Attributes

NcSignalfFitstats
 
TFitter * fFitter
 
TObjArray * fHits
 
Float_t fPenalty
 
Int_t fPrint
 
NcSample fPsistats
 
Int_t fSelhits
 
NcTrackfTkfit
 
- Protected Attributes inherited from IceRecoBase
Float_t fCharge
 
Int_t fCleanA
 
Int_t fCleanDC
 
Int_t fCleanI
 
Int_t fCleanIC
 
IceEventfEvt
 
Int_t fFirst
 
Float_t fLabsA
 
Float_t fLabsDL
 
Float_t fLabsLD
 
Float_t fLabsUD
 
Float_t fLambdaA
 
Float_t fLambdaDL
 
Float_t fLambdaLD
 
Float_t fLambdaUD
 
Int_t fMaxhitsA
 
Int_t fMaxhitsDC
 
Int_t fMaxhitsI
 
Int_t fMaxhitsIC
 
Int_t fMaxmodA
 
Int_t fMaxmodDC
 
Int_t fMaxmodI
 
Int_t fMaxmodIC
 
Int_t fMinahitsA
 
Int_t fMinahitsDC
 
Int_t fMinahitsI
 
Int_t fMinahitsIC
 
Int_t fMinamodsA
 
Int_t fMinamodsDC
 
Int_t fMinamodsI
 
Int_t fMinamodsIC
 
Int_t fMinmodA
 
Int_t fMinmodDC
 
Int_t fMinmodI
 
Int_t fMinmodIC
 
NcDevice fParams
 
Int_t fSingle1A
 
Int_t fSingle1DC
 
Int_t fSingle1I
 
Int_t fSingle1IC
 
Int_t fSingleA
 
Int_t fSingleDC
 
Int_t fSingleI
 
Int_t fSingleIC
 
Int_t fSlcDC
 
Int_t fSlcI
 
Int_t fSlcIC
 
Float_t fThetahits
 
Float_t fThetatrk
 
TString fTrackname
 
Float_t fTsigmaA
 
Float_t fTsigmaDC
 
Float_t fTsigmaIC
 
TObjArray * fUseNames
 
TArrayI * fUseNtk
 
Int_t fVgroupA
 
Int_t fVgroupDC
 
Int_t fVgroupI
 
Int_t fVgroupIC
 

Additional Inherited Members

- Protected Member Functions inherited from IceRecoBase
virtual void FlipTrack (NcTrack *t) const
 

Constructor & Destructor Documentation

◆ IcePandel()

IcePandel::IcePandel ( const char * name = "IcePandel",
const char * title = "Gauss convoluted Pandel fitting" )
// Default constructor.

Definition at line 175 of file IcePandel.cxx.

◆ ~IcePandel()

IcePandel::~IcePandel ( )
virtual
// Default destructor.

Definition at line 230 of file IcePandel.cxx.

Member Function Documentation

◆ Exec()

void IcePandel::Exec ( Option_t * opt)
virtual
// Implementation of the Convoluted Pandel hit fitting procedure.

Reimplemented from IceRecoBase.

Definition at line 319 of file IcePandel.cxx.

◆ FitFCN()

void IcePandel::FitFCN ( Int_t & ,
Double_t * ,
Double_t & f,
Double_t * x,
Int_t  )
// Minimisation of the Bayesian psi value for a track w.r.t. a Convoluted Pandel PDF.
// The Baysian psi value is defined as -loglikelihood in a decibel scale.
// This implies psi=-10*log10(L) where L=p(D|HI) being the likelihood of
// the data D under the hypothesis H and prior information I.

Definition at line 724 of file IcePandel.cxx.

◆ SelectHits()

void IcePandel::SelectHits ( Int_t mode = 1)
// Specification of the hits to be used in the minimisation.
//
// mode = 0 : All hits (except IceTop) of the complete event are used.
// 1 : Only the associated hits are used for each first guess track.
// 2 : All hits are used of those detector systems (e.g. Amanda, InIce)
// that were used to construct the first guess track.
//
// Note : The user can select to use only hits which survived a hit cleaning processor
// via the SetClean() memberfunction.
//
// For the default value please refer to the default constructor of this class.

Definition at line 276 of file IcePandel.cxx.

◆ SetPenalty()

void IcePandel::SetPenalty ( Float_t val)
// Set user defined psi penalty value (in dB) in the minimiser for
// distance-time points that fall outside the validity rectangle.
// This allows investigation/tuning of the sensitivity to hits with
// extreme distance and/or time residual values.
// For the default value please refer to the default constructor of this class.

Definition at line 302 of file IcePandel.cxx.

◆ SetPrintLevel()

void IcePandel::SetPrintLevel ( Int_t level)
// Set the fitter (Minuit) print level.
// See the TFitter and TMinuit docs for details.
//
// Note : level=-2 suppresses also all fit processor warnings.
//
// The default in the constructor is level=-2.

Definition at line 260 of file IcePandel.cxx.

Member Data Documentation

◆ fFitstats

NcSignal* IcePandel::fFitstats
protected

Definition at line 35 of file IcePandel.h.

◆ fFitter

TFitter* IcePandel::fFitter
protected

Definition at line 32 of file IcePandel.h.

◆ fHits

TObjArray* IcePandel::fHits
protected

Definition at line 31 of file IcePandel.h.

◆ fPenalty

Float_t IcePandel::fPenalty
protected

Definition at line 33 of file IcePandel.h.

◆ fPrint

Int_t IcePandel::fPrint
protected

Definition at line 29 of file IcePandel.h.

◆ fPsistats

NcSample IcePandel::fPsistats
protected

Definition at line 36 of file IcePandel.h.

◆ fSelhits

Int_t IcePandel::fSelhits
protected

Definition at line 30 of file IcePandel.h.

◆ fTkfit

NcTrack* IcePandel::fTkfit
protected

Definition at line 34 of file IcePandel.h.


The documentation for this class was generated from the following files: