Skip to content
Snippets Groups Projects
Commit 64203668 authored by Stephen A. Wood's avatar Stephen A. Wood
Browse files

Detector classes will now use multiple inheritance to get hit lists

rather than relying on a modified THaDetectorBase.  Just commit is
just the renaming and deleting of files we don't need, no code changes.
parent 7a973e7b
No related branches found
No related tags found
No related merge requests found
......@@ -10,9 +10,7 @@
SRC = src/THcInterface.cxx src/THcParmList.cxx src/THcAnalyzer.cxx \
src/THcHodoscopeHit.cxx src/THcRawHit.cxx \
src/THcDetectorBase.cxx src/THcDetector.cxx \
src/THcSpectrometerDetector.cxx src/THcNonTrackingDetector.cxx \
src/THcHodoscope.cxx
src/THcHitList.cxx src/THcHodoscope.cxx
# Name of your package.
# The shared library that will be built will get the name lib$(PACKAGE).so
......
......@@ -11,10 +11,7 @@
#pragma link C++ class THcAnalyzer+;
#pragma link C++ class THcRawHit+;
#pragma link C++ class THcHodoscopeHit+;
#pragma link C++ class THcDetectorBase+;
#pragma link C++ class THcDetector+;
#pragma link C++ class THcSpectrometerDetector+;
#pragma link C++ class THcNonTrackingDetector+;
#pragma link C++ class THcHitList+;
#pragma link C++ class THcHodoscope+;
#endif
//*-- Author : Ole Hansen 15-May-00
//////////////////////////////////////////////////////////////////////////
//
// THcDetector
//
//////////////////////////////////////////////////////////////////////////
#include "THcDetector.h"
#include "THaApparatus.h"
ClassImp(THcDetector)
//_____________________________________________________________________________
THcDetector::THcDetector( const char* name, const char* description,
THaApparatus* apparatus )
: THcDetectorBase(name,description), fApparatus(apparatus)
{
// Constructor
if( !name || !*name ) {
Error( "THcDetector()", "Must construct detector with valid name! "
"Object construction failed." );
MakeZombie();
return;
}
}
//_____________________________________________________________________________
THcDetector::THcDetector( ) : fApparatus(0) {
// for ROOT I/O only
}
//_____________________________________________________________________________
THcDetector::~THcDetector()
{
// Destructor
}
//_____________________________________________________________________________
void THcDetector::SetApparatus( THaApparatus* apparatus )
{
// Associate this detector with the given apparatus.
// Only possible before initialization.
if( IsInit() ) {
Warning( Here("SetApparatus()"), "Cannot set apparatus. "
"Object already initialized.");
return;
}
fApparatus = apparatus;
}
//_____________________________________________________________________________
void THcDetector::MakePrefix()
{
// Set up name prefix for global variables. Internal function called
// during initialization.
const char* basename = NULL;
THaApparatus *app = GetApparatus();
if( app )
basename = app->GetName();
THcDetectorBase::MakePrefix( basename );
}
#ifndef ROOT_THcDetector
#define ROOT_THcDetector
//////////////////////////////////////////////////////////////////////////
//
// THcDetector
//
// Abstract base class for a generic Hall C detector. This class
// describes an actual detector (not subdetector) and can be added to
// an apparatus.
//
//////////////////////////////////////////////////////////////////////////
#include "THcDetectorBase.h"
#include <TRef.h>
#include "THaApparatus.h"
//class THaApparatus;
class THcDetector : public THcDetectorBase {
public:
virtual ~THcDetector();
THaApparatus* GetApparatus() const {
return static_cast<THaApparatus*>(fApparatus.GetObject());
}
virtual void SetApparatus( THaApparatus* );
THcDetector(); // for ROOT I/O only
protected:
virtual void MakePrefix();
//Only derived classes may construct me
THcDetector( const char* name, const char* description,
THaApparatus* apparatus = NULL );
private:
TRef fApparatus; // Apparatus containing this detector
ClassDef(THcDetector,0) //Abstract base class for a Hall C detector
};
#endif
File moved
File moved
//*-- Author : Ole Hansen 7-Sep-00
//////////////////////////////////////////////////////////////////////////
//
// THcNonTrackingDetector
//
//////////////////////////////////////////////////////////////////////////
#include "THcNonTrackingDetector.h"
ClassImp(THcNonTrackingDetector)
//______________________________________________________________________________
THcNonTrackingDetector::THcNonTrackingDetector( const char* name,
const char* description,
THaApparatus* apparatus )
: THcSpectrometerDetector(name,description,apparatus)
{
// Normal constructor with name and description
}
//______________________________________________________________________________
THcNonTrackingDetector::THcNonTrackingDetector( )
: THcSpectrometerDetector( )
{
// for ROOT I/O only
}
//______________________________________________________________________________
THcNonTrackingDetector::~THcNonTrackingDetector()
{
// Destructor
}
#ifndef ROOT_THcNonTrackingDetector
#define ROOT_THcNonTrackingDetector
//////////////////////////////////////////////////////////////////////////
//
// THcNonTrackingDetector.h
//
// Abstract base class for a generic non-tracking spectrometer detector.
//
// This is a special THaSpectrometerDetector -- any detector that
// is not a tracking detector. This includes PID detectors.
//
//////////////////////////////////////////////////////////////////////////
#include "THcSpectrometerDetector.h"
class TClonesArray;
class THcNonTrackingDetector : public THcSpectrometerDetector {
public:
THcNonTrackingDetector(); // only for ROOT I/O
virtual ~THcNonTrackingDetector();
virtual Int_t CoarseProcess( TClonesArray& tracks ) = 0;
virtual Int_t FineProcess( TClonesArray& tracks ) = 0;
Bool_t IsTracking() { return kFALSE; }
virtual Bool_t IsPid() { return kFALSE; }
protected:
//Only derived classes may construct me for real
THcNonTrackingDetector( const char* name, const char* description,
THaApparatus* a = NULL);
ClassDef(THcNonTrackingDetector,0) //ABC for a non-tracking spectrometer detector
};
#endif
//*-- Author : Ole Hansen 7-Sep-00
//////////////////////////////////////////////////////////////////////////
//
// THcSpectrometerDetector
//
//////////////////////////////////////////////////////////////////////////
#include "THcSpectrometerDetector.h"
#include "THaTrack.h"
#include "TMath.h"
ClassImp(THcSpectrometerDetector)
//______________________________________________________________________________
THcSpectrometerDetector::THcSpectrometerDetector( const char* name,
const char* description,
THaApparatus* apparatus )
: THcDetector(name,description,apparatus)
{
// Constructor
}
//______________________________________________________________________________
THcSpectrometerDetector::THcSpectrometerDetector( )
{
// Constructor for ROOT I/O only
}
//______________________________________________________________________________
THcSpectrometerDetector::~THcSpectrometerDetector()
{
// Destructor
}
//_____________________________________________________________________________
void THcSpectrometerDetector::DefineAxes(Double_t rotation_angle)
{
// define variables used for calculating intercepts of tracks
// with the detector
// right now, we assume that all detectors except VDCs are
// perpendicular to the Transport frame
fXax.SetXYZ( TMath::Cos(rotation_angle), 0.0, TMath::Sin(rotation_angle) );
fYax.SetXYZ( 0.0, 1.0, 0.0 );
fZax = fXax.Cross(fYax);
}
//_____________________________________________________________________________
bool THcSpectrometerDetector::CalcTrackIntercept(THaTrack* theTrack,
Double_t& t, Double_t& xcross,
Double_t& ycross)
{
// projects a given track on to the plane of the detector
// xcross and ycross are the x and y coords of this intersection
// t is the distance from the origin of the track to the given plane.
//
// If a hit is NOT found, then t, xcross, and ycross are unchanged.
TVector3 t0( theTrack->GetX(), theTrack->GetY(), 0.0 );
Double_t norm = TMath::Sqrt(1.0 + theTrack->GetTheta()*theTrack->GetTheta() +
theTrack->GetPhi()*theTrack->GetPhi());
TVector3 t_hat( theTrack->GetTheta()/norm, theTrack->GetPhi()/norm, 1.0/norm );
TVector3 v;
if( !IntersectPlaneWithRay( fXax, fYax, fOrigin, t0, t_hat, t, v ))
return false;
v -= fOrigin;
xcross = v.Dot(fXax);
ycross = v.Dot(fYax);
return true;
}
//_____________________________________________________________________________
bool THcSpectrometerDetector::CheckIntercept(THaTrack *track)
{
Double_t x, y, t;
return CalcTrackIntercept(track, t, x, y);
}
//_____________________________________________________________________________
bool THcSpectrometerDetector::CalcInterceptCoords(THaTrack* track, Double_t& x, Double_t& y)
{
Double_t t;
return CalcTrackIntercept(track, t, x, y);
}
//_____________________________________________________________________________
bool THcSpectrometerDetector::CalcPathLen(THaTrack* track, Double_t& t)
{
Double_t x, y;
return CalcTrackIntercept(track, t, x, y);
}
#ifndef ROOT_THcSpectrometerDetector
#define ROOT_THcSpectrometerDetector
//////////////////////////////////////////////////////////////////////////
//
// THcSpectrometerDetector
//
// Abstract base class for a generic spectrometer detector.
//
// This is a specialized detector class that supports the concept of
// "tracking" and "PID" detectors.
//
//////////////////////////////////////////////////////////////////////////
#include "THcDetector.h"
class THaTrack;
class THcSpectrometerDetector : public THcDetector {
public:
virtual ~THcSpectrometerDetector();
virtual Bool_t IsTracking() = 0;
virtual Bool_t IsPid() = 0;
bool CheckIntercept( THaTrack* track );
bool CalcInterceptCoords( THaTrack* track,
Double_t& x, Double_t& y );
bool CalcPathLen( THaTrack* track, Double_t& t );
THcSpectrometerDetector(); // for ROOT I/O only
protected:
// Geometry data
TVector3 fXax; // X axis of the detector plane
TVector3 fYax; // Y axis of the detector plane
TVector3 fZax; // Normal to the detector plane
virtual void DefineAxes( Double_t rotation_angle );
bool CalcTrackIntercept( THaTrack* track, Double_t& t,
Double_t& ycross, Double_t& xcross);
//Only derived classes may construct me
THcSpectrometerDetector( const char* name, const char* description,
THaApparatus* a = NULL );
ClassDef(THcSpectrometerDetector,0) //ABC for a spectrometer detector
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment