This page contains tables documenting many of the detector-level 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 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). | ||||||
// 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());