QwAnalysis
|
Files | |
file | nodenode.h |
Definition of nodenode which links treenodes to their siblings. | |
file | QwBridgingTrackFilter.h |
Definition of the track filter for the bridging methods. | |
file | QwMatrixLookup.h |
Definition of the matrix lookup bridging method. | |
file | QwRayTracer.h |
Definition of the ray-tracing bridging method for R2/R3 partial tracks. | |
file | QwTreeEventBuffer.h |
Definition of the class that reads simulated QweakSimG4 events. | |
file | shortnode.h |
Definition of a shortnode, the short version of a nodenode. | |
file | shortnode.h |
Definition of a shortnode, the short version of a nodenode. | |
file | treenode.h |
Definition of a treenode which contains the bits that make up a tree pattern. | |
file | QwSimTracking.cc |
Example of the QwTreeEventBuffer class to read QweakSimG4 events. | |
file | QwTracking.cc |
This is the main executable for the tracking analysis. | |
file | nodenode.cc |
Definition of nodenode which links treenodes to their siblings. | |
file | QwMainDetector.cc |
This is the main executable for the tracking analysis. | |
file | QwRayTracer.cc |
Raytrace in magnetic field to bridging R2/R3 partial tracks. | |
file | QwTrackingTreeRegion.cc |
Implementation of the container for the pattern databases for each detector region. | |
file | QwTreeEventBuffer.cc |
Implementation of the class that reads simulated QweakSimG4 events. | |
file | shortnode.cc |
Definition of a shortnode, the short version of a nodenode. | |
file | shortnode.cc |
Definition of a shortnode, the short version of a nodenode. | |
file | treenode.cc |
Definition of a treenode which contains the bits that make up a tree pattern. | |
Namespaces | |
QwTracking | |
Contains tracking-related objects. | |
Data Structures | |
class | QwPMT_Channel |
class | QwDelayLine |
class | QwDetectorInfo |
class | QwDriftChamber |
class | QwDriftChamberVDC |
class | QwHitContainer |
class | QwMainDetector |
class | QwSubsystemArrayTracking |
class | QwTrackingTreeSort |
This module is used to identify good track segments versus ghost tracks/hits. More... | |
class | QwTriggerScintillator |
class | QwTracking::nodenode |
A nodenode is used as a pointer which links treenodes to their siblings. More... | |
class | QwBridgingTrackFilter |
Track filter for the bridging methods. More... | |
class | QwEventHeader |
Contains header information of a tracked event. More... | |
class | QwKinematics |
Kinematic variables. More... | |
class | QwEvent |
Contains a tracked event, i.e. all information from hits to tracks. More... | |
class | QwGeometry |
Collection of QwDetectorInfo pointers that specifies an experimental geometry. More... | |
class | QwHit |
Hit structure uniquely defining each hit. More... | |
class | QwHitPattern |
Hit patterns used in the tracking tree search. More... | |
class | QwMagneticField |
Magnetic field map object. More... | |
class | QwPartialTrack |
Contains the straight part of a track in one region only. More... | |
class | QwQuartzBarLight |
Contains header information of a tracked event. More... | |
class | QwTrack |
Contains the complete track as a concatenation of partial tracks. More... | |
class | QwTrackingTree |
Creates and manages the treesearch pattern database. More... | |
class | QwTrackingTreeMatch |
Module that matches track segments for pairs of wire planes. More... | |
class | QwTrackingTreeRegion |
A container for the pattern databases for each detector region. More... | |
class | QwTrackingWorker |
Controls all the routines involved in finding tracks in an event. More... | |
class | QwTreeEventBuffer |
Read simulated QweakSimG4 events and generate hit lists. More... | |
class | QwTreeLine |
One-dimensional (u, v, or x) track stubs and associated hits. More... | |
class | QwVertex |
Contains vertex information. More... | |
class | QwTracking::shortnode |
Similar to a nodenode. More... | |
class | QwTracking::shorttree |
Similar to a treenode. More... | |
class | QwTracking::treenode |
A treenode contains the bits that make up a tree pattern. More... | |
class | Uv2xy |
Converts between (u,v) and (x,y) coordinates. More... | |
class | VQwBridgingMethod |
Interface to the various bridging methods. More... | |
class | VQwsubsystemTracking |
Base class for tracking subsystems. More... | |
class | VQwTrackingElement |
Virtual base class for all tracking elements. More... | |
The Qweak Track Reconstruction package (QTR) was originally based upon software developed for the HERMES experiment. In both experiments, charged particles pass through drift chambers without the presence of a magnetic field. In each experiment, upstream and downstream straight track segments are connected by a magnetic field inwhich there are no detectors. Therefore track reconstruction is performed separately for the upstream and downstream regions, and then a fit is performed to match the tracks in the magnetic field.
The main difference between the experiments in terms of track reconstruction, is that in HERMES there were multiple types of tracked particles, and thus particle identification was an additional requirement. in Qweak, only electrons will be tracked, therefore there is no need for particle identification algorithms. Additionally, due to the nature of the Qweak experiment, precision is of the utmost importance. This requires the development of calibration routines which include but are not limited to: fitting drift-time-to-distance functions, detector alignment, detector plane alignment, and possibly drift chamber wire alignment.
QTR makes use of pattern recognition in order to identify good tracks from a set of hits. In the simplest case, a single electron track produces a nominal set of hits in each drift chamber (DC) wire it passes. In reality, DC wires may suffer from various inefficiencies. They may fire all the time, without the presence of a charged particle track, giving rise to false hits. They may also fail and not fire at all, creating gaps in the data set. Additionally, in the case of multiple tracks, pattern recognition must be used to identify which hits belong to which track. While it is not currently the plan to run at a beam current which would produce a significant percentage of multi-track events, the reconstruction software should be flexible in this aspect so that running conditions are not constrained by software capabilities.
Due to the fundamental differences between the HDCs in region 2 and the VDCs in region 3, they are treated differently in the tracking code too.
In the HDCs (Horizontal Drift Chambers), there are four planes of wires in each direction, and the nominal particle track is very rougly perpendicular to the wire planes. Due to the HDC design, an individual hit determines the distance of closest approach to the wire. From this distance and a rough calculation of the entrance angle, the position of ht eparticle on the wire plane may be determined. Therefore, each plane is divided into a bit array with the hit position(s) corresponding to the 'on' bit(s) in the array. The 2D pattern is then created from the set of planes that lie in the same direction.
The VDCs (Vertical Drift Chambers) are constructed with an array of signal wires that lie between two cathode planes. The chambers are oriented such that the nominal particle trajectories traverse four to eight of the drift cells in a single plane. Given an approximate entrance angle, the drift time (measured using a TDC) is correlated with the distance of the track to the wire, on a line between the wire and the cathode plane. Therefore, each plane of wires has its own 2D bit pattern, consisting of the wire number on one axis, and the drift distance on the other axis. Currently, the bit pattern contains eight columns, corresponding to the maximum number of hits for ideal tracks.
Due to the large number of sense wires, limited space and funding, and the complication of rotating the detectors in the lab, each TDC measurement will correspond to a group of eight non-consecutive sense wires. The multiplicity arising from this setup may generate ambiguities in the identification of the correct wire hit by an electron. In the case of multiple tracks in a single event, these ambiguities must be resolved by the tracking code.
In the region 3 part of the tracking code method QwTrackingWorker::ProcessHits, there is a loop over the two VDC planes. The QwTrackingTreeSearch::TsSetPoint method is called for each plane to map the hits in the event to a bit pattern. Next, the QwTrackingTreeSearch::TsSearch method is called to find all matching patterns for each plane. Finally, TreeCombine::TlTreeLineSort is called to obtain the track segment candidates for this wire plane.
TreeCombine::TlTreeLineSort first matches a subset of the hits in the event to the matching patterns. This is done by checking which hits are closest to the bits in the patterns. Once the correct hits are identified, they are fit to a line and a chi-square value is calculated. TreeCombine::TlTreeLineSort then uses the treesort class to sort the track candidates by likelihood. Each track candidate is strung together into a linked list and is available to the QwTrackingWorker::ProcessHits.
At this point there are sets of track candidates in the upstream and downstream planes of a single wire direction. QwTrackingWorker::ProcessHits next calls the QwTrackingTreeMatch::MatchR3 method which loops over the upstream and downstream track candidates to identify which best line up according to their slopes and intercepts. QwTrackingTreeMatch::MatchR3 returns a new set of track candidates which represent both planes in the same wire direction. The loop over the two wire directions is ended, with tracks in the u and v directions.
The Qweak Tracking code is built around four main tracking modules:
The organization is done by the module QwTrackingWorker.