CTrack.C
//-----------------------------------------------------------------------------
// $Header: /asis/offline/ceres/cool/project/RCS/CTrack.C,v 3.2 1997/06/03 10:53:47 messer Exp $
//
// COOL Program Library
// Copyright (C) CERES collaboration, 1996
//
// Implementation of class CSidcSegment, CRichSegment and CTrack.
//
//-----------------------------------------------------------------------------
#include "CTrack.h"
#include "CMCGeantTrack.h"
#include <iomanip.h>
CTrack::CTrack()
{
type = Unknown;
trackMask = 0;
statusFlag = 0;
vertex = 0;
closestSidc1Hit = 0;
nextClosestSidc1Hit = 0;
closestSidc2Hit = 0;
nextClosestSidc2Hit = 0;
thetaSidc = 0;
phiSidc = 0;
deltaRSidc12 = 0;
deltaPhiSidc12 = 0;
closestRich1Ring = 0;
nextClosestRich1Ring = 0;
closestRich2Ring = 0;
nextClosestRich2Ring = 0;
deltaThetaRich12 = 0;
deltaPhiRich12 = 0;
closestPadCHit = 0;
nextClosestPadCHit = 0;
deltaThetaSidcRich = 0;
deltaPhiSidcRich = 0;
deltaThetaSidcPadC = 0;
deltaPhiSidcPadC = 0;
deltaThetaRich2PadC = 0;
deltaPhiRich2PadC = 0;
}
CTrack::~CTrack() { /* nop */ }
int CTrack::operator== (const CTrack& track) const
{
return ( type == track.type &&
trackMask == track.trackMask &&
statusFlag == track.statusFlag &&
vertex == track.vertex &&
closestSidc1Hit == track.closestSidc1Hit &&
nextClosestSidc1Hit == track.nextClosestSidc1Hit &&
closestSidc2Hit == track.closestSidc2Hit &&
nextClosestSidc2Hit == track.nextClosestSidc2Hit &&
closestRich1Ring == track.closestRich1Ring &&
nextClosestRich1Ring == track.nextClosestRich1Ring &&
closestRich2Ring == track.closestRich2Ring &&
nextClosestRich2Ring == track.nextClosestRich2Ring &&
closestPadCHit == track.closestPadCHit &&
nextClosestPadCHit == track.nextClosestPadCHit &&
momentum == track.momentum );
}
void CTrack::printProperties(ostream& ost)
{
_printProperties(ost);
}
void CTrack::_printProperties(ostream& ost)
{
const FieldWidth = 24;
ost.setf(ios::left);
//
// Type of track
//
ost << setw(FieldWidth) << "track type:";
switch (type) {
case Electron:
ost << "Electron" << endl;
break;
case Positron:
ost << "Positron" << endl;
break;
case PiPlus:
ost << "PiPlus" << endl;
break;
case PiMinus:
ost << "PiMinus" << endl;
break;
default:
ost << "Unknown" << endl;
break;
}
//
// Track mask
//
ost << setw(FieldWidth) << "mask:";
if (trackMask&hasVertex) ost << "hasVertex ";
if (trackMask&hasSidc1Match) ost << "hasSidc1Match ";
if (trackMask&hasSidc2Match) ost << "hasSidc2Match ";
if (trackMask&hasRich1Match) ost << "hasRich1Match ";
if (trackMask&hasRich2Match) ost << "hasRich2Match ";
if (trackMask&hasPadCMatch) ost << "hasPadCMatch ";
ost << endl;
ost << setw(FieldWidth) << "status flag:" << dec << statusFlag << endl;
//
// momentum
//
ost << setw(FieldWidth) << "momentum:" << dec << momentum << endl;
ost << setw(FieldWidth) << "|p|:" << dec << momentum.getP().getAbs() << endl;
ost << setw(FieldWidth) << "pt:" << dec << momentum.getPerp() << endl;
//
// Data from SiDC segment
//
if (vertex) ost << setw(FieldWidth) << "Vertex position:"
<< dec << vertex->getPosition() << endl;
if (closestSidc1Hit) ost << setw(FieldWidth) << "Sidc1 hit:"
<< dec << closestSidc1Hit->getCenter()
<< endl;
if (closestSidc2Hit) ost << setw(FieldWidth) << "Sidc2 hit:"
<< dec << closestSidc2Hit->getCenter()
<< endl;
ost << setw(FieldWidth) << "dr Sidc1-Sidc2:" << dec << deltaRSidc12 << " cm" << endl;
ost << setw(FieldWidth) << "dphi Sidc1-Sidc2:" << dec << deltaPhiSidc12 << " rad" << endl;
ost << setw(FieldWidth) << "theta Sidc segment:" << dec << thetaSidc << " mrad" << endl;
ost << setw(FieldWidth) << "phi Sidc segment:" << dec << phiSidc << " rad" << endl;
//
// Data from Rich segment
//
if (closestRich1Ring) ost << setw(FieldWidth) << "Rich1 ring:"
<< dec << closestRich1Ring->getPolarCenter()
<< endl;
if (closestRich2Ring) ost << setw(FieldWidth) << "Rich2 ring:"
<< dec << closestRich2Ring->getPolarCenter()
<< endl;
ost << setw(FieldWidth) << "dtheta Rich1-Rich2:" << dec << deltaThetaRich12 << " mrad" << endl;
ost << setw(FieldWidth) << "dphi Rich1-Rich2:" << dec << deltaPhiRich12 << " rad" << endl;
//
// Data from PadC segment
//
if (closestPadCHit) ost << setw(FieldWidth) << "PadC hit:"
<< dec << "(" << closestPadCHit->getX()
<< "," << closestPadCHit->getY() << ")"
<< endl;
ost << setw(FieldWidth) << "theta PadC:" << dec << thetaPadC << " mrad" << endl;
ost << setw(FieldWidth) << "phi PadC:" << dec << phiPadC << " rad" << endl;
ost << setw(FieldWidth) << "status flag:" << dec << statusFlag << endl;
//
// matches betw. SidC, Rich, PadC
//
ost << setw(FieldWidth) << "dtheta Sidc-Rich:" << dec << deltaThetaSidcRich << " mrad" << endl;
ost << setw(FieldWidth) << "dphi Sidc-Rich:" << dec << deltaPhiSidcRich << " rad" << endl;
ost << setw(FieldWidth) << "dtheta Sidc-PadC:" << dec << deltaThetaSidcPadC << " mrad" << endl;
ost << setw(FieldWidth) << "dphi Sidc-PadC:" << dec << deltaPhiSidcPadC << " rad" << endl;
ost << setw(FieldWidth) << "dtheta Rich2-PadC:" << dec << deltaThetaRich2PadC << " mrad" << endl;
ost << setw(FieldWidth) << "dphi Rich2-PadC:" << dec << deltaPhiRich2PadC << " rad" << endl;
ost.unsetf(ios::left);
}