Project

General

Profile

PMA module code analysis » History » Version 1

Version 1/4 - Next » - Current version
Ruth Pordes, 05/05/2016 01:25 PM


PMA module code analysis

PMA Code and Documentation Links

https://indico.fnal.gov/getFile.py/access?contribId=62&sessionId=40&resId=1&materialId=slides&confId=10276

Aaron Higuera is maintaining systematic efficiency tests and writes code for it. Here is the last development, for the proton decay / atmospheric neutrino events:
https://indico.fnal.gov/getFile.py/access?contribId=2&resId=0&materialId=slides&confId=12005 (note that PMA here is used together with Cluster Crawler for 2D clusters reconstruction)

Similar test are done for beam neutrinos, I expect that soon we'll have update on this using recent releases of reconstruction algorithms.

Redmine links for code:
https://cdcvs.fnal.gov/redmine/projects/larreco/repository/revisions/develop/entry/larreco/TrackFinder/PMAlgTrackMaker_module.cc

Vertexing functionality is collected here:
https://cdcvs.fnal.gov/redmine/projects/larreco/repository/revisions/develop/entry/larreco/RecoAlg/PMAlgVertexing.h

The most basic functions for building, testing, extending tracks are here:
https://cdcvs.fnal.gov/redmine/projects/larreco/repository/revisions/develop/entry/larreco/RecoAlg/ProjectionMatchingAlg.h

And all the building blocks for the track and vertex optimization are in the directory:
https://cdcvs.fnal.gov/redmine/projects/larreco/repository/revisions/develop/show/larreco/RecoAlg/PMAlg

The cost of computations is mostly due to trajectory node optimization, done with finite-difference calculations of the gradient of the objective function with respect to the node position. If you'd like to have a look, the code is here:
https://cdcvs.fnal.gov/redmine/projects/larreco/repository/revisions/develop/entry/larreco/RecoAlg/PMAlg/PmaNode3D.h#L92

void Optimize(float penaltyValue, float endSegWeight);

and functions:

double Pi(float endSegWeight, bool doAsymm) const;
double Penalty(float endSegWeight) const;
double Mse(void) const;
double MakeGradient(float penaltyValue, float endSegWeight);
double StepWithGradient(float alfa, float tol, float penalty, float weight);

The complexity on the higher level comes from scoring the tracks made of various (possible) matching of clusters in complementary 2D projections, this is done more or less here:
https://cdcvs.fnal.gov/redmine/projects/larreco/repository/revisions/develop/entry/larreco/TrackFinder/PMAlgTrackMaker_module.cc#L1851