ROOT logo
TreeSearch » TREESEARCH » TreeSearch::MWDC

class TreeSearch::MWDC: public THaTrackingDetector


Reconstruction class for horizontal drift chambers used in BigBite.
Tracking is done using a tree search algorithm (DellOrso et al.,
NIM A 287, 436 (1990)), in essence a recursive template matching method.

Function Members (Methods)

voidTObject::AbstractMethod(const char* method) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual Int_tTHaAnalysisObject::Begin(THaRunBase* r = 0)
virtual voidTObject::Browse(TBrowser* b)
boolTHaSpectrometerDetector::CalcInterceptCoords(THaTrack* track, Double_t& x, Double_t& y)
boolTHaSpectrometerDetector::CalcPathLen(THaTrack* track, Double_t& t)
boolTHaSpectrometerDetector::CheckIntercept(THaTrack* track)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidClear(Option_t* opt = "")
virtual TObject*TNamed::Clone(const char* newname = "") const
virtual Int_tCoarseTrack(TClonesArray& tracks)
virtual Int_tTNamed::Compare(const TObject* obj) const
virtual voidTNamed::Copy(TObject& named) const
virtual Int_tDecode(const THaEvData&)
virtual Int_tDefineVariables(THaAnalysisObject::EMode mode = kDefine)
static Int_tTHaAnalysisObject::DefineVarsFromList(const void* list, THaAnalysisObject::EType type, THaAnalysisObject::EMode mode, const char* var_prefix, const TObject* obj, const char* prefix, const char* here)
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
voidEnableEventDisplay(Bool_t enable = true)
virtual Int_tTHaAnalysisObject::End(THaRunBase* r = 0)
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual voidTNamed::FillBuffer(char*& buffer)
Int_tTHaDetectorBase::FillDetMap(const vector<Int_t>& values, UInt_t flags = 0, const char* here = "FillDetMap")
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
virtual Int_tTHaTrackingDetector::FindVertices(TClonesArray&)
virtual Int_tFineTrack(TClonesArray& tracks)
static voidTHaAnalysisObject::GeoToSph(Double_t th_geo, Double_t ph_geo, Double_t& th_sph, Double_t& ph_sph)
THaApparatus*THaDetector::GetApparatus() const
const TreeSearch::pdbl_t&GetChisqLimits(UInt_t i) const
const char*THaAnalysisObject::GetConfig() const
virtual const char*THaAnalysisObject::GetDBFileName() const
Int_tTHaAnalysisObject::GetDebug() const
THaDetMap*THaDetectorBase::GetDetMap() const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual const char*TObject::GetIconName() const
TDatimeTHaAnalysisObject::GetInitDate() const
virtual const char*TNamed::GetName() const
Int_tTHaDetectorBase::GetNelem() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
const TVector3&THaDetectorBase::GetOrigin() const
const char*THaAnalysisObject::GetPrefix() const
Double_tGetRefTime(UInt_t i) const
const Float_t*THaDetectorBase::GetSize() const
virtual const char*TNamed::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
Float_tTHaDetectorBase::GetXSize() const
Float_tTHaDetectorBase::GetYSize() const
Float_tTHaDetectorBase::GetZSize() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTNamed::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual THaAnalysisObject::EStatusInit(const TDatime& date)
virtual Int_tTHaAnalysisObject::InitOutput(THaOutput*)
virtual voidTObject::Inspect() constMENU
static Bool_tTHaAnalysisObject::IntersectPlaneWithRay(const TVector3& xax, const TVector3& yax, const TVector3& org, const TVector3& ray_start, const TVector3& ray_vect, Double_t& length, TVector3& intersect)
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTHaAnalysisObject::IsInit() const
Bool_tTHaAnalysisObject::IsOK() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTHaTrackingDetector::IsPid()
virtual Bool_tTNamed::IsSortable() const
static boolTHaAnalysisObject::IsTag(const char* buf)
virtual Bool_tTHaTrackingDetector::IsTracking()
Bool_tTObject::IsZombie() const
static Int_tTHaAnalysisObject::LoadDB(FILE* file, const TDatime& date, const DBRequest* request, const char* prefix = "", Int_t search = 0)
static Int_tTHaAnalysisObject::LoadDB(FILE* file, const TDatime& date, const TagDef* tags, const char* prefix = "", Int_t search = 0)
static Int_tTHaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, Double_t& value)
static Int_tTHaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, Int_t& value)
static Int_tTHaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, string& text)
static Int_tTHaAnalysisObject::LoadDBvalue(FILE* file, const TDatime& date, const char* tag, TString& text)
virtual voidTNamed::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
TreeSearch::MWDCMWDC(const char* name, const char* description = "", THaApparatus* app = 0)
TreeSearch::EProjTypeNameToType(const char* name)
virtual Bool_tTObject::Notify()
static FILE*THaAnalysisObject::OpenFile(const char* name, const TDatime& date, const char* here = "OpenFile()", const char* filemode = "r", const int debug_flag = 1)
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
TNamed&TNamed::operator=(const TNamed& rhs)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidPrint(Option_t* opt) const
voidTHaDetectorBase::PrintDetMap(Option_t* opt = "") const
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
static Int_tTHaAnalysisObject::SeekDBconfig(FILE* file, const char* tag, const char* label = "config", Bool_t end_on_tag = false)
static Int_tTHaAnalysisObject::SeekDBdate(FILE* file, const TDatime& date, Bool_t end_on_tag = false)
virtual voidTHaDetector::SetApparatus(THaApparatus*)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
voidTHaAnalysisObject::SetConfig(const char* label)
virtual voidSetDebug(Int_t level)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidTHaAnalysisObject::SetName(const char* name)
virtual voidTHaAnalysisObject::SetNameTitle(const char* name, const char* title)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTNamed::SetTitle(const char* title = "")MENU
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp, char* parent)
virtual Int_tTNamed::Sizeof() const
static voidTHaAnalysisObject::SphToGeo(Double_t th_sph, Double_t ph_sph, Double_t& th_geo, Double_t& ph_geo)
THaAnalysisObject::EStatusTHaAnalysisObject::Status() const
virtual voidStreamer(TBuffer& b)
voidStreamerNVirtual(TBuffer& b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual voidTObject::UseCurrentStyle()
static vector<std::string>THaAnalysisObject::vsplit(const string& s)
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
voidAdd3dMatch(const TreeSearch::Rvec_t& selected, Double_t matchval, list<std::pair<Double_t,Rvec_t> >& combos_found, TreeSearch::Rset_t& unique_found) const
virtual THaTrack*THaTrackingDetector::AddTrack(TClonesArray& tracks, Double_t x, Double_t y, Double_t theta, Double_t phi, THaTrackID* ID = NULL)
boolTHaSpectrometerDetector::CalcTrackIntercept(THaTrack* track, Double_t& t, Double_t& ycross, Double_t& xcross)
virtual voidTHaSpectrometerDetector::DefineAxes(Double_t rotation_angle)
Int_tTHaAnalysisObject::DefineVarsFromList(const VarDef* list, THaAnalysisObject::EMode mode = kDefine, const char* var_prefix = "") const
Int_tTHaAnalysisObject::DefineVarsFromList(const RVarDef* list, THaAnalysisObject::EMode mode = kDefine, const char* var_prefix = "") const
Int_tTHaAnalysisObject::DefineVarsFromList(const void* list, THaAnalysisObject::EType type, THaAnalysisObject::EMode mode, const char* var_prefix = "") const
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
THaAnalysisObject*THaAnalysisObject::FindModule(const char* name, const char* classname, bool do_error = true)
voidFindNearestHits(TreeSearch::WirePlane* wp, const THaTrack* track, const TreeSearch::Rvec_t& roads) const
voidFitErrPrint(Int_t err) const
Int_tFitTrack(const TreeSearch::Rvec_t& roads, vector<Double_t>& coef, Double_t& chi2, TMatrixDSym* coef_covar = 0) const
UInt_tGetDAQnchan(THaDetMap::Module* m) const
static vector<std::string>THaAnalysisObject::GetDBFileList(const char* name, const TDatime& date, const char* here = "GetDBFileList()")
virtual const char*THaAnalysisObject::Here(const char*) const
UInt_tLoadDAQmodel(THaDetMap::Module* m) const
Double_tLoadDAQresolution(THaDetMap::Module* m) const
virtual voidTHaDetector::MakePrefix()
UInt_tMatchRoads(vector<Rvec_t>& roads, list<std::pair<Double_t,Rvec_t> >& combos_found, TreeSearch::Rset_t& unique_found)
THaTrack*NewTrack(TClonesArray& tracks, const TreeSearch::MWDC::FitRes_t& fit_par)
virtual FILE*THaAnalysisObject::OpenFile(const TDatime& date)
virtual FILE*THaAnalysisObject::OpenRunDBFile(const TDatime& date)
Bool_tPassTrackCuts(const TreeSearch::MWDC::FitRes_t& fit_par) const
static char*THaAnalysisObject::ReadComment(FILE* fp, char* buf, const int len)
virtual Int_tReadDatabase(const TDatime& date)
virtual Int_tTHaDetectorBase::ReadGeometry(FILE* file, const TDatime& date, Bool_t required = kFALSE)
virtual Int_tTHaAnalysisObject::ReadRunDatabase(const TDatime& date)
virtual Int_tTHaAnalysisObject::RemoveVariables()

Data Members

enum { kDoTimeCut
enum THaAnalysisObject::EStatus { kOK
enum THaAnalysisObject::EType { kVarDef
enum THaAnalysisObject::EMode { kDefine
enum THaAnalysisObject::EProperties { kNeedsRunDB
enum TObject::EStatusBits { kCanDelete
enum TObject::[unnamed] { kIsOnHeap
static const Double_tTHaAnalysisObject::kBig= 1.e38; // default junk value
Double_tf3dMatchCutMaximum allowed 3D match error
Double_tf3dMatchvalScalefactCorrection for fast 3D matchval
TreeSearch::MWDC::Wpvec_tfCalibPlanesPlanes in calibration mode
TreeSearch::vec_pdbl_tfChisqLimitslo/hi onfidence interval limits on Chi2
TStringTHaAnalysisObject::fConfigConfiguration to use from database
THashTable*fCrateMapMap of MWDC DAQ modules
Int_tTHaAnalysisObject::fDebugDebug level
THaDetMap*THaDetectorBase::fDetMapHardware channel map for this detector
Int_tfFailNhitsToo many hits in wire plane(s)
Int_tfFailNpatToo many treesearch patterns found
TDatimeTHaAnalysisObject::fInitDateDate passed to Init
Bool_tTHaAnalysisObject::fIsInitFlag indicating that ReadDatabase done
Bool_tTHaAnalysisObject::fIsSetupFlag indicating that DefineVariables done.
Int_tfMaxThreadsMaximum simultaneously active threads
Int_tfMinNdofMinimum number of points in fit - 4
TStringTNamed::fNameobject identifier
Int_tTHaDetectorBase::fNelemNumber of detector elements (paddles, mirrors)
Bool_tTHaAnalysisObject::fOKOutFlag indicating object-output prepared
TVector3THaDetectorBase::fOriginCenter position of detector (m)
TreeSearch::MWDC::Wpvec_tfPlanesWire planes
char*THaAnalysisObject::fPrefixName prefix for global variables
TreeSearch::MWDC::Prvec_tfProjPlane projections
UInt_tTHaAnalysisObject::fPropertiesProperties of this object (see EProperties)
THaDetMap*fRefMapMap of reference channels for VME readout
vector<float>fRefTime[fRefMap->GetSize()] ref channel data
Float_tTHaDetectorBase::fSize[3]Detector size in x,y,z (m) - x,y are half-widths
THaAnalysisObject::EStatusTHaAnalysisObject::fStatusInitialization status flag
TreeSearch::ThreadCtrl*fThreads! Thread controller
TStringTNamed::fTitleobject title
TVector3THaSpectrometerDetector::fXaxX axis of the detector plane
TVector3THaSpectrometerDetector::fYaxY axis of the detector plane
TVector3THaSpectrometerDetector::fZaxNormal to the detector plane

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

MWDC(const char* name, const char* description = "", THaApparatus* app = 0)
 Destructor. Delete objects & subdetectors and unregister variables
void Clear(Option_t* opt = "")
 Clear event-by-event data, including those of wire planes and projections
Int_t Decode(const THaEvData& )
 Decode all planes and fill hitpatterns per projection
void FitErrPrint(Int_t err) const
Int_t FitTrack(const TreeSearch::Rvec_t& roads, vector<Double_t>& coef, Double_t& chi2, TMatrixDSym* coef_covar = 0) const
 Linear minimization routine to fit a physical straight line track through
 the hits registered in the different projection planes.

 This is a much streamlined version of ROOT's TLinearFitter that solves
 the normal equations with weights, (At W A) a = (At W) y, using Cholesky
 decomposition, TDecompChol. The model used is
   y_i = P_i * T_i
       = ( x + z_i * mx, y + z_i * my) * ( cos(a_i), sin(a_i) )
   y_i is the measured coordinate in the i-th wire plane at z_i
   P_i is the physical track intersection point with the z_i plane
   T_i is the axis unit vector of the i-th plane
   a_i is the angle of the coordinate axis of the i-th plane w.r.t. x
   x,mx,y,my are the track parameters to be fitted, origin x,y and
       slopes mx,my.

 "roads" contains a set of Roads that successfully combine in 3-d, one
 Road* per projection. Each road, in turn, contains a set of (y_i,z_i)
 coordinates, at most one per wire plane of the projection type, that
 give the best 2D track fit within the road.

 "coef" are the fitted track parameters, x, x'(=mx), y, y'(=my).
 The reference system is the z=0 plane (usually the first chamber).

 "chi2" is the chi2 of the fit (not normalized).

 "coef_covar" is the covariance matrix of the fit results. Since it is
 expensive to calculate, it is only filled if the argument is supplied.

 The return value is the number of degrees of freedom of the fit, i.e.
 npoints-4 > 0, or negative if too few points or matrix inversion error
void FindNearestHits(TreeSearch::WirePlane* wp, const THaTrack* track, const TreeSearch::Rvec_t& roads) const
 For the given wire plane, find the hit nearest to the given track
 and register it in the plane's fit coordinates array.
 The given roads are the ones generating the given track.
 This routine is used for efficiency and alignment studies and testing.
THaTrack* NewTrack(TClonesArray& tracks, const TreeSearch::MWDC::FitRes_t& fit_par)
 Make new track with given parameters. Used by CoarseTrack to generate
 all MWDC tracks
void Add3dMatch( const Rvec_t& selected, Double_t matchval, list< pair<Double_t,Rvec_t> >& combos_found, Rset_t& unique_found )
 Save road combination with good matchvalue
UInt_t MatchRoads( vector<Rvec_t>& roads, list< pair<Double_t,Rvec_t> >& combos_found, Rset_t& unique_found )
 Match roads from different projections that intersect in the front
 and back plane of the detector
Bool_t PassTrackCuts(const TreeSearch::MWDC::FitRes_t& fit_par) const
 Test results of 3D track fit (in fit_par) against hard cuts from
Int_t CoarseTrack(TClonesArray& tracks)
 Find tracks from the hitpatterns, using the coarse hit drift times
 uncorrected for track slope, timing offset, fringe field effects etc.
Int_t FineTrack(TClonesArray& tracks)
 Second-level tracking, applying fine corrections.

 - Correct the hit drift distances using timing, track slope,
   track momentum, magnet fringe field, etc., as applicable.
 - Re-collect hits of roads and re-fit roads
 - Re-combine track projections in 3D and re-fit 3D track
Int_t DefineVariables(THaAnalysisObject::EMode mode = kDefine)
 Initialize global variables
THaAnalysisObject::EStatus Init(const TDatime& date)
 Initialize MWDC. Calls standard Init(), then initializes subdetectors.
Int_t ReadDatabase(const TDatime& date)
 Read MWDC database
void Print(Option_t* opt) const
void SetDebug(Int_t level)
 Set debug level of this detector, including all wire planes (subdetectors)
 and projections
void EnableEventDisplay(Bool_t enable = true)
 Enable event display support. Can only be called before initialization.
EProjType NameToType(const char* name)
 Return the index corresponding to the given plane name.
 The comparison is not case-sensitive.
UInt_t LoadDAQmodel(THaDetMap::Module* m) const
 Update detector map module 'mod' with the model number from the cratemap
Double_t LoadDAQresolution(THaDetMap::Module* m) const
 Update detector map module 'mod' with the resolution from the cratemap
UInt_t GetDAQnchan(THaDetMap::Module* m) const
 Return number of channels for detector map module 'mod' from cratemap
const pdbl_t& GetChisqLimits(UInt_t i) const
Double_t GetRefTime(UInt_t i) const
{ return (i<(UInt_t)fRefMap->GetSize()) ? fRefTime[i] : kBig; }