This page contains tables documenting many of the detectorlevel variables available for BtaCandidates in the Event Store.
Contents:
#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 detectorlevel 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 trackfit  
TrkQual>prob()  Float  0>1  N/A  N/A  Probability of the chisquared of the track fit. Not stored directly in the database  calculated from other, stored quantities.  
TrkQual>chi2()  Float  0>1000  Logarithmic  2 bytes  Chisquared 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 transversemomentum 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 SVTDCH 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 zview = Most Significant Bit Layer 4 zview Layer 3 zview Layer 2 zview Layer 1 zview Layer 5 r/phiview Layer 4 r/phiview Layer 3 r/phiview Layer 2 r/phiview Layer 1 rphiview = 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 rphi 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 transversemomentum 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  0143  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 righthanded 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  03  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. (halfwidth 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 thetaphi, 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 ReadOut 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 ReadOut Module that has power supply noise (flicker). This is
worked out by measuring the occupancy of the ReadOut Module in the
event, and determining if it is over the following cuts: ReadOut 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 ReadOut 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 ReadOut 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 ReadOut 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 barrelendcap 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" 2layer cylindrical layers.  
IfrQual>hasBarrel()  Bool  True/False  * see below  * see below  True when candidate has a hit in the "outer" 19layer 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 18layer forward encap of IFR  
IfrQual>hasBWD()  Bool  True/False  * see below  * see below  True when candidate has a hit in the 18layer 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 chisquared 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 chisquare 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). 
// get a single detector consistency object const Consistency& c1=PidInfo>consistency(Pdt::lookup(PdtPdg::XXX),PidSystem::yyy); // to get significance level: float myConsistency1= c1.consistency(); // to get likelihood float myLikelihood1= c1.likelihood();where XXX is the type of particle. For example XXX could be any of (but is not restricted to) the following: e_minus (an electron), mu_minus (a muon), pi_minus (a charged Pion), K_minus (a charged Kaon), p_plus (a proton) and where yyy is the detector. yyy could be any of the following: ifr, emc, drc, dch, svt.
#include "TrkFitter/TrkPocaXY.hh" #include "TrkBase/TrkAbsFit.hh" TrkPocaXY pocaxy(cand>trkAbsFit()>traj(),0,HepPoint(X,Y,Z)); HepPoint closestApproach= cand>trkAbsFit()>position(pocaxy.fltl1());