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
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