Running Full Pattern Recognition Tracking on Fast Simulation events


* Doug Orbaker (email:


While the ability to run Full Pattern Recognition Tracking on events made by the Fast Simulation has not been completely tested and validated, a prototype has been added in CMSSW_2_2_0_Pre1 in the branch named FullTk_2_2_0_pre1. For CMSSW releases 3_0_0_pre2 and higher, all of the classes to run Full Pattern Recognition Tracking are contained in the head of the release. All of the new classes that allow the standard iterative tracking to work with Fast Sim events are in FastSimulation/TrackingRecHitProducer.

The class SiClusterTranslator takes the parameters from FastSim clusters and makes collections of SiPixelCluster and SiStripCluster. Because these clusters are filled with the incorrect position and error information, two other classes, FastStripCPE and FastPixelCPE, contain all of the position and error information for each cluster. The standard tracking algorithms use the standard clusters made with SiClusterTranslator as inputs and get the local position and error information for the rec hits with FastStripCPE and FastPixelCPE to run the tracking with the correct position and error information from the FastSim clusters.

At the current time, the FastSim cluster translation has been validated with 10 GeV muons on a step by step basis for the iterative tracking. Validation of the standard rec hits produced after SiClusterTranslator has been completed in 3_1_0_pre1, with plots located here:

Classes Added/Modified, along with Class Descriptions

A variety of classes have been added into the FastSimulation/TrackingRecHitProducer directory to allow the standard iterative tracking algorithms to run on FastSim clusters. SiClusterTranslator is the workhorse of the classes. Taking the FastTrackerClusters as an input, SiClusterTranslator divides these clusters, splits them into pixels and strips, and produces edmNew::DetSetVector and edmNew::DetSetVector. The amplitudes from the FastTrackerClusters are placed in the SiStripClusters and SiPixelClusters, along with the first strip numbers from the FastTrackerClusters for the SiStripClusters and the PixelPos (a std::pair of the pixel cluster row and column integers) for the SiPixelClusters. SiClusterTranslator loads the position and error information for each FastTrackerCluster into FastStripCPE (for strips) and FastPixelCPE (for pixels), the rawId of the detector the cluster is located in, as well as the first strip number for strips and the PixelPos for pixels. Along with the cluster collections, SiClusterTranslator also produces edm::DetSetVector and edm::DetSetVector for use with rec hit validation.

The FastCPEs are the main point of interaction with the tracking algorithms, via the localParameters method. The localParameters method takes a cluster and a GeomDetUnit as inputs and outputs a std::pair<LocalPoint,LocalError>, with LocalPoint being the cluster position information in the local geometry and LocalError the cluster position uncertainty. To store all of the position and error information for each cluster uniquely, the FastCPEs contain a std::map. In the FastCPEs, the data in the maps are the std::pair<LocalPoint,LocalError> for the clusters. The keys are slightly complicated. For the strip data, the keys are std::pair<int,int>, with the first integer being the rawId of the detector and the second integer is the first strip of the cluster. For the pixel data, the keys are std::pair<int,PixelPos>, or std::pair<int, std::pair<int,int> >, where the first integer is the rawId of the detector where the cluster is and the PixelPos is the minimum row and column positions for the pixel cluster. When the tracking algorithms call localParameters, the clusters and linked via the map to the correct position and error information. At the end of each event, the map is cleared.

The following diagram illustrates the flow of information from the FastTrackerClusters to the Standard Tracking Algorithms via SiClusterTranslator and the FastCPEs.

[Disclaimer: The following drawing was made by a professional. Please do not try this at home.]

Complete list of classes created:

Configuration File:

FastSimulation/TrackingRecHitProducer/test/ (made for validating the rec hits made from the full tracking
FastSimulation/TrackingRecHitProducer/python/ (allowing the standard configuration file to be more compact)







Plugin machinery:

FastSimulation/TrackingRecHitProducer/plugins (Directory)

Complete list of classes modified:

CMS.RecoLocalTracker/ClusterParameterEstimator/interface/ClusterParameterEstimator.h (three lines of code)

Issues with Full Tracking

First Issue, kind of important

When trying to run the Full Tracking on Rel Val Top events, the Full Tracking occasionally runs very, very slowly. This only occurs for certain events. At the current time I have made up samples to see how well the Full Tracking works by skipping events which take a long time. It's a time consuming process, going through and excluding events, but it seems to be about 1 out of every 40 or so events, so it is doable. I am not sure exactly what the problem is. Maybe a memory leak... I have slightly narrowed down where in the code is slow, and I think it's in the file. It seems like some events have tons of seeds that need to be killed. I am not sure if this is a Fast Sim only feature or not. I have not tried to run this code from the generator level with Full Sim to see if the Full Sim is also slow for the same events. This would be a good cross check, but so far I have not carried it out.

Second Issue, potentially important in the future

In CMSSW_3_1_0_pre3, I added some tests to SiClusterTranslator to see how often multiple hits (in one event) were recorded on an individual strip or pixel. The main issue is multiple hits per strip for high track multiplicity events, such as QCD multijet or ttbar decays. Right now the Fast Simulation does not account for strip sharing among tracks. I have lots of plots for the different parts of the detector showing how many rec hits are on a strip for ttbar and QCD files.

I haven't checked to see if it's fixed, but for the layers with radial geometry (TID and TEC), there seems to be an issue with lots of hits being smeared to the edges of the detector. This issue is directly related to the Rec Hit Validation, where distributions for TID and TEC in the X position of rec hit are wider than expected. If I remove the edge strips, the distributions return to normal. At the current time, I am not sure why TID and TEC are not working for the rec hit position. Once that is cleared up, the TID distributions below will look better too.

Another thing to keep in mind is the problems with TID and TEC only happen for the layers that have stereo modules on them, the layers that are "glued," as seen in the last two plots below in TID layer 3, which is single-sided.

All of the plots for showing the amount of strip sharing are here:

PXB for ttbar

TIB for ttbar

TID for ttbar (with edge strips)

TID for ttbar (without edge strips)

Third Issue, potentially important

There are a few issues that the validation of the rec hits has uncovered. I will make a list of them here soon, along with links to all of the plots.

Using Full Tracking in CMSSW_3_1_0_pre7

The Full Tracking option is up and running in CMSSW_3_1_0_pre7.

The validation of rec hits made from Full Tracking has also been added. There is also a config file fragment to include the Full Tracking option without cluttering up the main config file.

The rec hit validation does not run out of the box. Before using it, the user must add two directories to the src directory of what ever version of CMSSW they are using.

Step 0: cd CMSSW_3_1_0_pre7/src
Step 1: cmsenv
Step 2: addpkg FastSimulation/TrackingRecHitProducer
Step 3: addpkg SimTracker/TrackerHitAssociation
Step 4: cd SimTracker/TrackerHitAssociation/src
Step 5: emacs -nw
Step 6: Change lines 54 and 93 from e.getByLabel("mix",trackerContainers[i],cf_simhit); to e.getByLabel("mix","famosSimHitsTrackerHits",cf_simhit);
Step 6a: Change the quoted parts in lines 69, 70, 115 and 116, from "simSiStripDigis" and "simSiPixelDigis" to "siClusterTranslator"
Step 7: Save and close. 
Step 8: scram b (don't forget!)
Step 9: cd ../../../FastSimulation/TrackingRecHitProducer/test/
Step 10: cmsRun

Those steps should allow rec hit validation to work in CMSSW_3_1_0_pre7.

Using Full Tracking in CMSSW_3_1_0_pre1

In CMSSW_3_1_0_pre1, four iterations plus the zeroth step are included by default, and the cluster translator has been validated for these steps. Preliminary results show that translation for the fifth step in iterative tracking is also working fine.

After checking out and compiling the directories FastSimulation/TrackingRecHitProducer and RecoLocalTracker/ClusterParameterEstimator, will run on a FastSim input file.

Using Full Tracking in CMSSW_3_0_0_pre2

The Full Tracking cluster translation process has been validated in CMSSW_3_0_0_pre2 for all of the iterative tracking steps (0th, 1st, 2nd, 3rd and 4th) and will be committed to the head of CMSSW_3_0_0_pre2 soon. Once all of the changes have been committed, users will be able to run Full Tracking "out of the box" via the file on their FastSim file of choice.

Using Full Tracking in CMSSW_2_2_0_pre1

To use Full Tracking in CMSSW_2_2_0_pre1, you must first checkout the FullTk_2_2_0_pre1 branch in FastSimulation/TrackingRecHitProducer. You must also check out RecoLocalTracker/ClusterParameterEstimator and add the following three lines in RecoLocalTracker/ClusterParameterEstimator/interface/ClusterParameterEstimator.h by hand, due to the limitations of the author's access rights:

virtual void enterLocalParameters(unsigned int id, std::pair<int,int> &row_col, LocalValues pos_err_info) const{}
virtual void enterLocalParameters(uint32_t id, uint16_t firstStrip, LocalValues pos_err_info) const{}
virtual void clearParameters() const {}

Once these lines have been added and you have compiled, you may cmsRun the python config file FastSimulation/TrackingRecHitProducer/test/ Please note that you may only run this sequence on a FastSim file.

-- DouglasOrbaker - 11 Aug 2009

Edit | Attach | Watch | Print version | History: r11 < r10 < r9 < r8 < r7 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r11 - 2009-08-11 - DouglasOrbaker
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    CMSPublic All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback