#ifndef ROOT_THaOptics
#define ROOT_THaOptics
#include "THaAnalysisObject.h"
#include "TVector3.h"
#include "TVector2.h"
#include "TRotation.h"
#include "Rtypes.h"
#include "TRef.h"
class THaTrack;
class THaSpectrometer;
class TString;
class THaBeam;
class TVector2;
#ifdef DEBUG_LEVEL
# undef DEBUG_LEVEL
#endif
#define DEBUG_LEVEL 2
#include "DebugDef.h"
class THaOptics : public THaAnalysisObject
{
public:
class TOpticsDir;
class TOpticsPos;
friend class TOpticsDir;
friend class TOpticsPos;
public:
THaOptics(const char* name, const char* desc, THaSpectrometer *pspec, TString strBeamDetectorName="");
virtual ~THaOptics();
public:
virtual Int_t ApplyOptics(THaTrack *track);
virtual Int_t ApplyOptics(THaTrack *track, TVector3 beampos, TVector3 beamdir);
virtual Int_t ApplyOptics(
Double_t trackX,
Double_t trackY,
Double_t trackTheta,
Double_t trackPhi,
TVector3 beamPos,
TVector3 beamDir,
TVector3 &P,
TVector3 &Vertex,
Double_t &TargetX,
Double_t &TargetY,
Double_t &TargetTheta,
Double_t &TargetPhi,
Double_t &PathLen
);
virtual void Clear( Option_t* opt="" ){};
public:
TVector2 CrossingLineLine2D(TVector2 o1,TVector2 d1,TVector2 o2,TVector2 d2);
TVector3 CrossingSurfLine3D(TVector3 OSurf,TVector3 NSurf,TVector3 OLine,TVector3 DLine);
public:
Double_t GetPcentral() const;
Double_t GetCollDist() const;
inline Double_t GetCurrent() const {return fCurrent;}
Bool_t SetBeamName(const char*);
protected:
virtual Int_t ReadDatabase( const TDatime& date );
virtual void MakePrefix();
virtual THaAnalysisObject* FindModuleNoCheck
( const char* name,const char* classname );
virtual Int_t ReadRunDatabase( const TDatime& date );
protected:
TRef fSpec;
TString fDefBeamName;
TRef fBeam;
protected:
TRotation fHCS2TCS;
TRotation fTCS2TRCS;
TRotation fTCS2HCS;
TRotation fTRCS2TCS;
TVector3 fTCSOffSetInHCS;
TVector3 fTRCSOffSetInTCS;
Double_t fCurrent;
protected:
Double_t fThShift,fPhShift,fPShift,fPathLenShift;
public:
virtual Int_t ZeroOrderCorrection
(Double_t & Th,Double_t & Ph,Double_t & P,Double_t & PathLen){
Th+=fThShift;
Ph+=fPhShift;
P+=fPShift;
PathLen+=fPathLenShift;
return 0;
}
virtual Int_t ApplyCorrection
(Double_t & Th,Double_t & Ph,Double_t & P,Double_t & PathLen){
return ZeroOrderCorrection( Th, Ph, P, PathLen);
}
private:
ClassDef(THaOptics,1);
public:
class TOpticsDir:public TVector3
{
public:
enum ECoordSys {
kNA,
kHCS,
kTCS,
kTRCS,
kFCS
};
public:
TOpticsDir(const THaOptics::TOpticsDir& v)
:TVector3(v.X(),v.Y(),v.Z()),fCoordSys(v.fCoordSys),fOptics(v.fOptics){}
TOpticsDir(ECoordSys coordsys,THaOptics * optics,
const TVector3& v)
:TVector3(v),fCoordSys(coordsys),fOptics(optics){}
TOpticsDir(ECoordSys coordsys,THaOptics * optics,
Double_t x = 0.0, Double_t y = 0.0, Double_t z = 0.0)
:TVector3(x,y,z),fCoordSys(coordsys),fOptics(optics){}
TOpticsDir(THaOptics::TOpticsDir& v)
:TVector3(v.X(),v.Y(),v.Z()),fCoordSys(v.fCoordSys),fOptics(v.fOptics){}
virtual ~TOpticsDir() {}
public:
inline TVector3 GetVector() {TVector3 v(X(),Y(),Z()); return v;}
inline ECoordSys GetCoordSys() const {return fCoordSys;}
inline THaOptics* GetOptics() const {return (THaOptics *)(fOptics.GetObject());}
virtual inline THaOptics::TOpticsDir & SetAll(
ECoordSys coordsys,
THaOptics * optics,
Double_t x = 0.0, Double_t y = 0.0, Double_t z = 0.0
)
{SetXYZ(x,y,z);fCoordSys=coordsys;fOptics=optics;return *this;}
public:
virtual THaOptics::TOpticsDir &
TransCoordSys(ECoordSys coordsys,bool dorecurent=true);
protected:
virtual void TRCS2FCS();
virtual void FCS2TRCS();
public:
THaOptics::TOpticsDir & operator += (const THaOptics::TOpticsDir &);
THaOptics::TOpticsDir & operator -= (const THaOptics::TOpticsDir &);
inline THaOptics::TOpticsDir & operator = (const THaOptics::TOpticsDir &v)
{fCoordSys=v.GetCoordSys();fOptics=v.GetOptics();SetXYZ(v.X(),v.Y(),v.Z()); return *this;}
inline THaOptics::TOpticsDir & operator = (const TVector3 &v)
{SetXYZ(v.X(),v.Y(),v.Z()); return *this;}
inline THaOptics::TOpticsDir & operator += (const TVector3 &p)
{SetXYZ(X()+p.X(),Y()+p.Y(),Z()+p.Z());return *this;}
inline THaOptics::TOpticsDir & operator -= (const TVector3 &p)
{SetXYZ(X()-p.X(),Y()-p.Y(),Z()-p.Z());return *this;}
public:
virtual void Print( Option_t* opt ="") const;
protected:
ECoordSys fCoordSys;
TRef fOptics;
private:
ClassDef(THaOptics::TOpticsDir,0);
};
class TOpticsPos:public THaOptics::TOpticsDir
{
public:
TOpticsPos(ECoordSys coordsys,THaOptics * optics,
const TVector3& v)
:THaOptics::TOpticsDir(coordsys,optics,v){}
TOpticsPos(ECoordSys coordsys,THaOptics * optics,
Double_t x = 0.0, Double_t y = 0.0, Double_t z = 0.0)
:THaOptics::TOpticsDir(coordsys,optics,x,y,z){}
TOpticsPos(const THaOptics::TOpticsPos& v)
:THaOptics::TOpticsDir(v.fCoordSys,v.GetOptics(),v.X(),v.Y(),v.Z()){}
TOpticsPos(const THaOptics::TOpticsDir& v)
:THaOptics::TOpticsDir(v.GetCoordSys(),v.GetOptics(),v.X(),v.Y(),v.Z()){}
virtual ~TOpticsPos() {}
public:
virtual THaOptics::TOpticsPos &
TransCoordSys(ECoordSys coordsys,bool dorecurent=true);
public:
inline THaOptics::TOpticsPos & operator = (const THaOptics::TOpticsPos &v)
{
fCoordSys=v.GetCoordSys();fOptics=v.GetOptics();
SetXYZ(v.X(),v.Y(),v.Z()); return *this;
}
inline THaOptics::TOpticsPos & operator = (const THaOptics::TOpticsDir &v)
{
fCoordSys=v.GetCoordSys();fOptics=v.GetOptics();
SetXYZ(v.X(),v.Y(),v.Z()); return *this;
}
inline THaOptics::TOpticsPos & operator += (const TVector3 &p)
{SetXYZ(X()+p.X(),Y()+p.Y(),Z()+p.Z());return *this;}
inline THaOptics::TOpticsPos & operator -= (const TVector3 &p)
{SetXYZ(X()-p.X(),Y()-p.Y(),Z()-p.Z());return *this;}
private:
ClassDef(THaOptics::TOpticsPos,0);
};
};
THaOptics::TOpticsDir operator + (const THaOptics::TOpticsDir &, const THaOptics::TOpticsDir &);
THaOptics::TOpticsDir operator - (const THaOptics::TOpticsDir &, const THaOptics::TOpticsDir &);
THaOptics::TOpticsDir operator + (const THaOptics::TOpticsDir &, const TVector3 &);
THaOptics::TOpticsDir operator - (const THaOptics::TOpticsDir &, const TVector3 &);
Double_t operator * (const THaOptics::TOpticsDir &, const THaOptics::TOpticsDir &);
Double_t operator * (const THaOptics::TOpticsDir &, const TVector3 &);
THaOptics::TOpticsDir operator * (const THaOptics::TOpticsDir &, Double_t a);
THaOptics::TOpticsDir operator * (Double_t a, const THaOptics::TOpticsDir &);
#endif
Last update: Tue Jul 7 19:26:17 2009
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.