CMCGeantTrack.h
//-----------------------------------------------------------------------------
// $Header: /cool/project/RCS/CMCGeantTrack.h,v 2.4 1997/03/17 14:16:18 ceretto Exp $
//
// COOL Program Library
// Copyright (C) CERES collaboration, 1996
//
// Declaration of class CMCGeantTrack.
//
// this class needs operator == () well defined for use in RWTPtrOrderedVector<T>
//
// content of this class:
// int trackNr for primary particles: GEANT track number
// for secondaries: GEANT track number of
// parent of particle, if from stack:
// ITRAK+10000*ISTAK
// int parent for primary particle: HIJET parent track #
// special: 1: beam delta rays in target
// 2: additional MC electron
// for secondaries: GEANT id of parent
// CString volume[4] primaries: ' '
// secondaries: GEANT volume name at creation
// CString process[4] primaries: 'prim', except for
// 'pDAL' pi-DALITZ electron
// 'eDAL' eta-DALITZ
// 'eepr' ee-pair from resonances
// 'ADDe' additional MC electron
// condaries: GEANT creation process name
// e.g. 'PAIR','HADR',...
// CMCParticle particle particle (id + 4Momentum)
// int nHitsUV1 number of hits in UV1 from this particle
// int nHitsUV2 dito UV2
// C3Momentum origin origin (x,y,z) of track
//
//-----------------------------------------------------------------------------
#ifndef CMCGEANTTRACK_H
#define CMCGEANTTRACK_H
#include <iostream.h>
#include <math.h>
#include "cool.h"
#include "CMCcool.h"
#include "CMCDigiHit.h"
#include "CMCParticle.h"
#include "C4Momentum.h"
#include "CCoordinate.h"
#include "CDetector.h"
#include "rw/tpordvec.h"
class CRich;
class CRingCandidate;
class CMCGeantTrack {
public:
CMCGeantTrack();
~CMCGeantTrack();
protected:
CMCGeantTrack(const CMCGeantTrack &);
CMCGeantTrack & operator = (const CMCGeantTrack &);
public:
inline void setIndex (int ind) { index = ind; }
inline void setTrackNr (int trk) { trackNr = trk; }
inline void setParent (int par) { parent = par; }
inline void setVolume (CString vol) { volume = vol; }
inline void setProcess (CString prc) { process = prc; }
inline void setParticle (CMCParticle aPart) { particle = aPart; }
inline void setOrigin (C3Momentum aOrig) { origin = aOrig; }
inline void setNHitsUV1 (int nh1) { nHitsUV1 = nh1; }
inline void setNHitsUV2 (int nh2) { nHitsUV2 = nh2; }
inline int getIndex () const { return index ; }
inline int getTrackNr () const { return trackNr ; }
inline int getParent () const { return parent ; }
inline int getNHitsUV1 () const { return nHitsUV1; }
inline int getNHitsUV2 () const { return nHitsUV2; }
inline const CString& getVolume () const { return volume ; }
inline const CString& getProcess () const { return process ; }
inline CMCParticle& getParticle () { return particle; }
inline C3Momentum getOrigin () { return origin; }
public:
inline void addMCDigiHit(CDetector::CDetectorId, CMCDigiHit*); // add pointer to its list
inline const RWTPtrOrderedVector<CMCDigiHit>* getDigiHits(int detId) const { return &digiHits[detId]; }
void print(ostream& = cout);
inline CBoolean operator== (const CMCGeantTrack&) const; // needed for collection list
public:
CRichPadCoord fitRingOnGeantHits(CRich&);
CRichPadCoord fitRingOnDigiHits (CRich&);
CRingCandidate fitPionRingOnGeantHits(CRich&);
CRingCandidate fitPionRingOnDigiHits (CRich&);
protected:
int index ; // for operator ==
int trackNr ;
int parent ;
CString volume ;
CString process ;
CMCParticle particle ;
int nHitsUV1;
int nHitsUV2;
C3Momentum origin;
RWTPtrOrderedVector<CMCDigiHit> digiHits[MaxDetectors]; // MC hits as 'made' by the detectors
};
// ---------------------------------- inline member functions ------------------------------
inline void CMCGeantTrack::addMCDigiHit(CDetector::CDetectorId id, CMCDigiHit * hit)
{
if (id >= 0 && id < MaxDetectors)
digiHits[id].insert(hit);
}
CBoolean CMCGeantTrack::operator == (const CMCGeantTrack& part) const { return (index == part.index); }
#endif /* CMCGEANTTRACK_H */