Detector-level BtaCandidate information

Detector-level BtaCandidate information

This page contains tables documenting many of the detector-level variables available for BtaCandidates in the Event Store.

Contents:

Needed Includes and Pointers

Add the following lines to the #include's section:
#include "BetaMicroAdapter/BtaMicroAdapter.hh"
#include "BetaMicroAdapter/BtaCalQual.hh"
#include "BetaMicroAdapter/BtaPidQual.hh"
#include "BetaMicroAdapter/BtaTrkQual.hh"
#include "BetaMicroAdapter/BtaPidInfo.hh"
#include "BetaMicroAdapter/BtaIfrQual.hh"
Once you have a pointer to a BtaCandidate, you can get all its detector-level information from the following objects:
BtaCandidate* MyBtaCand;
const BtaTrkQual* TrkQual = MyBtaCand->getMicroAdapter()->getTrkQual();
const BtaCalQual* CalQual = MyBtaCand->getMicroAdapter()->getCalQual();
const BtaPidQual* PidQual = MyBtaCand->getMicroAdapter()->getPidQual();
const BtaPidInfo* PidInfo = MyBtaCand->getMicroAdapter()->getPidInfo();
const BtaIfrQual* IfrQual = MyBtaCand->getMicroAdapter()->getIfrQual();
As you are iterating over a list of type BtaCandidate, a pointer will return NULL if that information does not exist for that candidate, and you will not be able to access any variables that use that pointer. As examples, CalQual=0 if there is no energy deposit in the calorimeter; TrkQual=0 if there are no SVT or DCH hits.

.

Tracking Information

Variable Type Range Packing Size in DB Description
TrkQual->nDof() Int 0->255 Integer 1 byte number of degrees of freedom of the track-fit
TrkQual->prob() Float 0->1 N/A N/A Probability of the chi-squared of the track fit.  Not stored directly in the database - calculated from other, stored quantities.
TrkQual->chi2() Float 0->1000 Logarithmic 2 bytes Chi-squared of the track fit
TrkQual->trackLength() Float 0->100 Logarithmic 1 byte Track length (cm) from the first to the last hit
TrkQual->startFoundRange() Float 0->100 Logarithmic 1 byte Track length (cm) from origin to the first hit
TrkQual->nSvtHits() Int 0->15 Integer 4 bits The number of z and phi hits in the SVT that are on this candidate's track. Each of the SVT's 5 layers provides both z and phi information. It is possible to have more than 10 hits (5 phi + 5z) due to low transverse-momentum charged tracks which can curl up in the detector. FYI, a track with Pt=0.1 GeV will make it to the outer edge of the SVT-DCH interface.
TrkQual->SvtPattern() Int 0->1023 Integer 10 bits The 10 bits of the word correspond to whether one of the 10 views of the SVT registered a hit for this candidate:
Layer 5 z-view = Most Significant Bit
Layer 4 z-view
Layer 3 z-view
Layer 2 z-view
Layer 1 z-view
Layer 5 r/phi-view
Layer 4 r/phi-view
Layer 3 r/phi-view
Layer 2 r/phi-view
Layer 1 r-phi-view = Least Significant Bit
TrkQual->SvtOn(int layer) Bool True/False Integer 1 bit each for 10 layers True if this candidate has a SVT hit on track for the given layer.  Each of the 5 SVT layers contains both r and phi info:
Layers 0->4 represent r-phi hits on the 5 layers, with 0 denoting the innermost layer.
Layers 5->9 represent z hits on the 5 layers, with 5 denoting the innermost layer.
TrkQual->firstDchHit() Int 0->255 Integer 1 byte Innermost layer of the DCH registering a hit associated with this charged candidate's track. There are 40 layers in the Drift Chamber.
TrkQual->lastDchHit() Int 0->255 Integer 1 byte Outermost layer of the DCH registering a hit associated with this candidate's track. There are 40 layers in the Drift Chamber.
TrkQual->nDchHits() Int 0->255 Integer 1 byte Number of DCH layers registering hits associated with this candidate's track. There are 40 layers in the Drift Chamber. Due to low transverse-momentum tracks which can curl up in the detector, this number can be greater than 40.
TrkQual->pidHypo() Int 0->7 Integer 3 bits Particle Hypothesis used while fitting the track (i.e. what mass was used). The mapping is as follows:
0= electron
1= muon
2= pion
3= kaon
4= proton
TrkQual->fitStatus() Bool True/False Integer 1 bit Status of the Track Fit

Particle Identification Quality

Variable Type Range Packing Size in DB Description
PidQual->dEdXSvt() Float 0->100 Logarithmic 1 byte dE/dx (arbitrary units) determined from the SVT hits
PidQual->nSamplesDeDxSvt() Int 0->255 Integer 1 byte # of samples in the SVT used to calculate dEdXSvt()
PidQual->dEdXDch() Float 0->1000 Logarithmic 1 byte dE/dX (arbitrary units) for determined from the Dch hits
PidQual->nSamplesDeDxDch() Int 0->255 Integer 1 byte # of samples in the DCH used to calculate dEdXDch()
PidQual->deltaDchMomentum() Float -100->0
MeV
Logarithmic 1 byte Candidate's momentum at the entrance of the Drift Chamber minus the momentum at the origin.
PidQual->deltaDrcMomentum() Float -100->0
MeV
Logarithmic 1 byte Candidate's momentum at the entrance of the DIRC minus the momentum at the origin.
PidQual->drcInBar() Int 0-143 Integer 1 byte ID of the bar the candidate enters first. 0 marks the bar at the top center of the detector. The rest of the bars are numbered in ascending order, following positive right-handed rotation around the electron beam. Note that the number 0 is also stored when the track does not go into the DIRC fiducial volume. Watch for confusion with the actual bar 0!
PidQual->drcExitBar() Int 0-3 Integer 2 bits ID number of the bar the candidate exits the DIRC from, relative to the bar the candidate first enters.
 0: Exit Bar= Entry Bar
 1: Exit Bar= Entry Bar + 1
 2: Exit Bar= Entry Bar - 1
 3: Greater than 1 bar of displacement
PidQual->drcXPos() Double -2 -> +2 cm Integer 6 bits x position where the candidate first enters the "inBar," relative to the center of the bar. (half-width of bar is actually 1.85 cm)
PidQual->thetaC() Float 0->1 
radian
Flat 2 bytes The opening angle of the Cerenkov ring emitted by the charged candidate.
PidQual->thetaCErr() Float 0->1
radian
Logarithmic 2 bytes Error on the opening angle of the Cerenkov ring.
PidQual->ringNPhot() Int 0->255 Integer 1 byte Measured number of signal photons in the Cerenkov ring fit to the detected photons of this charged candidate.
PidQual->ringNBkgd() Int 0->255 Integer 1 byte Measured number of background photons in the Cerenkov ring fit to the detected photons of this charged candidate.
PidQual->ringNExPhot(const PdtEntry* p) Int 0->255 Integer 1 byte each for the 5 hypothesis (5 bytes total) Number of photons expected to be associated with a ring of this particle's momentum, given Particle ID Entry p.
PidQual->phiAtEMC() Float       phi of intercept of the track with the EMC
PidQual->thetaAtEMC() Float       theta of intercept of the track with the EMC

Particle Identification Information

Variable Type Range Packing Size in DB Description
PidInfo->charge() Int -1->+1 Integer 1 byte Charge of this candidate
PidInfo->consistency(const PdtEntry* p, detectors det) Consistency 0->1 Logarithmic 1 byte each for 5 detectors and 5 hypothesis (25 bytes total) Gives the consistency of a single detector's ( PidSystem::ifr,PidSystem::emc,PidSystem::drc,PidSystem::dch, PidSystem::svt) information with a given particle hypothesis, p.

Calormetric Information

Variable Type Range Packing Size in DB Description
CalQual->lateralMoment() Float 0->1 Logarithmic 1 byte The lateral moment of the cluster associated with this track. Ratio of 1) to 2):
1) sum of energies of all but the 2 most energetic crystals, weighted by the square of distance to the cluster center
2) Sum of 1) and the energies of the 2 most energetic cystals, which are weighted by r^2. r is the length scale of a crystal, 5 cm.
CalQual->absZernike42() Float 0->1 Logarithmic 1 byte the absolute value of the complex Zernike(4,2) moment.
CalQual->absZernike20() Float 0->1 Logarithmic 1 byte the absolute value of the complex Zernike(2,0) moment.
CalQual->s1s9() Float 0->1 Logarithmic 1 byte For a cluster, the ratio of the sums of the energies of the central crystal to the central 9 crystals surrounding the centroid.
CalQual->s9s25() Float 0->1 Logarithmic 1 byte For a cluster, the ratio of the sums of the energies of the central 9 crystals to the central 25 crystals surrounding the centroid.
CalQual->secondMomentTP() Float 0->1 Logarithmic 1 byte The second moment, in theta-phi, of the cluster.
CalQual->rawEnergy() Float 0->50 Logarithmic 2 bytes Raw energy measured in EMC (GeV), after digi calibration is applied, but with NO leakage corrections.
CalQual->ecalEnergy() Float 0->50 Logarithmic 2 bytes energy measured in EMC (GeV), after digi calibration and leakage corrections are applied!
CalQual->trkEmcMatchConsistency() Consistency 0->1 Logarithmic 1 byte The consistency of the match between the charged track and the EMC bump, assuming the (conservative) pion hypothesis.
CalQual->nBumps() Int 0->15 Integer 4 bits The number of bumps in the calorimeter associated with this candidate.
CalQual->nCrystals() Float       The number of "hit" crystals for this bump. For a crystal shared between bumps, a splitting algorithm is applied to determine how much of its energy is given to each bump. Thus, it is a float type.
CalQual->centroid() HepPoint 0->500
cm
Logarithmic 2 bytes each for 3 directions (6 bytes total) Centroid of the cluster/bump
CalQual->covMat() HepSymMatrix   Logarithmic 2 bytes each for 4 entries (8 bytes total) 4x4 covariance matrix (E,theta,phi,r)
CalQual->neutPid() Int 0->4 Integer 4 bits PID type with which the EMC and IFR quantities have been computed (none = -1,gamma = 0,pi0= 1,K0L= 2, neutron = 3, anti_neutron = 4)
CalQual->isOk() Bool True/False     returns true if the CalorObject (Cluster or Bump) has no dead or noisy Crystals in it. Also the Object is not in a ROM which is suffering from online dataflow damage or a noisy power supply.
CalQual->isNoisy() Bool True/False     true if at least one crystal in the CalorObject is noisy.
CalQual->isNearDead() Bool True/False     true if at least one crystal in the CalorObject is dead.
CalQual->isDamaged() Bool True/False     true if at least one crystal in the CalorObject is in a Read-Out Module that has online dataflow damage in that event.
CalQual->isFlickery() Bool True/False     true if at least one crystal in the CalorObject is in a Read-Out Module that has power supply noise (flicker). This is worked out by measuring the occupancy of the Read-Out Module in the event, and determining if it is over the following cuts:
Read-Out Module occupancy of digis with energy greater than 1MeV has to be greater than or equal to 50% (barrel) and 100% (end cap) (energetic bhabha's can cause all the crystals in an endcap Read-Out Module to be on)
CalQual->maxIsNoisy() Bool True/False     true if any of the central 9 crystals of the CalorObject (where center = highest energy crystal) is noisy.
CalQual->maxIsNearDead() Bool True/False     true if any of the central 9 crystals of the CalorObject is dead.
CalQual->maxIsDamaged() Bool True/False     true if any of the central 9 crystals of the CalorObject is in a online dataflow damaged Read-Out Module.
CalQual->maxIsFlickery() Bool True/False     true if any of the central 9 crystals of the CalorObject is in a flickery (flickery defined in description of the isFlickery method, above) the Read-Out Module.

Muon System Information

Variable Type Range Packing Size in DB Description
IfrQual->IfrNStrips() Int 0->255 Integer 1 byte Number of "hit" strips associated with this candidate.
IfrQual->nStrips(int layer) Int 0->14 Integer 4 bits each for 21 layers and 4 bits for the barrell/endcap division (22x4 bits = 11 bytes)  The number of strips hit in a given IFR layer. Only the range 0->14 is physical.  The one layer which returns 15 is a dummy (not physical) layer used to denote the barrel-endcap interface. Lower numbered layers are in the barrel, while higher numbered layers are in the encap. The total number of strips in both cylindrical RPC layers is stored in layer=0.
IfrQual->IfrLayHits() Int 0->20 * see below * see below Number of "hit" layers in the IFR associated with this candidate. If there are hits in both layers of the cylindrical RPC it is counted as one layer in this total.
IfrQual->firstHit() Int -1->20 * see below * see below Number of the innermost IFR layer with a hit associated with this candidate. (-1 = cylindrical layer)
IfrQual->lastHit() Int -1->20 * see below * see below Number of the outermost IFR layer with a hit associated with this candidate. (-1 = cylindrical layer)
IfrQual->hasInner() Bool True/False * see below * see below True when candidate has a hit in the "inner" 2-layer cylindrical layers.
IfrQual->hasBarrel() Bool True/False * see below * see below True when candidate has a hit in the "outer" 19-layer barrel region of IFR
IfrQual->lastBarrel() Int 0->20 * see below * see below The number of the last barrel layer hit in the IFR.
IfrQual->hasFWD() Bool True/False * see below * see below True when candidate has a hit in the 18-layer forward encap of IFR
IfrQual->hasBWD() Bool True/False * see below * see below True when candidate has a hit in the 18-layer backward encap of IFR
IfrQual->expectedInteractionLengths() Float 0->10 Logarithmic 1 byte The swimmer calculates the number of interaction lengths to the last active RPC chamber along the trajectory of the track. This is a calculation independent of the chambers actually hit.
IfrQual->measuredInteractionLengths() Float 0->10 Logarithmic 1 byte Number of interactions lengths through which the candidate's path travels. Dominated by DRC, EMC, and IFR because of their high densisty. Caculated by a "swimmer."
IfrQual->interactionLengthsBeforeIron() Float 0->10 Logarithmic 1 byte Number of interactions lengths traversed by a candidate, not including the IFR iron. Again, using a "swimmer."
IfrQual->IfrTrkMatchChi2() Float 0->50 Logarithmic 1 byte This is the sum of the squares of the residuals (in both readout perpendicular views) of the measured hit positions w.r.t. the swum track, exrapolated from the DCH. The chi-squared is then normalized to the number of degrees of freedom.
IfrQual->IfrEmcMatch() Float 0->1000 Logarithmic 1 byte Numbering indicating the consistency of the IFR hits with the EMC bumps/clusters of this track..
IfrQual->clusterFitChi2() Float      For a candidate's IFR cluster, the individual strips for each view are extracted. In each of the 2 perpendicular views, the coordinates of the strips are fit to a second order polynomial. The chi-square of these two fits are then summed to produce this number. This quantity is thus independent of tracking.
* The IfrQual quantities marked with this asterisk are not actually stored in the database. They are calculated from IfrQual->nStrips(int layer).

How to find other commonly used quantities