============================================================================
Description of ALICE Silicon Drift Detector (SDD) Code (Rev. 2 — May, 17th 2008 — F. Prino)
============================================================================
SDD module geometrical description
SDD module geometrical description (= anode numbering scheme, time bin definition, conversion from local coordinates to detector coordinates) is managed by the AliITSsegmentationSDD class. The detector is divided in 2 drift regions along the drift direction (horizontal in the following scheme).
Each drift region is read by 256 anodes (anode pitch = 294 micrometers).
The anode signal is sampled every 25 ns, this allows to measure the drift time of the charge produced by the crossing particle.
The memory depth (= number of time bins) is of 256 samplings per anode resulting in 6.4 microseconds of maximum drift time.
Detector size (active region) along anode axis = 256 * 294 microns = 75.264 mm
Detector size (active region) along drift axis = 2 * 35.085 mm = 70.170 mm
microcables microcables /\ /\ || || || || || || 0 256 0 0 |----------------------|---------------------| 511 | time-bins | time-bins | | a | a | | n | n | X <_|_o____________________|___________________o_|__ | d | d | | e LEFT SIDE | RIGHT SIDE e | | s CHANNEL 0 | CHANNEL 1 s | | Xlocal > 0 | Xlocal < 0 | 255 |----------------------|---------------------| 256 | | V Z
=================================================================================================================
SDD digitization is implemented in the AliITSsimulationSDD class and managed via the AliITSDetTypeSim class.
Working scheme:
1) Hits --> SDigits (AliSimulation::RunSDigitization)
-> AliITS::Hits2SDigits
-> AliITS::Hits2Predigits
-> AliITSsimulationSDD::SDigitiseModule
-> AliITSsimulationSDD::HitsToAnalogDigits
- read hits, calculate anode and time bin using drift speed from OCDB and AliITSsegmentationSDD class
- apply electron cloud diffusion (gaussian smearing) along anode and drift directions, charge loss during drift (set to zero)
-> AliITSsimulationSDD::ChargeToSignal
- apply gain (from OCDB) to signal
- sum the signal to the baseline (from OCDB) value fluctuating with the
proper noise (from OCDB)
-> AliITSsimulationSDD::WriteSDigits
- call AliITS::AddSumDigit (which calls AliITSDetTypeSim::AddSumDigit) to write SDigits (AliITSpListItem) to file
2) SDigits --> Digits (AliSimulation::RunDigitization)
-> AliITSDigitizer::Exec
- load SDigits
-> AliITSsimulationSDD::FinishSDigitiseModule
-> AliITSsimulationSDD::FinishDigits
- check zero suppression option
-> AliITSsimulationSDD::Compress2D (if zero supp is active)
- apply zero suppression
- compress signal from 10 to 8 bit
- subtract low threshold
- calculate expanded signal by converting back from 8 to 10 bit
- store digit (by calling AliITS::AddSimDigit which calls
AliITSDetTypeSim::AddSimDigit) both compressed (8 bit, low threshold subtracted) and expanded (10 bit, low threshold added)
-> AliITSsimulationSDD::StoreAllDigits (if zero supp is not active)
- compress signal from 10 to 8 bit
- calculate expanded signal by converting back from 8 to 10 bit
- store digit (by calling AliITS::AddRealDigit which calls
AliITSDetTypeSim::AddRealDigit). Only expanded (10 bit) value is stored in fSignal. TO BE CHECKED AND FIXED!!!
========================================================================================================================
Local reconstruction is implemented in AliITSClusterFinderV2SDD class and managed via the AliITSDetTypeRec class.
Working scheme:
Cluster Finding (AliReconstruction::RunLocalEventReconstruction)
-> AliITSReconstructor::Reconstruct
-> AliITSDetTypeRec::DigitsToRecPoints
- Two possibilities:
A) RECONSTRUCTION FROM DIGITS
-> AliITSClusterFinderV2SDD::FindRawClusters
- build AliBin array from digit tree
- apply gain (from OCDB) correction
B) RECONSTRUCTION FROM RAW DATA
-> AliITSClusterFinderV2SDD::RawdataToClusters
- instantiate AliITSRawStreamSDD object and set
1) ddl map
2) low threshold for zero suppression (needed to decompress raw data)
- build AliBin array from raw data
- apply gain (from OCDB) correction
-> AliITSClusterFinderV2SDD::FindClustersSDD
- loop on AliBin elements and:
1) apply noise suppression (AliITSClusterFinderV2SDD::NoiseSuppress)
2) find peaks (AliITSClusterFinderV2::FindPeaks)
3) unfold clusters (AliITSClusterFinderV2::MarkPeaks)
4) calculate coordinates (AliITSClusterFinderV2::MakeCluster)
5) calculate cluster size (TO BE REVIEWED)
6) convert from anode/time bin to local coordinates
using drift speed (from OCDB) and AliITSsegmentationSDD class
7) apply correction from laser maps (from OCDB)
8) convert cluster charge from ADC to keV (from OCDB)
9) add cluster to cluster array
===============================================================================================================================
There are 6 directories in ITS/Calib with calibration data to be used in SDD reconstruction
1) DDLMapSDD
Contains: 1 AliITSDDLModuleMapSDD object with the correspondence between hardware/online and aliroot/offline numbering scheme for SDD modules
Online numbering scheme = DDL number, Carlos Number
SDD use 23 DDL each reading up to 12 Carlos cards (=12 modules)
Details on geometrical mapping can be found here.
Update in OCDB: every time the hardware cabling on the acquisition cards is modified (practically this should occur only at the beginning of data taking periods)
Object creation: macro StoreDDLMapSDD.C
strategy for storage via preprocessor to be finalized
2) CalibSDD:
Contains: 1 TObjArray with 260 AliITSCalibrationSDD objects, i.e. 1 AliITSCalibrationSDD object for each module with:
- status (0/1) of module
- status (0/1) for the 8 chips of the module
- flag to control the use of correction maps for the module
And:
- baseline
- noise
- gain
for each of the 520 anodes of the module
+ list of bad anodes (TArrayI)
NOTE: bad anodes are tagged in 2 ways:
1) inserted in the TArrayI of bad anode numbers
2) gain set to zero
Update in OCDB: after each sequence of PEDESTAL+PULSER run and PEDESTAL run -> launch ITSSDDBASda.cxx
-> measure baselines and noise for each anode
-> produce temporary output on LDC
PULSER run -> launch ITSSDDGAINda.cxx
-> read output of PEDESTAL
-> measure gain from test pulse for each anode
-> store baselines, noise and gain on FXS
Simulated files can be produced with the macro StoreCalibSDD.C
3) DriftSpeedSDD
Contains: 1 TObjArray of 520 AliITSDriftSpeedArraySDD objects, i.e. 1 AliITSDriftSpeedArraySDD for each drift region (hybrid).
The AliITSDriftSpeedArraySDD class contains AliITSDriftSpeedSDD objects with polynomial coefficients of fit to drift speed vs. anode number together with event number and event timestamp.
It provides methods for interpolation of drift speed vs. time.
Update in OCDB: 1) after an INJECTOR run
-> launch ITSSDDINJda.cxx
-> measure drift speed for each injector pad (33 drift speed determinations for each hybrid, at every 8th anode)
2) after a PHYSICS run (if and when SDD injector triggers will be implemented in the DAQ)
Simulated files can be produced with the macro StoreDriftSpeedSDD.C
4) RespSDD
Contains: 1 AliITSresponseSDD object with calibration parameters common to all modules:
- flag for zero suppressed data
- ADC to keV conversion factor for detected signal
- time offset to account for various delays in the measurement of drift time
Update in OCDB: from offline analysis (time offset from alignemnt studies
ADC to keV from reconstructed poits of cosmic tracks)
Simulated files can be produced with the macro StoreCalibSDD.C
5) MapsAnodeSDD
Contains: 1 TObjArray of 520 AliITSMapSDD objects, i.e. 1 AliITSMapSDD for each drift region (hybrid) with systematic deviations between particle crossing positions and reconstructed coordinates along anode axis
These residuals have been measured with the laser by scanning the detector surface on a discrete 2D grid.
Update in OCDB: never updated, data have been measured in the lab during the construction phase
Simulated files can be produced with the macro StoreMapsSDD.C
6) MapsTimeSDD
Contains: 1 TObjArray of 520 AliITSMapSDD objects, i.e. 1 AliITSMapSDD for each drift region (hybrid) with systematic deviations between particle crossing positions and reconstructed coordinates along drift axis
These residuals have been measured with the laser by scanning the detector surface on a discrete 2D grid.
Update in OCDB: never updated, data have been measured in the lab during the construction phase
Simulated files can be produced with the macro StoreMapsSDD.C
========================================================================================================================
ECD Run Types and DAs
---------------------
ECS Run Types available for SDD
1) STANDALONE
- for test purposes
- no DA launched at EOR
2) PEDESTAL
- GOAL: measure baselines and noise
- JTAG configuration: zero-suppression OFF
baseline equalization OFF
testpulse OFF
prepulse OFF
- DA: ITSSDDBASda.cxx (running on LDCs)
- uses AliITSOnlineSDDBase and AliITSOnlineSDDCMN classes
- calculates baseline, noise and common mode for each anode
- tags bad (= noisy + bad baseline) anodes
2) PULSER
- GOAL: measure gain
- JTAG configuration: zero-suppression OFF
baseline equalization OFF
testpulse ON
prepulse OFF
- DA: ITSSDDGAINda.cxx (running on LDCs)
- uses AliITSOnlineSDDTP class
- read PEDESTAL DA output
- calculates gain for each anode
- sets anodes with problems of gain (dead) as bad
- stores data to FXS
3) INJECTOR
- GOAL: measure drift speed
- JTAG configuration: zero-suppression ON
baseline equalization ON
testpulse OFF
prepulse ON
- DA: ITSSDDINJda.cxx (running on LDCs)
- uses AliITSOnlineSDDInjectors class
- calculates drift speed for each of the 33 groups of injectors
fits drift speed vs. anode with a 3rd degree polynomial
stores data to FXS
4) PHYSICS
Nothing done for now.
If/when injector triggers will be implemented in DAQ, a monitoring
DA will be prepared to calculated drift speed for these triggers.
===========================================================================================================================
DCS data points are used for reference. They are needed for a possible backup
estimation of drift speed in case of injector failure.
Values monitored (and stored every 2 minutes + when out of confidence band) by SDD DCS:
- 260 HV values (1 for each module)
- 260 MV values (1 for each module)
- 520 temperature values (1 for each hybrid)
Plus:
- 260 module status bits (1 for each module)
- 520 temperature status bits (1 for each hybrid)
Data treated by AliITSDCSAnalyzerSDD class which:
- compress status bits into 1 byte
- reduce data size by saving values only if out of confidence band with
respect to last stored value
- store data into AliITSDCSDataSDD objects for each module
Data stored in Reference/ITS/DCS/DataSDD.
Object stored: 1 TClonesArray of 260 AliITSDCSDataSDD (q for each module)