Photon Finder Kit
Originally this Clustering Algorithm was developed by Predrag Krstonosic. Have a look at his thesis for more information on the algorithm. The official source code version is kept in the ilcsoft repository:
/afs/desy.de/group/it/ilcsoft/v-xx-xx/MarlinReco/v-xx-xx/Clustering/PhotonFinderKit
I have adopted and tested the algorithm for ILD00. Attached you can find my personal versions of
The clustering algorithm is restricted to ECAL, and was optimized for photons coming from the IP.
Steering
An example steering file is marlinKIT.xml, which was used by me.
Kit Steering Parameters |
Parameter name |
comment |
my setting |
Cleaning |
Apply topological cleaning, to get rid of muons, neutrons, ... |
YES |
TopologicalCut |
If Cleaning = YES, require > N neighboring hits to accept this as a photon candidate |
4 |
NumberOfLevels |
Number of threshold levels i in which the hits will be divided for clustering < 16 |
10 |
Levels |
Set the thresholds for the i levels in MIP |
0.1 1.5 2.5 4 6 9 16 26 41 65 |
MinHit0 |
Minimum number of hits required in the 0th level (the one containing all other levels) |
8 |
MinHitSplit |
Minimum number of hits for the i'th level, before splitting the cluster |
8 |
Coscut |
cosine of the opening angle in which to expect a cluster, hits outside will be considered as 2nd cluster |
0.95 |
Distcut |
Minimum distance between 2 clusters in mm, if smaller they will be merged |
30 |
Rcut |
N_{hits}[level i]/N_{hits}[level i-1] |
0.4 |
PGDB
The PhotonFinder needs the Physical Geometrical database (PGDB) for fast access to properties of the sub-detectors. The MIP factor has to be adopted to the chosen detector model.
Superhit
The basic class for this photon finder.
- To ease the nearest neighbour clustering, all cells are artificially shifted
- to have equal distance (10mm) in x, y and z. The Superhit knows about their true and their shifted position. Be CAREFUL if the layer distance gets smaller then the cell width!
- Searches for cluster seeds (connected hits)
- calculates the center of each cluster,
- their direction as direction between the center and the IP
- CAREFUL: Cannot be used for non-pointing gammas!
- the initial cluster start as closest hit in the first ECAL layer to the line
- between cluster maximum and IP
- the energy collected in the cluster as well as an estimate of the
- true energy of this cluster
- and the distance between clusters.
MarlinMath
contains all functions needed from Superhit to calculate distances, energies and so on.
KITdev
The main program where all ends meet, searching for em-showers in the ECAL. It depends on the Physical Geometrical Data Base PGDB, the Superhit class, and mathematical operations defined in MarlinMath. The required calibration values can be obtained from KITcalibrator. KIT is working on the MIP scale. Each cluster level has to be tuned. As an output you get # clusters, energy in cluster, hits in cluster, estimated true energy in cluster, position, direction, and distance to other clusters.
Before getting started:
Energy Calibration
KIT needs to get calibration values that determine the true cluster energy, in dependence of the cluster level: E_cluster [level ] = a*E_true + b with E_min < E_true < E_max
This input, needed by KIT, is stored in KITutil as a 9x10 array for 9 energies with 10 levels each. I have created single photon samples from 0.5 to 200 GeV for the LDC'02Sc model, which has the same ECAL geometry as the ILD00 model. My calibration files are available in the DESY dCache:
/pnfs/desy.de/flc/user/nwattime/neutralinoAnalysis/simulatedFiles/LDCprime/
Using KITcalibrator.cc and KITcalibrator.h as specified in calibrateKIT.xml, the resulting calibration constants can be found in my KITutil.cc version as
void CreateCalibration_LDCPrime02Sc(vector<CoreCalib2>* cc) { // fit straight line: E_true = aa*E_reco + bb for each energy and level double aEnom[13] = {0.5,1.0,2.0,3.0,5.0,8.0,12.0,20.0,40.0,70.0,100.0,150.0,200.0}; //nominal photon energy double aa[13][10] = {{0.390,0.386,0.875,0.327,0.000,0.000,0.000,0.000,0.000,0.000}, ... {0.836,0.836,0.836,0.836,0.836,0.836,0.386,0.836,0.000,0.000}}; double bb[13][10] = {{0.412,0.436,0.383,0.471,0.000,0.000,0.000,0.000,0.000,0.000}, ... {46.13,46.13,46.13,46.13,46.13,46.13,46.13,46.13,0.000,0.000}}; double aEmin[13][10] = {{0.250,0.200,0.150,0.060,0.000,0.000,0.000,0.000,0.000,0.000}, ... {182.7,182.7,182.7,182.7,182.7,165.0,135.0,112.0,0.000,0.000}}; double aEmax[13][10]={{0.600,0.500,0.350,0.300,0.000,0.000,0.000,0.000,0.000,0.000}, ... {204.1,204.1,204.1,204.1,204.1,204.1,204.1,204.1,0.000,0.000}};
Performance
Clustering Efficiency
The clustering efficiency is defined as probability to reconstruct exactly one cluster, if one photon is shot into the detector. I have tested the efficiency for photon energies between 1 and 250 GeV, with perpendicular incidence to the ECAL barrel surface, as well as with inclined incidence angles up to 40degree in phi and theta.
In all cases the efficiency is above 88%. It is best for perpendicular photons (>96%), and gets worse with an increasing incidence angle. At very low energies (15 GeV), the algorithm tends not to reconstruct clusters which don't have enough hits, while at higher energies (> 100 GeV), and especially at higher incidence angles, the algorithm tends to split the clusters.
Adopting the KIT steering parameters should help to find the best clustering efficiency for the photon energy / angle you are interested in.
Energy Reconstruction
The energy is reconstructed as sum over the energy deposition in all hits assigned to a cluster.
The deviation from reconstructed to input energy is smaller than 5% for all energies and angles under investigation. Again, the best linearity is obtained for perpendicular photons (<1.5%), while the deviation increases with an increasing incidence angle.
Position Reconstruction
The cluster position is reconstructed as the energy weighted center of gravity:
<x> = sum(x_i * E_i)/sum(E_i)
Angular Reconstruction
The cluster angle is reconstructed from its principal axes according to
phi = arctan(y/x) theta = arccos z:
The principle axes is reconstructed by diagonalizing the inertia tensor
dy^2 + dz^2 - dx dy - dx dz T = sum[ E_i ( - dy dx dx^2 + dz^2 - dy dz ) ] - dz dx - dz dy dx^2 + dz^2
to determining the eigenvalues and eigenvectors. The eigenvalue with the largest eigenvalue is taken to be the main principal axis.
The deviation between reconstructed and input angle is independent of the photon energy, but shows a systematic shift with the incidence angle. While the deviation is below 1% for perpendicular photons, it increases up to 6% at 40degrees incidence angle.