Explorar o código

Update to new version of filval, removes .idea project files

Caleb Fangmeier %!s(int64=7) %!d(string=hai) anos
pai
achega
2f0c85c782

+ 1 - 2
.gitignore

@@ -12,5 +12,4 @@ tags
 *.plist
 
 */__pycache__/
-.idea/dictionaries/
-.idea/workspace.xml
+.idea/

+ 0 - 11
.idea/EGamma.iml

@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="PYTHON_MODULE" version="4">
-  <component name="NewModuleRootManager">
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="jdk" jdkName="Python 3.6 (EGamma)" jdkType="Python SDK" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-  <component name="TestRunnerService">
-    <option name="PROJECT_TEST_RUNNER" value="Unittests" />
-  </component>
-</module>

+ 0 - 4
.idea/misc.xml

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6 (EGamma)" project-jdk-type="Python SDK" />
-</project>

+ 0 - 8
.idea/modules.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/EGamma.iml" filepath="$PROJECT_DIR$/.idea/EGamma.iml" />
-    </modules>
-  </component>
-</project>

+ 0 - 8
.idea/vcs.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
-    <mapping directory="$PROJECT_DIR$/filval" vcs="Git" />
-    <mapping directory="$PROJECT_DIR$/filval/yaml-cpp" vcs="Git" />
-  </component>
-</project>

+ 4 - 61
CMakeLists.txt

@@ -3,68 +3,11 @@ CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
 
 PROJECT (EGAMMA CXX)
 
-# Declare semantic versioning for FILVAL
-SET(FILVAL_VERSION_MAJOR 0)
-SET(FILVAL_VERSION_MINOR 1)
-SET(FILVAL_VERSION_PATCH 0)
 SET(CMAKE_BUILD_TYPE "Release")
 
-CONFIGURE_FILE (
-  "${PROJECT_SOURCE_DIR}/filval/filval.hpp"
-  "${PROJECT_BINARY_DIR}/filval/filval.hpp"
-  )
-
-
-SET( EGAMMA_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
-SET( EGAMMA_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} )
-
-# Setup clang as the project compiler
-SET (CMAKE_CXX_COMPILER             "/usr/bin/clang++" CACHE STRING "" FORCE)
-SET (CMAKE_CXX_FLAGS                "-Wall")
-SET (CMAKE_CXX_FLAGS_DEBUG          "-g")
-SET (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
-SET (CMAKE_CXX_FLAGS_RELEASE        "-Ofast -DNDEBUG")
-SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
-
-SET (CMAKE_AR      "/usr/bin/llvm-ar")
-SET (CMAKE_LINKER  "/usr/bin/llvm-ld")
-SET (CMAKE_NM      "/usr/bin/llvm-nm")
-SET (CMAKE_OBJDUMP "/usr/bin/llvm-objdump")
-SET (CMAKE_RANLIB  "/usr/bin/llvm-ranlib")
-
-
-LIST( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake )
-
-FIND_PACKAGE(Jupyter)
-IF(NBCONVERT_FOUND)
-    ADD_CUSTOM_TARGET(notebook-docs
-        ${CMAKE_CURRENT_SOURCE_DIR}/cmake/convert_nb ${NBCONVERT_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen_site
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-        COMMENT "Converting Jupyter Notebooks to HTML" VERBATIM
-    )
-
-    ADD_CUSTOM_TARGET(notebooks
-        ${CMAKE_CURRENT_SOURCE_DIR}/cmake/convert_nb ${NBCONVERT_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen_site --update
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-        COMMENT "Re-Running notebooks and converting to HTML" VERBATIM
-    )
-ENDIF(NBCONVERT_FOUND)
-
-FIND_PACKAGE(ROOT REQUIRED)
-INCLUDE_DIRECTORIES( SYSTEM ${ROOT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/filval/yaml-cpp/include/ )
-
-# Adds the dictionary library for additonal type serialization
-SET( CLINGDICTFILE ${CMAKE_CURRENT_BINARY_DIR}/clingdict.cpp )
-ROOT_GENERATE_DICTIONARY( "" ${CMAKE_CURRENT_SOURCE_DIR}/filval/root/LinkDef.hpp ${CLINGDICTFILE} "" )
-ADD_LIBRARY( filval SHARED ${CLINGDICTFILE} )
-
-SET(EXE_LIBS filval ${ROOT_LIBRARIES} ${CMAKE_CURRENT_SOURCE_DIR}/filval/yaml-cpp/build/libyaml-cpp.so)
-
-# Compiles main analysis routine
-ADD_EXECUTABLE( tracking_validation ${CMAKE_CURRENT_SOURCE_DIR}/analysis/tracking_validation.cpp )
-TARGET_LINK_LIBRARIES( tracking_validation ${EXE_LIBS} )
+ADD_SUBDIRECTORY(filval)
 
 # Compiles tracking efficiency executable
-ADD_EXECUTABLE( tracking_eff ${CMAKE_CURRENT_SOURCE_DIR}/analysis/tracking_eff.cpp )
-TARGET_LINK_LIBRARIES( tracking_eff ${EXE_LIBS} )
-
+ADD_EXECUTABLE(tracking_eff analysis/tracking_eff.cpp)
+TARGET_LINK_LIBRARIES(tracking_eff filval yaml-cpp)
+TARGET_INCLUDE_DIRECTORIES(tracking_eff ${ROOT_INCLUDE_DIR} filval/include/ filval/root/include/ filval/yaml-cpp/include/)

+ 1 - 1
analysis/TrackingNtuple.h

@@ -1 +1 @@
-TrackingNtuple928.h
+TrackingNtupleMod.h

+ 778 - 0
analysis/TrackingNtupleMod.h

@@ -0,0 +1,778 @@
+//////////////////////////////////////////////////////////
+// This class has been automatically generated on
+// Sun Jan 21 21:52:41 2018 by ROOT version 6.12/04
+// from TTree tree/tree
+// found on file: trackingNtuple_1.root
+//////////////////////////////////////////////////////////
+
+#ifndef TrackingNtuple_h
+#define TrackingNtuple_h
+
+#include <TROOT.h>
+#include <TChain.h>
+#include <TFile.h>
+
+// Header file for the classes stored in the TTree if any.
+#include "vector"
+#include "vector"
+#include "vector"
+#include "vector"
+#include "vector"
+#include "vector"
+#include "vector"
+
+class TrackingNtuple {
+public :
+   TTree          *fChain;   //!pointer to the analyzed TTree or TChain
+   Int_t           fCurrent; //!current Tree number in a TChain
+
+// Fixed size dimensions of array or collections stored in the TTree if any.
+
+   // Declaration of leaf types
+   ULong64_t       event;
+   UInt_t          lumi;
+   UInt_t          run;
+   vector<float>   *trk_px;
+   vector<float>   *trk_py;
+   vector<float>   *trk_pz;
+   vector<float>   *trk_pt;
+   vector<float>   *trk_inner_px;
+   vector<float>   *trk_inner_py;
+   vector<float>   *trk_inner_pz;
+   vector<float>   *trk_inner_pt;
+   vector<float>   *trk_outer_px;
+   vector<float>   *trk_outer_py;
+   vector<float>   *trk_outer_pz;
+   vector<float>   *trk_outer_pt;
+   vector<float>   *trk_eta;
+   vector<float>   *trk_lambda;
+   vector<float>   *trk_cotTheta;
+   vector<float>   *trk_phi;
+   vector<float>   *trk_dxy;
+   vector<float>   *trk_dz;
+   vector<float>   *trk_ptErr;
+   vector<float>   *trk_etaErr;
+   vector<float>   *trk_lambdaErr;
+   vector<float>   *trk_phiErr;
+   vector<float>   *trk_dxyErr;
+   vector<float>   *trk_dzErr;
+   vector<float>   *trk_refpoint_x;
+   vector<float>   *trk_refpoint_y;
+   vector<float>   *trk_refpoint_z;
+   vector<float>   *trk_nChi2;
+   vector<int>     *trk_q;
+   vector<unsigned int> *trk_nValid;
+   vector<unsigned int> *trk_nInvalid;
+   vector<unsigned int> *trk_nPixel;
+   vector<unsigned int> *trk_nStrip;
+   vector<unsigned int> *trk_nPixelLay;
+   vector<unsigned int> *trk_nStripLay;
+   vector<unsigned int> *trk_n3DLay;
+   vector<unsigned int> *trk_nOuterLost;
+   vector<unsigned int> *trk_nInnerLost;
+   vector<unsigned int> *trk_algo;
+   vector<unsigned int> *trk_originalAlgo;
+   vector<ULong64_t> *trk_algoMask;
+   vector<unsigned short> *trk_stopReason;
+   vector<short>   *trk_isHP;
+   vector<int>     *trk_seedIdx;
+   vector<float>   *trk_vtxx;
+   vector<float>   *trk_vtxy;
+   vector<float>   *trk_vtxz;
+   vector<vector<float> > *trk_shareFrac;
+   vector<vector<int> > *trk_simTrkIdx;
+   vector<int>     *trk_genIdx;
+   vector<float>   *trk_genDR;
+   vector<int>     *sim_event;
+   vector<int>     *sim_bunchCrossing;
+   vector<int>     *sim_pdgId;
+   vector<vector<int> > *sim_genPdgIds;
+   vector<int>     *sim_isFromBHadron;
+   vector<float>   *sim_px;
+   vector<float>   *sim_py;
+   vector<float>   *sim_pz;
+   vector<float>   *sim_pt;
+   vector<float>   *sim_eta;
+   vector<float>   *sim_phi;
+   vector<float>   *sim_pca_pt;
+   vector<float>   *sim_pca_eta;
+   vector<float>   *sim_pca_lambda;
+   vector<float>   *sim_pca_cotTheta;
+   vector<float>   *sim_pca_phi;
+   vector<float>   *sim_pca_dxy;
+   vector<float>   *sim_pca_dz;
+   vector<int>     *sim_q;
+   vector<unsigned int> *sim_nValid;
+   vector<unsigned int> *sim_nPixel;
+   vector<unsigned int> *sim_nStrip;
+   vector<unsigned int> *sim_nLay;
+   vector<unsigned int> *sim_nPixelLay;
+   vector<unsigned int> *sim_n3DLay;
+   vector<vector<int> > *sim_trkIdx;
+   vector<vector<float> > *sim_shareFrac;
+   vector<vector<int> > *sim_seedIdx;
+   vector<int>     *sim_parentVtxIdx;
+   vector<vector<int> > *sim_decayVtxIdx;
+   Float_t         bsp_x;
+   Float_t         bsp_y;
+   Float_t         bsp_z;
+   Float_t         bsp_sigmax;
+   Float_t         bsp_sigmay;
+   Float_t         bsp_sigmaz;
+   vector<short>   *see_fitok;
+   vector<float>   *see_px;
+   vector<float>   *see_py;
+   vector<float>   *see_pz;
+   vector<float>   *see_pt;
+   vector<float>   *see_eta;
+   vector<float>   *see_phi;
+   vector<float>   *see_dxy;
+   vector<float>   *see_dz;
+   vector<float>   *see_ptErr;
+   vector<float>   *see_etaErr;
+   vector<float>   *see_phiErr;
+   vector<float>   *see_dxyErr;
+   vector<float>   *see_dzErr;
+   vector<float>   *see_chi2;
+   vector<float>   *see_statePt;
+   vector<float>   *see_stateTrajX;
+   vector<float>   *see_stateTrajY;
+   vector<float>   *see_stateTrajPx;
+   vector<float>   *see_stateTrajPy;
+   vector<float>   *see_stateTrajPz;
+   vector<int>     *see_q;
+   vector<unsigned int> *see_nValid;
+   vector<unsigned int> *see_nPixel;
+   vector<unsigned int> *see_nGlued;
+   vector<unsigned int> *see_nStrip;
+   vector<unsigned int> *see_nPhase2OT;
+   vector<unsigned int> *see_algo;
+   vector<unsigned short> *see_stopReason;
+   vector<int>     *see_trkIdx;
+   vector<vector<float> > *see_shareFrac;
+   vector<vector<int> > *see_simTrkIdx;
+   vector<unsigned int> *see_offset;
+   vector<vector<int> > *see_isBarrel;
+   vector<vector<int> > *see_layerOrDiskNr;
+   vector<vector<int> > *see_isValidPos;
+   vector<vector<float> > *see_dRZPos;
+   vector<vector<float> > *see_dPhiPos;
+   vector<vector<int> > *see_isValidNeg;
+   vector<vector<float> > *see_dRZNeg;
+   vector<vector<float> > *see_dPhiNeg;
+   vector<float>   *vtx_x;
+   vector<float>   *vtx_y;
+   vector<float>   *vtx_z;
+   vector<float>   *vtx_xErr;
+   vector<float>   *vtx_yErr;
+   vector<float>   *vtx_zErr;
+   vector<float>   *vtx_ndof;
+   vector<float>   *vtx_chi2;
+   vector<short>   *vtx_fake;
+   vector<short>   *vtx_valid;
+   vector<vector<int> > *vtx_trkIdx;
+   vector<float>   *gen_px;
+   vector<float>   *gen_py;
+   vector<float>   *gen_pz;
+   vector<float>   *gen_charge;
+   vector<int>     *gen_pdgId;
+   vector<float>   *gen_vx;
+   vector<float>   *gen_vy;
+   vector<float>   *gen_vz;
+   vector<int>     *gen_status;
+   vector<int>     *gen_mother;
+   vector<bool>    *gen_isTauDecayProduct;
+   vector<bool>    *gen_isDirectHadronDecayProduct;
+   vector<bool>    *gen_isPrompt;
+   vector<int>     *simvtx_event;
+   vector<int>     *simvtx_bunchCrossing;
+   vector<unsigned int> *simvtx_processType;
+   vector<float>   *simvtx_x;
+   vector<float>   *simvtx_y;
+   vector<float>   *simvtx_z;
+   vector<vector<int> > *simvtx_sourceSimIdx;
+   vector<vector<int> > *simvtx_daughterSimIdx;
+   vector<int>     *simpv_idx;
+
+   // List of branches
+   TBranch        *b_event;   //!
+   TBranch        *b_lumi;   //!
+   TBranch        *b_run;   //!
+   TBranch        *b_trk_px;   //!
+   TBranch        *b_trk_py;   //!
+   TBranch        *b_trk_pz;   //!
+   TBranch        *b_trk_pt;   //!
+   TBranch        *b_trk_inner_px;   //!
+   TBranch        *b_trk_inner_py;   //!
+   TBranch        *b_trk_inner_pz;   //!
+   TBranch        *b_trk_inner_pt;   //!
+   TBranch        *b_trk_outer_px;   //!
+   TBranch        *b_trk_outer_py;   //!
+   TBranch        *b_trk_outer_pz;   //!
+   TBranch        *b_trk_outer_pt;   //!
+   TBranch        *b_trk_eta;   //!
+   TBranch        *b_trk_lambda;   //!
+   TBranch        *b_trk_cotTheta;   //!
+   TBranch        *b_trk_phi;   //!
+   TBranch        *b_trk_dxy;   //!
+   TBranch        *b_trk_dz;   //!
+   TBranch        *b_trk_ptErr;   //!
+   TBranch        *b_trk_etaErr;   //!
+   TBranch        *b_trk_lambdaErr;   //!
+   TBranch        *b_trk_phiErr;   //!
+   TBranch        *b_trk_dxyErr;   //!
+   TBranch        *b_trk_dzErr;   //!
+   TBranch        *b_trk_refpoint_x;   //!
+   TBranch        *b_trk_refpoint_y;   //!
+   TBranch        *b_trk_refpoint_z;   //!
+   TBranch        *b_trk_nChi2;   //!
+   TBranch        *b_trk_q;   //!
+   TBranch        *b_trk_nValid;   //!
+   TBranch        *b_trk_nInvalid;   //!
+   TBranch        *b_trk_nPixel;   //!
+   TBranch        *b_trk_nStrip;   //!
+   TBranch        *b_trk_nPixelLay;   //!
+   TBranch        *b_trk_nStripLay;   //!
+   TBranch        *b_trk_n3DLay;   //!
+   TBranch        *b_trk_nOuterLost;   //!
+   TBranch        *b_trk_nInnerLost;   //!
+   TBranch        *b_trk_algo;   //!
+   TBranch        *b_trk_originalAlgo;   //!
+   TBranch        *b_trk_algoMask;   //!
+   TBranch        *b_trk_stopReason;   //!
+   TBranch        *b_trk_isHP;   //!
+   TBranch        *b_trk_seedIdx;   //!
+   TBranch        *b_trk_vtxx;   //!
+   TBranch        *b_trk_vtxy;   //!
+   TBranch        *b_trk_vtxz;   //!
+   TBranch        *b_trk_shareFrac;   //!
+   TBranch        *b_trk_simTrkIdx;   //!
+   TBranch        *b_trk_genIdx;   //!
+   TBranch        *b_trk_genDR;   //!
+   TBranch        *b_sim_event;   //!
+   TBranch        *b_sim_bunchCrossing;   //!
+   TBranch        *b_sim_pdgId;   //!
+   TBranch        *b_sim_genPdgIds;   //!
+   TBranch        *b_sim_isFromBHadron;   //!
+   TBranch        *b_sim_px;   //!
+   TBranch        *b_sim_py;   //!
+   TBranch        *b_sim_pz;   //!
+   TBranch        *b_sim_pt;   //!
+   TBranch        *b_sim_eta;   //!
+   TBranch        *b_sim_phi;   //!
+   TBranch        *b_sim_pca_pt;   //!
+   TBranch        *b_sim_pca_eta;   //!
+   TBranch        *b_sim_pca_lambda;   //!
+   TBranch        *b_sim_pca_cotTheta;   //!
+   TBranch        *b_sim_pca_phi;   //!
+   TBranch        *b_sim_pca_dxy;   //!
+   TBranch        *b_sim_pca_dz;   //!
+   TBranch        *b_sim_q;   //!
+   TBranch        *b_sim_nValid;   //!
+   TBranch        *b_sim_nPixel;   //!
+   TBranch        *b_sim_nStrip;   //!
+   TBranch        *b_sim_nLay;   //!
+   TBranch        *b_sim_nPixelLay;   //!
+   TBranch        *b_sim_n3DLay;   //!
+   TBranch        *b_sim_trkIdx;   //!
+   TBranch        *b_sim_shareFrac;   //!
+   TBranch        *b_sim_seedIdx;   //!
+   TBranch        *b_sim_parentVtxIdx;   //!
+   TBranch        *b_sim_decayVtxIdx;   //!
+   TBranch        *b_bsp_x;   //!
+   TBranch        *b_bsp_y;   //!
+   TBranch        *b_bsp_z;   //!
+   TBranch        *b_bsp_sigmax;   //!
+   TBranch        *b_bsp_sigmay;   //!
+   TBranch        *b_bsp_sigmaz;   //!
+   TBranch        *b_see_fitok;   //!
+   TBranch        *b_see_px;   //!
+   TBranch        *b_see_py;   //!
+   TBranch        *b_see_pz;   //!
+   TBranch        *b_see_pt;   //!
+   TBranch        *b_see_eta;   //!
+   TBranch        *b_see_phi;   //!
+   TBranch        *b_see_dxy;   //!
+   TBranch        *b_see_dz;   //!
+   TBranch        *b_see_ptErr;   //!
+   TBranch        *b_see_etaErr;   //!
+   TBranch        *b_see_phiErr;   //!
+   TBranch        *b_see_dxyErr;   //!
+   TBranch        *b_see_dzErr;   //!
+   TBranch        *b_see_chi2;   //!
+   TBranch        *b_see_statePt;   //!
+   TBranch        *b_see_stateTrajX;   //!
+   TBranch        *b_see_stateTrajY;   //!
+   TBranch        *b_see_stateTrajPx;   //!
+   TBranch        *b_see_stateTrajPy;   //!
+   TBranch        *b_see_stateTrajPz;   //!
+   TBranch        *b_see_q;   //!
+   TBranch        *b_see_nValid;   //!
+   TBranch        *b_see_nPixel;   //!
+   TBranch        *b_see_nGlued;   //!
+   TBranch        *b_see_nStrip;   //!
+   TBranch        *b_see_nPhase2OT;   //!
+   TBranch        *b_see_algo;   //!
+   TBranch        *b_see_stopReason;   //!
+   TBranch        *b_see_trkIdx;   //!
+   TBranch        *b_see_shareFrac;   //!
+   TBranch        *b_see_simTrkIdx;   //!
+   TBranch        *b_see_offset;   //!
+   TBranch        *b_see_isBarrel;   //!
+   TBranch        *b_see_layerOrDiskNr;   //!
+   TBranch        *b_see_isValidPos;   //!
+   TBranch        *b_see_dRZPos;   //!
+   TBranch        *b_see_dPhiPos;   //!
+   TBranch        *b_see_isValidNeg;   //!
+   TBranch        *b_see_dRZNeg;   //!
+   TBranch        *b_see_dPhiNeg;   //!
+   TBranch        *b_vtx_x;   //!
+   TBranch        *b_vtx_y;   //!
+   TBranch        *b_vtx_z;   //!
+   TBranch        *b_vtx_xErr;   //!
+   TBranch        *b_vtx_yErr;   //!
+   TBranch        *b_vtx_zErr;   //!
+   TBranch        *b_vtx_ndof;   //!
+   TBranch        *b_vtx_chi2;   //!
+   TBranch        *b_vtx_fake;   //!
+   TBranch        *b_vtx_valid;   //!
+   TBranch        *b_vtx_trkIdx;   //!
+   TBranch        *b_gen_px;   //!
+   TBranch        *b_gen_py;   //!
+   TBranch        *b_gen_pz;   //!
+   TBranch        *b_gen_charge;   //!
+   TBranch        *b_gen_pdgId;   //!
+   TBranch        *b_gen_vx;   //!
+   TBranch        *b_gen_vy;   //!
+   TBranch        *b_gen_vz;   //!
+   TBranch        *b_gen_status;   //!
+   TBranch        *b_gen_mother;   //!
+   TBranch        *b_gen_isTauDecayProduct;   //!
+   TBranch        *b_gen_isDirectHadronDecayProduct;   //!
+   TBranch        *b_gen_isPrompt;   //!
+   TBranch        *b_simvtx_event;   //!
+   TBranch        *b_simvtx_bunchCrossing;   //!
+   TBranch        *b_simvtx_processType;   //!
+   TBranch        *b_simvtx_x;   //!
+   TBranch        *b_simvtx_y;   //!
+   TBranch        *b_simvtx_z;   //!
+   TBranch        *b_simvtx_sourceSimIdx;   //!
+   TBranch        *b_simvtx_daughterSimIdx;   //!
+   TBranch        *b_simpv_idx;   //!
+
+   TrackingNtuple(TTree *tree=0);
+   virtual ~TrackingNtuple();
+   virtual Int_t    Cut(Long64_t entry);
+   virtual Int_t    GetEntry(Long64_t entry);
+   virtual Long64_t LoadTree(Long64_t entry);
+   virtual void     Init(TTree *tree);
+   virtual Bool_t   Notify();
+   virtual void     Show(Long64_t entry = -1);
+};
+
+TrackingNtuple::TrackingNtuple(TTree *tree) : fChain(0)
+{
+// if parameter tree is not specified (or zero), connect the file
+// used to generate this class and read the Tree.
+   if (tree == 0) {
+      TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("trackingNtuple_1.root");
+      if (!f || !f->IsOpen()) {
+         f = new TFile("trackingNtuple_1.root");
+      }
+      TDirectory * dir = (TDirectory*)f->Get("trackingNtuple_1.root:/trackingNtuple");
+      dir->GetObject("tree",tree);
+
+   }
+   Init(tree);
+}
+
+TrackingNtuple::~TrackingNtuple()
+{
+   if (!fChain) return;
+   delete fChain->GetCurrentFile();
+}
+
+Int_t TrackingNtuple::GetEntry(Long64_t entry)
+{
+// Read contents of entry.
+   if (!fChain) return 0;
+   return fChain->GetEntry(entry);
+}
+Long64_t TrackingNtuple::LoadTree(Long64_t entry)
+{
+// Set the environment to read one entry
+   if (!fChain) return -5;
+   Long64_t centry = fChain->LoadTree(entry);
+   if (centry < 0) return centry;
+   if (fChain->GetTreeNumber() != fCurrent) {
+      fCurrent = fChain->GetTreeNumber();
+      Notify();
+   }
+   return centry;
+}
+
+void TrackingNtuple::Init(TTree *tree)
+{
+   // The Init() function is called when the selector needs to initialize
+   // a new tree or chain. Typically here the branch addresses and branch
+   // pointers of the tree will be set.
+   // It is normally not necessary to make changes to the generated
+   // code, but the routine can be extended by the user if needed.
+   // Init() will be called many times when running on PROOF
+   // (once per file to be processed).
+
+   // Set object pointer
+   trk_px = 0;
+   trk_py = 0;
+   trk_pz = 0;
+   trk_pt = 0;
+   trk_inner_px = 0;
+   trk_inner_py = 0;
+   trk_inner_pz = 0;
+   trk_inner_pt = 0;
+   trk_outer_px = 0;
+   trk_outer_py = 0;
+   trk_outer_pz = 0;
+   trk_outer_pt = 0;
+   trk_eta = 0;
+   trk_lambda = 0;
+   trk_cotTheta = 0;
+   trk_phi = 0;
+   trk_dxy = 0;
+   trk_dz = 0;
+   trk_ptErr = 0;
+   trk_etaErr = 0;
+   trk_lambdaErr = 0;
+   trk_phiErr = 0;
+   trk_dxyErr = 0;
+   trk_dzErr = 0;
+   trk_refpoint_x = 0;
+   trk_refpoint_y = 0;
+   trk_refpoint_z = 0;
+   trk_nChi2 = 0;
+   trk_q = 0;
+   trk_nValid = 0;
+   trk_nInvalid = 0;
+   trk_nPixel = 0;
+   trk_nStrip = 0;
+   trk_nPixelLay = 0;
+   trk_nStripLay = 0;
+   trk_n3DLay = 0;
+   trk_nOuterLost = 0;
+   trk_nInnerLost = 0;
+   trk_algo = 0;
+   trk_originalAlgo = 0;
+   trk_algoMask = 0;
+   trk_stopReason = 0;
+   trk_isHP = 0;
+   trk_seedIdx = 0;
+   trk_vtxx = 0;
+   trk_vtxy = 0;
+   trk_vtxz = 0;
+   trk_shareFrac = 0;
+   trk_simTrkIdx = 0;
+   trk_genIdx = 0;
+   trk_genDR = 0;
+   sim_event = 0;
+   sim_bunchCrossing = 0;
+   sim_pdgId = 0;
+   sim_genPdgIds = 0;
+   sim_isFromBHadron = 0;
+   sim_px = 0;
+   sim_py = 0;
+   sim_pz = 0;
+   sim_pt = 0;
+   sim_eta = 0;
+   sim_phi = 0;
+   sim_pca_pt = 0;
+   sim_pca_eta = 0;
+   sim_pca_lambda = 0;
+   sim_pca_cotTheta = 0;
+   sim_pca_phi = 0;
+   sim_pca_dxy = 0;
+   sim_pca_dz = 0;
+   sim_q = 0;
+   sim_nValid = 0;
+   sim_nPixel = 0;
+   sim_nStrip = 0;
+   sim_nLay = 0;
+   sim_nPixelLay = 0;
+   sim_n3DLay = 0;
+   sim_trkIdx = 0;
+   sim_shareFrac = 0;
+   sim_seedIdx = 0;
+   sim_parentVtxIdx = 0;
+   sim_decayVtxIdx = 0;
+   see_fitok = 0;
+   see_px = 0;
+   see_py = 0;
+   see_pz = 0;
+   see_pt = 0;
+   see_eta = 0;
+   see_phi = 0;
+   see_dxy = 0;
+   see_dz = 0;
+   see_ptErr = 0;
+   see_etaErr = 0;
+   see_phiErr = 0;
+   see_dxyErr = 0;
+   see_dzErr = 0;
+   see_chi2 = 0;
+   see_statePt = 0;
+   see_stateTrajX = 0;
+   see_stateTrajY = 0;
+   see_stateTrajPx = 0;
+   see_stateTrajPy = 0;
+   see_stateTrajPz = 0;
+   see_q = 0;
+   see_nValid = 0;
+   see_nPixel = 0;
+   see_nGlued = 0;
+   see_nStrip = 0;
+   see_nPhase2OT = 0;
+   see_algo = 0;
+   see_stopReason = 0;
+   see_trkIdx = 0;
+   see_shareFrac = 0;
+   see_simTrkIdx = 0;
+   see_offset = 0;
+   see_isBarrel = 0;
+   see_layerOrDiskNr = 0;
+   see_isValidPos = 0;
+   see_dRZPos = 0;
+   see_dPhiPos = 0;
+   see_isValidNeg = 0;
+   see_dRZNeg = 0;
+   see_dPhiNeg = 0;
+   vtx_x = 0;
+   vtx_y = 0;
+   vtx_z = 0;
+   vtx_xErr = 0;
+   vtx_yErr = 0;
+   vtx_zErr = 0;
+   vtx_ndof = 0;
+   vtx_chi2 = 0;
+   vtx_fake = 0;
+   vtx_valid = 0;
+   vtx_trkIdx = 0;
+   gen_px = 0;
+   gen_py = 0;
+   gen_pz = 0;
+   gen_charge = 0;
+   gen_pdgId = 0;
+   gen_vx = 0;
+   gen_vy = 0;
+   gen_vz = 0;
+   gen_status = 0;
+   gen_mother = 0;
+   gen_isTauDecayProduct = 0;
+   gen_isDirectHadronDecayProduct = 0;
+   gen_isPrompt = 0;
+   simvtx_event = 0;
+   simvtx_bunchCrossing = 0;
+   simvtx_processType = 0;
+   simvtx_x = 0;
+   simvtx_y = 0;
+   simvtx_z = 0;
+   simvtx_sourceSimIdx = 0;
+   simvtx_daughterSimIdx = 0;
+   simpv_idx = 0;
+   // Set branch addresses and branch pointers
+   if (!tree) return;
+   fChain = tree;
+   fCurrent = -1;
+   fChain->SetMakeClass(1);
+
+   fChain->SetBranchAddress("event", &event, &b_event);
+   fChain->SetBranchAddress("lumi", &lumi, &b_lumi);
+   fChain->SetBranchAddress("run", &run, &b_run);
+   fChain->SetBranchAddress("trk_px", &trk_px, &b_trk_px);
+   fChain->SetBranchAddress("trk_py", &trk_py, &b_trk_py);
+   fChain->SetBranchAddress("trk_pz", &trk_pz, &b_trk_pz);
+   fChain->SetBranchAddress("trk_pt", &trk_pt, &b_trk_pt);
+   fChain->SetBranchAddress("trk_inner_px", &trk_inner_px, &b_trk_inner_px);
+   fChain->SetBranchAddress("trk_inner_py", &trk_inner_py, &b_trk_inner_py);
+   fChain->SetBranchAddress("trk_inner_pz", &trk_inner_pz, &b_trk_inner_pz);
+   fChain->SetBranchAddress("trk_inner_pt", &trk_inner_pt, &b_trk_inner_pt);
+   fChain->SetBranchAddress("trk_outer_px", &trk_outer_px, &b_trk_outer_px);
+   fChain->SetBranchAddress("trk_outer_py", &trk_outer_py, &b_trk_outer_py);
+   fChain->SetBranchAddress("trk_outer_pz", &trk_outer_pz, &b_trk_outer_pz);
+   fChain->SetBranchAddress("trk_outer_pt", &trk_outer_pt, &b_trk_outer_pt);
+   fChain->SetBranchAddress("trk_eta", &trk_eta, &b_trk_eta);
+   fChain->SetBranchAddress("trk_lambda", &trk_lambda, &b_trk_lambda);
+   fChain->SetBranchAddress("trk_cotTheta", &trk_cotTheta, &b_trk_cotTheta);
+   fChain->SetBranchAddress("trk_phi", &trk_phi, &b_trk_phi);
+   fChain->SetBranchAddress("trk_dxy", &trk_dxy, &b_trk_dxy);
+   fChain->SetBranchAddress("trk_dz", &trk_dz, &b_trk_dz);
+   fChain->SetBranchAddress("trk_ptErr", &trk_ptErr, &b_trk_ptErr);
+   fChain->SetBranchAddress("trk_etaErr", &trk_etaErr, &b_trk_etaErr);
+   fChain->SetBranchAddress("trk_lambdaErr", &trk_lambdaErr, &b_trk_lambdaErr);
+   fChain->SetBranchAddress("trk_phiErr", &trk_phiErr, &b_trk_phiErr);
+   fChain->SetBranchAddress("trk_dxyErr", &trk_dxyErr, &b_trk_dxyErr);
+   fChain->SetBranchAddress("trk_dzErr", &trk_dzErr, &b_trk_dzErr);
+   fChain->SetBranchAddress("trk_refpoint_x", &trk_refpoint_x, &b_trk_refpoint_x);
+   fChain->SetBranchAddress("trk_refpoint_y", &trk_refpoint_y, &b_trk_refpoint_y);
+   fChain->SetBranchAddress("trk_refpoint_z", &trk_refpoint_z, &b_trk_refpoint_z);
+   fChain->SetBranchAddress("trk_nChi2", &trk_nChi2, &b_trk_nChi2);
+   fChain->SetBranchAddress("trk_q", &trk_q, &b_trk_q);
+   fChain->SetBranchAddress("trk_nValid", &trk_nValid, &b_trk_nValid);
+   fChain->SetBranchAddress("trk_nInvalid", &trk_nInvalid, &b_trk_nInvalid);
+   fChain->SetBranchAddress("trk_nPixel", &trk_nPixel, &b_trk_nPixel);
+   fChain->SetBranchAddress("trk_nStrip", &trk_nStrip, &b_trk_nStrip);
+   fChain->SetBranchAddress("trk_nPixelLay", &trk_nPixelLay, &b_trk_nPixelLay);
+   fChain->SetBranchAddress("trk_nStripLay", &trk_nStripLay, &b_trk_nStripLay);
+   fChain->SetBranchAddress("trk_n3DLay", &trk_n3DLay, &b_trk_n3DLay);
+   fChain->SetBranchAddress("trk_nOuterLost", &trk_nOuterLost, &b_trk_nOuterLost);
+   fChain->SetBranchAddress("trk_nInnerLost", &trk_nInnerLost, &b_trk_nInnerLost);
+   fChain->SetBranchAddress("trk_algo", &trk_algo, &b_trk_algo);
+   fChain->SetBranchAddress("trk_originalAlgo", &trk_originalAlgo, &b_trk_originalAlgo);
+   fChain->SetBranchAddress("trk_algoMask", &trk_algoMask, &b_trk_algoMask);
+   fChain->SetBranchAddress("trk_stopReason", &trk_stopReason, &b_trk_stopReason);
+   fChain->SetBranchAddress("trk_isHP", &trk_isHP, &b_trk_isHP);
+   fChain->SetBranchAddress("trk_seedIdx", &trk_seedIdx, &b_trk_seedIdx);
+   fChain->SetBranchAddress("trk_vtxx", &trk_vtxx, &b_trk_vtxx);
+   fChain->SetBranchAddress("trk_vtxy", &trk_vtxy, &b_trk_vtxy);
+   fChain->SetBranchAddress("trk_vtxz", &trk_vtxz, &b_trk_vtxz);
+   fChain->SetBranchAddress("trk_shareFrac", &trk_shareFrac, &b_trk_shareFrac);
+   fChain->SetBranchAddress("trk_simTrkIdx", &trk_simTrkIdx, &b_trk_simTrkIdx);
+   fChain->SetBranchAddress("trk_genIdx", &trk_genIdx, &b_trk_genIdx);
+   fChain->SetBranchAddress("trk_genDR", &trk_genDR, &b_trk_genDR);
+   fChain->SetBranchAddress("sim_event", &sim_event, &b_sim_event);
+   fChain->SetBranchAddress("sim_bunchCrossing", &sim_bunchCrossing, &b_sim_bunchCrossing);
+   fChain->SetBranchAddress("sim_pdgId", &sim_pdgId, &b_sim_pdgId);
+   fChain->SetBranchAddress("sim_genPdgIds", &sim_genPdgIds, &b_sim_genPdgIds);
+   fChain->SetBranchAddress("sim_isFromBHadron", &sim_isFromBHadron, &b_sim_isFromBHadron);
+   fChain->SetBranchAddress("sim_px", &sim_px, &b_sim_px);
+   fChain->SetBranchAddress("sim_py", &sim_py, &b_sim_py);
+   fChain->SetBranchAddress("sim_pz", &sim_pz, &b_sim_pz);
+   fChain->SetBranchAddress("sim_pt", &sim_pt, &b_sim_pt);
+   fChain->SetBranchAddress("sim_eta", &sim_eta, &b_sim_eta);
+   fChain->SetBranchAddress("sim_phi", &sim_phi, &b_sim_phi);
+   fChain->SetBranchAddress("sim_pca_pt", &sim_pca_pt, &b_sim_pca_pt);
+   fChain->SetBranchAddress("sim_pca_eta", &sim_pca_eta, &b_sim_pca_eta);
+   fChain->SetBranchAddress("sim_pca_lambda", &sim_pca_lambda, &b_sim_pca_lambda);
+   fChain->SetBranchAddress("sim_pca_cotTheta", &sim_pca_cotTheta, &b_sim_pca_cotTheta);
+   fChain->SetBranchAddress("sim_pca_phi", &sim_pca_phi, &b_sim_pca_phi);
+   fChain->SetBranchAddress("sim_pca_dxy", &sim_pca_dxy, &b_sim_pca_dxy);
+   fChain->SetBranchAddress("sim_pca_dz", &sim_pca_dz, &b_sim_pca_dz);
+   fChain->SetBranchAddress("sim_q", &sim_q, &b_sim_q);
+   fChain->SetBranchAddress("sim_nValid", &sim_nValid, &b_sim_nValid);
+   fChain->SetBranchAddress("sim_nPixel", &sim_nPixel, &b_sim_nPixel);
+   fChain->SetBranchAddress("sim_nStrip", &sim_nStrip, &b_sim_nStrip);
+   fChain->SetBranchAddress("sim_nLay", &sim_nLay, &b_sim_nLay);
+   fChain->SetBranchAddress("sim_nPixelLay", &sim_nPixelLay, &b_sim_nPixelLay);
+   fChain->SetBranchAddress("sim_n3DLay", &sim_n3DLay, &b_sim_n3DLay);
+   fChain->SetBranchAddress("sim_trkIdx", &sim_trkIdx, &b_sim_trkIdx);
+   fChain->SetBranchAddress("sim_shareFrac", &sim_shareFrac, &b_sim_shareFrac);
+   fChain->SetBranchAddress("sim_seedIdx", &sim_seedIdx, &b_sim_seedIdx);
+   fChain->SetBranchAddress("sim_parentVtxIdx", &sim_parentVtxIdx, &b_sim_parentVtxIdx);
+   fChain->SetBranchAddress("sim_decayVtxIdx", &sim_decayVtxIdx, &b_sim_decayVtxIdx);
+   fChain->SetBranchAddress("bsp_x", &bsp_x, &b_bsp_x);
+   fChain->SetBranchAddress("bsp_y", &bsp_y, &b_bsp_y);
+   fChain->SetBranchAddress("bsp_z", &bsp_z, &b_bsp_z);
+   fChain->SetBranchAddress("bsp_sigmax", &bsp_sigmax, &b_bsp_sigmax);
+   fChain->SetBranchAddress("bsp_sigmay", &bsp_sigmay, &b_bsp_sigmay);
+   fChain->SetBranchAddress("bsp_sigmaz", &bsp_sigmaz, &b_bsp_sigmaz);
+   fChain->SetBranchAddress("see_fitok", &see_fitok, &b_see_fitok);
+   fChain->SetBranchAddress("see_px", &see_px, &b_see_px);
+   fChain->SetBranchAddress("see_py", &see_py, &b_see_py);
+   fChain->SetBranchAddress("see_pz", &see_pz, &b_see_pz);
+   fChain->SetBranchAddress("see_pt", &see_pt, &b_see_pt);
+   fChain->SetBranchAddress("see_eta", &see_eta, &b_see_eta);
+   fChain->SetBranchAddress("see_phi", &see_phi, &b_see_phi);
+   fChain->SetBranchAddress("see_dxy", &see_dxy, &b_see_dxy);
+   fChain->SetBranchAddress("see_dz", &see_dz, &b_see_dz);
+   fChain->SetBranchAddress("see_ptErr", &see_ptErr, &b_see_ptErr);
+   fChain->SetBranchAddress("see_etaErr", &see_etaErr, &b_see_etaErr);
+   fChain->SetBranchAddress("see_phiErr", &see_phiErr, &b_see_phiErr);
+   fChain->SetBranchAddress("see_dxyErr", &see_dxyErr, &b_see_dxyErr);
+   fChain->SetBranchAddress("see_dzErr", &see_dzErr, &b_see_dzErr);
+   fChain->SetBranchAddress("see_chi2", &see_chi2, &b_see_chi2);
+   fChain->SetBranchAddress("see_statePt", &see_statePt, &b_see_statePt);
+   fChain->SetBranchAddress("see_stateTrajX", &see_stateTrajX, &b_see_stateTrajX);
+   fChain->SetBranchAddress("see_stateTrajY", &see_stateTrajY, &b_see_stateTrajY);
+   fChain->SetBranchAddress("see_stateTrajPx", &see_stateTrajPx, &b_see_stateTrajPx);
+   fChain->SetBranchAddress("see_stateTrajPy", &see_stateTrajPy, &b_see_stateTrajPy);
+   fChain->SetBranchAddress("see_stateTrajPz", &see_stateTrajPz, &b_see_stateTrajPz);
+   fChain->SetBranchAddress("see_q", &see_q, &b_see_q);
+   fChain->SetBranchAddress("see_nValid", &see_nValid, &b_see_nValid);
+   fChain->SetBranchAddress("see_nPixel", &see_nPixel, &b_see_nPixel);
+   fChain->SetBranchAddress("see_nGlued", &see_nGlued, &b_see_nGlued);
+   fChain->SetBranchAddress("see_nStrip", &see_nStrip, &b_see_nStrip);
+   fChain->SetBranchAddress("see_nPhase2OT", &see_nPhase2OT, &b_see_nPhase2OT);
+   fChain->SetBranchAddress("see_algo", &see_algo, &b_see_algo);
+   fChain->SetBranchAddress("see_stopReason", &see_stopReason, &b_see_stopReason);
+   fChain->SetBranchAddress("see_trkIdx", &see_trkIdx, &b_see_trkIdx);
+   fChain->SetBranchAddress("see_shareFrac", &see_shareFrac, &b_see_shareFrac);
+   fChain->SetBranchAddress("see_simTrkIdx", &see_simTrkIdx, &b_see_simTrkIdx);
+   fChain->SetBranchAddress("see_offset", &see_offset, &b_see_offset);
+   fChain->SetBranchAddress("see_isBarrel", &see_isBarrel, &b_see_isBarrel);
+   fChain->SetBranchAddress("see_layerOrDiskNr", &see_layerOrDiskNr, &b_see_layerOrDiskNr);
+   fChain->SetBranchAddress("see_isValidPos", &see_isValidPos, &b_see_isValidPos);
+   fChain->SetBranchAddress("see_dRZPos", &see_dRZPos, &b_see_dRZPos);
+   fChain->SetBranchAddress("see_dPhiPos", &see_dPhiPos, &b_see_dPhiPos);
+   fChain->SetBranchAddress("see_isValidNeg", &see_isValidNeg, &b_see_isValidNeg);
+   fChain->SetBranchAddress("see_dRZNeg", &see_dRZNeg, &b_see_dRZNeg);
+   fChain->SetBranchAddress("see_dPhiNeg", &see_dPhiNeg, &b_see_dPhiNeg);
+   fChain->SetBranchAddress("vtx_x", &vtx_x, &b_vtx_x);
+   fChain->SetBranchAddress("vtx_y", &vtx_y, &b_vtx_y);
+   fChain->SetBranchAddress("vtx_z", &vtx_z, &b_vtx_z);
+   fChain->SetBranchAddress("vtx_xErr", &vtx_xErr, &b_vtx_xErr);
+   fChain->SetBranchAddress("vtx_yErr", &vtx_yErr, &b_vtx_yErr);
+   fChain->SetBranchAddress("vtx_zErr", &vtx_zErr, &b_vtx_zErr);
+   fChain->SetBranchAddress("vtx_ndof", &vtx_ndof, &b_vtx_ndof);
+   fChain->SetBranchAddress("vtx_chi2", &vtx_chi2, &b_vtx_chi2);
+   fChain->SetBranchAddress("vtx_fake", &vtx_fake, &b_vtx_fake);
+   fChain->SetBranchAddress("vtx_valid", &vtx_valid, &b_vtx_valid);
+   fChain->SetBranchAddress("vtx_trkIdx", &vtx_trkIdx, &b_vtx_trkIdx);
+   fChain->SetBranchAddress("gen_px", &gen_px, &b_gen_px);
+   fChain->SetBranchAddress("gen_py", &gen_py, &b_gen_py);
+   fChain->SetBranchAddress("gen_pz", &gen_pz, &b_gen_pz);
+   fChain->SetBranchAddress("gen_charge", &gen_charge, &b_gen_charge);
+   fChain->SetBranchAddress("gen_pdgId", &gen_pdgId, &b_gen_pdgId);
+   fChain->SetBranchAddress("gen_vx", &gen_vx, &b_gen_vx);
+   fChain->SetBranchAddress("gen_vy", &gen_vy, &b_gen_vy);
+   fChain->SetBranchAddress("gen_vz", &gen_vz, &b_gen_vz);
+   fChain->SetBranchAddress("gen_status", &gen_status, &b_gen_status);
+   fChain->SetBranchAddress("gen_mother", &gen_mother, &b_gen_mother);
+   fChain->SetBranchAddress("gen_isTauDecayProduct", &gen_isTauDecayProduct, &b_gen_isTauDecayProduct);
+   fChain->SetBranchAddress("gen_isDirectHadronDecayProduct", &gen_isDirectHadronDecayProduct, &b_gen_isDirectHadronDecayProduct);
+   fChain->SetBranchAddress("gen_isPrompt", &gen_isPrompt, &b_gen_isPrompt);
+   fChain->SetBranchAddress("simvtx_event", &simvtx_event, &b_simvtx_event);
+   fChain->SetBranchAddress("simvtx_bunchCrossing", &simvtx_bunchCrossing, &b_simvtx_bunchCrossing);
+   fChain->SetBranchAddress("simvtx_processType", &simvtx_processType, &b_simvtx_processType);
+   fChain->SetBranchAddress("simvtx_x", &simvtx_x, &b_simvtx_x);
+   fChain->SetBranchAddress("simvtx_y", &simvtx_y, &b_simvtx_y);
+   fChain->SetBranchAddress("simvtx_z", &simvtx_z, &b_simvtx_z);
+   fChain->SetBranchAddress("simvtx_sourceSimIdx", &simvtx_sourceSimIdx, &b_simvtx_sourceSimIdx);
+   fChain->SetBranchAddress("simvtx_daughterSimIdx", &simvtx_daughterSimIdx, &b_simvtx_daughterSimIdx);
+   fChain->SetBranchAddress("simpv_idx", &simpv_idx, &b_simpv_idx);
+   Notify();
+}
+
+Bool_t TrackingNtuple::Notify()
+{
+   // The Notify() function is called when a new file is opened. This
+   // can be either for a new TTree in a TChain or when when a new TTree
+   // is started when using PROOF. It is normally not necessary to make changes
+   // to the generated code, but the routine can be extended by the
+   // user if needed. The return value is currently not used.
+
+   return kTRUE;
+}
+
+void TrackingNtuple::Show(Long64_t entry)
+{
+// Print contents of entry.
+// If entry is not specified, print current entry
+   if (!fChain) return;
+   fChain->Show(entry);
+}
+Int_t TrackingNtuple::Cut(Long64_t entry)
+{
+// This function may be called from Loop.
+// returns  1 if entry is accepted.
+// returns -1 otherwise.
+   return 1;
+}
+#endif // #ifdef TrackingNtuple_h

+ 25 - 349
analysis/TrackingNtupleObjs.hpp

@@ -1,4 +1,4 @@
-/** TrackingNtupleObjs.hpp created on 2017-12-10 17:34:34.450820 by generate_class.py
+/** TrackingNtupleObjs.hpp created on 2018-01-21 23:00:12.588429 by generate_class.py
  * AVOID EDITING THIS FILE BY HAND!! Instead edit TrackingNtupleObjs.yaml and re-run
  * generate_class.py
  */
@@ -14,191 +14,6 @@ using namespace fv;
 using namespace fv::root;
 
 typedef TreeDataSet<TrackingNtuple> TrackingDataSet;
-struct PixRecHit;
-
-class PixRecHitCollection {
-  public:
-    class iter {
-      public:
-        iter(const PixRecHitCollection* collection, size_t idx)
-          :collection(collection), idx(idx) { }
-        iter operator++() { ++idx; return *this; }
-        bool operator!=(const iter & other) { return idx != other.idx; }
-        const PixRecHit operator*() const;
-      private:
-        const PixRecHitCollection* collection;
-        size_t idx;
-    };
-
-    Value<vector<unsigned short>>* val_subdet;
-    Value<vector<unsigned short>>* val_layer;
-    Value<vector<unsigned short>>* val_ladder;
-    Value<vector<unsigned int>>* val_detId;
-    Value<vector<unsigned short>>* val_simType;
-    Value<vector<float>>* val_x;
-    Value<vector<float>>* val_y;
-    Value<vector<float>>* val_z;
-    Value<vector<float>>* val_xx;
-    Value<vector<float>>* val_xy;
-    Value<vector<float>>* val_yy;
-    Value<vector<float>>* val_yz;
-    Value<vector<float>>* val_zz;
-    Value<vector<float>>* val_zx;
-    Value<vector<float>>* val_radL;
-    Value<vector<float>>* val_bbxi;
-    Value<vector<vector<int>>>* val_trkIdx;
-    Value<vector<vector<int>>>* val_seeIdx;
-    Value<vector<vector<int>>>* val_simHitIdx;
-    Value<vector<vector<float>>>* val_chargeFraction;
-
-    PixRecHitCollection() { }
-
-    void init(TrackingDataSet& tds){
-        val_subdet = tds.track_branch_obj<vector<unsigned short>>("pix_subdet");
-        val_layer = tds.track_branch_obj<vector<unsigned short>>("pix_layer");
-        val_ladder = tds.track_branch_obj<vector<unsigned short>>("pix_ladder");
-        val_detId = tds.track_branch_obj<vector<unsigned int>>("pix_detId");
-        val_simType = tds.track_branch_obj<vector<unsigned short>>("pix_simType");
-        val_x = tds.track_branch_obj<vector<float>>("pix_x");
-        val_y = tds.track_branch_obj<vector<float>>("pix_y");
-        val_z = tds.track_branch_obj<vector<float>>("pix_z");
-        val_xx = tds.track_branch_obj<vector<float>>("pix_xx");
-        val_xy = tds.track_branch_obj<vector<float>>("pix_xy");
-        val_yy = tds.track_branch_obj<vector<float>>("pix_yy");
-        val_yz = tds.track_branch_obj<vector<float>>("pix_yz");
-        val_zz = tds.track_branch_obj<vector<float>>("pix_zz");
-        val_zx = tds.track_branch_obj<vector<float>>("pix_zx");
-        val_radL = tds.track_branch_obj<vector<float>>("pix_radL");
-        val_bbxi = tds.track_branch_obj<vector<float>>("pix_bbxi");
-        val_trkIdx = tds.track_branch_obj<vector<vector<int>>>("pix_trkIdx");
-        val_seeIdx = tds.track_branch_obj<vector<vector<int>>>("pix_seeIdx");
-        val_simHitIdx = tds.track_branch_obj<vector<vector<int>>>("pix_simHitIdx");
-        val_chargeFraction = tds.track_branch_obj<vector<vector<float>>>("pix_chargeFraction");
-    }
-
-    size_t size() const { return val_subdet->get_value().size();}
-
-    const PixRecHit operator[](size_t) const;
-    iter begin() const { return iter(this, 0); }
-    iter end() const { return iter(this, size()); }
-};
-
-struct PixRecHit {
-    const PixRecHitCollection* collection;
-    const size_t idx;
-    PixRecHit(const PixRecHitCollection* collection, const size_t idx)
-      :collection(collection), idx(idx) { }
-
-    const unsigned short& subdet() const {return collection->val_subdet->get_value().at(idx);}
-    const unsigned short& layer() const {return collection->val_layer->get_value().at(idx);}
-    const unsigned short& ladder() const {return collection->val_ladder->get_value().at(idx);}
-    const unsigned int& detId() const {return collection->val_detId->get_value().at(idx);}
-    const unsigned short& simType() const {return collection->val_simType->get_value().at(idx);}
-    const float& x() const {return collection->val_x->get_value().at(idx);}
-    const float& y() const {return collection->val_y->get_value().at(idx);}
-    const float& z() const {return collection->val_z->get_value().at(idx);}
-    const float& xx() const {return collection->val_xx->get_value().at(idx);}
-    const float& xy() const {return collection->val_xy->get_value().at(idx);}
-    const float& yy() const {return collection->val_yy->get_value().at(idx);}
-    const float& yz() const {return collection->val_yz->get_value().at(idx);}
-    const float& zz() const {return collection->val_zz->get_value().at(idx);}
-    const float& zx() const {return collection->val_zx->get_value().at(idx);}
-    const float& radL() const {return collection->val_radL->get_value().at(idx);}
-    const float& bbxi() const {return collection->val_bbxi->get_value().at(idx);}
-    const vector<int>& trkIdx() const {return collection->val_trkIdx->get_value().at(idx);}
-    const vector<int>& seeIdx() const {return collection->val_seeIdx->get_value().at(idx);}
-    const vector<int>& simHitIdx() const {return collection->val_simHitIdx->get_value().at(idx);}
-    const vector<float>& chargeFraction() const {return collection->val_chargeFraction->get_value().at(idx);}
-};
-
-const PixRecHit PixRecHitCollection::iter::operator*() const {
-    return {collection, idx};
-}
-const PixRecHit PixRecHitCollection::operator[](size_t idx) const {
-    return {this, idx};
-}
-struct SimHit;
-
-class SimHitCollection {
-  public:
-    class iter {
-      public:
-        iter(const SimHitCollection* collection, size_t idx)
-          :collection(collection), idx(idx) { }
-        iter operator++() { ++idx; return *this; }
-        bool operator!=(const iter & other) { return idx != other.idx; }
-        const SimHit operator*() const;
-      private:
-        const SimHitCollection* collection;
-        size_t idx;
-    };
-
-    Value<vector<unsigned short>>* val_subdet;
-    Value<vector<unsigned short>>* val_layer;
-    Value<vector<unsigned int>>* val_detId;
-    Value<vector<float>>* val_x;
-    Value<vector<float>>* val_y;
-    Value<vector<float>>* val_z;
-    Value<vector<int>>* val_particle;
-    Value<vector<short>>* val_process;
-    Value<vector<float>>* val_eloss;
-    Value<vector<float>>* val_tof;
-    Value<vector<int>>* val_simTrkIdx;
-    Value<vector<vector<int>>>* val_hitIdx;
-    Value<vector<vector<int>>>* val_hitType;
-
-    SimHitCollection() { }
-
-    void init(TrackingDataSet& tds){
-        val_subdet = tds.track_branch_obj<vector<unsigned short>>("simhit_subdet");
-        val_layer = tds.track_branch_obj<vector<unsigned short>>("simhit_layer");
-        val_detId = tds.track_branch_obj<vector<unsigned int>>("simhit_detId");
-        val_x = tds.track_branch_obj<vector<float>>("simhit_x");
-        val_y = tds.track_branch_obj<vector<float>>("simhit_y");
-        val_z = tds.track_branch_obj<vector<float>>("simhit_z");
-        val_particle = tds.track_branch_obj<vector<int>>("simhit_particle");
-        val_process = tds.track_branch_obj<vector<short>>("simhit_process");
-        val_eloss = tds.track_branch_obj<vector<float>>("simhit_eloss");
-        val_tof = tds.track_branch_obj<vector<float>>("simhit_tof");
-        val_simTrkIdx = tds.track_branch_obj<vector<int>>("simhit_simTrkIdx");
-        val_hitIdx = tds.track_branch_obj<vector<vector<int>>>("simhit_hitIdx");
-        val_hitType = tds.track_branch_obj<vector<vector<int>>>("simhit_hitType");
-    }
-
-    size_t size() const { return val_subdet->get_value().size();}
-
-    const SimHit operator[](size_t) const;
-    iter begin() const { return iter(this, 0); }
-    iter end() const { return iter(this, size()); }
-};
-
-struct SimHit {
-    const SimHitCollection* collection;
-    const size_t idx;
-    SimHit(const SimHitCollection* collection, const size_t idx)
-      :collection(collection), idx(idx) { }
-
-    const unsigned short& subdet() const {return collection->val_subdet->get_value().at(idx);}
-    const unsigned short& layer() const {return collection->val_layer->get_value().at(idx);}
-    const unsigned int& detId() const {return collection->val_detId->get_value().at(idx);}
-    const float& x() const {return collection->val_x->get_value().at(idx);}
-    const float& y() const {return collection->val_y->get_value().at(idx);}
-    const float& z() const {return collection->val_z->get_value().at(idx);}
-    const int& particle() const {return collection->val_particle->get_value().at(idx);}
-    const short& process() const {return collection->val_process->get_value().at(idx);}
-    const float& eloss() const {return collection->val_eloss->get_value().at(idx);}
-    const float& tof() const {return collection->val_tof->get_value().at(idx);}
-    const int& simTrkIdx() const {return collection->val_simTrkIdx->get_value().at(idx);}
-    const vector<int>& hitIdx() const {return collection->val_hitIdx->get_value().at(idx);}
-    const vector<int>& hitType() const {return collection->val_hitType->get_value().at(idx);}
-};
-
-const SimHit SimHitCollection::iter::operator*() const {
-    return {collection, idx};
-}
-const SimHit SimHitCollection::operator[](size_t idx) const {
-    return {this, idx};
-}
 struct Seed;
 
 class SeedCollection {
@@ -236,31 +51,18 @@ class SeedCollection {
     Value<vector<unsigned int>>* val_nGlued;
     Value<vector<unsigned int>>* val_nStrip;
     Value<vector<unsigned int>>* val_algo;
-    Value<vector<unsigned int>>* val_algoOriginal;
     Value<vector<int>>* val_trkIdx;
     Value<vector<vector<float>>>* val_shareFrac;
     Value<vector<vector<int>>>* val_simTrkIdx;
-    Value<vector<vector<int>>>* val_hitIdx;
-    Value<vector<vector<int>>>* val_hitType;
     Value<vector<unsigned int>>* val_offset;
-    Value<vector<unsigned char>>* val_hitsMask;
-    Value<vector<int>>* val_subDet2;
-    Value<vector<float>>* val_dRz2;
-    Value<vector<float>>* val_dPhi2;
-    Value<vector<float>>* val_dRz2Pos;
-    Value<vector<float>>* val_dPhi2Pos;
-    Value<vector<int>>* val_subDet1;
-    Value<vector<float>>* val_dRz1;
-    Value<vector<float>>* val_dPhi1;
-    Value<vector<float>>* val_dRz1Pos;
-    Value<vector<float>>* val_dPhi1Pos;
-    Value<vector<float>>* val_superClusterEnergy;
-    Value<vector<float>>* val_superClusterEta;
-    Value<vector<float>>* val_superClusterPhi;
-    Value<vector<float>>* val_superClusterEt;
-    Value<vector<int>>* val_superClusterIdx;
-    Value<vector<unsigned int>>* val_ecalDriven;
-    Value<vector<unsigned int>>* val_trkDriven;
+    Value<vector<vector<int>>>* val_isBarrel;
+    Value<vector<vector<int>>>* val_layerOrDiskNr;
+    Value<vector<vector<int>>>* val_isValidPos;
+    Value<vector<vector<float>>>* val_dRZPos;
+    Value<vector<vector<float>>>* val_dPhiPos;
+    Value<vector<vector<int>>>* val_isValidNeg;
+    Value<vector<vector<float>>>* val_dRZNeg;
+    Value<vector<vector<float>>>* val_dPhiNeg;
 
     SeedCollection() { }
 
@@ -286,31 +88,18 @@ class SeedCollection {
         val_nGlued = tds.track_branch_obj<vector<unsigned int>>("see_nGlued");
         val_nStrip = tds.track_branch_obj<vector<unsigned int>>("see_nStrip");
         val_algo = tds.track_branch_obj<vector<unsigned int>>("see_algo");
-        val_algoOriginal = tds.track_branch_obj<vector<unsigned int>>("see_algoOriginal");
         val_trkIdx = tds.track_branch_obj<vector<int>>("see_trkIdx");
         val_shareFrac = tds.track_branch_obj<vector<vector<float>>>("see_shareFrac");
         val_simTrkIdx = tds.track_branch_obj<vector<vector<int>>>("see_simTrkIdx");
-        val_hitIdx = tds.track_branch_obj<vector<vector<int>>>("see_hitIdx");
-        val_hitType = tds.track_branch_obj<vector<vector<int>>>("see_hitType");
         val_offset = tds.track_branch_obj<vector<unsigned int>>("see_offset");
-        val_hitsMask = tds.track_branch_obj<vector<unsigned char>>("see_hitsMask");
-        val_subDet2 = tds.track_branch_obj<vector<int>>("see_subDet2");
-        val_dRz2 = tds.track_branch_obj<vector<float>>("see_dRz2");
-        val_dPhi2 = tds.track_branch_obj<vector<float>>("see_dPhi2");
-        val_dRz2Pos = tds.track_branch_obj<vector<float>>("see_dRz2Pos");
-        val_dPhi2Pos = tds.track_branch_obj<vector<float>>("see_dPhi2Pos");
-        val_subDet1 = tds.track_branch_obj<vector<int>>("see_subDet1");
-        val_dRz1 = tds.track_branch_obj<vector<float>>("see_dRz1");
-        val_dPhi1 = tds.track_branch_obj<vector<float>>("see_dPhi1");
-        val_dRz1Pos = tds.track_branch_obj<vector<float>>("see_dRz1Pos");
-        val_dPhi1Pos = tds.track_branch_obj<vector<float>>("see_dPhi1Pos");
-        val_superClusterEnergy = tds.track_branch_obj<vector<float>>("see_superClusterEnergy");
-        val_superClusterEta = tds.track_branch_obj<vector<float>>("see_superClusterEta");
-        val_superClusterPhi = tds.track_branch_obj<vector<float>>("see_superClusterPhi");
-        val_superClusterEt = tds.track_branch_obj<vector<float>>("see_superClusterEt");
-        val_superClusterIdx = tds.track_branch_obj<vector<int>>("see_superClusterIdx");
-        val_ecalDriven = tds.track_branch_obj<vector<unsigned int>>("see_ecalDriven");
-        val_trkDriven = tds.track_branch_obj<vector<unsigned int>>("see_trkDriven");
+        val_isBarrel = tds.track_branch_obj<vector<vector<int>>>("see_isBarrel");
+        val_layerOrDiskNr = tds.track_branch_obj<vector<vector<int>>>("see_layerOrDiskNr");
+        val_isValidPos = tds.track_branch_obj<vector<vector<int>>>("see_isValidPos");
+        val_dRZPos = tds.track_branch_obj<vector<vector<float>>>("see_dRZPos");
+        val_dPhiPos = tds.track_branch_obj<vector<vector<float>>>("see_dPhiPos");
+        val_isValidNeg = tds.track_branch_obj<vector<vector<int>>>("see_isValidNeg");
+        val_dRZNeg = tds.track_branch_obj<vector<vector<float>>>("see_dRZNeg");
+        val_dPhiNeg = tds.track_branch_obj<vector<vector<float>>>("see_dPhiNeg");
     }
 
     size_t size() const { return val_fitok->get_value().size();}
@@ -347,31 +136,18 @@ struct Seed {
     const unsigned int& nGlued() const {return collection->val_nGlued->get_value().at(idx);}
     const unsigned int& nStrip() const {return collection->val_nStrip->get_value().at(idx);}
     const unsigned int& algo() const {return collection->val_algo->get_value().at(idx);}
-    const unsigned int& algoOriginal() const {return collection->val_algoOriginal->get_value().at(idx);}
     const int& trkIdx() const {return collection->val_trkIdx->get_value().at(idx);}
     const vector<float>& shareFrac() const {return collection->val_shareFrac->get_value().at(idx);}
     const vector<int>& simTrkIdx() const {return collection->val_simTrkIdx->get_value().at(idx);}
-    const vector<int>& hitIdx() const {return collection->val_hitIdx->get_value().at(idx);}
-    const vector<int>& hitType() const {return collection->val_hitType->get_value().at(idx);}
     const unsigned int& offset() const {return collection->val_offset->get_value().at(idx);}
-    const unsigned char& hitsMask() const {return collection->val_hitsMask->get_value().at(idx);}
-    const int& subDet2() const {return collection->val_subDet2->get_value().at(idx);}
-    const float& dRz2() const {return collection->val_dRz2->get_value().at(idx);}
-    const float& dPhi2() const {return collection->val_dPhi2->get_value().at(idx);}
-    const float& dRz2Pos() const {return collection->val_dRz2Pos->get_value().at(idx);}
-    const float& dPhi2Pos() const {return collection->val_dPhi2Pos->get_value().at(idx);}
-    const int& subDet1() const {return collection->val_subDet1->get_value().at(idx);}
-    const float& dRz1() const {return collection->val_dRz1->get_value().at(idx);}
-    const float& dPhi1() const {return collection->val_dPhi1->get_value().at(idx);}
-    const float& dRz1Pos() const {return collection->val_dRz1Pos->get_value().at(idx);}
-    const float& dPhi1Pos() const {return collection->val_dPhi1Pos->get_value().at(idx);}
-    const float& superClusterEnergy() const {return collection->val_superClusterEnergy->get_value().at(idx);}
-    const float& superClusterEta() const {return collection->val_superClusterEta->get_value().at(idx);}
-    const float& superClusterPhi() const {return collection->val_superClusterPhi->get_value().at(idx);}
-    const float& superClusterEt() const {return collection->val_superClusterEt->get_value().at(idx);}
-    const int& superClusterIdx() const {return collection->val_superClusterIdx->get_value().at(idx);}
-    const unsigned int& ecalDriven() const {return collection->val_ecalDriven->get_value().at(idx);}
-    const unsigned int& trkDriven() const {return collection->val_trkDriven->get_value().at(idx);}
+    const vector<int>& isBarrel() const {return collection->val_isBarrel->get_value().at(idx);}
+    const vector<int>& layerOrDiskNr() const {return collection->val_layerOrDiskNr->get_value().at(idx);}
+    const vector<int>& isValidPos() const {return collection->val_isValidPos->get_value().at(idx);}
+    const vector<float>& dRZPos() const {return collection->val_dRZPos->get_value().at(idx);}
+    const vector<float>& dPhiPos() const {return collection->val_dPhiPos->get_value().at(idx);}
+    const vector<int>& isValidNeg() const {return collection->val_isValidNeg->get_value().at(idx);}
+    const vector<float>& dRZNeg() const {return collection->val_dRZNeg->get_value().at(idx);}
+    const vector<float>& dPhiNeg() const {return collection->val_dPhiNeg->get_value().at(idx);}
 };
 
 const Seed SeedCollection::iter::operator*() const {
@@ -445,8 +221,6 @@ class TrackCollection {
     Value<vector<float>>* val_vtxz;
     Value<vector<vector<float>>>* val_shareFrac;
     Value<vector<vector<int>>>* val_simTrkIdx;
-    Value<vector<vector<int>>>* val_hitIdx;
-    Value<vector<vector<int>>>* val_hitType;
     Value<vector<int>>* val_genIdx;
     Value<vector<float>>* val_genDR;
 
@@ -502,8 +276,6 @@ class TrackCollection {
         val_vtxz = tds.track_branch_obj<vector<float>>("trk_vtxz");
         val_shareFrac = tds.track_branch_obj<vector<vector<float>>>("trk_shareFrac");
         val_simTrkIdx = tds.track_branch_obj<vector<vector<int>>>("trk_simTrkIdx");
-        val_hitIdx = tds.track_branch_obj<vector<vector<int>>>("trk_hitIdx");
-        val_hitType = tds.track_branch_obj<vector<vector<int>>>("trk_hitType");
         val_genIdx = tds.track_branch_obj<vector<int>>("trk_genIdx");
         val_genDR = tds.track_branch_obj<vector<float>>("trk_genDR");
     }
@@ -570,8 +342,6 @@ struct Track {
     const float& vtxz() const {return collection->val_vtxz->get_value().at(idx);}
     const vector<float>& shareFrac() const {return collection->val_shareFrac->get_value().at(idx);}
     const vector<int>& simTrkIdx() const {return collection->val_simTrkIdx->get_value().at(idx);}
-    const vector<int>& hitIdx() const {return collection->val_hitIdx->get_value().at(idx);}
-    const vector<int>& hitType() const {return collection->val_hitType->get_value().at(idx);}
     const int& genIdx() const {return collection->val_genIdx->get_value().at(idx);}
     const float& genDR() const {return collection->val_genDR->get_value().at(idx);}
 };
@@ -625,7 +395,6 @@ class SimTrackCollection {
     Value<vector<vector<float>>>* val_shareFrac;
     Value<vector<int>>* val_parentVtxIdx;
     Value<vector<vector<int>>>* val_decayVtxIdx;
-    Value<vector<vector<int>>>* val_simHitIdx;
     Value<vector<vector<int>>>* val_seedIdx;
 
     SimTrackCollection() { }
@@ -658,7 +427,6 @@ class SimTrackCollection {
         val_shareFrac = tds.track_branch_obj<vector<vector<float>>>("sim_shareFrac");
         val_parentVtxIdx = tds.track_branch_obj<vector<int>>("sim_parentVtxIdx");
         val_decayVtxIdx = tds.track_branch_obj<vector<vector<int>>>("sim_decayVtxIdx");
-        val_simHitIdx = tds.track_branch_obj<vector<vector<int>>>("sim_simHitIdx");
         val_seedIdx = tds.track_branch_obj<vector<vector<int>>>("sim_seedIdx");
     }
 
@@ -702,7 +470,6 @@ struct SimTrack {
     const vector<float>& shareFrac() const {return collection->val_shareFrac->get_value().at(idx);}
     const int& parentVtxIdx() const {return collection->val_parentVtxIdx->get_value().at(idx);}
     const vector<int>& decayVtxIdx() const {return collection->val_decayVtxIdx->get_value().at(idx);}
-    const vector<int>& simHitIdx() const {return collection->val_simHitIdx->get_value().at(idx);}
     const vector<int>& seedIdx() const {return collection->val_seedIdx->get_value().at(idx);}
 };
 
@@ -712,97 +479,6 @@ const SimTrack SimTrackCollection::iter::operator*() const {
 const SimTrack SimTrackCollection::operator[](size_t idx) const {
     return {this, idx};
 }
-struct SuperCluster;
-
-class SuperClusterCollection {
-  public:
-    class iter {
-      public:
-        iter(const SuperClusterCollection* collection, size_t idx)
-          :collection(collection), idx(idx) { }
-        iter operator++() { ++idx; return *this; }
-        bool operator!=(const iter & other) { return idx != other.idx; }
-        const SuperCluster operator*() const;
-      private:
-        const SuperClusterCollection* collection;
-        size_t idx;
-    };
-
-    Value<vector<float>>* val_e;
-    Value<vector<float>>* val_px;
-    Value<vector<float>>* val_py;
-    Value<vector<float>>* val_pz;
-    Value<vector<float>>* val_x;
-    Value<vector<float>>* val_y;
-    Value<vector<float>>* val_z;
-    Value<vector<vector<int>>>* val_charge;
-    Value<vector<vector<int>>>* val_subDet1;
-    Value<vector<vector<int>>>* val_subDet2;
-    Value<vector<vector<float>>>* val_dRz1;
-    Value<vector<vector<float>>>* val_dPhi1;
-    Value<vector<vector<float>>>* val_dRz2;
-    Value<vector<vector<float>>>* val_dPhi2;
-    Value<vector<vector<int>>>* val_seedType;
-    Value<vector<vector<unsigned char>>>* val_hitsMask;
-
-    SuperClusterCollection() { }
-
-    void init(TrackingDataSet& tds){
-        val_e = tds.track_branch_obj<vector<float>>("scl_e");
-        val_px = tds.track_branch_obj<vector<float>>("scl_px");
-        val_py = tds.track_branch_obj<vector<float>>("scl_py");
-        val_pz = tds.track_branch_obj<vector<float>>("scl_pz");
-        val_x = tds.track_branch_obj<vector<float>>("scl_x");
-        val_y = tds.track_branch_obj<vector<float>>("scl_y");
-        val_z = tds.track_branch_obj<vector<float>>("scl_z");
-        val_charge = tds.track_branch_obj<vector<vector<int>>>("scl_charge");
-        val_subDet1 = tds.track_branch_obj<vector<vector<int>>>("scl_subDet1");
-        val_subDet2 = tds.track_branch_obj<vector<vector<int>>>("scl_subDet2");
-        val_dRz1 = tds.track_branch_obj<vector<vector<float>>>("scl_dRz1");
-        val_dPhi1 = tds.track_branch_obj<vector<vector<float>>>("scl_dPhi1");
-        val_dRz2 = tds.track_branch_obj<vector<vector<float>>>("scl_dRz2");
-        val_dPhi2 = tds.track_branch_obj<vector<vector<float>>>("scl_dPhi2");
-        val_seedType = tds.track_branch_obj<vector<vector<int>>>("scl_seedType");
-        val_hitsMask = tds.track_branch_obj<vector<vector<unsigned char>>>("scl_hitsMask");
-    }
-
-    size_t size() const { return val_e->get_value().size();}
-
-    const SuperCluster operator[](size_t) const;
-    iter begin() const { return iter(this, 0); }
-    iter end() const { return iter(this, size()); }
-};
-
-struct SuperCluster {
-    const SuperClusterCollection* collection;
-    const size_t idx;
-    SuperCluster(const SuperClusterCollection* collection, const size_t idx)
-      :collection(collection), idx(idx) { }
-
-    const float& e() const {return collection->val_e->get_value().at(idx);}
-    const float& px() const {return collection->val_px->get_value().at(idx);}
-    const float& py() const {return collection->val_py->get_value().at(idx);}
-    const float& pz() const {return collection->val_pz->get_value().at(idx);}
-    const float& x() const {return collection->val_x->get_value().at(idx);}
-    const float& y() const {return collection->val_y->get_value().at(idx);}
-    const float& z() const {return collection->val_z->get_value().at(idx);}
-    const vector<int>& charge() const {return collection->val_charge->get_value().at(idx);}
-    const vector<int>& subDet1() const {return collection->val_subDet1->get_value().at(idx);}
-    const vector<int>& subDet2() const {return collection->val_subDet2->get_value().at(idx);}
-    const vector<float>& dRz1() const {return collection->val_dRz1->get_value().at(idx);}
-    const vector<float>& dPhi1() const {return collection->val_dPhi1->get_value().at(idx);}
-    const vector<float>& dRz2() const {return collection->val_dRz2->get_value().at(idx);}
-    const vector<float>& dPhi2() const {return collection->val_dPhi2->get_value().at(idx);}
-    const vector<int>& seedType() const {return collection->val_seedType->get_value().at(idx);}
-    const vector<unsigned char>& hitsMask() const {return collection->val_hitsMask->get_value().at(idx);}
-};
-
-const SuperCluster SuperClusterCollection::iter::operator*() const {
-    return {collection, idx};
-}
-const SuperCluster SuperClusterCollection::operator[](size_t idx) const {
-    return {this, idx};
-}
 struct SimVertex;
 
 class SimVertexCollection {

+ 16 - 157
analysis/TrackingNtupleObjs.yaml

@@ -1,77 +1,3 @@
-PixRecHit:
-    treename_prefix: pix
-    fields:
-      - name: subdet
-        type: unsigned short
-      - name: layer
-        type: unsigned short
-      - name: ladder
-        type: unsigned short
-      - name: detId
-        type: unsigned int
-      - name: simType
-        type: unsigned short
-      - name: x
-        type: float
-      - name: y
-        type: float
-      - name: z
-        type: float
-      - name: xx
-        type: float
-      - name: xy
-        type: float
-      - name: yy
-        type: float
-      - name: yz
-        type: float
-      - name: zz
-        type: float
-      - name: zx
-        type: float
-      - name: radL
-        type: float
-      - name: bbxi
-        type: float
-      - name: trkIdx
-        type: vector<int>
-      - name: seeIdx
-        type: vector<int>
-      - name: simHitIdx
-        type: vector<int>
-      - name: chargeFraction
-        type: vector<float>
-
-SimHit:
-    treename_prefix: simhit
-    fields:
-      - name: subdet
-        type: unsigned short
-      - name: layer
-        type: unsigned short
-      - name: detId
-        type: unsigned int
-      - name: x
-        type: float
-      - name: y
-        type: float
-      - name: z
-        type: float
-      - name: particle
-        type: int
-      - name: process
-        type: short
-      - name: eloss
-        type: float
-      - name: tof
-        type: float
-      - name: simTrkIdx
-        type: int
-      - name: hitIdx
-        type: vector<int>
-      - name: hitType
-        type: vector<int>
-
 Seed:
     treename_prefix: see
     fields:
@@ -117,56 +43,30 @@ Seed:
         type: unsigned int
       - name: algo
         type: unsigned int
-      - name: algoOriginal
-        type: unsigned int
       - name: trkIdx
         type: int
       - name: shareFrac
         type: vector<float>
       - name: simTrkIdx
         type: vector<int>
-      - name: hitIdx
-        type: vector<int>
-      - name: hitType
-        type: vector<int>
       - name: offset
         type: unsigned int
-      - name: hitsMask
-        type: unsigned char
-      - name: subDet2
-        type: int
-      - name: dRz2
-        type: float
-      - name: dPhi2
-        type: float
-      - name: dRz2Pos
-        type: float
-      - name: dPhi2Pos
-        type: float
-      - name: subDet1
-        type: int
-      - name: dRz1
-        type: float
-      - name: dPhi1
-        type: float
-      - name: dRz1Pos
-        type: float
-      - name: dPhi1Pos
-        type: float
-      - name: superClusterEnergy
-        type: float
-      - name: superClusterEta
-        type: float
-      - name: superClusterPhi
-        type: float
-      - name: superClusterEt
-        type: float
-      - name: superClusterIdx
-        type: int
-      - name: ecalDriven
-        type: unsigned int
-      - name: trkDriven
-        type: unsigned int
+      - name: isBarrel
+        type: vector<int>
+      - name: layerOrDiskNr
+        type: vector<int>
+      - name: isValidPos
+        type: vector<int>
+      - name: dRZPos
+        type: vector<float>
+      - name: dPhiPos
+        type: vector<float>
+      - name: isValidNeg
+        type: vector<int>
+      - name: dRZNeg
+        type: vector<float>
+      - name: dPhiNeg
+        type: vector<float>
 
 Track:
     treename_prefix: trk
@@ -269,10 +169,6 @@ Track:
         type: vector<float>
       - name: simTrkIdx
         type: vector<int>
-      - name: hitIdx
-        type: vector<int>
-      - name: hitType
-        type: vector<int>
       - name: genIdx
         type: int
       - name: genDR
@@ -335,46 +231,9 @@ SimTrack:
         type: int
       - name: decayVtxIdx
         type: vector<int>
-      - name: simHitIdx
-        type: vector<int>
       - name: seedIdx
         type: vector<int>
 
-SuperCluster:
-    treename_prefix: scl
-    fields:
-      - name: e
-        type: float
-      - name: px
-        type: float
-      - name: py
-        type: float
-      - name: pz
-        type: float
-      - name: x
-        type: float
-      - name: y
-        type: float
-      - name: z
-        type: float
-      - name: charge
-        type: vector<int>
-      - name: subDet1
-        type: vector<int>
-      - name: subDet2
-        type: vector<int>
-      - name: dRz1
-        type: vector<float>
-      - name: dPhi1
-        type: vector<float>
-      - name: dRz2
-        type: vector<float>
-      - name: dPhi2
-        type: vector<float>
-      - name: seedType
-        type: vector<int>
-      - name: hitsMask
-        type: vector<unsigned char>
 
 SimVertex:
     treename_prefix: simvtx

+ 45 - 41
analysis/config.yaml

@@ -1,49 +1,53 @@
-max-events: 0
+#max-events: 3000
 debug: false
 
-output-file: old_seeding.root
+output-file: new_seeding.root
 source-files:
-    - filename: data/old_seeding/trackingNtuple_1.root
-    - filename: data/old_seeding/trackingNtuple_2.root
-    - filename: data/old_seeding/trackingNtuple_3.root
-    - filename: data/old_seeding/trackingNtuple_4.root
-    - filename: data/old_seeding/trackingNtuple_5.root
-    - filename: data/old_seeding/trackingNtuple_6.root
-    - filename: data/old_seeding/trackingNtuple_7.root
-    - filename: data/old_seeding/trackingNtuple_8.root
-    - filename: data/old_seeding/trackingNtuple_9.root
-    - filename: data/old_seeding/trackingNtuple_10.root
-    - filename: data/old_seeding/trackingNtuple_11.root
-    - filename: data/old_seeding/trackingNtuple_12.root
-    - filename: data/old_seeding/trackingNtuple_13.root
-    - filename: data/old_seeding/trackingNtuple_14.root
-    - filename: data/old_seeding/trackingNtuple_15.root
-    - filename: data/old_seeding/trackingNtuple_16.root
-    - filename: data/old_seeding/trackingNtuple_17.root
-    - filename: data/old_seeding/trackingNtuple_18.root
-    - filename: data/old_seeding/trackingNtuple_19.root
+    - filename: data/new_trees/trackingNtuple_1.root
 
-#output-file: new_seeding.root
+# output-file: old_seeding2.root
+# source-files:
+#     - filename: data/old_seeding2/trackingNtuple_1.root
+#     - filename: data/old_seeding2/trackingNtuple_2.root
+#     - filename: data/old_seeding2/trackingNtuple_3.root
+#     - filename: data/old_seeding2/trackingNtuple_4.root
+#     - filename: data/old_seeding2/trackingNtuple_5.root
+#     - filename: data/old_seeding2/trackingNtuple_6.root
+#     - filename: data/old_seeding2/trackingNtuple_7.root
+#     - filename: data/old_seeding2/trackingNtuple_8.root
+#     - filename: data/old_seeding2/trackingNtuple_9.root
+#     - filename: data/old_seeding2/trackingNtuple_10.root
+#     - filename: data/old_seeding2/trackingNtuple_11.root
+#     - filename: data/old_seeding2/trackingNtuple_12.root
+#     - filename: data/old_seeding2/trackingNtuple_13.root
+#     - filename: data/old_seeding2/trackingNtuple_14.root
+#     - filename: data/old_seeding2/trackingNtuple_15.root
+#     - filename: data/old_seeding2/trackingNtuple_16.root
+#     - filename: data/old_seeding2/trackingNtuple_17.root
+#     - filename: data/old_seeding2/trackingNtuple_18.root
+#     - filename: data/old_seeding2/trackingNtuple_19.root
+
+#output-file: new_seeding2.root
 #source-files:
-#    - filename: data/new_seeding/trackingNtuple_1.root
-#    - filename: data/new_seeding/trackingNtuple_2.root
-#    - filename: data/new_seeding/trackingNtuple_3.root
-#    - filename: data/new_seeding/trackingNtuple_4.root
-#    - filename: data/new_seeding/trackingNtuple_5.root
-#    - filename: data/new_seeding/trackingNtuple_6.root
-#    - filename: data/new_seeding/trackingNtuple_7.root
-#    - filename: data/new_seeding/trackingNtuple_8.root
-#    - filename: data/new_seeding/trackingNtuple_9.root
-#    - filename: data/new_seeding/trackingNtuple_10.root
-#    - filename: data/new_seeding/trackingNtuple_11.root
-#    - filename: data/new_seeding/trackingNtuple_12.root
-#    - filename: data/new_seeding/trackingNtuple_13.root
-#    - filename: data/new_seeding/trackingNtuple_14.root
-#    - filename: data/new_seeding/trackingNtuple_15.root
-#    - filename: data/new_seeding/trackingNtuple_16.root
-#    - filename: data/new_seeding/trackingNtuple_17.root
-#    - filename: data/new_seeding/trackingNtuple_18.root
-#    - filename: data/new_seeding/trackingNtuple_19.root
+#    - filename: data/new_seeding2/trackingNtuple_1.root
+#    - filename: data/new_seeding2/trackingNtuple_2.root
+#    - filename: data/new_seeding2/trackingNtuple_3.root
+#    - filename: data/new_seeding2/trackingNtuple_4.root
+#    - filename: data/new_seeding2/trackingNtuple_5.root
+#    - filename: data/new_seeding2/trackingNtuple_6.root
+#    - filename: data/new_seeding2/trackingNtuple_7.root
+#    - filename: data/new_seeding2/trackingNtuple_8.root
+#    - filename: data/new_seeding2/trackingNtuple_9.root
+#    - filename: data/new_seeding2/trackingNtuple_10.root
+#    - filename: data/new_seeding2/trackingNtuple_11.root
+#    - filename: data/new_seeding2/trackingNtuple_12.root
+#    - filename: data/new_seeding2/trackingNtuple_13.root
+#    - filename: data/new_seeding2/trackingNtuple_14.root
+#    - filename: data/new_seeding2/trackingNtuple_15.root
+#    - filename: data/new_seeding2/trackingNtuple_16.root
+#    - filename: data/new_seeding2/trackingNtuple_17.root
+#    - filename: data/new_seeding2/trackingNtuple_18.root
+#    - filename: data/new_seeding2/trackingNtuple_19.root
 
 hist-params:
 

+ 47 - 153
analysis/tracking_eff.cpp

@@ -21,15 +21,6 @@ using namespace std;
 using namespace fv;
 using namespace fv::root;
 
-vector<string> seedTypes =
-    {"initialStepSeeds",
-     "highPtTripletStepSeeds",
-     "mixedTripletStepSeeds",
-     "pixelLessStepSeeds",
-     "tripletElectronSeeds",
-     "pixelPairElectronSeeds",
-     "stripPairElectronSeeds"};
-
 enum class HitType {
   Pixel = 0,
   Strip = 1,
@@ -41,22 +32,14 @@ enum class HitType {
 
 SeedCollection seeds;
 SimTrackCollection sim_tracks;
-SimHitCollection sim_hits;
 SimVertexCollection sim_vertices;
 TrackCollection gsf_tracks;
-PixRecHitCollection pixrec_hits;
 
 void register_objects(TrackingDataSet& tds){
     seeds.init(tds);
     sim_tracks.init(tds);
-    sim_hits.init(tds);
     sim_vertices.init(tds);
     gsf_tracks.init(tds);
-    pixrec_hits.init(tds);
-}
-
-float rad(const float& x, const float& y) {
-    return sqrt(x*x + y*y);
 }
 
 struct {
@@ -115,21 +98,13 @@ void run_analysis(const vector<fv::util::DataFileDescriptor>& dfds, const string
     };
 
     // Indices of prompt-ish sim electrons that have a matched gsftrack
-    function<bool(size_t)> with_track = [](const size_t& e_idx) {
-        return sim_tracks[e_idx].trkIdx().size() > 0;
-    };
+    function<bool(size_t)> with_track = [](const size_t& e_idx) { return sim_tracks[e_idx].trkIdx().size() > 0; };
 
-    function<float(size_t)> sim_pt = [](const size_t& sim_idx) {
-        return sim_tracks[sim_idx].pt();
-    };
+    function<float(size_t)> sim_pt = [](const size_t& sim_idx) { return sim_tracks[sim_idx].pt(); };
 
-    function<float(size_t)> sim_eta = [](const size_t& sim_idx) {
-        return sim_tracks[sim_idx].eta();
-    };
+    function<float(size_t)> sim_eta = [](const size_t& sim_idx) { return sim_tracks[sim_idx].eta(); };
 
-    function<float(size_t)> sim_phi = [](const size_t& sim_idx) {
-        return sim_tracks[sim_idx].phi();
-    };
+    function<float(size_t)> sim_phi = [](const size_t& sim_idx) { return sim_tracks[sim_idx].phi(); };
 
     float pt_cut = 20; // GeV
     float eta_cut = 2.4;
@@ -169,8 +144,7 @@ void run_analysis(const vector<fv::util::DataFileDescriptor>& dfds, const string
         FUNC(([](){
             vector<size_t> idxs;
             for (const auto& seed : seeds) {
-                if (seed.ecalDriven())
-                    idxs.push_back(seed.idx);
+                idxs.push_back(seed.idx);
             }
             return idxs;
         })));
@@ -182,25 +156,15 @@ void run_analysis(const vector<fv::util::DataFileDescriptor>& dfds, const string
         return false;
     };
 
-    function<float(size_t)> seed_pt = [](const size_t& seed_idx) {
-        return seeds[seed_idx].pt();
-    };
+    function<float(size_t)> seed_pt = [](const size_t& seed_idx) { return seeds[seed_idx].pt(); };
 
-    function<float(size_t)> seed_eta = [](const size_t& seed_idx) {
-        return seeds[seed_idx].eta();
-    };
+    function<float(size_t)> seed_eta = [](const size_t& seed_idx) { return seeds[seed_idx].eta(); };
 
-    function<float(size_t)> seed_phi = [](const size_t& seed_idx) {
-        return seeds[seed_idx].phi();
-    };
+    function<float(size_t)> seed_phi = [](const size_t& seed_idx) { return seeds[seed_idx].phi(); };
 
-    function<bool(size_t)> seed_in_pt = [pt_cut](size_t seed_idx) {
-        return seeds[seed_idx].pt() > pt_cut;
-    };
+    function<bool(size_t)> seed_in_pt = [pt_cut](size_t seed_idx) { return seeds[seed_idx].pt() > pt_cut; };
 
-    function<bool(size_t)> seed_in_eta = [eta_cut](size_t seed_idx) {
-        return abs(seeds[seed_idx].eta()) < eta_cut;
-    };
+    function<bool(size_t)> seed_in_eta = [eta_cut](size_t seed_idx) { return abs(seeds[seed_idx].eta()) < eta_cut; };
 
     function<bool(size_t)> seed_in_eta_and_pt = [eta_cut, pt_cut](size_t seed_idx) {
         return abs(seeds[seed_idx].eta()) < eta_cut and
@@ -208,23 +172,22 @@ void run_analysis(const vector<fv::util::DataFileDescriptor>& dfds, const string
     };
 
     tds.register_container<EfficiencyContainer<size_t>>("seed_pur_v_pt",
-        ecal_seeds, TH1Params::lookup("pur_v_pt"), &seed_in_eta, &seed_with_sim_electron, &seed_pt);
+        ecal_seeds, TH1Params::lookup("pur_v_pt"), &seed_in_eta, &seed_with_sim_electron, &seed_pt, true);
 
     tds.register_container<EfficiencyContainer<size_t>>("seed_pur_v_eta",
-        ecal_seeds, TH1Params::lookup("pur_v_eta"), &seed_in_pt, &seed_with_sim_electron, &seed_eta);
+        ecal_seeds, TH1Params::lookup("pur_v_eta"), &seed_in_pt, &seed_with_sim_electron, &seed_eta, true);
 
     tds.register_container<EfficiencyContainer<size_t>>("seed_pur_v_phi",
-        ecal_seeds, TH1Params::lookup("pur_v_phi"), &seed_in_eta_and_pt, &seed_with_sim_electron, &seed_phi);
+        ecal_seeds, TH1Params::lookup("pur_v_phi"), &seed_in_eta_and_pt, &seed_with_sim_electron, &seed_phi, true);
 
 
-    // Indices of ecal-driven gsf-tracks
+    // Indices of gsf-tracks from ECAL-Driven Seeds
     auto ecal_tracks = func_value<vector<size_t>>("ecal_tracks",
-        FUNC(([](){
+        FUNC(([]() {
             vector<size_t> idxs;
-            for (const auto& track : gsf_tracks) {
-                const auto& seed = seeds[track.seedIdx()];
-                if (seed.ecalDriven())
-                    idxs.push_back(track.idx);
+            for (const auto& seed : seeds) {
+                const int& trk_idx = seed.trkIdx();
+                if (trk_idx >= 0) idxs.push_back(trk_idx);
             }
             return idxs;
         })));
@@ -236,120 +199,51 @@ void run_analysis(const vector<fv::util::DataFileDescriptor>& dfds, const string
         return false;
     };
 
-    function<float(size_t)> track_pt = [](const size_t& track_idx) {
-        return gsf_tracks[track_idx].pt();
-    };
+    function<float(size_t)> track_pt = [](const size_t& track_idx) { return gsf_tracks[track_idx].pt(); };
+    function<float(size_t)> track_eta = [](const size_t& track_idx) { return gsf_tracks[track_idx].eta(); };
+    function<float(size_t)> track_phi = [](const size_t& track_idx) { return gsf_tracks[track_idx].phi(); };
 
-    function<float(size_t)> track_eta = [](const size_t& track_idx) {
-        return gsf_tracks[track_idx].eta();
-    };
+    function<bool(size_t)> track_in_pt = [pt_cut](size_t track_idx) { return gsf_tracks[track_idx].pt() > pt_cut; };
 
-    function<float(size_t)> track_phi = [](const size_t& track_idx) {
-        return gsf_tracks[track_idx].phi();
-    };
-
-    function<bool(size_t)> track_in_pt = [pt_cut](size_t track_idx) {
-        return gsf_tracks[track_idx].pt() > pt_cut;
-    };
-
-    function<bool(size_t)> track_in_eta = [eta_cut](size_t track_idx) {
-        return abs(gsf_tracks[track_idx].eta()) < eta_cut;
-    };
+    function<bool(size_t)> track_in_eta = [eta_cut](size_t track_idx) { return abs(gsf_tracks[track_idx].eta()) < eta_cut; };
 
     function<bool(size_t)> track_in_eta_and_pt = [eta_cut, pt_cut](size_t track_idx) {
-        return abs(gsf_tracks[track_idx].eta()) < eta_cut and
-               gsf_tracks[track_idx].pt() > pt_cut;
+        return abs(gsf_tracks[track_idx].eta()) < eta_cut and gsf_tracks[track_idx].pt() > pt_cut;
     };
 
     tds.register_container<EfficiencyContainer<size_t>>("track_pur_v_pt",
-        ecal_tracks, TH1Params::lookup("pur_v_pt"), &track_in_eta, &gsf_track_with_sim_electron, &track_pt);
+        ecal_tracks, TH1Params::lookup("pur_v_pt"), &track_in_eta, &gsf_track_with_sim_electron, &track_pt, true);
 
     tds.register_container<EfficiencyContainer<size_t>>("track_pur_v_eta",
-        ecal_tracks, TH1Params::lookup("pur_v_eta"), &track_in_pt, &gsf_track_with_sim_electron, &track_eta);
+        ecal_tracks, TH1Params::lookup("pur_v_eta"), &track_in_pt, &gsf_track_with_sim_electron, &track_eta, true);
 
     tds.register_container<EfficiencyContainer<size_t>>("track_pur_v_phi",
-        ecal_tracks, TH1Params::lookup("pur_v_phi"), &track_in_eta_and_pt, &gsf_track_with_sim_electron, &track_phi);
-
-
-    auto simpixlay_v_eta = func_value<std::pair<vector<float>,vector<float>>>("sim_pixlay_v_eta",
-        FUNC(([](){
-            vector<float> etas;
-            vector<float> nLays;
-            for(const auto& sim_track : sim_tracks) {
-                if(sim_track.pt() > 20 and is_good_sim(sim_track.idx)) {
-                    bool hasLHit[] = {false, false, false, false,  // <- 4 barrel layers
-                                      false, false, false};        // <- 3 fwd layers
-                    for(const auto& sim_hit_idx : sim_track.simHitIdx()) {
-                        const auto& sim_hit = sim_hits[sim_hit_idx];
-                        if (sim_hit.subdet() == 1) hasLHit[sim_hit.layer()-1] = true;
-                        if (sim_hit.subdet() == 2) hasLHit[sim_hit.layer()+3] = true;
+        ecal_tracks, TH1Params::lookup("pur_v_phi"), &track_in_eta_and_pt, &gsf_track_with_sim_electron, &track_phi, true);
+
+    auto residuals_rPhi = func<vector<float>(int, int, int)>("residuals_rPhi",
+        FUNC(([](int detSel, int layerSel, int hitSel) {
+        std::vector<float> residuals;
+        for (const Seed& seed : seeds) {
+            int nHits = seed.isBarrel().size();
+            for (int idx_hit=0; idx_hit<nHits; idx_hit++) {
+                if ((detSel==0 or detSel==seed.isBarrel()[idx_hit]) and
+                    (layerSel==0 or layerSel==seed.layerOrDiskNr()[idx_hit]) and
+                    (hitSel==0 or hitSel==(idx_hit+1))) {
+                    if (seed.isValidPos()[idx_hit]) {
+                        residuals.push_back(seed.dRZPos()[idx_hit]);
                     }
-                    int layers = 0;
-                    for(size_t i=0; i<7; i++) {
-                        if (hasLHit[i]) layers++;
+                    if (seed.isValidNeg()[idx_hit]) {
+                        residuals.push_back(seed.dRZNeg()[idx_hit]);
                     }
-                    etas.push_back(sim_track.eta());
-                    nLays.push_back(layers);
                 }
             }
-            return std::make_pair(etas, nLays);
-        })));
-
-    auto recpixlay_v_eta = func_value<std::pair<vector<float>,vector<float>>>("recpixlay_v_eta",
-        FUNC(([](){
-            vector<float> etas;
-            vector<float> nLays;
-            for(const auto& gsf_track : gsf_tracks) {
-                if(gsf_track.pt() > 20) {
-                    bool hasLHit[] = {false, false, false, false,  // <- 4 barrel layers
-                                      false, false, false};        // <- 3 fwd layers
-                    const auto& hitIdx = gsf_track.hitIdx();
-                    const auto& hitType = gsf_track.hitType();
-                    size_t nHits = hitIdx.size();
-                    for(size_t i=0; i<nHits; i++) {
-                        if (HitType(hitType[i]) != HitType::Pixel) continue;
-                        const auto& pixrec_hit = pixrec_hits[hitIdx[i]];
-                        if (pixrec_hit.subdet() == 1) hasLHit[pixrec_hit.layer()-1] = true;
-                        if (pixrec_hit.subdet() == 2) hasLHit[pixrec_hit.layer()+3] = true;
-                    }
-                    int layers = 0;
-                    for(size_t i=0; i<7; i++) {
-                        if (hasLHit[i]) layers++;
-                    }
-                    etas.push_back(gsf_track.eta());
-                    nLays.push_back(layers);
-                }
-            }
-            return std::make_pair(etas, nLays);
-        })));
-
+        }
+        return residuals;
+    })));
 
-    tds.register_container<ContainerTH2Many<float>>("simpixlay_v_eta", simpixlay_v_eta, "simpixlay_v_eta",
-        TH2Params::lookup("n_hit_v_eta"));
-    tds.register_container<ContainerTH2Many<float>>("recpixlay_v_eta", recpixlay_v_eta, "recpixlay_v_eta",
-        TH2Params::lookup("n_hit_v_eta"));
-
-//    auto simtrack_hits = func_value<int>("simtrack_hits",
-//        FUNC(([](){
-//            vector<float> etas;
-//            vector<float> nhits;
-//            for(const auto& sim_track : sim_tracks) {
-//                if(sim_track.pt() < 20 or !is_good_sim(sim_track.idx)) continue;
-//                cout << "New Track: nPixel=" << sim_track.nPixel() << endl;
-//                for(const auto& sim_hit_idx : sim_track.simHitIdx()) {
-//                    const auto& sim_hit = sim_hits[sim_hit_idx];
-//                    if (sim_hit.subdet() > 2) continue;
-//                    cout << "  Hit: " << sim_hit_idx << endl
-//                         << "    pos: " << sim_hit.x() << " " << sim_hit.y() << " " << sim_hit.z() << endl
-//                         << "    subdet: " << sim_hit.subdet()  << endl
-//                         << "    layler: " << sim_hit.layer() << endl;
-//                }
-//            }
-//            return 0;
-//        })));
-//
-//    ofstream out("blah.txt");
-//    tds.register_container<Printer<int>>("blah", simtrack_hits, &out);
+    tds.register_container<ContainerTH1Many<float>>("residuals_all",
+                                                    tup_apply(residuals_rPhi, fv::tuple(constant("BPIX", 1), constant("ALL", 0), constant("ALL", 0))),
+                                                    TH1Params::lookup("residuals_all"));
 
     tds.process(silent);
     tds.save_all();

+ 0 - 863
analysis/tracking_validation.cpp

@@ -1,863 +0,0 @@
-#include <iostream>
-#include <vector>
-#include <map>
-#include <utility>
-#include <numeric>
-#include <limits>
-#include <TSystem.h>
-
-#include "filval/filval.hpp"
-#include "filval/root/filval.hpp"
-
-#include <boost/range/combine.hpp>
-#include <boost/format.hpp>
-
-#include "analysis/TrackingNtuple.h"
-#include "analysis/TrackingNtupleObjs.hpp"
-#include "analysis/common.hpp"
-
-using namespace std;
-using namespace fv;
-using namespace fv::root;
-
-typedef std::pair<std::vector<float>,std::vector<float>> pair_vec;
-
-#define HIT_TYPE_PIXEL 0
-#define HIT_TYPE_GLUED 1
-#define HIT_TYPE_STRIP 2
-
-enum PixSubDet{
-    Void = 0,
-    Barrel = 1,
-    EndCap = 2
-};
-
-struct PixDetElem{
-    PixSubDet subdet;
-    unsigned char layer;
-
-    PixDetElem():subdet(PixSubDet::Void), layer(0) {}
-
-    PixDetElem(const PixSubDet& subdet, const unsigned char& layer){
-        this->subdet = subdet;
-        this->layer = layer;
-    }
-
-    template<typename T>
-    bool contains(const T& obj) const{
-        return obj.subdet() == subdet && obj.layer() == layer;
-    }
-
-    bool contains(const PixSubDet& subdet, const unsigned char& layer) const{
-        return subdet == this->subdet && layer == this->layer;
-    }
-};
-
-std::map<PixSubDet,string> subdet_names = {{PixSubDet::Barrel, "BPIX"}, {PixSubDet::EndCap, "FPIX"}};
-
-
-typedef std::tuple<PixRecHit, SimHit> HitPair;
-
-vector<string> seedTypes =
-    {"initialStepSeeds",
-     "highPtTripletStepSeeds",
-     "mixedTripletStepSeeds",
-     "pixelLessStepSeeds",
-     "tripletElectronSeeds",
-     "pixelPairElectronSeeds",
-     "stripPairElectronSeeds"};
-
-SuperClusterCollection super_clusters;
-SeedCollection seeds;
-PixRecHitCollection pixrec_hits;
-TrackCollection tracks;
-SimHitCollection sim_hits;
-SimTrackCollection sim_tracks;
-
-void setup_hit_pair_functions(){
-
-    func<pair_vec(vector<HitPair>)>("calc_dphi_v_eta",
-        FUNC(([](const vector<HitPair>& hit_pairs){
-            vector<float> dphis;
-            vector<float> etas;
-            for(auto hit_pair : hit_pairs){
-                auto& pixrec_hit = std::get<PixRecHit>(hit_pair);
-                auto& sim_hit = std::get<SimHit>(hit_pair);
-                dphis.push_back(atan2(sim_hit.x(), sim_hit.y()) - atan2(pixrec_hit.x(), pixrec_hit.y()));
-                etas.push_back(pseudorapidity(pixrec_hit));
-            }
-            return std::make_pair(etas, dphis);
-        })));
-
-    func<pair_vec(vector<HitPair>)>("calc_dr_v_eta",
-        FUNC(([](const vector<HitPair>& hit_pairs){
-            vector<float> drs;
-            vector<float> etas;
-            for(auto hit_pair : hit_pairs){
-                auto& pixrec_hit = std::get<PixRecHit>(hit_pair);
-                auto& sim_hit = std::get<SimHit>(hit_pair);
-                drs.push_back(displacement(pixrec_hit, sim_hit));
-                etas.push_back(pseudorapidity(pixrec_hit));
-            }
-            return std::make_pair(etas, drs);
-        })));
-
-    func<pair_vec(vector<HitPair>)>("calc_dz_v_eta",
-        FUNC(([](const vector<HitPair>& hit_pairs){
-            vector<float> dzs;
-            vector<float> etas;
-            for(auto hit_pair : hit_pairs){
-                auto& pixrec_hit = std::get<PixRecHit>(hit_pair);
-                auto& sim_hit = std::get<SimHit>(hit_pair);
-                dzs.push_back(sim_hit.z() - pixrec_hit.z());
-                etas.push_back(pseudorapidity(pixrec_hit));
-            }
-            return std::make_pair(etas, dzs);
-        })));
-
-    func<pair_vec(vector<HitPair>)>("calc_drho_v_eta",
-        FUNC(([](const vector<HitPair>& hit_pairs){
-            vector<float> drhos;
-            vector<float> etas;
-            for(auto hit_pair : hit_pairs){
-                auto& pixrec_hit = std::get<PixRecHit>(hit_pair);
-                auto& sim_hit = std::get<SimHit>(hit_pair);
-                drhos.push_back(rho(sim_hit) - rho(pixrec_hit));
-                etas.push_back(pseudorapidity(pixrec_hit));
-            }
-            return std::make_pair(etas, drhos);
-        })));
-}
-
-void register_objects(TrackingDataSet& tds){
-    super_clusters.init(tds);
-    seeds.init(tds);
-    pixrec_hits.init(tds);
-    tracks.init(tds);
-    sim_hits.init(tds);
-    sim_tracks.init(tds);
-}
-
-void setup_skipped_layer_hit_pairs(TrackingDataSet& tds){
-
-    /* Finds SimHit/RecHit pairs
-     */
-    auto find_matched_nth_hit_in_layer_with_skip =
-    func<vector<HitPair>(PixDetElem, int, bool)>("find_matched_nth_hit_in_layer_with_skip",
-        FUNC(([](const PixDetElem&& pixdet,
-                 const unsigned int&& skip,
-                 const bool&& first){
-            vector<HitPair> matched_hits;
-            for(auto trk : tracks){ // loop over all tracks
-                auto seed = seeds[trk.seedIdx()];
-
-                // Require seed's source algorithm is one of those in seedTypes
-                if(seed.algoOriginal() < 0 || seed.algoOriginal() >= seedTypes.size()) continue;
-                // Require seed w/ at least 2 hits
-                if(seed.hitIdx().size() < 2) continue;
-                // take only pixel hits for now
-                if(seed.hitType()[0] != HIT_TYPE_PIXEL || seed.hitType()[1] != HIT_TYPE_PIXEL)   continue;
-
-                auto rec_hit1 = pixrec_hits[seed.hitIdx()[0]];
-                auto rec_hit2 = pixrec_hits[seed.hitIdx()[1]];
-                if(first){ // Looking at first hit in the pair
-                    if(pixdet.contains(rec_hit1) && pixdet.contains((PixSubDet)rec_hit2.subdet(), rec_hit2.layer()-1-skip)){
-                        // We have the RecHit we want to work with, now find a properly* matched SimHit
-                        if(rec_hit1.simHitIdx().size() == 0) continue; // if rechit is matched to no simhits, give up.
-                        if(trk.simTrkIdx().size() == 0) continue; // if track is matched to no simtracks, give up.
-                        const int &simTrkIdx = trk.simTrkIdx()[0];  // get first matched track
-                        for(const int& simHitIdx : sim_tracks[simTrkIdx].simHitIdx()){ // loop over SimHits from SimTrack
-                            if(simHitIdx == rec_hit1.simHitIdx()[0]) // take first matched simhit (should be the closest one)
-                                matched_hits.push_back({rec_hit1, sim_hits[rec_hit1.simHitIdx()[0]]});
-                        }
-                    }
-                }else{  // Looking at second hit in the pair
-                    if(pixdet.contains(rec_hit2) && pixdet.contains((PixSubDet)rec_hit1.subdet(), rec_hit2.layer()+1+skip)){
-                        // We have the RecHit we want to work with, now find a properly* matched SimHit
-                        if(rec_hit2.simHitIdx().size() == 0) continue; // if rechit is matched to no simhits, give up.
-                        if(trk.simTrkIdx().size() == 0) continue; // if track is matched to no simtracks, give up.
-                        const int &simTrkIdx = trk.simTrkIdx()[0];  // get first matched track
-                        for(const int& simHitIdx : sim_tracks[simTrkIdx].simHitIdx()){ // loop over SimHits from SimTrack
-                            if(simHitIdx == rec_hit1.simHitIdx()[0]) // take first matched simhit (should be the closest one)
-                                matched_hits.push_back({rec_hit2, sim_hits[rec_hit2.simHitIdx()[0]]});
-                        }
-                    }
-                }
-            }
-            return matched_hits;
-        })));
-
-    auto BPIX_L1 = constant("BPIX_L1", PixDetElem(PixSubDet::Barrel, 1));
-    auto BPIX_L2 = constant("BPIX_L2", PixDetElem(PixSubDet::Barrel, 2));
-    auto FPIX_L1 = constant("FPIX_L1", PixDetElem(PixSubDet::EndCap, 1));
-    auto FPIX_L2 = constant("FPIX_L2", PixDetElem(PixSubDet::EndCap, 2));
-
-    auto skip_zero = constant("skip_zero", 0);
-    auto skip_one  = constant("skip_one", 1);
-
-    auto first = constant("first", true);
-    auto second = constant("second", false);
-
-
-    // First hit on 1st/2nd bpix layers and second hit in 2nd/3rd
-    auto first_hits_in_B1_skip_zero = fv::tup_apply(find_matched_nth_hit_in_layer_with_skip,
-            fv::tuple(BPIX_L1, skip_zero, first), "first_hits_in_B1_skip_zero");
-    auto first_hits_in_B2_skip_zero = fv::tup_apply(find_matched_nth_hit_in_layer_with_skip,
-            fv::tuple(BPIX_L2, skip_zero, first), "first_hits_in_B2_skip_zero");
-
-
-    // First hit on 1st/2nd fpix layers and second hit in 2nd/3rd
-    auto first_hits_in_F1_skip_zero = fv::tup_apply(find_matched_nth_hit_in_layer_with_skip,
-            fv::tuple(FPIX_L1, skip_zero, first), "first_hits_in_F1_skip_zero");
-    auto first_hits_in_F2_skip_zero = fv::tup_apply(find_matched_nth_hit_in_layer_with_skip,
-            fv::tuple(FPIX_L2, skip_zero, first), "first_hits_in_F2_skip_zero");
-
-    // First hit on 1st/2nd fpix layers and second hit in 3rd/4th
-    auto first_hits_in_B1_skip_one = fv::tup_apply(find_matched_nth_hit_in_layer_with_skip,
-            fv::tuple(BPIX_L1, skip_one, first), "first_hits_in_B1_skip_one");
-    auto first_hits_in_B2_skip_one = fv::tup_apply(find_matched_nth_hit_in_layer_with_skip,
-            fv::tuple(BPIX_L2, skip_one, first), "first_hits_in_B2_skip_one");
-
-
-    // First hit on 1st fpix layer and second hit in 3rd layer
-    auto first_hits_in_F1_skip_one = fv::tup_apply(find_matched_nth_hit_in_layer_with_skip,
-            fv::tuple(FPIX_L1, skip_one, first), "first_hits_in_F1_skip_one");
-
-
-    TH2Params params_dz = {"$\\eta$",       100, -4,   4,
-                           "$\\Delta z$(rad)", 50,  -.01, .01};
-    auto calc_dz_v_eta = lookup_function<pair_vec(vector<HitPair>)>("calc_dz_v_eta");
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B1_skip_zero",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B1_skip_zero),
-                                                    "First Hit in BPIX-L1 - Skip 0", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B2_skip_zero",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B2_skip_zero),
-                                                    "First Hit in BPIX-L2 - Skip 0", params_dz);
-
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_F1_skip_zero",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_F1_skip_zero),
-                                                    "First Hit in FPIX-L1 - Skip 0", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_F2_skip_zero",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_F2_skip_zero),
-                                                    "First Hit in FPIX-L2 - Skip 0", params_dz);
-
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B1_skip_one",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B1_skip_one),
-                                                    "First Hit in BPIX-L1 - Skip 1", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B2_skip_one",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B2_skip_one),
-                                                    "First Hit in BPIX-L2 - Skip 1", params_dz);
-
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_F1_skip_one",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_F1_skip_one),
-                                                    "First Hit in FPIX-L1 - Skip 1", params_dz);
-
-}
-
-void setup_first_hit_pairs(TrackingDataSet& tds){
-
-    auto find_matched_nth_hit_in_layer =
-    func<vector<HitPair>(PixDetElem, int)>("find_matched_nth_hit_in_layer",
-        FUNC(([](const PixDetElem&& pixdet,
-                 const unsigned int&& hit_number){
-            vector<HitPair> matched_hits;
-            for(auto track : tracks){ // loop over all tracks
-                auto seed = seeds[track.seedIdx()];
-                if(seed.hitIdx().size() <= hit_number) continue; // looking for hit_number'th hit
-                if(seed.algoOriginal() < 0 || seed.algoOriginal() >= seedTypes.size()) continue;
-                if(seed.hitType()[hit_number] != HIT_TYPE_PIXEL) continue; // take only pixel hits for now
-                auto rec_hit = pixrec_hits[seed.hitIdx()[hit_number]];
-                if(pixdet.contains(rec_hit)){
-                    // We have the RecHit we want to work with, now find a properly* matched SimHit
-                    if(rec_hit.simHitIdx().size() == 0) continue; // if rechit is matched to no simhits, give up.
-                    if(track.simTrkIdx().size() == 0) continue; // if rechit is matched to no simhits, give up.
-                    const int &simTrkIdx = track.simTrkIdx()[0];  // get first matched track
-                    for(const int& simHitIdx : sim_tracks[simTrkIdx].simHitIdx()){ // loop over SimHits from SimTrack
-                        if(simHitIdx == rec_hit.simHitIdx()[0]) // take first matched simhit (should be the closest one)
-                            matched_hits.push_back({rec_hit, sim_hits[rec_hit.simHitIdx()[0]]});
-                    }
-                }
-            }
-            return matched_hits;
-        })));
-
-    //**//**
-    auto BPIX_L1 = constant("BPIX_L1", PixDetElem(PixSubDet::Barrel, 1));
-    auto BPIX_L2 = constant("BPIX_L2", PixDetElem(PixSubDet::Barrel, 2));
-    auto BPIX_L3 = constant("BPIX_L3", PixDetElem(PixSubDet::Barrel, 3));
-    auto BPIX_L4 = constant("BPIX_L4", PixDetElem(PixSubDet::Barrel, 4));
-    auto FPIX_L1 = constant("FPIX_L1", PixDetElem(PixSubDet::EndCap, 1));
-    auto FPIX_L2 = constant("FPIX_L2", PixDetElem(PixSubDet::EndCap, 2));
-    auto FPIX_L3 = constant("FPIX_L3", PixDetElem(PixSubDet::EndCap, 3));
-
-    auto first_hit  = constant("1st", 0);
-    auto second_hit = constant("2nd", 1);
-
-    // First hits on inner two bpix layers
-    auto first_hits_in_B1 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(BPIX_L1, first_hit), "first_hits_in_B1");
-    auto first_hits_in_B2 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(BPIX_L2, first_hit), "first_hits_in_B2");
-
-    // Second hits on outer three bpix layers
-    auto second_hits_in_B2 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(BPIX_L2, second_hit), "second_hits_in_B2");
-    auto second_hits_in_B3 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(BPIX_L3, second_hit), "second_hits_in_B3");
-    auto second_hits_in_B4 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(BPIX_L4, second_hit), "second_hits_in_B4");
-
-    auto first_hits_in_F1 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(FPIX_L1, first_hit), "first_hits_in_F1");
-    auto first_hits_in_F2 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(FPIX_L2, first_hit), "first_hits_in_F2");
-
-    auto second_hits_in_F2 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(FPIX_L2, second_hit), "second_hits_in_F2");
-    auto second_hits_in_F3 = fv::tup_apply(find_matched_nth_hit_in_layer,
-            fv::tuple(FPIX_L3, second_hit), "second_hits_in_F3");
-
-    // Even vs Odd Ladders
-    auto even = constant("even", false);
-    auto odd = constant("odd", true);
-
-    auto select_even_odd_ladder_hit_pairs =
-    func<vector<HitPair>(vector<HitPair>, bool)>("select_even_odd_ladder_hit_pairs",
-        FUNC(([](const vector<HitPair>& hit_pairs,
-                 const bool &&odd){
-            vector<HitPair> even_pairs;
-            for(const HitPair &hit_pair : hit_pairs){ // loop over all seeds
-                if(std::get<PixRecHit>(hit_pair).ladder() % 2 == odd){
-                    even_pairs.push_back(hit_pair);
-                }
-            }
-            return even_pairs;
-        })));
-
-    auto first_hits_in_B1_even_ladder = fv::tup_apply(select_even_odd_ladder_hit_pairs,
-            fv::tuple(first_hits_in_B1, even), "first_hits_in_B1_even_ladder");
-    auto first_hits_in_B1_odd_ladder = fv::tup_apply(select_even_odd_ladder_hit_pairs,
-            fv::tuple(first_hits_in_B1, odd), "first_hits_in_B1_odd_ladder");
-
-    auto first_hits_in_B2_even_ladder = fv::tup_apply(select_even_odd_ladder_hit_pairs,
-            fv::tuple(first_hits_in_B2, even), "first_hits_in_B2_even_ladder");
-    auto first_hits_in_B2_odd_ladder = fv::tup_apply(select_even_odd_ladder_hit_pairs,
-            fv::tuple(first_hits_in_B2, odd), "first_hits_in_B2_odd_ladder");
-
-    //Plots for dPhi of collections defined above
-    auto calc_dphi_v_eta = lookup_function<pair_vec(vector<HitPair>)>("calc_dphi_v_eta");
-    TH2Params params_dphi = {"$\\eta$",       100, -4,   4,
-                             "$\\Delta \\phi$(rad)", 150,  -.0015, .0015};
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_first_hits_in_B1",
-                                                    fv::apply(calc_dphi_v_eta, first_hits_in_B1),
-                                                    "First Hit in BPIX-L1", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_first_hits_in_B2",
-                                                    fv::apply(calc_dphi_v_eta, first_hits_in_B2),
-                                                    "First Hit in BPIX-L2", params_dphi);
-
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_first_hits_in_B1_even_ladder",
-                                                    fv::apply(calc_dphi_v_eta, first_hits_in_B1_even_ladder),
-                                                    "First Hit in BPIX-L1 - Even Ladders", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_first_hits_in_B1_odd_ladder",
-                                                    fv::apply(calc_dphi_v_eta, first_hits_in_B1_odd_ladder),
-                                                    "First Hit in BPIX-L1 - Odd Ladders", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_first_hits_in_B2_even_ladder",
-                                                    fv::apply(calc_dphi_v_eta, first_hits_in_B2_even_ladder),
-                                                    "First Hit in BPIX-L2 - Even Ladders", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_first_hits_in_B2_odd_ladder",
-                                                    fv::apply(calc_dphi_v_eta, first_hits_in_B2_odd_ladder),
-                                                    "First Hit in BPIX-L2 - Odd Ladders", params_dphi);
-
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_second_hits_in_B2",
-                                                    fv::apply(calc_dphi_v_eta, second_hits_in_B2),
-                                                    "Second Hit in BPIX-L2", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_second_hits_in_B3",
-                                                    fv::apply(calc_dphi_v_eta, second_hits_in_B3),
-                                                    "Second Hit in BPIX-L3", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_second_hits_in_B4",
-                                                    fv::apply(calc_dphi_v_eta, second_hits_in_B4),
-                                                    "Second Hit in BPIX-L4", params_dphi);
-
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_first_hits_in_F1",
-                                                    fv::apply(calc_dphi_v_eta, first_hits_in_F1),
-                                                    "First Hit in FPIX-L1", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_first_hits_in_F2",
-                                                    fv::apply(calc_dphi_v_eta, first_hits_in_F2),
-                                                    "First Hit in FPIX-L2", params_dphi);
-
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_second_hits_in_F2",
-                                                    fv::apply(calc_dphi_v_eta, second_hits_in_F2),
-                                                    "Second Hit in FPIX-L2", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>("dphi_v_eta_second_hits_in_F3",
-                                                    fv::apply(calc_dphi_v_eta, second_hits_in_F3),
-                                                    "Second Hit in FPIX-L3", params_dphi);
-
-    //Plots for dr of collections defined above
-    auto calc_dr_v_eta = lookup_function<pair_vec(vector<HitPair>)>("calc_dr_v_eta");
-    TH2Params params_dr = {"$\\eta$",       100, -4,   4,
-                           "$\\Delta \\r$(rad)", 50, 0, .006};
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_first_hits_in_B1",
-                                                    fv::apply(calc_dr_v_eta, first_hits_in_B1),
-                                                    "First Hit in BPIX-L1", params_dr);
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_first_hits_in_B2",
-                                                    fv::apply(calc_dr_v_eta, first_hits_in_B2),
-                                                    "First Hit in BPIX-L2", params_dr);
-
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_first_hits_in_B1_even_ladder",
-                                                    fv::apply(calc_dr_v_eta, first_hits_in_B1_even_ladder),
-                                                    "First Hit in BPIX-L1 - Even Ladders", params_dr);
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_first_hits_in_B1_odd_ladder",
-                                                    fv::apply(calc_dr_v_eta, first_hits_in_B1_odd_ladder),
-                                                    "First Hit in BPIX-L1 - Odd Ladders", params_dr);
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_first_hits_in_B2_even_ladder",
-                                                    fv::apply(calc_dr_v_eta, first_hits_in_B2_even_ladder),
-                                                    "First Hit in BPIX-L2 - Even Ladders", params_dr);
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_first_hits_in_B2_odd_ladder",
-                                                    fv::apply(calc_dr_v_eta, first_hits_in_B2_odd_ladder),
-                                                    "First Hit in BPIX-L2 - Odd Ladders", params_dr);
-
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_second_hits_in_B2",
-                                                    fv::apply(calc_dr_v_eta, second_hits_in_B2),
-                                                    "Second Hit in BPIX-L2", params_dr);
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_second_hits_in_B3",
-                                                    fv::apply(calc_dr_v_eta, second_hits_in_B3),
-                                                    "Second Hit in BPIX-L3", params_dr);
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_second_hits_in_B4",
-                                                    fv::apply(calc_dr_v_eta, second_hits_in_B4),
-                                                    "Second Hit in BPIX-L4", params_dr);
-
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_first_hits_in_F1",
-                                                    fv::apply(calc_dr_v_eta, first_hits_in_F1),
-                                                    "First Hit in FPIX-L1", params_dr);
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_first_hits_in_F2",
-                                                    fv::apply(calc_dr_v_eta, first_hits_in_F2),
-                                                    "First Hit in FPIX-L2", params_dr);
-
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_second_hits_in_F2",
-                                                    fv::apply(calc_dr_v_eta, second_hits_in_F2),
-                                                    "Second Hit in FPIX-L2", params_dr);
-    tds.register_container<ContainerTH2Many<float>>("dr_v_eta_second_hits_in_F3",
-                                                    fv::apply(calc_dr_v_eta, second_hits_in_F3),
-                                                    "Second Hit in FPIX-L3", params_dr);
-
-
-    //Plots for dz of collections defined above
-    auto calc_dz_v_eta = lookup_function<pair_vec(vector<HitPair>)>("calc_dz_v_eta");
-    TH2Params params_dz = {"$\\eta$",       100, -4,   4,
-                           "$\\Delta z$(rad)", 50,  -.01, .01};
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B1",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B1),
-                                                    "First Hit in BPIX-L1", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B2",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B2),
-                                                    "First Hit in BPIX-L2", params_dz);
-
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B1_even_ladder",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B1_even_ladder),
-                                                    "First Hit in BPIX-L1 - Even Ladders", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B1_odd_ladder",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B1_odd_ladder),
-                                                    "First Hit in BPIX-L1 - Odd Ladders", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B2_even_ladder",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B2_even_ladder),
-                                                    "First Hit in BPIX-L2 - Even Ladders", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_first_hits_in_B2_odd_ladder",
-                                                    fv::apply(calc_dz_v_eta, first_hits_in_B2_odd_ladder),
-                                                    "First Hit in BPIX-L2 - Odd Ladders", params_dz);
-
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_second_hits_in_B2",
-                                                    fv::apply(calc_dz_v_eta, second_hits_in_B2),
-                                                    "Second Hit in BPIX-L2", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_second_hits_in_B3",
-                                                    fv::apply(calc_dz_v_eta, second_hits_in_B3),
-                                                    "Second Hit in BPIX-L3", params_dz);
-    tds.register_container<ContainerTH2Many<float>>("dz_v_eta_second_hits_in_B4",
-                                                    fv::apply(calc_dz_v_eta, second_hits_in_B4),
-                                                    "Second Hit in BPIX-L4", params_dz);
-
-    //Plots for drho of collections defined above
-    auto calc_drho_v_eta = lookup_function<pair_vec(vector<HitPair>)>("calc_drho_v_eta");
-    TH2Params params_drho = {"$\\eta$",       100, -4,   4,
-                             "$\\Delta \\rho$(cm)", 50,  -.01, .01};
-    tds.register_container<ContainerTH2Many<float>>("drho_v_eta_first_hits_in_F1",
-                                                    fv::apply(calc_drho_v_eta, first_hits_in_F1),
-                                                    "First Hit in FPIX-L1", params_drho);
-    tds.register_container<ContainerTH2Many<float>>("drho_v_eta_first_hits_in_F2",
-                                                    fv::apply(calc_drho_v_eta, first_hits_in_F2),
-                                                    "First Hit in FPIX-L2", params_drho);
-
-    tds.register_container<ContainerTH2Many<float>>("drho_v_eta_second_hits_in_F2",
-                                                    fv::apply(calc_drho_v_eta, second_hits_in_F2),
-                                                    "Second Hit in FPIX-L2", params_drho);
-    tds.register_container<ContainerTH2Many<float>>("drho_v_eta_second_hits_in_F3",
-                                                    fv::apply(calc_drho_v_eta, second_hits_in_F3),
-                                                    "Second Hit in FPIX-L3", params_drho);
-}
-
-
-void sc_value_hists_for_lb(TrackingDataSet& tds, std::function<bool(int)>& parity_check,
-                           const std::string& label){
-
-    auto relabel = [label](const std::string&& base){
-        return base + "_" + label;
-    };
-    auto BPIX_L1 = constant("BPIX_L1", PixDetElem(PixSubDet::Barrel, 1));
-    auto FPIX_L1 = constant("FPIX_L1", PixDetElem(PixSubDet::EndCap, 1));
-    auto BPIX_L2 = constant("BPIX_L2", PixDetElem(PixSubDet::Barrel, 2));
-    auto FPIX_L2 = constant("FPIX_L2", PixDetElem(PixSubDet::EndCap, 2));
-    auto BPIX_L3 = constant("BPIX_L3", PixDetElem(PixSubDet::Barrel, 3));
-    auto FPIX_L3 = constant("FPIX_L2", PixDetElem(PixSubDet::EndCap, 3));
-    auto BPIX_L4 = constant("BPIX_L4", PixDetElem(PixSubDet::Barrel, 4));
-
-
-    auto first_hit  = constant("1st", 0);
-    auto second_hit = constant("2nd", 1);
-
-    auto dRz = constant("dRz", true);
-    auto dPhi = constant("dPhi", false);
-
-    auto pcheck = constant(label, parity_check);
-    auto sc_hit_residuals = lookup_function<
-        pair_vec(PixDetElem, int, bool, std::function<bool(int)>)>("sc_hit_residuals");
-
-    // First hits on inner three bpix layers
-    auto sc_first_hits_in_B1_dz = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L1, first_hit, dRz, pcheck), relabel("sc_first_hits_in_B1_dz"));
-    auto sc_first_hits_in_B2_dz = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L2, first_hit, dRz, pcheck), relabel("sc_first_hits_in_B2_dz"));
-    auto sc_first_hits_in_B3_dz = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L3, first_hit, dRz, pcheck), relabel("sc_first_hits_in_B3_dz"));
-
-    auto sc_first_hits_in_B1_dphi = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L1, first_hit, dPhi, pcheck), relabel("sc_first_hits_in_B1_dphi"));
-    auto sc_first_hits_in_B2_dphi = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L2, first_hit, dPhi, pcheck), relabel("sc_first_hits_in_B2_dphi"));
-    auto sc_first_hits_in_B3_dphi = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L3, first_hit, dPhi, pcheck), relabel("sc_first_hits_in_B3_dphi"));
-
-    // Second hits on outer three bpix layers
-    auto sc_second_hits_in_B2_dz = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L2, second_hit, dRz, pcheck), relabel("sc_second_hits_in_B2_dz"));
-    auto sc_second_hits_in_B3_dz = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L3, second_hit, dRz, pcheck), relabel("sc_second_hits_in_B3_dz"));
-    auto sc_second_hits_in_B4_dz = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L4, second_hit, dRz, pcheck), relabel("sc_second_hits_in_B4_dz"));
-
-    auto sc_second_hits_in_B2_dphi = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L2, second_hit, dPhi, pcheck), relabel("sc_second_hits_in_B2_dphi"));
-    auto sc_second_hits_in_B3_dphi = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L3, second_hit, dPhi, pcheck), relabel("sc_second_hits_in_B3_dphi"));
-    auto sc_second_hits_in_B4_dphi = fv::tup_apply(sc_hit_residuals,
-            fv::tuple(BPIX_L4, second_hit, dPhi, pcheck), relabel("sc_second_hits_in_B4_dphi"));
-
-    TH2Params params_dz = {"$\\eta$",       100, -4,   4,
-                           "$\\delta z$(cm)", 100, -0.7,  0.7};
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_first_hits_in_B1_dz"),
-                                                    sc_first_hits_in_B1_dz,
-                                                    "First Hit in BPIX-L1", params_dz);
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_first_hits_in_B2_dz"),
-                                                    sc_first_hits_in_B2_dz,
-                                                    "First Hit in BPIX-L2", params_dz);
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_first_hits_in_B3_dz"),
-                                                    sc_first_hits_in_B3_dz,
-                                                    "First Hit in BPIX-L3", params_dz);
-
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_second_hits_in_B2_dz"),
-                                                    sc_second_hits_in_B2_dz,
-                                                    "Second Hit in BPIX-L2", params_dz);
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_second_hits_in_B3_dz"),
-                                                    sc_second_hits_in_B3_dz,
-                                                    "Second Hit in BPIX-L3", params_dz);
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_second_hits_in_B4_dz"),
-                                                    sc_second_hits_in_B4_dz,
-                                                    "Second Hit in BPIX-L4", params_dz);
-
-    TH2Params params_dphi = {"$\\eta$",       100, -4,   4,
-                             "$\\delta \\phi$(rad)", 1500, -0.7,  0.7};
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_first_hits_in_B1_dphi"),
-                                                    sc_first_hits_in_B1_dphi,
-                                                    "First Hit in BPIX-L1", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_first_hits_in_B2_dphi"),
-                                                    sc_first_hits_in_B2_dphi,
-                                                    "First Hit in BPIX-L2", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_first_hits_in_B3_dphi"),
-                                                    sc_first_hits_in_B3_dphi,
-                                                    "First Hit in BPIX-L3", params_dphi);
-
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_second_hits_in_B2_dphi"),
-                                                    sc_second_hits_in_B2_dphi,
-                                                    "Second Hit in BPIX-L2", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_second_hits_in_B3_dphi"),
-                                                    sc_second_hits_in_B3_dphi,
-                                                    "Second Hit in BPIX-L3", params_dphi);
-    tds.register_container<ContainerTH2Many<float>>(relabel("sc_second_hits_in_B4_dphi"),
-                                                    sc_second_hits_in_B4_dphi,
-                                                    "Second Hit in BPIX-L4", params_dphi);
-}
-
-void setup_sc_residuals(TrackingDataSet& tds){
-
-    /* sc_hit_residuals looks through all the super clusters in the event and
-     * examins the matched pixel hits. It calculates a residual based on the
-     * extrapolated position of the SC track and the position of the matched
-     * hit.
-     *   subdet: 1 for barrel, 2 for endcap
-     *   pix_layer: 1-4 for barrel, 1-3 for endcap
-     *   hit_number: examin either the first or second matched hit
-     *   sel_dRz: True: calculate dR, False: calculate dz
-     *   pcheck: a boolean function that filters residuals based on
-     *   ladder/blade. Normally used to select either even or odd ladders.
-     */
-    func<pair_vec(PixDetElem, int, bool, std::function<bool(int)>)>("sc_hit_residuals",
-        FUNC(([](const PixDetElem&& pixdet,
-                 const int&& hit_number,
-                 const bool&& sel_dRz,
-                 const std::function<bool(int)>& pcheck){
-            vector<float> residuals;
-            vector<float> etas;
-            for(auto super_cluster : super_clusters){ // loop over all super-clusters
-                float dRz, dPhi;
-                int ladder;
-                unsigned int nSeeds = super_cluster.charge().size();
-                for(unsigned int seedIdx=0; seedIdx<nSeeds; seedIdx++){ // loop over all seeds associated w/ sc
-                    if(hit_number == 0){
-                        if(!pixdet.contains((PixSubDet)super_cluster.subDet1()[seedIdx], super_cluster.lay1()[seedIdx])) continue;
-                        dRz = super_cluster.dRz1()[seedIdx];
-                        dPhi = super_cluster.dPhi1()[seedIdx];
-                        /* ladder = super_cluster.ladder1()[seedIdx]; */
-                    }else{
-                        if(!pixdet.contains((PixSubDet)super_cluster.subDet2()[seedIdx], super_cluster.lay2()[seedIdx])) continue;
-                        dRz = super_cluster.dRz2()[seedIdx];
-                        dPhi = super_cluster.dPhi2()[seedIdx];
-                        /* ladder = super_cluster.ladder2()[seedIdx]; */
-                    }
-                    ladder = 0;  // TODO: Need to re-add ladder to tree for super-clusters
-                    DEBUG("New Seed, Idx: " << seedIdx << endl
-                          << "\tdRz: " << dRz << endl
-                          << "\tdPhi: " << dPhi << endl);
-                    if(!pcheck(ladder)) continue;
-                    if(sel_dRz)
-                        residuals.push_back(dRz);
-                    else
-                        residuals.push_back(dPhi);
-                    etas.push_back(pseudorapidityP(super_cluster));
-                }
-            }
-            return std::make_pair(etas,residuals);
-        })));
-
-    std::function<bool(int)> even = [](const int& t){ return !(t%2); };
-    std::function<bool(int)> odd = [](const int& t){ return (t%2); };
-
-    sc_value_hists_for_lb(tds, even, "even");
-    sc_value_hists_for_lb(tds, odd, "odd");
-
-}
-
-
-void setup_residual_cross_corrolations(TrackingDataSet& tds){
-    /*
-     * Interesting cross-corrolations
-     * for hit1 in L1 or L2
-     * dphi2 v dz1
-     * dz2 v dz1
-     * dphi2 v dphi1
-     * dz2 v dphi1
-     */
-    enum Res{
-        dz1,
-        dz2,
-        dPhi1,
-        dPhi2
-    };
-
-
-    auto sc_cross_correlations = func<pair_vec(PixDetElem, PixDetElem, Res, Res)>("sc_cross_correlations",
-        FUNC(([](const PixDetElem&& subdet1,
-                 const PixDetElem&& subdet2,
-                 const Res&& res1,
-                 const Res&& res2){
-            vector<float> residuals1;
-            vector<float> residuals2;
-            for(auto super_cluster : super_clusters){ // loop over all supser-clusters
-                unsigned int nSeeds = super_cluster.charge().size();
-                for(unsigned int seedIdx=0; seedIdx<nSeeds; seedIdx++){ // loop over all seeds associated w/ sc
-                    if (!subdet1.contains((PixSubDet)super_cluster.subDet1()[seedIdx],super_cluster.lay1()[seedIdx]) ||
-                        !subdet2.contains((PixSubDet)super_cluster.subDet2()[seedIdx],super_cluster.lay2()[seedIdx]))
-                        continue;
-                    switch(res1){
-                        case Res::dz1:
-                            residuals1.push_back(super_cluster.dRz1()[seedIdx]);
-                            break;
-                        case Res::dz2:
-                            residuals1.push_back(super_cluster.dRz2()[seedIdx]);
-                            break;
-                        case Res::dPhi1:
-                            residuals1.push_back(super_cluster.dPhi1()[seedIdx]);
-                            break;
-                        case Res::dPhi2:
-                            residuals1.push_back(super_cluster.dPhi2()[seedIdx]);
-                            break;
-                    }
-                    switch(res2){
-                        case Res::dz1:
-                            residuals2.push_back(super_cluster.dRz1()[seedIdx]);
-                            break;
-                        case Res::dz2:
-                            residuals2.push_back(super_cluster.dRz2()[seedIdx]);
-                            break;
-                        case Res::dPhi1:
-                            residuals2.push_back(super_cluster.dPhi1()[seedIdx]);
-                            break;
-                        case Res::dPhi2:
-                            residuals2.push_back(super_cluster.dPhi2()[seedIdx]);
-                            break;
-                    }
-                }
-            }
-            return std::make_pair(residuals1,residuals2);
-        })));
-
-    auto BPIX_L1 = constant("BPIX_L1", PixDetElem(PixSubDet::Barrel, 1));
-    auto BPIX_L2 = constant("BPIX_L2", PixDetElem(PixSubDet::Barrel, 2));
-    auto BPIX_L3 = constant("BPIX_L3", PixDetElem(PixSubDet::Barrel, 3));
-    auto BPIX_L4 = constant("BPIX_L4", PixDetElem(PixSubDet::Barrel, 4));
-
-    auto v_dz1 = constant("dz1", Res::dz1);
-    auto v_dz2 = constant("dz2", Res::dz2);
-    auto v_dPhi1 = constant("dPhi1", Res::dPhi1);
-    auto v_dPhi2 = constant("dPhi2", Res::dPhi2);
-
-    auto sc_dphi2_v_dz1_L1_L2 = fv::tup_apply(sc_cross_correlations,
-            fv::tuple(BPIX_L1, BPIX_L2, v_dPhi2, v_dz1), "sc_dphi1_v_dz1_L1_L2");
-
-    auto sc_dz2_v_dz1_L1_L2 = fv::tup_apply(sc_cross_correlations,
-            fv::tuple(BPIX_L1, BPIX_L2, v_dz2, v_dz1), "sc_dz2_v_dz1_L1_L2");
-
-    auto sc_dphi2_v_dphi1_L1_L2 = fv::tup_apply(sc_cross_correlations,
-            fv::tuple(BPIX_L1, BPIX_L2, v_dPhi2, v_dPhi1), "sc_dphi1_v_dphi1_L1_L2");
-
-    auto sc_dz2_v_dphi1_L1_L2 = fv::tup_apply(sc_cross_correlations,
-            fv::tuple(BPIX_L1, BPIX_L2, v_dz2, v_dPhi1), "sc_dz2_v_dphi1_L1_L2");
-
-    TH2Params hist_params = TH2Params::lookup("sc_dphi2_v_dz1_L1_L2");
-    tds.register_container<ContainerTH2Many<float>>("sc_dphi2_v_dz1_L1_L2",
-                                                    sc_dphi2_v_dz1_L1_L2,
-                                                    "sc_dphi2_v_dz1_L1_L2", hist_params);
-    hist_params = TH2Params::lookup("sc_dz2_v_dz1_L1_L2");
-    tds.register_container<ContainerTH2Many<float>>("sc_dz2_v_dz1_L1_L2",
-                                                    sc_dz2_v_dz1_L1_L2,
-                                                    "sc_dz2_v_dz1_L1_L2", hist_params);
-    hist_params = TH2Params::lookup("sc_dphi2_v_dphi1_L1_L2");
-    tds.register_container<ContainerTH2Many<float>>("sc_dphi2_v_dphi1_L1_L2",
-                                                    sc_dphi2_v_dphi1_L1_L2,
-                                                    "sc_dphi2_v_dphi1_L1_L2", hist_params);
-    hist_params = TH2Params::lookup("sc_dz2_v_dphi1_L1_L2");
-    tds.register_container<ContainerTH2Many<float>>("sc_dz2_v_dphi1_L1_L2",
-                                                    sc_dz2_v_dphi1_L1_L2,
-                                                    "sc_dz2_v_dphi1_L1_L2", hist_params);
-
-    hist_params = TH2Params::lookup("sc_dz2_v_dz1_L1_L2_zoom");
-    tds.register_container<ContainerTH2Many<float>>("sc_dz2_v_dz1_L1_L2_zoom",
-                                                    sc_dz2_v_dz1_L1_L2,
-                                                    "sc_dz2_v_dz1_L1_L2_zoom", hist_params);
-    hist_params = TH2Params::lookup("sc_dz2_v_dphi1_L1_L2_zoom");
-    tds.register_container<ContainerTH2Many<float>>("sc_dz2_v_dphi1_L1_L2_zoom",
-                                                    sc_dz2_v_dphi1_L1_L2,
-                                                    "sc_dz2_v_dphi1_L1_L2_zoom", hist_params);
-    hist_params = TH2Params::lookup("sc_dphi2_v_dphi1_L1_L2_zoom");
-    tds.register_container<ContainerTH2Many<float>>("sc_dphi2_v_dphi1_L1_L2_zoom",
-                                                    sc_dphi2_v_dphi1_L1_L2,
-                                                    "sc_dphi2_v_dphi1_L1_L2_zoom", hist_params);
-
-    auto sc_dphi2_v_dz1_L1_L3 = fv::tup_apply(sc_cross_correlations,
-            fv::tuple(BPIX_L1, BPIX_L3, v_dPhi2, v_dz1), "sc_dphi1_v_dz1_L1_L3");
-
-    auto sc_dz2_v_dz1_L1_L3 = fv::tup_apply(sc_cross_correlations,
-            fv::tuple(BPIX_L1, BPIX_L3, v_dz2, v_dz1), "sc_dz2_v_dz1_L1_L3");
-
-    auto sc_dphi2_v_dphi1_L1_L3 = fv::tup_apply(sc_cross_correlations,
-            fv::tuple(BPIX_L1, BPIX_L3, v_dPhi2, v_dPhi1), "sc_dphi1_v_dphi1_L1_L3");
-
-    auto sc_dz2_v_dphi1_L1_L3 = fv::tup_apply(sc_cross_correlations,
-            fv::tuple(BPIX_L1, BPIX_L3, v_dz2, v_dPhi1), "sc_dz2_v_dphi1_L1_L3");
-
-    hist_params = TH2Params::lookup("sc_dphi2_v_dz1_L1_L2");
-    tds.register_container<ContainerTH2Many<float>>("sc_dphi2_v_dz1_L1_L3",
-                                                    sc_dphi2_v_dz1_L1_L3,
-                                                    "sc_dphi2_v_dz1_L1_L3", hist_params);
-    hist_params = TH2Params::lookup("sc_dz2_v_dz1_L1_L2");
-    tds.register_container<ContainerTH2Many<float>>("sc_dz2_v_dz1_L1_L3",
-                                                    sc_dz2_v_dz1_L1_L3,
-                                                    "sc_dz2_v_dz1_L1_L3", hist_params);
-    hist_params = TH2Params::lookup("sc_dphi2_v_dphi1_L1_L2");
-    tds.register_container<ContainerTH2Many<float>>("sc_dphi2_v_dphi1_L1_L3",
-                                                    sc_dphi2_v_dphi1_L1_L3,
-                                                    "sc_dphi2_v_dphi1_L1_L3", hist_params);
-    hist_params = TH2Params::lookup("sc_dz2_v_dphi1_L1_L2");
-    tds.register_container<ContainerTH2Many<float>>("sc_dz2_v_dphi1_L1_L3",
-                                                    sc_dz2_v_dphi1_L1_L3,
-                                                    "sc_dz2_v_dphi1_L1_L3", hist_params);
-
-    hist_params = TH2Params::lookup("sc_dz2_v_dz1_L1_L2_zoom");
-    tds.register_container<ContainerTH2Many<float>>("sc_dz2_v_dz1_L1_L3_zoom",
-                                                    sc_dz2_v_dz1_L1_L3,
-                                                    "sc_dz2_v_dz1_L1_L3_zoom", hist_params);
-    hist_params = TH2Params::lookup("sc_dz2_v_dphi1_L1_L2_zoom");
-    tds.register_container<ContainerTH2Many<float>>("sc_dz2_v_dphi1_L1_L3_zoom",
-                                                    sc_dz2_v_dphi1_L1_L3,
-                                                    "sc_dz2_v_dphi1_L1_L3_zoom", hist_params);
-    hist_params = TH2Params::lookup("sc_dphi2_v_dphi1_L1_L2_zoom");
-    tds.register_container<ContainerTH2Many<float>>("sc_dphi2_v_dphi1_L1_L3_zoom",
-                                                    sc_dphi2_v_dphi1_L1_L3,
-                                                    "sc_dphi2_v_dphi1_L1_L3_zoom", hist_params);
-
-
-}
-
-void run_analysis(const vector<fv::util::DataFileDescriptor>& dfds, const string output_filename, bool silent){
-    gSystem->Load("libfilval.so");
-    auto replace_suffix = [](const std::string& input, const std::string& new_suffix){
-        return input.substr(0, input.find_last_of(".")) + new_suffix;
-    };
-
-    string log_filename = replace_suffix(output_filename, ".log");
-    fv::util::Log::init_logger(log_filename, fv::util::LogPriority::kLogInfo);
-
-    TrackingDataSet tds(output_filename, dfds, "trackingNtuple/tree");
-    /* tds.set_max_events(10); */
-    register_objects(tds);
-    setup_hit_pair_functions();
-
-    setup_first_hit_pairs(tds);
-    setup_skipped_layer_hit_pairs(tds);
-    /* setup_sc_residuals(tds); */
-    /* setup_residual_cross_corrolations(tds); */
-
-
-    tds.process(silent);
-    tds.save_all();
-}
-
-int main(int argc, char * argv[]){
-    fv::util::ArgParser args(argc, argv);
-    bool silent = args.cmdOptionExists("-s");
-    string output_filename = args.cmdOptionExists("-o") ? args.getCmdOption("-o") : "output.root";
-    if(args.cmdOptionExists("-c")){
-        fv::util::init_config(args.getCmdOption("-c"));
-    }
-    if(args.cmdOptionExists("-F")){
-        auto file_list = fv::util::read_input_list(args.getCmdOption("-F"));
-        run_analysis(file_list, output_filename, silent);
-    }else if(args.cmdOptionExists("-f")){
-        string input_filename = args.getCmdOption("-f");
-        string data_label = args.cmdOptionExists("-l") ? args.getCmdOption("-l") : "";
-        string data_category = args.cmdOptionExists("-c") ? args.getCmdOption("-c") : "";
-        fv::util::DataFileDescriptor dfd(input_filename, data_label, data_category);
-        run_analysis(std::vector<fv::util::DataFileDescriptor>({dfd}), output_filename, silent);
-    }else {
-        cout << "Usage: ./tracking_validation (-s) {-o output_filename} -F datafiles.txt" << endl;
-        cout << "       ./tracking_validation (-s) {-l DATA_LABEL} {-c DATA_CATEGORY} {-o output_filename} -f treefile.root" << endl;
-    }
-    return 0;
-}

+ 53 - 26
eff_plots.py

@@ -86,7 +86,7 @@ def plot_track_eff(old_seeds, new_seeds):
 
 
 @decl_plot
-def plot_seed_purity(old_seeds, new_seeds):
+def plot_seed_purity(old_seeds, new_seeds, ext=""):
     r"""## ECAL-Driven Seed Purity
 
     The proportion of ECAL-driven seeds that have a matched gen-level electron originating in
@@ -96,32 +96,38 @@ def plot_seed_purity(old_seeds, new_seeds):
     ax_eta = plt.subplot(222)
     ax_phi = plt.subplot(223)
 
+    def get_hist(rs, base_name):
+        return hist(getattr(rs, base_name+ext))
+
     errors = True
     plt.sca(ax_pt)
-    hist_plot(hist(new_seeds.seed_pur_v_pt), include_errors=errors, label='New')
-    hist_plot(hist(old_seeds.seed_pur_v_pt), include_errors=errors, label='Old')
+    hist_plot(get_hist(new_seeds, "seed_pur_v_pt"), include_errors=errors, label='New')
+    hist_plot(get_hist(old_seeds, "seed_pur_v_pt"), include_errors=errors, label='Old')
     center_text(0.5, 0.3, r'$|\eta|<2.4$')
     plt.xlabel(r"Seed $p_T$")
-    plt.ylim((0, 1.1))
+    if not ext:
+        plt.ylim((0, 1.1))
 
     plt.sca(ax_eta)
-    hist_plot(hist(new_seeds.seed_pur_v_eta), include_errors=errors, label='New')
-    hist_plot(hist(old_seeds.seed_pur_v_eta), include_errors=errors, label='Old')
+    hist_plot(get_hist(new_seeds, "seed_pur_v_eta"), include_errors=errors, label='New')
+    hist_plot(get_hist(old_seeds, "seed_pur_v_eta"), include_errors=errors, label='Old')
     center_text(0.5, 0.3, r'$p_T>20$')
     plt.xlabel(r"Seed $\eta$")
-    plt.ylim((0, 1.1))
+    if not ext:
+        plt.ylim((0, 1.1))
     plt.legend()
 
     plt.sca(ax_phi)
-    hist_plot(hist(new_seeds.seed_pur_v_phi), include_errors=errors, label='New')
-    hist_plot(hist(old_seeds.seed_pur_v_phi), include_errors=errors, label='Old')
+    hist_plot(get_hist(new_seeds, "seed_pur_v_phi"), include_errors=errors, label='New')
+    hist_plot(get_hist(old_seeds, "seed_pur_v_phi"), include_errors=errors, label='Old')
     center_text(0.5, 0.3, r'$p_T>20$ and $|\eta|<2.4$')
     plt.xlabel(r"Seed $\phi$")
-    plt.ylim((0, 1.1))
+    if not ext:
+        plt.ylim((0, 1.1))
 
 
 @decl_plot
-def plot_track_purity(old_seeds, new_seeds):
+def plot_track_purity(old_seeds, new_seeds, ext=""):
     r"""## GSF Track Purity
 
     The proportion of GSF-tracks w\ ECAL-driven seeds that have a matched gen-level electron originating in
@@ -131,28 +137,34 @@ def plot_track_purity(old_seeds, new_seeds):
     ax_eta = plt.subplot(222)
     ax_phi = plt.subplot(223)
 
+    def get_hist(rs, base_name):
+        return hist(getattr(rs, base_name+ext))
+
     errors = True
     plt.sca(ax_pt)
-    hist_plot(hist(new_seeds.track_pur_v_pt), include_errors=errors, label='New')
-    hist_plot(hist(old_seeds.track_pur_v_pt), include_errors=errors, label='Old')
+    hist_plot(get_hist(new_seeds, "track_pur_v_pt"), include_errors=errors, label='New')
+    hist_plot(get_hist(old_seeds, "track_pur_v_pt"), include_errors=errors, label='Old')
     center_text(0.5, 0.3, r'$|\eta|<2.4$')
     plt.xlabel(r"GSF-Track $p_T$")
-    plt.ylim((0, 1.1))
+    if not ext:
+        plt.ylim((0, 1.1))
 
     plt.sca(ax_eta)
-    hist_plot(hist(new_seeds.track_pur_v_eta), include_errors=errors, label='New')
-    hist_plot(hist(old_seeds.track_pur_v_eta), include_errors=errors, label='Old')
+    hist_plot(get_hist(new_seeds, "track_pur_v_eta"), include_errors=errors, label='New')
+    hist_plot(get_hist(old_seeds, "track_pur_v_eta"), include_errors=errors, label='Old')
     center_text(0.5, 0.3, r'$p_T>20$')
     plt.xlabel(r"GSF-Track $\eta$")
-    plt.ylim((0, 1.1))
+    if not ext:
+        plt.ylim((0, 1.1))
     plt.legend()
 
     plt.sca(ax_phi)
-    hist_plot(hist(new_seeds.track_pur_v_phi), include_errors=errors, label='New')
-    hist_plot(hist(old_seeds.track_pur_v_phi), include_errors=errors, label='Old')
+    hist_plot(get_hist(new_seeds, "track_pur_v_phi"), include_errors=errors, label='New')
+    hist_plot(get_hist(old_seeds, "track_pur_v_phi"), include_errors=errors, label='Old')
     center_text(0.5, 0.3, r'$p_T>20$ and $|\eta|<2.4$')
     plt.xlabel(r"GSF-Track $\phi$")
-    plt.ylim((0, 1.1))
+    if not ext:
+        plt.ylim((0, 1.1))
 
 
 @decl_plot
@@ -186,16 +198,23 @@ def plot_nhits(old_seeds, new_seeds):
     plt.colorbar()
     center_text(0.5, 0.1, "GSF-Tracks (New Seeding)", bbox=dict(facecolor='white', alpha=0.5))
 
+
 if __name__ == '__main__':
-    old_seeds = ResultSet("old_seeds", 'old_seeding.root')
-    new_seeds = ResultSet("new_seeds", 'new_seeding.root')
+    old_seeds = ResultSet("old_seeds", 'old_seeding2.root')
+    new_seeds = ResultSet("new_seeds", 'new_seeding2.root')
 
     # Next, declare all of the (sub)plots that will be assembled into full
     # figures later
-    seed_eff = (plot_seed_eff, (old_seeds, new_seeds), {})
-    track_eff = (plot_track_eff, (old_seeds, new_seeds), {})
-    seed_pur = (plot_seed_purity, (old_seeds, new_seeds), {})
-    track_pur = (plot_track_purity, (old_seeds, new_seeds), {})
+    seed_eff = plot_seed_eff, (old_seeds, new_seeds)
+    track_eff = plot_track_eff, (old_seeds, new_seeds)
+
+    seed_pur = plot_seed_purity, (old_seeds, new_seeds)
+    seed_pur_num = plot_seed_purity, (old_seeds, new_seeds), {'ext': '_num'}
+    seed_pur_den = plot_seed_purity, (old_seeds, new_seeds), {'ext': '_den'}
+
+    track_pur = plot_track_purity, (old_seeds, new_seeds)
+    track_pur_num = plot_track_purity, (old_seeds, new_seeds), {'ext': '_num'}
+    track_pur_den = plot_track_purity, (old_seeds, new_seeds), {'ext': '_den'}
 
     nHits = (plot_nhits, (old_seeds, new_seeds), {})
 
@@ -205,10 +224,18 @@ if __name__ == '__main__':
              'ECAL-Driven Seeding Efficiency'),
         Plot([[seed_pur]],
              'ECAL-Driven Seed Purity'),
+        Plot([[seed_pur_num]],
+             'ECAL-Driven Seed Purity Numerator'),
+        Plot([[seed_pur_den]],
+             'ECAL-Driven Seed Purity Denominator'),
         Plot([[track_eff]],
              'GSF Tracking Efficiency'),
         Plot([[track_pur]],
              'GSF Track Purity'),
+        Plot([[track_pur_num]],
+             'GSF Track Purity Numerator'),
+        Plot([[track_pur_den]],
+             'GSF Track Purity Denominator'),
         Plot([[nHits]],
              'Hits'),
     ]

+ 1 - 1
filval

@@ -1 +1 @@
-Subproject commit 6d3fc567de70ee3702d9e96c7cabd39251c7f5a7
+Subproject commit 8ec9c7a1be53c50252b69d65c0f27b2fe98f1d78