Application
to VELO
1. VELO Residuals
2. Problem & Strategy
3. Internal Alignment
4. Box Alignment
5. Software Description
6. How To Create Misaligned Events ?
7. How To Use The Software ?
Home
Short
Presentation
Mechanical
Constraints
Misalignment
Studies
Alignment
Techniques
Application
to VELO
C++ code
Latest News
Links

Application to the VELO

2. VELO algorithm (Part IV)

E. Alignment within GAUDI

E1. About the code

E1a. Where could you find it?

A first version VELO alignment code is now commited on LHCb CVS repository, under the Alignment branch. The code is divided into 2 different packages: AlignmentTools and VeloAlignment. AlignmentTools contains the Millepede Gaudi implementation, and thus could be used directly by other sub-detectors in order to perform their own alignment. VeloAlignment provides the interface between tracks and Millepede, in the case of the VELO.

E1b. How to run it?

E2. Algorithm description

The alignment code is intended to work on reconstructed tracks. The code described here is then intended to run within Brunel . The basic flow is described on Fig.1.


1. Alignment code into GAUDI.

E1a. Initialization.

The alignment conditions are retrieved during the initialize() method. The way to do this could be found on the condition database introduction webpage.

Other initializations are set via 4 joboptions files:

E1b. Execution.

The execute() method is used for the track selection. This selection is handled by a GAUDI tool: TrackStore, via the method TransformTrack(). This method takes a reconstructed track in input (at the pattern recognition level). The output is a VeloTrack, a specific object containing all the necessary information for our alignment algorithm (Millepede "friendly" coordinates, event number,...). If the considered track satisfies the cuts required in the joboptions, it's stored in a VeloTrack container.

E1c. Finalization.

The Millepede tool is instantiated here, via the InitMille() method. This initialization takes into account the geometry and configuration requests contained in VeloAlign.opts. All this features tends to make the code as flexible as possible, in order to be usable not only during normal running but also during testbeam period, as shown here.

After the tool initialization, Millepede is feeded with VeloTracks, via the method PutTrack(). This process is quite quick, as the VeloTrack is already in the expected format. Specific methods are used for primary vertices and for overlapping tracks.

Finally, the global fit is performed via the method MakeGlobalFit(), which gives in output the alignment constant values and the corresponding errors.

This method is used three times: for each box internal alignment, then for the boxes alignment itself. Before this last step, VeloTracks are updated in order to take into account internal misalignments. Then, we estimate the Z coordinate at the track closest approach to the beam (Zclos), and store this parameter into the VeloTrack.

With those information, we are able to look for primary vertices. We just have to find peaks in the Zclos distribution of all the tracks. If the peak is OK for us (peak requested properties are set in VeloAlign.opts), we tag the tracks with a Zclos value within the peak.

Once the global alignment is performed, one just need to update the alignment conditions, this is the last operation of the alignment algorithm (this part is still not yet completely implemented).

E2. Results

Results obtained with this code are extensively described in the different notes on VELO alignment. Latest results using the geometry framework could be found in the previous parts.