Back to index

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); 
} 

Back to index