LHCb Outer Tracker Software TWiki
Table of Contents
Outer Tracker Packges
The Outer Tracker software packages are
Package |
Project |
Purpose |
Det/OTDet |
LHCb |
OT Detector Interface |
OT/OTDAQ |
LHCb |
Decoding |
OT/OTSimulation |
Boole |
Digitisation |
OT/OTAssociators |
Lbcom |
MC Associators for OTChannelID to MCOTDeposit, MCHit and MCParticle |
OT/OTMonitor |
Lbcom |
Simple Monitoring for MC/Offline |
OT/OTCalibration |
No official release yet |
Set of algorithms for T0 and RT calibration |
There are also other OT specific classes in the following packages
Class |
Package |
Project |
Purpose |
OTChannelID |
Kernel/LHCbKernel |
LHCb |
Constructs a channel id for a given station, layer, quarter, module, straw and tdc time |
MCOTDeposit |
Event/MCEvent |
LHCb |
Constructs an MC Deposit for a given MChit and channel ID |
MCOTTime |
Event/MCEvent |
LHCb |
Constructs an MCOTTime from a channel id and list of deposits that fall inside the same tdc window |
OTTime |
Event/DigiEvent |
LHCb |
Constructs an OTTime for a given channel id and t0 corrected tdc time |
For more info and usage see the doxygen of the corresponding packages/classes.
OT Geometry
Modules
These are the basic building "blocks" in the OT description. There are three types of modules F, S1, S2, (64 straws per mono-layer) and S3 (32 straws per mono-layer). The length of a module is such that it corresponds to the straw length. ( The readout boards & boxes fall outside the LHCb acceptance and are thus not part of the description. ) The width of a module is determined by the number of straws and the straw pitch (=5.25mm), the factor 0.5 is because of the staggering, and the thickens of the side-walls (0.6875mm).
Module |
Length |
Width |
Thickness |
F |
|
340mm = 64.5*5.25mm + 2*0.6875mm |
32mm |
S1 |
|
340mm |
32mm |
S2 |
|
340mm |
32mm |
S3 |
|
172mm = 32.5*5.25mm + 2*0.6875mm |
32mm |
An OT Module
The straws ...
OT Conditions
Currently the following OT conditions exist:
Condition |
Remark |
Alignment |
XYZ delta translations and XYZ delta rotations for OT, all stations, all layers and all modules |
Readout Status |
Status of FE box connected to a module and status of all channels in a module |
T0 |
T0 of straw (per module) |
TR parameters |
T(R) coefficients in nanoseconds of a higher order polynomial (per module) |
ST parameters |
Sigma(T) coefficients in nanoseconds of a higher order polynomial (per module) |
The Readout, T0, RT and ST conditions are per module in the xml, i.e.
<detelem classID = "8105" name = "Module1">
<author>Jan Amoraal</author>
<version>1.0</version>
<geometryinfo lvname = "/dd/Geometry/AfterMagnetRegion/T/OT/Modules/lvLModule"
condition = "/dd/Conditions/Alignment/OT/&Station;Station&Layer;&Quarter;Module1"
support = "/dd/Structure/LHCb/AfterMagnetRegion/T/OT/&Station;/&Layer;/&Quarter;"
npath = "pv&SideModules;:6" />
<param name = "moduleID" type = "int">1</param>
<param name = "nStraws" type = "int">64</param>
<conditioninfo name = "Calibration" condition="/dd/Conditions/Calibration/OT/CalibrationModules&Station;&LayerType;Q&QuarterID;/&Station;&LayerType;Q&QuarterID;M1" />
<conditioninfo name = "Status" condition="/dd/Conditions/ChannelInfo/OT/ReadoutModules&Station;&LayerType;Q&QuarterID;/&Station;&LayerType;Q&QuarterID;M1" />
</detelem>
where the tag
conditioninfo contains the name of the condition and the path to the condition in the Transient Store (TS). Note that the tag
geometryinfo contains the alignment condition.
Now since there are nine modules per quarter, i.e. Tell1, I opted to group the module conditions per quarter. That is there are 48 xml files one per quarter each containing the condition for the modules in that quarter. I used the following naming convention CalibrationModules+*ID* and ReaoutModules+*ID*, where
ID = T + stationID + (X1|U|V|X2) + Q + quarterID, for the calibration conditions and readout conditions respectively.
Here are some examples of what the calibration condition xml looks like for module 1 in T1X1Q0
<condition classID = "5" name = "T1X1Q0M1">
<paramVector name = "TRParameters" comment = "RT parameters in ns" type = "double" > 0.0 42.0 0.0 0.0 0.0 </paramVector>
<paramVector name = "STParameters" comment = "SigmaT parameters in ns" type = "double" > 3.43 0.0 0.0 0.0 0.0 </paramVector>
<paramVector name = "TZero" comment = "T0s of straws in module" type = "double"> 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 </paramVector>
</condition>
and the readout status condition
<condition classID = "5" name = "T1X1Q0M1">
<param name = "FEBoxStatus" comment = "Status of FEBox" type = "int"> 0 </param>
<paramVector name = "ChannelStatus" comment = "Status of straws in module, i.e. ok, dead, noisy, ..." type = "int"> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </paramVector>
</condition>
There's a python script available that automatically generates these conditions with initial values set to zero. This script can be easily modified/extended.
Getting the Conditions
There exists a couple of methods in
OTDet/DeOTModule to get the conditions. For the calibration these are, only of interest for the tracking experts,
Method |
Argument |
Purpose |
strawT0 |
int that is a straw id |
returns T0 for a given software straw id ( 1 - 128 ) in this module |
rtRelation |
none |
returns RT relation for this module |
calibrationCondition |
none |
returns pointer to the calibration condition (Condition*) for this module (for experts only!!!) |
Example of usage
#include "OTDet/DeOTDetector.h"
#include "OTDet/DeOTModule.h"
#include "OTDet/RtRelation.h"
...
/// initialize
...
m_detector->getDet<DeOTDetecor>( DeOTDetectorLocation::Default );
...
/// execute
...
LHCb::OTChannelID channel = ...;
const DeOTModule* module = m_detector->module( channel );
const double t0Channel = module->strawT0( channel.straw() );
const OTDet::RtRelation& rt = module->rtRelation();
...
Setting Conditions
Just as it's possible to get conditions it is also possible to set conditions. The methods to set calibration conditions are
Method |
Argument |
Purpose |
setStrawT0s |
vector of 128 (straws) doubles |
Set the straw t0s (per straw) in this module and returns StatusCode |
setRtRelation |
new rt |
Sets RT relation for this module and returns StatusCode |
Example of usage
#include "OTDet/DeOTDetector.h"
#include "OTDet/DeOTModule.h"
#include "OTDet/RtRelation.h"
...
/// initialize
...
m_detector->getDet<DeOTDetecor>( DeOTDetectorLocation::Default );
...
/// execute
...
{
/// Here we do the calibration
}
/// finalize
...
StatusCode sc = StatusCode::SUCCESS;
std::vector< double > strawT0s = ...; ///< Currently we can only set it per straw, so a vector of 128/64 straws
const DeOTModule* module = ...;
sc = module->setStrawT0s( strawT0s );
/// Do something useful with sc
OTDet::RtRelation rt = ...;
sc = module->setRtRelation( rt )
/// Do something useful with sc
...
Writing the conditions in the TS to Xml
This is a piece of cake. All one needs to do is to add the algorithm
OTWriteConditionsToXml in
OT/OTCalibration to some sequence in the job. This will write a bunch of xml files per quarter/Tell1 in the finalize step of your job.
Putting the conditions in a sql database
First thing to do is to unpack the default database
SetupProject LHCb
dump_db_to_files.py -c <connection string> -T <tag> -d <destination directory>
where
connection string is the sql path to the sql database,
tag is the database tag,and
destination directory is where you want to unpack it, e.g.
mkdir dbase
dump_db_to_files.py -c sqlite_file:$SQLDDDBROOT/db/LHCBCOND.db/LHCBCOND -T head-20081002 -d $HOME/dbase/
The next step, once you have unpacked the database, is to copy the xml files produced by
OTWriteConditionsToXml to their respective locations, e.g. the calibration xml will go to Conditions/OT/Calibration, and pack it.
copy_files_to_db.py -c sqlite_file:$HOME/dbase/LHCBCOND-CosmicsT0s.db/LHCBCOND -s $HOME/dbase
One can safely remove the other subdetector condtions. This would significantly reduce the size of the dbase.
Using your new database
This is a piece of cake. In python do
from Configurables import ( CondDBAccessSvc )
tZeros = CondDBAccessSvc( 'ModuleTZeros' )
tZeros.ConnectionString = 'sqlite_file:/afs/cern.ch/user/j/janos/dbase/LHCBCOND-CosmicsT0s.db/LHCBCOND'
CondDB().addLayer( tZeros )
OT debugging tools
Documentation
Some of these are obsolete but still contain some useful information
Title |
Author(s) |
ID |
See also |
An improved digitization procedure for the Outer Tracker |
M. Merk et al. |
LHCb 2001-055 |
Optimizing the Outer Tracker near the y=0 region |
M. Merk et al. |
LHCb 2003-019 |
Geometry of the LHCb Outer Tracker |
S. Bachmann and A. Pellegrino |
LHCb 2003-035 |
OT Geometry and Naming Conventions |
Address Scheme for the Outer Tracker FE Electronics |
A. Pellegrino et al. |
LHCb 2003-041 |
Hardware to Software Mapping |
Outer Track Software |
J. v. Tilburg |
LHCb 2003-062 |
A Study of the Material in an Outer Tracker Module |
J. Nardulli and N. Tuning |
LHCb 2004-114 |
Outer Tracker Event Data Model |
J. Nardulli and J. v. Tilburg |
LHCb 2005-004 |
Beam Test of the Final Modules and electronics of the LHCb Outer Tracker in 2005 |
G. v. Apeldoorn et al. |
LHCb 2005-076 |
Outer Tracker Occupancy Studies |
J. Nardulli |
LHCb 2005-092 |
The DC06 Outer Tracker Simulation |
J. Amoraal and J. Nardulli |
LHCb 2007-018 |
Outer Tracker DAQ data format |
A. Pellegrino et al. |
LHCb 2007-040 |
Links
LHCb Computing Twiki
LHCb Conditions HowTo
CMSsandbox.ToDo List
- Add straws to detector description to
- Simulate curly tracks
- Properly simulate clusters
- Double pulse
- Revise or improve creation of X-Talk clusters
- Revise or improve creation of noise clusters
- Revise or improve rt-relation
- Includes smearing
- Currently linear
Scripts