PhysicsAnalysis
Introduction
"tbonline/tbmon" reads in tbtrack files
Installation
In order to install tboline please checkout the code from the git repository at
/afs/e4.physik.uni-dortmund.de/group/atlas-pixel/sw/testbeam/tbonline.git
The main branch with the currently valid and agreed version is located
on the PPS branch. Newly developed code segments should be kept in the
private branches (locally or in the main repository) and merged into
PPS_experimental as soon as it works and is preliminary approved and
agreed on.
First steps
Overview of currently possible analysis and description of their outputs
Analysis types
raw hitmaps
- mean
- MPV (maximum bin)
- probably fitted later on
in-time / off-time
- LV1 cut
- pedestal noise (opposite of LV1 cut)
read in masks
- ToT of selected pixels only
clustering
- cluster size
- cluster length, width, area
hit efficiency over hole device
(hit efficiency with sub-pixel resolution)
- superposition of same pixels
- for irradiated and slim edge sensors
collected (clustered) charge over hole device
collected charge with sub-pixel resolution
-- TobiasWittig - 03 Aug 2010
Analysis doc
qEfficiency
- Produces lots of plots of charge distributions, largely documented in code (qEfficiency.h)
- Modifications:
- command line matched/unmatched/all cluster switch
- usage: -P:A_qEfficiency_cluster [all/matched/unmatched]
- default: matched, as per unmodified analysis
- "reflected" coordinates to correctly overlay all pixels with the same bias grid orientation
qShare2D
- Produces one histogram of all matched tracks, one histogram of
tracks where the corresponding and a neighbouring pixel both fired, and
outputs of the division of the two
- Histograms only for central region using 800 * 100 µm overlayed coordinates
- More thoroughly documented in source (qShare2D.h/qShare2D.cc)
- Modifications:
- added histograms of charge seen by the directly hit pixel and the ratio of this to the entire matched cluster charge
Analysis options in PPS_experimental
Eventbuilders
- MaskAndLvl1:
- A modification of PixelMasker, that in addition only allows hits for the event objects that have the corresponding lvl1 values
- Lvl1 values read in from command line. Usage: -P:B_maskandlvl1_lvl1values "4 5 11" to allow only lv1 = 4,5 or 11 hits
- ToTCalibReader:
- reads in .cal.out files and stores the charge conversion in a specially made E4ToTCalib class, inheriting from ToTCalib, which is redefined as an abstract class
- usage: -P:B_totcalibreader calibs/ToT_CLOW[...].cal.out
- ClusterDumper:
- deletes all clusters not of a certain size in the event objects
- usage: -P:B_clusterdumper "2 3" to keep clusters of 2 and 3 hit pixel size
- not very efficient as tbmon has to be run several times for separate cluster size results
- MaskReader:
- reads in maskfile paths from the command line
- usage: -P:B_maskreader_[i] maskfiles/[...].txt reads in a maskfile for DUT iden i
Analyses (plots in italics not included in ROOT file output)
Efficiency
Regards central region of DUT
- tracks: all (fTrack==kGood) tracks passing through the central region of DUT
- hitsany: all hits seen by DUT for these tracks
- hits: the positions of all tracks with a matched cluster
- hitspixel: same as hits except using subpixel resolution with all pixels overlayed
- trackspixel: same as tracks except using subpixel resolution with all pixels overlayed
- effpixelmap: hitspixel / trackspixel
- effpixelbiasmap: hangover from original efficiency coord system, not used
- effpixelreadoutmap: hangover from original efficiency coord system, not used
All plots use own overlaid coordinates with subpixel resolution; uses own matching condition
Considers only events with track x coordinate in range (-800,400 um) and (6400,7800 um).
- chargeScatterFolded: 3D histogram with (x track coord, y track coord, total cluster charge) for matched clusters
- chargeProfileFolded: the 2D projection of chargeScatterFolded (taking the mean charge value for each x,y bin)
- chargeprofX: 1D profile: chargeScatterFolded with y axis projected out and mean and error in mean of z (charge) axis displayed
- landauprofilewhole: landau profile fitted to projection along x axis of charge dist
- hitsanyedge: the only plot without subpixel resolution, plots pixel (row,col) coords of all hits in event
- hitspixeledge: track positions of all matched clusters
- trackspixeledge: positions of all tracks in edge region
- effpixelmapedge: hitspixeledge/trackspixeledge
qEfficiency
Central region of DUT
Includes command line switch to regard either matched clusters or unmatched clusters or all clusters
Usage: -P:A_qEfficiency_cluster [all/matched/unmatched]
- chargeScatter: 3D histogram with (x track coord, y track coord, total cluster charge) with subpixel resolution, pixels overlaid
- chargeProfile: the 2D projection of chargeScatter (taking the mean charge value for each x,y bin)
- chargeProject: the 2D projection of chargeScatter (x coord against charge value)
- chargeProfile_all: the mean charge value and its error against x position
- chargeLandaufitProfile: the landau MPV and its error against x position
- chargeSliceBias_profile: the mean charge value and its error
against x position, considering only 10um strip on border of two pixels
- chargeSliceReadout_profile: the mean charge value and its error
against x position, considering only 10um strip in middle of pixel
- tot[...]: the same as the corresponding charge[...] plot, only with total tot for the cluster, instead of charge
qShare2D
Central region of DUT
Matched clusters with 1 - 4 hits inclusive
Uses 2 * 2 pixel size overlaid coordinate system
- h_n0: Coords of tracks (satisfying the above)
- h_n2: Coords of tracks with a hit in the pixel through which the particle passed and any adjacent (including diagonally adjacent) pixel
- chargeDirect: 3D charge scatter (x track coord, y track coord, charge seen by pixel through which the particle passed)
- chargeShareScatter: 3D scatter (x track coord, y track coord, charge seen by pixel through which the particle passed / total cluster charge)
- directChargeProfile: 2D (x,y) projection of chargeDirect with mean charge value
- sharedChargeProfile: 2D (x,y) projection of charegShareScatter with mean ratio value
Sumtot
Any plot with q suffix does the same except with charge instead of ToT
- fullChip: Sum of ToT over all hits anywhere in chip
- maxClusterToT: ToT distribution of clusters with largest ToT sum in each event only in central region
- maxToT: largest ToT value of a hit pixel in each event anywhere in chip
- clusterToT: sum of ToT over hits in any matched cluster with all hits in central region
- mapClusterToT: map of sum of ToT over hits in any matched cluster with all hits in central region, binned with ETA corrected row and col values
- any plot with "Elec": not PPS pixel design!!
- clusterq_size[x]: charge dist for matched clusters with all hits in central region of size x
Uses special coordinates to overlay eight middle pixels of sets of 10 equally shifted edge pixels
Uses own matching condition
Folded implies left and right edge regions overlaid.
Left and right regions individually use coordinate system of EUTelescope
- chargeScatter[Folded/Right]: 3D histogram with (x track coord, y
track coord, total cluster charge) with subpixel resolution, pixels
overlaid
- chargeProfile[Folded/Right]: TProfile2D with mean of charge values entries for each (x,y) bin
- trackoverlay: the coordinates of all tracks passing through the edge region (left and right sides)
- hitoverlay: the coordinates of all tracks with a matched cluster passing through the edge region (left and right sides)
- effoverlay: hitoverlay/trackoverlay
- righttrackoverlay/righthitoverlay/righteffoverlay: same for right side only
- righttrackspixeledge/righthitspixeledge/righteffpixeledge: same but for right side only and with no overlaying of pixels
- lefttrackspixeledge/lefthitspixeledge/lefteffpixeledge: same but for left side only and with no overlaying of pixels
- chargeSliceSet[x]: the mean and its error in charge distribution
against x position (left and right sides) for rows x*10+1 to x*10+8
inclusive
- landauSliceSet[x]: the ROOT landau fit of charge distribution
against x position (left and right sides) for rows x*10+1 to x*10+8
inclusive
- clusterSize: Dist of sizes of all clusters
- pixelhits: Dist of number of all hits
- multiplicity: Dist of number of clusters per event
Gimmicks on the side
cleanUpMod.C
- autoCleanUp(const TFile* f, string histoname = "edgeefficiencyshift_12_chargeScatterFolded;1", int ent_limit = 1)
- fetches 3D charge scatter histogram name histoname out of TFile f and projects the mean of the charge axis into the x and y bins of a TProfile2D, omitting the x,y bins which have less than or equal to ent_limit entries on the charge axis
- cleanUp(const TH3D& chargeScatter, int ent_limit = 1)
- same as above, but must provide a reference to the 3D histogram oneself
maskmaker.C
Load and compile into ROOT and produce a new MaskMaker
instance with an existing (empty, if necessary) maskfile. Can turn on
and off rows, columns, single pixels, rectangles of pixels. Outputs to
file in human readable (rectangle of 1s and 0s) or tbmon (list of
col:row of masked out pixels) format.
shiftedbox_gr.C
Overlays HV pad, guard rings, cutting edge and pixel boundaries on a "folded" plot from edgeefficiencyshift
shiftedbox_gr11_oppi.C
Overlays HV pad, guard rings, cutting edge and pixel boundary on a "folded" plot from edgeefficiency
tbmon.zargo
A ArgoUML (an open source program runable with Java Web Start) file with a class diagram of the tbmon software. Possibly makes things more transparent, depending on the beholder
Development
Proposed changes and extensions
- write-out of detailed clustering and timing information in
tbtracktuplewriter (eutelescope): tbtrack file version 1.0 --> 1.1
Pre-inclusion stage of changes and extensions (PPS_experimental branch)
*
Included changes and extensions (PPS branch)
Documentation effort
Introduced
Doxygen support (make docs) replacing texinfo. Up to now only a part of
the code is documented with doxygen compatible code.
Program control overview
main() (driver.cc)
- parseArgs() pass command line params to newly created TBConfig instance (config)
- siteConfig() overwrite configuration in config with anything already determined in siteconfig.h
- eudetjuly2010() make necessary EventBuilders and attribute to config. eudetjuly2010 EventBuilders in order in list:
- [NOTE: CheckRegion and EuBuildTrack have been provisionally swapped in the list]
- load DUT instances into config.dutlist
- create an analysis instance for each specified analysis type
and for each DUT (via function allAnalyses), store them in
config.analyses
- config.loop()
config.loop()
- call eventbuilder initialise functions
- call analysis initialise functions
- allocate space for events
- create Looper instance (looper)
- create output TFile
- looper.loop()
looper.loop()
- load in list of runs
- for each run:
- set datapaths in config
- initRun()
- eventLoop()
- finalizeRun()
looper.initRun()
- run initRun() for all DUTs
- run initRun() for all Eventbuilders
- run initRun() for all Analyses
looper.eventLoop()
- for each event ID number, temporarily stored in config.currentEntry, run [looper.]event():
- config.buildEvent()
- run analysis.event() for all Analyses
config.buildEvent()
looper.finalizeRun()
- run finalizeRun() in each Analysis
- run finalizeRun() in each EventBuilder
- buildEvent(): set numerous flags for Event depending on the track's location etc.
Translator (not in use presently)
- initRun(): load in translations stored for the individual DUTs
- buildEvent(): translate event.trackX/trackY by the translation belonging to the DUT of the event in question
- buildEvent(): run cluster finding algorithm (naturally)
- Important! Reads in data from tbtrack class (at the moment only zspix and eutracks branches)
- transfers hits from rawHits list to hits, according to the mask of the DUT
Event flags
A list of all the
flags pertaining to an Event object and the (rough) code lines where
they are potentially set. A block of several close lines may be
referenced only once. Bracketed () references mean not included in the
current list of eventbuilders in config.
Please note: the meanings of some of these flags are also documented in event.h and tbmon.info
- fBase - event.h 77; (BAT 39) - guaranteed kGood if setEvent called
- fClusters - CLUSTF 23 - guaranteed kGood in buildEvent of ClusterFinder
- fTrack - event.h 78; EUBT 160; (CHI2 13); (BAT 36); (ANGLE
55,59) - by default kGood, unless fewer matched hits are found than
m_nMatch EuBuildTrack param (set in our driver.cc as 1)
- fTrackChi2 - (CHI2 12)
- fTrackAngle - (ANGLE 43,51,54,58)
- fHits - completely redundant, neither set nor used
- fTrackCentralRegion - CREG 18,20 - kBad if track passes
through pixel inside border specified by event::skipCols,
event::skipRows (hard coded as 2 and 16 respectively)
- fTrackMaskedRegion - CREG 9,29 - kBad if the track matches
(within 1.5 * pitch dimensions) a pixel which is masked out by DUT mask
- fTrackRegion - CREG 21,30,35 - kBad if fTrackMaskedRegion or fTrackCentralRegion kBad
- fTrackMatchNeighbour - EUBT 160 - same as fTrack
- fEtaCorrections - CLUSTF 24
- fDutSync - (DUTSYNC 56,59,64)
- fSimSync - (SIMBASE 81,98)
- fEtaCut - (ETACUT 43 *******due to a presumed error line 46, the flag is never set kGood********)
Key:
- ANGLE: anglecuts.cc
- BAT: battrack.cc
- CHI2: chi2builder.cc
- CLUSTF: clusterfinder.cc
- CREG: checkregion.cc
- DUTSYNC: dutsync.cc
- ETACUT: etaCutter.cc
- EUBT: eubuildtrack.cc
- SIMBASE: simBaseBuilder.cc
tbtrack file format
tbtrack files are standard root files which contain three trees. They are written in
Eutelescope/src/EUTelAPIXTbTrackTuple.cc.
- zspix
- nPixHits: number of hits in each event (size of the vectors col, row, tot, lv1, iden, chip for each event)
- euEvt: event ID (continuously assigned within a run)
- col: column of a pixel hit
- row: row of a pixel hit
- tot: ToT value of the pixel hit
- lv1: level1 trigger ID (time when the hit was seen)
- iden: sensor ID (plane) starting with #10 (MCC channel
number + 10) in order to avoid confusion with the Mimosa-planes
(#<10)
- chip: MCC channel number
- eutracks
- nTrackParams: hit ID (continuously assigned within a run)
- euEvt: event ID (continuously assigned within a run)
- xPos: x position of track space point on the DUT
- yPos: y position of track space point on the DUT
- dxdz: fittrack->getOmega()
- dydz: fittrack->getPhi()
- trackNum: track ID unique for all tracks of one event
- iden: sensor ID (plane) starting with #10 (MCC channel
number + 10) in order to avoid confusion with the Mimosa-planes
(#<10)
- chi2: chi2
- ndof: number of degree of freedom
- euclusters
- euEvt: event ID (continuously assigned within a run)
- size: apixCluster->size() or telCluster->size()
- sizeX: getClusterSize(sizeX, sizeY)
- sizeY: getClusterSize(sizeX, sizeY)
- posX: getCenterCoord(posX, posY)
- posY: getCenterCoord(posX, posY)
- charge: apixCluster->getTotalCharge() or telCluster->getTotalCharge()
- iden: sensor-ID (plane) starting with #10 (MCC channel
number + 10) in order to avoid confusion with the Mimosa-planes
(#<10)
Major updates:
--
AndreRummler - 15-Aug-2010
Responsible: AndreRummler
Last reviewed by: Never reviewed