Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-04-07 08:08:22

0001 // ----------------------------------------------------------------------------
0002 // 'STrackCutStudy.hist.h'
0003 // Derek Anderson
0004 // 03.14.2022
0005 //
0006 // Reads in the 'ntp_track' Ntuple
0007 // generated by the SVtxEvaluator
0008 // class and studies the impact
0009 // of cutting on various quantities.
0010 // ----------------------------------------------------------------------------
0011 
0012 #pragma once
0013 
0014 using namespace std;
0015 
0016 
0017 
0018 // histogram methods ----------------------------------------------------------
0019 
0020 void STrackCutStudy::InitHists() {
0021 
0022   // histogram binning
0023   const UInt_t  nNHitBins(100);
0024   const UInt_t  nQualBins(40);
0025   const UInt_t  nDcaBins(2000);
0026   const UInt_t  nEtaBins(400);
0027   const UInt_t  nPhiBins(60);
0028   const UInt_t  nPtBins(100);
0029   const UInt_t  nFracBins(100);
0030   const UInt_t  nPtFracBins(500);
0031   const UInt_t  nDiffBins(2000);
0032   const UInt_t  nErrBins(5000);
0033   const UInt_t  nXYVtxBins(1000);
0034   const UInt_t  nZVtxBins(1200);
0035   const UInt_t  nDVtxBins(2400);
0036   const Float_t rNHitBins[NRange]   = {0,     100};
0037   const Float_t rQualBins[NRange]   = {0.,    20.};
0038   const Float_t rDcaBins[NRange]    = {-100., 100.};
0039   const Float_t rEtaBins[NRange]    = {-2.,   2.};
0040   const Float_t rPhiBins[NRange]    = {-3.15, 3.15};
0041   const Float_t rPtBins[NRange]     = {0.,    100.};
0042   const Float_t rFracBins[NRange]   = {0.,    5.};
0043   const Float_t rPtFracBins[NRange] = {0.,    5.};
0044   const Float_t rDiffBins[NRange]   = {-100., 100.};     
0045   const Float_t rErrBins[NRange]    = {0.,    100.};
0046   const Float_t rXYVtxBins[NRange]  = {-1.,   1.};
0047   const Float_t rZVtxBins[NRange]   = {-300., 300.};
0048   const Float_t rDVtxBins[NRange]   = {-600., 600.};
0049 
0050   // for track-variable histogram names
0051   TString sTrkVar[NType][NTrkVar];
0052   TString sTrkVarDiff[NType][NTrkVar];
0053   TString sTrkVarFrac[NType][NTrkVar];
0054   TString sTrkVarVsNTpc[NType][NTrkVar];
0055   TString sTrkVarVsDcaXY[NType][NTrkVar];
0056   TString sTrkVarVsDcaZ[NType][NTrkVar];
0057   TString sTrkVarVsPtReco[NType][NTrkVar];
0058   TString sTrkVarVsPtTrue[NType][NTrkVar];
0059   TString sTrkVarVsPtFrac[NType][NTrkVar];
0060 
0061   // for physics-variable histogram names
0062   TString sPhysVar[NType][NPhysVar];
0063   TString sPhysVarDiff[NType][NPhysVar];
0064   TString sPhysVarFrac[NType][NPhysVar];
0065   TString sPhysVarVsNTpc[NType][NPhysVar];
0066   TString sPhysVarVsDcaXY[NType][NPhysVar];
0067   TString sPhysVarVsDcaZ[NType][NPhysVar];
0068   TString sPhysVarVsPtReco[NType][NPhysVar];
0069   TString sPhysVarVsPtTrue[NType][NPhysVar];
0070   TString sPhysVarVsPtFrac[NType][NPhysVar];
0071 
0072   // form histogram names
0073   const TString sDiffSuffix("Diff");
0074   const TString sFracSuffix("Frac");
0075   const TString sVsNTpcSuffix("VsNTpc");
0076   const TString sVsDcaXySuffix("VsDcaXY");
0077   const TString sVsDcaZSuffix("VsDcaZ");
0078   const TString sVsPtRecoSuffix("VsPtReco");
0079   const TString sVsPtTrueSuffix("VsPtTrue");
0080   const TString sVsPtFracSuffix("VsPtFrac");
0081 
0082   // construct variable prefixes
0083   TString sTrkVarName[NTrkVar];
0084   TString sPhysVarName[NPhysVar];
0085   for (size_t iTrkVar = 0; iTrkVar < NTrkVar; iTrkVar++) {
0086     sTrkVarName[iTrkVar] = "h";
0087     sTrkVarName[iTrkVar].Append(sTrkVars[iTrkVar].Data());
0088   }
0089   for (size_t iPhysVar = 0; iPhysVar < NPhysVar; iPhysVar++) {
0090     sPhysVarName[iPhysVar] = "h";
0091     sPhysVarName[iPhysVar].Append(sPhysVars[iPhysVar].Data());
0092   }
0093 
0094   // construct type suffixes
0095   TString sTypeSuffix[NType];
0096   for (size_t iType = 0; iType < NType; iType++) {
0097     sTypeSuffix[iType] = "_";
0098     sTypeSuffix[iType].Append(sTrkNames[iType].Data());
0099   }
0100 
0101   for (size_t iType = 0; iType < NType; iType++) {
0102     for (size_t iTrkVar = 0; iTrkVar < NTrkVar; iTrkVar++) {
0103       sTrkVar[iType][iTrkVar]         = sTrkVarName[iTrkVar].Data();
0104       sTrkVarDiff[iType][iTrkVar]     = sTrkVarName[iTrkVar].Data();
0105       sTrkVarFrac[iType][iTrkVar]     = sTrkVarName[iTrkVar].Data();
0106       sTrkVarVsNTpc[iType][iTrkVar]   = sTrkVarName[iTrkVar].Data();
0107       sTrkVarVsDcaXY[iType][iTrkVar]  = sTrkVarName[iTrkVar].Data();
0108       sTrkVarVsDcaZ[iType][iTrkVar]   = sTrkVarName[iTrkVar].Data();
0109       sTrkVarVsPtReco[iType][iTrkVar] = sTrkVarName[iTrkVar].Data();
0110       sTrkVarVsPtTrue[iType][iTrkVar] = sTrkVarName[iTrkVar].Data();
0111       sTrkVarVsPtFrac[iType][iTrkVar] = sTrkVarName[iTrkVar].Data();
0112       sTrkVarDiff[iType][iTrkVar].Append(sDiffSuffix.Data());
0113       sTrkVarFrac[iType][iTrkVar].Append(sFracSuffix.Data());
0114       sTrkVarVsNTpc[iType][iTrkVar].Append(sVsNTpcSuffix.Data());
0115       sTrkVarVsDcaXY[iType][iTrkVar].Append(sVsDcaXySuffix.Data());
0116       sTrkVarVsDcaZ[iType][iTrkVar].Append(sVsDcaZSuffix.Data());
0117       sTrkVarVsPtReco[iType][iTrkVar].Append(sVsPtRecoSuffix.Data());
0118       sTrkVarVsPtTrue[iType][iTrkVar].Append(sVsPtTrueSuffix.Data());
0119       sTrkVarVsPtFrac[iType][iTrkVar].Append(sVsPtFracSuffix.Data());
0120       sTrkVar[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0121       sTrkVarDiff[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0122       sTrkVarFrac[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0123       sTrkVarVsNTpc[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0124       sTrkVarVsDcaXY[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0125       sTrkVarVsDcaZ[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0126       sTrkVarVsPtReco[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0127       sTrkVarVsPtTrue[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0128       sTrkVarVsPtFrac[iType][iTrkVar].Append(sTypeSuffix[iType].Data());
0129     }
0130     for (size_t iPhysVar = 0; iPhysVar < NPhysVar; iPhysVar++) {
0131       sPhysVar[iType][iPhysVar]         = sPhysVarName[iPhysVar].Data();
0132       sPhysVarDiff[iType][iPhysVar]     = sPhysVarName[iPhysVar].Data();
0133       sPhysVarFrac[iType][iPhysVar]     = sPhysVarName[iPhysVar].Data();
0134       sPhysVarVsNTpc[iType][iPhysVar]   = sPhysVarName[iPhysVar].Data();
0135       sPhysVarVsDcaXY[iType][iPhysVar]  = sPhysVarName[iPhysVar].Data();
0136       sPhysVarVsDcaZ[iType][iPhysVar]   = sPhysVarName[iPhysVar].Data();
0137       sPhysVarVsPtReco[iType][iPhysVar] = sPhysVarName[iPhysVar].Data();
0138       sPhysVarVsPtTrue[iType][iPhysVar] = sPhysVarName[iPhysVar].Data();
0139       sPhysVarVsPtFrac[iType][iPhysVar] = sPhysVarName[iPhysVar].Data();
0140       sPhysVarDiff[iType][iPhysVar].Append(sDiffSuffix.Data());
0141       sPhysVarFrac[iType][iPhysVar].Append(sFracSuffix.Data());
0142       sPhysVarVsNTpc[iType][iPhysVar].Append(sVsNTpcSuffix.Data());
0143       sPhysVarVsDcaXY[iType][iPhysVar].Append(sVsDcaXySuffix.Data());
0144       sPhysVarVsDcaZ[iType][iPhysVar].Append(sVsDcaZSuffix.Data());
0145       sPhysVarVsPtReco[iType][iPhysVar].Append(sVsPtRecoSuffix.Data());
0146       sPhysVarVsPtTrue[iType][iPhysVar].Append(sVsPtTrueSuffix.Data());
0147       sPhysVarVsPtFrac[iType][iPhysVar].Append(sVsPtFracSuffix.Data());
0148       sPhysVar[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0149       sPhysVarDiff[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0150       sPhysVarFrac[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0151       sPhysVarVsNTpc[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0152       sPhysVarVsDcaXY[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0153       sPhysVarVsDcaZ[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0154       sPhysVarVsPtReco[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0155       sPhysVarVsPtTrue[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0156       sPhysVarVsPtFrac[iType][iPhysVar].Append(sTypeSuffix[iType].Data());
0157     }
0158   }  // end type loop
0159 
0160   // no. of track bins
0161   const UInt_t nTrkBins[NTrkVar]     = {nXYVtxBins, nXYVtxBins, nZVtxBins, nNHitBins, nNHitBins, nNHitBins, nNHitBins, nQualBins, nDcaBins,  nDcaBins,
0162                                         nErrBins,   nErrBins,   nNHitBins, nNHitBins};
0163   const UInt_t nTrkDiffBins[NTrkVar] = {nDVtxBins,  nDVtxBins,  nDVtxBins, nDiffBins, nDiffBins, nDiffBins, nDiffBins, nDiffBins, nDiffBins, nDiffBins,
0164                                         nDiffBins,  nDiffBins,  nDiffBins, nDiffBins};
0165   const UInt_t nTrkFracBins[NTrkVar] = {nFracBins,  nFracBins,  nFracBins, nFracBins, nFracBins, nFracBins, nFracBins, nFracBins, nFracBins, nFracBins,
0166                                         nFracBins,  nFracBins,  nFracBins, nFracBins};
0167 
0168   // no. of physics bins
0169   const UInt_t nPhysBins[NPhysVar]     = {nPhiBins,   nEtaBins,   nPtBins,     nErrBins,  nErrBins,  nErrBins};
0170   const UInt_t nPhysDiffBins[NPhysVar] = {nDiffBins,  nDiffBins,  nDiffBins,   nDiffBins, nDiffBins, nDiffBins};
0171   const UInt_t nPhysFracBins[NPhysVar] = {nFracBins,  nFracBins,  nPtFracBins, nFracBins, nFracBins, nFracBins};
0172 
0173   // track axis ranges
0174   const Float_t rTrkBins[NTrkVar][NRange]     = {{rXYVtxBins[0], rXYVtxBins[1]}, {rXYVtxBins[0], rXYVtxBins[1]}, {rZVtxBins[0], rZVtxBins[1]},
0175                                                  {rNHitBins[0],  rNHitBins[1]},  {rNHitBins[0],  rNHitBins[1]},  {rNHitBins[0], rNHitBins[1]},
0176                                                  {rNHitBins[0],  rNHitBins[1]},  {rQualBins[0],  rQualBins[1]},  {rDcaBins[0],  rDcaBins[1]},
0177                                                  {rDcaBins[0],   rDcaBins[1]},   {rErrBins[0],   rErrBins[1]},   {rErrBins[0],  rErrBins[1]},
0178                                                  {rNHitBins[0],  rNHitBins[1]},  {rNHitBins[0],  rNHitBins[1]}};
0179   const Float_t rTrkDiffBins[NTrkVar][NRange] = {{rDVtxBins[0],  rDVtxBins[1]},  {rDVtxBins[0],  rDVtxBins[1]},  {rDiffBins[0], rDiffBins[1]},
0180                                                  {rDiffBins[0],  rDiffBins[1]},  {rDiffBins[0],  rDiffBins[1]},  {rDiffBins[0], rDiffBins[1]},
0181                                                  {rDiffBins[0],  rDiffBins[1]},  {rDiffBins[0],  rDiffBins[1]},  {rDiffBins[0], rDiffBins[1]},
0182                                                  {rDiffBins[0],  rDiffBins[1]},  {rDiffBins[0],  rDiffBins[1]},  {rDiffBins[0], rDiffBins[1]},
0183                                                  {rDiffBins[0],  rDiffBins[1]},  {rDiffBins[0],  rDiffBins[1]}};
0184   const Float_t rTrkFracBins[NTrkVar][NRange] = {{rFracBins[0],  rFracBins[1]},  {rFracBins[0],  rFracBins[1]},  {rFracBins[0], rFracBins[1]},
0185                                                  {rFracBins[0],  rFracBins[1]},  {rFracBins[0],  rFracBins[1]},  {rFracBins[0], rFracBins[1]},
0186                                                  {rFracBins[0],  rFracBins[1]},  {rFracBins[0],  rFracBins[1]},  {rFracBins[0], rFracBins[1]},
0187                                                  {rFracBins[0],  rFracBins[1]},  {rFracBins[0],  rFracBins[1]},  {rFracBins[0], rFracBins[1]},
0188                                                  {rFracBins[0],  rFracBins[1]},  {rFracBins[0],  rFracBins[1]}};
0189 
0190   // physics axis ranges
0191   const Float_t rPhysBins[NPhysVar][NRange]     = {{rPhiBins[0],  rPhiBins[1]},  {rEtaBins[0],  rEtaBins[1]},  {rPtBins[0],     rPtBins[1]},
0192                                                    {rErrBins[0],  rErrBins[1]},  {rErrBins[0],  rErrBins[1]},  {rErrBins[0],    rErrBins[1]}};
0193   const Float_t rPhysDiffBins[NPhysVar][NRange] = {{rDiffBins[0], rDiffBins[1]}, {rDiffBins[0], rDiffBins[1]}, {rDiffBins[0],   rDiffBins[1]},
0194                                                    {rDiffBins[0], rDiffBins[1]}, {rDiffBins[0], rDiffBins[1]}, {rDiffBins[0],   rDiffBins[1]}};
0195   const Float_t rPhysFracBins[NPhysVar][NRange] = {{rFracBins[0], rFracBins[1]}, {rFracBins[0], rFracBins[1]}, {rPtFracBins[0], rPtFracBins[1]},
0196                                                    {rFracBins[0], rFracBins[1]}, {rFracBins[0], rFracBins[1]}, {rPtFracBins[0], rPtFracBins[1]}};
0197 
0198   // initialize histograms
0199   for (int iType = 0; iType < NType; iType++) {
0200 
0201     // check if histograms should be initialized
0202     if (isBeforeCuts[iType] || isPileup[iType]) {
0203       if (isBeforeCuts[iType] && !doBeforeCuts) continue;
0204       if (isPileup[iType]     && !doPileup)     continue;
0205     }
0206 
0207     for (size_t iTrkVar = 0; iTrkVar < NTrkVar; iTrkVar++) {
0208       hTrkVar[iType][iTrkVar]         = new TH1D(sTrkVar[iType][iTrkVar].Data(),         "", nTrkBins[iTrkVar],     rTrkBins[iTrkVar][0],     rTrkBins[iTrkVar][1]);
0209       hTrkVarDiff[iType][iTrkVar]     = new TH1D(sTrkVarDiff[iType][iTrkVar].Data(),     "", nTrkDiffBins[iTrkVar], rTrkDiffBins[iTrkVar][0], rTrkDiffBins[iTrkVar][1]);
0210       hTrkVarFrac[iType][iTrkVar]     = new TH1D(sTrkVarFrac[iType][iTrkVar].Data(),     "", nTrkFracBins[iTrkVar], rTrkFracBins[iTrkVar][0], rTrkFracBins[iTrkVar][1]);
0211       hTrkVarVsNTpc[iType][iTrkVar]   = new TH2D(sTrkVarVsNTpc[iType][iTrkVar].Data(),   "", nNHitBins,             rNHitBins[0],             rNHitBins[1],   nTrkBins[iTrkVar], rTrkBins[iTrkVar][0], rTrkBins[iTrkVar][1]);
0212       hTrkVarVsDcaXY[iType][iTrkVar]  = new TH2D(sTrkVarVsDcaXY[iType][iTrkVar].Data(),  "", nDcaBins,              rDcaBins[0],              rDcaBins[1],    nTrkBins[iTrkVar], rTrkBins[iTrkVar][0], rTrkBins[iTrkVar][1]);
0213       hTrkVarVsDcaZ[iType][iTrkVar]   = new TH2D(sTrkVarVsDcaZ[iType][iTrkVar].Data(),   "", nDcaBins,              rDcaBins[0],              rDcaBins[1],    nTrkBins[iTrkVar], rTrkBins[iTrkVar][0], rTrkBins[iTrkVar][1]);
0214       hTrkVarVsPtReco[iType][iTrkVar] = new TH2D(sTrkVarVsPtReco[iType][iTrkVar].Data(), "", nPtBins,               rPtBins[0],               rPtBins[1],     nTrkBins[iTrkVar], rTrkBins[iTrkVar][0], rTrkBins[iTrkVar][1]);
0215       hTrkVarVsPtTrue[iType][iTrkVar] = new TH2D(sTrkVarVsPtTrue[iType][iTrkVar].Data(), "", nPtBins,               rPtBins[0],               rPtBins[1],     nTrkBins[iTrkVar], rTrkBins[iTrkVar][0], rTrkBins[iTrkVar][1]);
0216       hTrkVarVsPtFrac[iType][iTrkVar] = new TH2D(sTrkVarVsPtFrac[iType][iTrkVar].Data(), "", nPtFracBins,           rPtFracBins[0],           rPtFracBins[1], nTrkBins[iTrkVar], rTrkBins[iTrkVar][0], rTrkBins[iTrkVar][1]);
0217       hTrkVar[iType][iTrkVar]         -> Sumw2();
0218       hTrkVarDiff[iType][iTrkVar]     -> Sumw2();
0219       hTrkVarFrac[iType][iTrkVar]     -> Sumw2();
0220       hTrkVarVsNTpc[iType][iTrkVar]   -> Sumw2();
0221       hTrkVarVsDcaXY[iType][iTrkVar]  -> Sumw2();
0222       hTrkVarVsDcaZ[iType][iTrkVar]   -> Sumw2();
0223       hTrkVarVsPtReco[iType][iTrkVar] -> Sumw2();
0224       hTrkVarVsPtTrue[iType][iTrkVar] -> Sumw2();
0225       hTrkVarVsPtFrac[iType][iTrkVar] -> Sumw2();
0226     }
0227     for (size_t iPhysVar = 0; iPhysVar < NPhysVar; iPhysVar++) {
0228       hPhysVar[iType][iPhysVar]         = new TH1D(sPhysVar[iType][iPhysVar].Data(),         "", nPhysBins[iPhysVar],     rPhysBins[iPhysVar][0],     rPhysBins[iPhysVar][1]);
0229       hPhysVarDiff[iType][iPhysVar]     = new TH1D(sPhysVarDiff[iType][iPhysVar].Data(),     "", nPhysDiffBins[iPhysVar], rPhysDiffBins[iPhysVar][0], rPhysDiffBins[iPhysVar][1]);
0230       hPhysVarFrac[iType][iPhysVar]     = new TH1D(sPhysVarFrac[iType][iPhysVar].Data(),     "", nPhysFracBins[iPhysVar], rPhysFracBins[iPhysVar][0], rPhysFracBins[iPhysVar][1]);
0231       hPhysVarVsNTpc[iType][iPhysVar]   = new TH2D(sPhysVarVsNTpc[iType][iPhysVar].Data(),   "", nNHitBins,               rNHitBins[0],               rNHitBins[1],   nPhysBins[iPhysVar], rPhysBins[iPhysVar][0], rPhysBins[iPhysVar][1]);
0232       hPhysVarVsDcaXY[iType][iPhysVar]  = new TH2D(sPhysVarVsDcaXY[iType][iPhysVar].Data(),  "", nDcaBins,                rDcaBins[0],                rDcaBins[1],    nPhysBins[iPhysVar], rPhysBins[iPhysVar][0], rPhysBins[iPhysVar][1]);
0233       hPhysVarVsDcaZ[iType][iPhysVar]   = new TH2D(sPhysVarVsDcaZ[iType][iPhysVar].Data(),   "", nDcaBins,                rDcaBins[0],                rDcaBins[1],    nPhysBins[iPhysVar], rPhysBins[iPhysVar][0], rPhysBins[iPhysVar][1]);
0234       hPhysVarVsPtReco[iType][iPhysVar] = new TH2D(sPhysVarVsPtReco[iType][iPhysVar].Data(), "", nPtBins,                 rPtBins[0],                 rPtBins[1],     nPhysBins[iPhysVar], rPhysBins[iPhysVar][0], rPhysBins[iPhysVar][1]);
0235       hPhysVarVsPtTrue[iType][iPhysVar] = new TH2D(sPhysVarVsPtTrue[iType][iPhysVar].Data(), "", nPtBins,                 rPtBins[0],                 rPtBins[1],     nPhysBins[iPhysVar], rPhysBins[iPhysVar][0], rPhysBins[iPhysVar][1]);
0236       hPhysVarVsPtFrac[iType][iPhysVar] = new TH2D(sPhysVarVsPtFrac[iType][iPhysVar].Data(), "", nPtFracBins,             rPtFracBins[0],             rPtFracBins[1], nPhysBins[iPhysVar], rPhysBins[iPhysVar][0], rPhysBins[iPhysVar][1]);
0237       hPhysVar[iType][iPhysVar]         -> Sumw2();
0238       hPhysVarDiff[iType][iPhysVar]     -> Sumw2();
0239       hPhysVarFrac[iType][iPhysVar]     -> Sumw2();
0240       hPhysVarVsNTpc[iType][iPhysVar]   -> Sumw2();
0241       hPhysVarVsDcaXY[iType][iPhysVar]  -> Sumw2();
0242       hPhysVarVsDcaZ[iType][iPhysVar]   -> Sumw2();
0243       hPhysVarVsPtReco[iType][iPhysVar] -> Sumw2();
0244       hPhysVarVsPtTrue[iType][iPhysVar] -> Sumw2();
0245       hPhysVarVsPtFrac[iType][iPhysVar] -> Sumw2();
0246     }
0247   }
0248   cout << "      Initialized output histograms." << endl;
0249   return;
0250 
0251 }  // end 'InitHits()'
0252 
0253 
0254 
0255 void STrackCutStudy::NormalizeHists() {
0256 
0257   for (int iType = 0; iType < NType; iType++) {
0258 
0259     // check if histograms should be normalized
0260     if (isBeforeCuts[iType] || isPileup[iType]) {
0261       if (isBeforeCuts[iType] && !doBeforeCuts) continue;
0262       if (isPileup[iType]     && !doPileup)     continue;
0263     }
0264 
0265     for (size_t iTrkVar = 0; iTrkVar < NTrkVar; iTrkVar++) {
0266       const Double_t intTrkVar         = hTrkVar[iType][iTrkVar]         -> Integral();
0267       const Double_t intTrkVarDiff     = hTrkVarDiff[iType][iTrkVar]     -> Integral();
0268       const Double_t intTrkVarFrac     = hTrkVarFrac[iType][iTrkVar]     -> Integral();
0269       const Double_t intTrkVarVsNTpc   = hTrkVarVsNTpc[iType][iTrkVar]   -> Integral();
0270       const Double_t intTrkVarVsDcaXY  = hTrkVarVsDcaXY[iType][iTrkVar]  -> Integral();
0271       const Double_t intTrkVarVsDcaZ   = hTrkVarVsDcaZ[iType][iTrkVar]   -> Integral();
0272       const Double_t intTrkVarVsPtReco = hTrkVarVsPtReco[iType][iTrkVar] -> Integral();
0273       const Double_t intTrkVarVsPtTrue = hTrkVarVsPtTrue[iType][iTrkVar] -> Integral();
0274       const Double_t intTrkVarVsPtFrac = hTrkVarVsPtFrac[iType][iTrkVar] -> Integral();
0275       if (intTrkVar         > 0.) hTrkVar[iType][iTrkVar]         -> Scale(1. / intTrkVar);
0276       if (intTrkVarDiff     > 0.) hTrkVarDiff[iType][iTrkVar]     -> Scale(1. / intTrkVarDiff);
0277       if (intTrkVarFrac     > 0.) hTrkVarFrac[iType][iTrkVar]     -> Scale(1. / intTrkVarFrac);
0278       if (intTrkVarVsNTpc   > 0.) hTrkVarVsNTpc[iType][iTrkVar]   -> Scale(1. / intTrkVarVsNTpc);
0279       if (intTrkVarVsDcaXY  > 0.) hTrkVarVsDcaXY[iType][iTrkVar]  -> Scale(1. / intTrkVarVsDcaXY);
0280       if (intTrkVarVsDcaZ   > 0.) hTrkVarVsDcaZ[iType][iTrkVar]   -> Scale(1. / intTrkVarVsDcaZ);
0281       if (intTrkVarVsPtReco > 0.) hTrkVarVsPtReco[iType][iTrkVar] -> Scale(1. / intTrkVarVsPtReco);
0282       if (intTrkVarVsPtTrue > 0.) hTrkVarVsPtTrue[iType][iTrkVar] -> Scale(1. / intTrkVarVsPtTrue);
0283       if (intTrkVarVsPtFrac > 0.) hTrkVarVsPtFrac[iType][iTrkVar] -> Scale(1. / intTrkVarVsPtFrac);
0284     }
0285     for (size_t iPhysVar = 0; iPhysVar < NPhysVar; iPhysVar++) {
0286       const Double_t intPhysVar         = hPhysVar[iType][iPhysVar]         -> Integral();
0287       const Double_t intPhysVarDiff     = hPhysVarDiff[iType][iPhysVar]     -> Integral();
0288       const Double_t intPhysVarFrac     = hPhysVarFrac[iType][iPhysVar]     -> Integral();
0289       const Double_t intPhysVarVsNTpc   = hPhysVarVsNTpc[iType][iPhysVar]   -> Integral();
0290       const Double_t intPhysVarVsDcaXY  = hPhysVarVsDcaXY[iType][iPhysVar]  -> Integral();
0291       const Double_t intPhysVarVsDcaZ   = hPhysVarVsDcaZ[iType][iPhysVar]   -> Integral();
0292       const Double_t intPhysVarVsPtReco = hPhysVarVsPtReco[iType][iPhysVar] -> Integral();
0293       const Double_t intPhysVarVsPtTrue = hPhysVarVsPtTrue[iType][iPhysVar] -> Integral();
0294       const Double_t intPhysVarVsPtFrac = hPhysVarVsPtFrac[iType][iPhysVar] -> Integral();
0295       if (intPhysVar         > 0.) hPhysVar[iType][iPhysVar]         -> Scale(1. / intPhysVar);
0296       if (intPhysVarDiff     > 0.) hPhysVarDiff[iType][iPhysVar]     -> Scale(1. / intPhysVarDiff);
0297       if (intPhysVarFrac     > 0.) hPhysVarFrac[iType][iPhysVar]     -> Scale(1. / intPhysVarFrac);
0298       if (intPhysVarVsNTpc   > 0.) hPhysVarVsNTpc[iType][iPhysVar]   -> Scale(1. / intPhysVarVsNTpc);
0299       if (intPhysVarVsDcaXY  > 0.) hPhysVarVsDcaXY[iType][iPhysVar]  -> Scale(1. / intPhysVarVsDcaXY);
0300       if (intPhysVarVsDcaZ   > 0.) hPhysVarVsDcaZ[iType][iPhysVar]   -> Scale(1. / intPhysVarVsDcaZ);
0301       if (intPhysVarVsPtReco > 0.) hPhysVarVsPtReco[iType][iPhysVar] -> Scale(1. / intPhysVarVsPtReco);
0302       if (intPhysVarVsPtTrue > 0.) hPhysVarVsPtTrue[iType][iPhysVar] -> Scale(1. / intPhysVarVsPtTrue);
0303       if (intPhysVarVsPtFrac > 0.) hPhysVarVsPtFrac[iType][iPhysVar] -> Scale(1. / intPhysVarVsPtFrac);
0304     }
0305   }
0306   cout << "      Normalized histograms." << endl;
0307   return;
0308 
0309 }  // end 'NormalizeHists()'
0310 
0311 
0312 
0313 void STrackCutStudy::SetHistStyles() {
0314 
0315   // plot parameters
0316   const UInt_t  fFil(0);
0317   const UInt_t  fLin(1);
0318   const UInt_t  fMar2D(1);
0319   const Float_t fOffX(1.0);
0320   const Float_t fOffY(1.2); 
0321   const Float_t fOffZ(1.0);
0322 
0323   // select count label to use
0324   TString sCountToUse("");
0325   if (doIntNorm) {
0326     sCountToUse = "arbitrary units";
0327   } else {
0328     sCountToUse = "counts";
0329   } 
0330 
0331   // track axis titles
0332   const TString sTrkNMms("N_{layer}^{MMS}");
0333   const TString sTrkNMap("N_{layer}^{MAPS}");
0334   const TString sTrkNInt("N_{layer}^{INTT}");
0335   const TString sTrkNTpc("N_{layer}^{TPC}");
0336   const TString sTrkQuality("#chi^{2}/ndf");
0337   const TString sTrkDCAxy("DCA_{xy} [#mum]");
0338   const TString sTrkDCAz("DCA_{z} [#mum]");
0339   const TString sDeltaDCAxy("#DeltaDCA_{xy} / DCA_{xy}");
0340   const TString sDeltaDCAz("#DeltaDCA_{z} / DCA_{z}");
0341   const TString sTrkVx("v_{x} [cm]");
0342   const TString sTrkVy("v_{y} [cm]");
0343   const TString sTrkVz("v_{z} [cm]");
0344   const TString sTrkPhi("#phi");
0345   const TString sTrkEta("#eta");
0346   const TString sTrkPt("p_{T} [GeV/c]");
0347   const TString sTruPt("p_{T}^{truth} [GeV/c]");
0348   const TString sDeltaEta("#Delta#eta^{trk} / #eta^{trk}");
0349   const TString sDeltaPhi("#Delta#phi^{trk} / #phi^{trk}");
0350   const TString sDeltaPt("#Deltap_{T}^{trk} / p_{T}^{trk}");
0351   const TString sTrkNClust("N_{clust}");
0352   const TString sTrkAvgClust("<cluster size>");
0353 
0354   // difference axis titles
0355   const TString sDiffVx("v_{x}^{reco} - v_{x}^{truth}");
0356   const TString sDiffVy("v_{y}^{reco} - v_{y}^{truth}");
0357   const TString sDiffVz("v_{z}^{reco} - v_{z}^{truth}");
0358   const TString sDiffNMms("N_{layer/reco}^{MMS} - N_{layer/truth}^{MMS}");
0359   const TString sDiffNMap("N_{layer/reco}^{MAP} - N_{layer/truth}^{MAP}");
0360   const TString sDiffNInt("N_{layer/reco}^{INTT} - N_{layer/truth}^{INTT}");
0361   const TString sDiffNTpc("N_{layer/reco}^{TPC} - N_{layer/truth}^{TPC}");
0362   const TString sDiffQual("IRRELEVANT");
0363   const TString sDiffDCAxy("DCA_{xy}^{reco} - DCA_{xy}^{truth} [#mum]");
0364   const TString sDiffDCAz("DCA_{z}^{reco} - DCA_{z}^{truth} [#mum]");
0365   const TString sDiffDeltaDCAxy("IRRELEVANT");
0366   const TString sDiffDeltaDCAz("IRRELEVANT");
0367   const TString sDiffPhi("#phi^{reco} - #phi^{truth}");
0368   const TString sDiffEta("#eta^{reco} - #eta^{truth}");
0369   const TString sDiffPt("p_{T}^{reco} - p_{T}^{truth}");
0370   const TString sDiffDeltaPhi("IRRELEVANT");
0371   const TString sDiffDeltaEta("IRRELEVANT");
0372   const TString sDiffDeltaPt("IRRELEVANT");
0373   const TString sDiffNClust("N_{clust}^{reco} - N_{clust}^{truth}");
0374   const TString sDiffAvgClust("<cluster size>_{reco} - <cluster size>_{truth}");
0375 
0376   // fraction axis titles
0377   const TString sFracVx("v_{x}^{reco} / v_{x}^{truth}");
0378   const TString sFracVy("v_{y}^{reco} / v_{y}^{truth}");
0379   const TString sFracVz("v_{z}^{reco} / v_{z}^{truth}");
0380   const TString sFracMms("N_{layer/reco}^{MMS} / N_{layer/truth}^{MMS}");
0381   const TString sFracMap("N_{layer/reco}^{MAPS} / N_{layer/truth}^{MAPS}");
0382   const TString sFracInt("N_{layer/reco}^{INTT} / N_{layer/truth}^{INTT}");
0383   const TString sFracTpc("N_{layer/reco}^{TPC} / N_{layer/truth}^{TPC}");
0384   const TString sFracTot("N_{layer/reco}^{tot} / N_{layer/truth}^{tot}");
0385   const TString sFracQual("IRRELEVANT");
0386   const TString sFracDCAxy("DCA_{xy}^{reco} / DCA_{xy}^{truth}");
0387   const TString sFracDCAz("DCA_{z}^{reco} / DCA_{z}^{truth}");
0388   const TString sFracDeltaDCAxy("IRRELEVANT");
0389   const TString sFracDeltaDCAz("IRRELEVANT");
0390   const TString sFracPhi("#delta#phi^{trk} = #phi^{trk} / #phi^{truth}");
0391   const TString sFracEta("#delta#eta^{trk} = #eta^{trk} / #eta^{truth}");
0392   const TString sFracPt("#deltap_{T}^{trk} = p_{T}^{trk} / p_{T}^{truth}");
0393   const TString sFracDeltaPhi("IRRELEVANT");
0394   const TString sFracDeltaEta("IRRELEVANT");
0395   const TString sFracDeltaPt("IRRELEVANT");
0396   const TString sFracNClust("N_{clust}^{reco} / N_{clust}^{truth}");
0397   const TString sFracAvgClust("<cluster size>_{reco} / <cluster size>_{truth}");
0398 
0399   // track axis titles
0400   const TString sTrkTitles[NTrkVar]     = {sTrkVx,          sTrkVy,         sTrkVz,      sTrkNMms,   sTrkNMap,  sTrkNInt,  sTrkNTpc,  sTrkQuality, sTrkDCAxy,  sTrkDCAz,
0401                                            sDeltaDCAxy,     sDeltaDCAz,     sTrkNClust,  sTrkAvgClust};
0402   const TString sTrkDiffTitles[NTrkVar] = {sDiffVx,         sDiffVy,        sDiffVz,     sDiffNMms,  sDiffNMap, sDiffNInt, sDiffNTpc, sDiffQual,   sDiffDCAxy, sDiffDCAz,
0403                                            sDiffDeltaDCAxy, sDiffDeltaDCAz, sDiffNClust, sDiffAvgClust};
0404   const TString sTrkFracTitles[NTrkVar] = {sFracVx,         sFracVy,        sFracVz,     sFracMms,   sFracMap,  sFracInt,  sFracTpc,  sFracQual,   sTrkDCAxy,  sTrkDCAz,
0405                                            sFracDeltaDCAxy, sFracDeltaDCAz, sFracNClust, sFracAvgClust};
0406 
0407   // physics axis titles
0408   const TString sPhysTitles[NPhysVar]     = {sTrkPhi,  sTrkEta,  sTrkPt,  sDeltaPhi,     sDeltaEta,     sDeltaPt};
0409   const TString sPhysDiffTitles[NPhysVar] = {sDiffPhi, sDiffEta, sDiffPt, sDiffDeltaPhi, sDiffDeltaEta, sDiffDeltaPt};
0410   const TString sPhysFracTitles[NPhysVar] = {sFracPhi, sFracEta, sFracPt, sFracDeltaPhi, sFracDeltaEta, sFracDeltaPt};
0411 
0412   for (Int_t iType = 0; iType < NType; iType++) {
0413 
0414     // check if histograms should be styled
0415     if (isBeforeCuts[iType] || isPileup[iType]) {
0416       if (isBeforeCuts[iType] && !doBeforeCuts) continue;
0417       if (isPileup[iType]     && !doPileup)     continue;
0418     }
0419 
0420     for (Int_t iTrkVar = 0; iTrkVar < NTrkVar; iTrkVar++) {
0421       hTrkVar[iType][iTrkVar]         -> SetMarkerColor(fTypeCol[iType]);
0422       hTrkVar[iType][iTrkVar]         -> SetMarkerStyle(fTypeMar[iType]);
0423       hTrkVar[iType][iTrkVar]         -> SetLineColor(fTypeCol[iType]);
0424       hTrkVar[iType][iTrkVar]         -> SetLineStyle(fLin);
0425       hTrkVar[iType][iTrkVar]         -> SetFillColor(fTypeCol[iType]);
0426       hTrkVar[iType][iTrkVar]         -> SetFillStyle(fFil);
0427       hTrkVar[iType][iTrkVar]         -> SetTitleFont(FTxt);
0428       hTrkVar[iType][iTrkVar]         -> GetXaxis() -> SetTitle(sTrkTitles[iTrkVar].Data());
0429       hTrkVar[iType][iTrkVar]         -> GetXaxis() -> SetTitleFont(FTxt);
0430       hTrkVar[iType][iTrkVar]         -> GetXaxis() -> SetTitleOffset(fOffX);
0431       hTrkVar[iType][iTrkVar]         -> GetYaxis() -> SetTitle(sCountToUse.Data());
0432       hTrkVar[iType][iTrkVar]         -> GetYaxis() -> SetTitleFont(FTxt);
0433       hTrkVar[iType][iTrkVar]         -> GetYaxis() -> SetTitleOffset(fOffY);
0434       hTrkVarDiff[iType][iTrkVar]     -> SetMarkerColor(fTypeCol[iType]);
0435       hTrkVarDiff[iType][iTrkVar]     -> SetMarkerStyle(fTypeMar[iType]);
0436       hTrkVarDiff[iType][iTrkVar]     -> SetLineColor(fTypeCol[iType]);
0437       hTrkVarDiff[iType][iTrkVar]     -> SetLineStyle(fLin);
0438       hTrkVarDiff[iType][iTrkVar]     -> SetFillColor(fTypeCol[iType]);
0439       hTrkVarDiff[iType][iTrkVar]     -> SetFillStyle(fFil);
0440       hTrkVarDiff[iType][iTrkVar]     -> SetTitleFont(FTxt);
0441       hTrkVarDiff[iType][iTrkVar]     -> GetXaxis() -> SetTitle(sTrkDiffTitles[iTrkVar].Data());
0442       hTrkVarDiff[iType][iTrkVar]     -> GetXaxis() -> SetTitleFont(FTxt);
0443       hTrkVarDiff[iType][iTrkVar]     -> GetXaxis() -> SetTitleOffset(fOffX);
0444       hTrkVarDiff[iType][iTrkVar]     -> GetYaxis() -> SetTitle(sCountToUse.Data());
0445       hTrkVarDiff[iType][iTrkVar]     -> GetYaxis() -> SetTitleFont(FTxt);
0446       hTrkVarDiff[iType][iTrkVar]     -> GetYaxis() -> SetTitleOffset(fOffY);
0447       hTrkVarFrac[iType][iTrkVar]     -> SetMarkerColor(fTypeCol[iType]);
0448       hTrkVarFrac[iType][iTrkVar]     -> SetMarkerStyle(fTypeMar[iType]);
0449       hTrkVarFrac[iType][iTrkVar]     -> SetLineColor(fTypeCol[iType]);
0450       hTrkVarFrac[iType][iTrkVar]     -> SetLineStyle(fLin);
0451       hTrkVarFrac[iType][iTrkVar]     -> SetFillColor(fTypeCol[iType]);
0452       hTrkVarFrac[iType][iTrkVar]     -> SetFillStyle(fFil);
0453       hTrkVarFrac[iType][iTrkVar]     -> SetTitleFont(FTxt);
0454       hTrkVarFrac[iType][iTrkVar]     -> GetXaxis() -> SetTitle(sTrkFracTitles[iTrkVar].Data());
0455       hTrkVarFrac[iType][iTrkVar]     -> GetXaxis() -> SetTitleFont(FTxt);
0456       hTrkVarFrac[iType][iTrkVar]     -> GetXaxis() -> SetTitleOffset(fOffX);
0457       hTrkVarFrac[iType][iTrkVar]     -> GetYaxis() -> SetTitle(sCountToUse.Data());
0458       hTrkVarFrac[iType][iTrkVar]     -> GetYaxis() -> SetTitleFont(FTxt);
0459       hTrkVarFrac[iType][iTrkVar]     -> GetYaxis() -> SetTitleOffset(fOffY);
0460       hTrkVarVsNTpc[iType][iTrkVar]   -> SetMarkerColor(fTypeCol[iType]);
0461       hTrkVarVsNTpc[iType][iTrkVar]   -> SetMarkerStyle(fMar2D);
0462       hTrkVarVsNTpc[iType][iTrkVar]   -> SetLineColor(fTypeCol[iType]);
0463       hTrkVarVsNTpc[iType][iTrkVar]   -> SetLineStyle(fLin);
0464       hTrkVarVsNTpc[iType][iTrkVar]   -> SetFillColor(fTypeCol[iType]);
0465       hTrkVarVsNTpc[iType][iTrkVar]   -> SetFillStyle(fFil);
0466       hTrkVarVsNTpc[iType][iTrkVar]   -> SetTitleFont(FTxt);
0467       hTrkVarVsNTpc[iType][iTrkVar]   -> GetXaxis() -> SetTitle(sTrkNTpc.Data());
0468       hTrkVarVsNTpc[iType][iTrkVar]   -> GetXaxis() -> SetTitleFont(FTxt);
0469       hTrkVarVsNTpc[iType][iTrkVar]   -> GetXaxis() -> SetTitleOffset(fOffX);
0470       hTrkVarVsNTpc[iType][iTrkVar]   -> GetYaxis() -> SetTitle(sTrkTitles[iTrkVar].Data());
0471       hTrkVarVsNTpc[iType][iTrkVar]   -> GetYaxis() -> SetTitleFont(FTxt);
0472       hTrkVarVsNTpc[iType][iTrkVar]   -> GetYaxis() -> SetTitleOffset(fOffY);
0473       hTrkVarVsNTpc[iType][iTrkVar]   -> GetZaxis() -> SetTitle(sCountToUse.Data());
0474       hTrkVarVsNTpc[iType][iTrkVar]   -> GetZaxis() -> SetTitleFont(FTxt);
0475       hTrkVarVsNTpc[iType][iTrkVar]   -> GetZaxis() -> SetTitleOffset(fOffZ);
0476       hTrkVarVsDcaXY[iType][iTrkVar]  -> SetMarkerColor(fTypeCol[iType]);
0477       hTrkVarVsDcaXY[iType][iTrkVar]  -> SetMarkerStyle(fMar2D);
0478       hTrkVarVsDcaXY[iType][iTrkVar]  -> SetLineColor(fTypeCol[iType]);
0479       hTrkVarVsDcaXY[iType][iTrkVar]  -> SetLineStyle(fLin);
0480       hTrkVarVsDcaXY[iType][iTrkVar]  -> SetFillColor(fTypeCol[iType]);
0481       hTrkVarVsDcaXY[iType][iTrkVar]  -> SetFillStyle(fFil);
0482       hTrkVarVsDcaXY[iType][iTrkVar]  -> SetTitleFont(FTxt);
0483       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetXaxis() -> SetTitle(sTrkDCAxy.Data());
0484       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetXaxis() -> SetTitleFont(FTxt);
0485       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetXaxis() -> SetTitleOffset(fOffX);
0486       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetYaxis() -> SetTitle(sTrkTitles[iTrkVar].Data());
0487       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetYaxis() -> SetTitleFont(FTxt);
0488       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetYaxis() -> SetTitleOffset(fOffY);
0489       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetZaxis() -> SetTitle(sCountToUse.Data());
0490       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetZaxis() -> SetTitleFont(FTxt);
0491       hTrkVarVsDcaXY[iType][iTrkVar]  -> GetZaxis() -> SetTitleOffset(fOffZ);
0492       hTrkVarVsDcaZ[iType][iTrkVar]   -> SetMarkerColor(fTypeCol[iType]);
0493       hTrkVarVsDcaZ[iType][iTrkVar]   -> SetMarkerStyle(fMar2D);
0494       hTrkVarVsDcaZ[iType][iTrkVar]   -> SetLineColor(fTypeCol[iType]);
0495       hTrkVarVsDcaZ[iType][iTrkVar]   -> SetLineStyle(fLin);
0496       hTrkVarVsDcaZ[iType][iTrkVar]   -> SetFillColor(fTypeCol[iType]);
0497       hTrkVarVsDcaZ[iType][iTrkVar]   -> SetFillStyle(fFil);
0498       hTrkVarVsDcaZ[iType][iTrkVar]   -> SetTitleFont(FTxt);
0499       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetXaxis() -> SetTitle(sTrkDCAz.Data());
0500       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetXaxis() -> SetTitleFont(FTxt);
0501       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetXaxis() -> SetTitleOffset(fOffX);
0502       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetYaxis() -> SetTitle(sTrkTitles[iTrkVar].Data());
0503       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetYaxis() -> SetTitleFont(FTxt);
0504       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetYaxis() -> SetTitleOffset(fOffY);
0505       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetZaxis() -> SetTitle(sCountToUse.Data());
0506       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetZaxis() -> SetTitleFont(FTxt);
0507       hTrkVarVsDcaZ[iType][iTrkVar]   -> GetZaxis() -> SetTitleOffset(fOffZ);
0508       hTrkVarVsPtReco[iType][iTrkVar] -> SetMarkerColor(fTypeCol[iType]);
0509       hTrkVarVsPtReco[iType][iTrkVar] -> SetMarkerStyle(fMar2D);
0510       hTrkVarVsPtReco[iType][iTrkVar] -> SetLineColor(fTypeCol[iType]);
0511       hTrkVarVsPtReco[iType][iTrkVar] -> SetLineStyle(fLin);
0512       hTrkVarVsPtReco[iType][iTrkVar] -> SetFillColor(fTypeCol[iType]);
0513       hTrkVarVsPtReco[iType][iTrkVar] -> SetFillStyle(fFil);
0514       hTrkVarVsPtReco[iType][iTrkVar] -> SetTitleFont(FTxt);
0515       hTrkVarVsPtReco[iType][iTrkVar] -> GetXaxis() -> SetTitle(sTrkPt.Data());
0516       hTrkVarVsPtReco[iType][iTrkVar] -> GetXaxis() -> SetTitleFont(FTxt);
0517       hTrkVarVsPtReco[iType][iTrkVar] -> GetXaxis() -> SetTitleOffset(fOffX);
0518       hTrkVarVsPtReco[iType][iTrkVar] -> GetYaxis() -> SetTitle(sTrkTitles[iTrkVar].Data());
0519       hTrkVarVsPtReco[iType][iTrkVar] -> GetYaxis() -> SetTitleFont(FTxt);
0520       hTrkVarVsPtReco[iType][iTrkVar] -> GetYaxis() -> SetTitleOffset(fOffY);
0521       hTrkVarVsPtReco[iType][iTrkVar] -> GetZaxis() -> SetTitle(sCountToUse.Data());
0522       hTrkVarVsPtReco[iType][iTrkVar] -> GetZaxis() -> SetTitleFont(FTxt);
0523       hTrkVarVsPtReco[iType][iTrkVar] -> GetZaxis() -> SetTitleOffset(fOffZ);
0524       hTrkVarVsPtTrue[iType][iTrkVar] -> SetMarkerColor(fTypeCol[iType]);
0525       hTrkVarVsPtTrue[iType][iTrkVar] -> SetMarkerStyle(fMar2D);
0526       hTrkVarVsPtTrue[iType][iTrkVar] -> SetLineColor(fTypeCol[iType]);
0527       hTrkVarVsPtTrue[iType][iTrkVar] -> SetLineStyle(fLin);
0528       hTrkVarVsPtTrue[iType][iTrkVar] -> SetFillColor(fTypeCol[iType]);
0529       hTrkVarVsPtTrue[iType][iTrkVar] -> SetFillStyle(fFil);
0530       hTrkVarVsPtTrue[iType][iTrkVar] -> SetTitleFont(FTxt);
0531       hTrkVarVsPtTrue[iType][iTrkVar] -> GetXaxis() -> SetTitle(sTruPt.Data());
0532       hTrkVarVsPtTrue[iType][iTrkVar] -> GetXaxis() -> SetTitleFont(FTxt);
0533       hTrkVarVsPtTrue[iType][iTrkVar] -> GetXaxis() -> SetTitleOffset(fOffX);
0534       hTrkVarVsPtTrue[iType][iTrkVar] -> GetYaxis() -> SetTitle(sTrkTitles[iTrkVar].Data());
0535       hTrkVarVsPtTrue[iType][iTrkVar] -> GetYaxis() -> SetTitleFont(FTxt);
0536       hTrkVarVsPtTrue[iType][iTrkVar] -> GetYaxis() -> SetTitleOffset(fOffY);
0537       hTrkVarVsPtTrue[iType][iTrkVar] -> GetZaxis() -> SetTitle(sCountToUse.Data());
0538       hTrkVarVsPtTrue[iType][iTrkVar] -> GetZaxis() -> SetTitleFont(FTxt);
0539       hTrkVarVsPtTrue[iType][iTrkVar] -> GetZaxis() -> SetTitleOffset(fOffZ);
0540       hTrkVarVsPtFrac[iType][iTrkVar] -> SetMarkerColor(fTypeCol[iType]);
0541       hTrkVarVsPtFrac[iType][iTrkVar] -> SetMarkerStyle(fMar2D);
0542       hTrkVarVsPtFrac[iType][iTrkVar] -> SetLineColor(fTypeCol[iType]);
0543       hTrkVarVsPtFrac[iType][iTrkVar] -> SetLineStyle(fLin);
0544       hTrkVarVsPtFrac[iType][iTrkVar] -> SetFillColor(fTypeCol[iType]);
0545       hTrkVarVsPtFrac[iType][iTrkVar] -> SetFillStyle(fFil);
0546       hTrkVarVsPtFrac[iType][iTrkVar] -> SetTitleFont(FTxt);
0547       hTrkVarVsPtFrac[iType][iTrkVar] -> GetXaxis() -> SetTitle(sFracPt.Data());
0548       hTrkVarVsPtFrac[iType][iTrkVar] -> GetXaxis() -> SetTitleFont(FTxt);
0549       hTrkVarVsPtFrac[iType][iTrkVar] -> GetXaxis() -> SetTitleOffset(fOffX);
0550       hTrkVarVsPtFrac[iType][iTrkVar] -> GetYaxis() -> SetTitle(sTrkTitles[iTrkVar].Data());
0551       hTrkVarVsPtFrac[iType][iTrkVar] -> GetYaxis() -> SetTitleFont(FTxt);
0552       hTrkVarVsPtFrac[iType][iTrkVar] -> GetYaxis() -> SetTitleOffset(fOffY);
0553       hTrkVarVsPtFrac[iType][iTrkVar] -> GetZaxis() -> SetTitle(sCountToUse.Data());
0554       hTrkVarVsPtFrac[iType][iTrkVar] -> GetZaxis() -> SetTitleFont(FTxt);
0555       hTrkVarVsPtFrac[iType][iTrkVar] -> GetZaxis() -> SetTitleOffset(fOffZ);
0556     }
0557     for (Int_t iPhysVar = 0; iPhysVar < NPhysVar; iPhysVar++) {
0558       hPhysVar[iType][iPhysVar]         -> SetMarkerColor(fTypeCol[iType]);
0559       hPhysVar[iType][iPhysVar]         -> SetMarkerStyle(fTypeMar[iType]);
0560       hPhysVar[iType][iPhysVar]         -> SetLineColor(fTypeCol[iType]);
0561       hPhysVar[iType][iPhysVar]         -> SetLineStyle(fLin);
0562       hPhysVar[iType][iPhysVar]         -> SetFillColor(fTypeCol[iType]);
0563       hPhysVar[iType][iPhysVar]         -> SetFillStyle(fFil);
0564       hPhysVar[iType][iPhysVar]         -> SetTitleFont(FTxt);
0565       hPhysVar[iType][iPhysVar]         -> GetXaxis() -> SetTitle(sPhysTitles[iPhysVar].Data());
0566       hPhysVar[iType][iPhysVar]         -> GetXaxis() -> SetTitleFont(FTxt);
0567       hPhysVar[iType][iPhysVar]         -> GetXaxis() -> SetTitleOffset(fOffX);
0568       hPhysVar[iType][iPhysVar]         -> GetYaxis() -> SetTitle(sCountToUse.Data());
0569       hPhysVar[iType][iPhysVar]         -> GetYaxis() -> SetTitleFont(FTxt);
0570       hPhysVar[iType][iPhysVar]         -> GetYaxis() -> SetTitleOffset(fOffY);
0571       hPhysVarDiff[iType][iPhysVar]     -> SetMarkerColor(fTypeCol[iType]);
0572       hPhysVarDiff[iType][iPhysVar]     -> SetMarkerStyle(fTypeMar[iType]);
0573       hPhysVarDiff[iType][iPhysVar]     -> SetLineColor(fTypeCol[iType]);
0574       hPhysVarDiff[iType][iPhysVar]     -> SetLineStyle(fLin);
0575       hPhysVarDiff[iType][iPhysVar]     -> SetFillColor(fTypeCol[iType]);
0576       hPhysVarDiff[iType][iPhysVar]     -> SetFillStyle(fFil);
0577       hPhysVarDiff[iType][iPhysVar]     -> SetTitleFont(FTxt);
0578       hPhysVarDiff[iType][iPhysVar]     -> GetXaxis() -> SetTitle(sPhysDiffTitles[iPhysVar].Data());
0579       hPhysVarDiff[iType][iPhysVar]     -> GetXaxis() -> SetTitleFont(FTxt);
0580       hPhysVarDiff[iType][iPhysVar]     -> GetXaxis() -> SetTitleOffset(fOffX);
0581       hPhysVarDiff[iType][iPhysVar]     -> GetYaxis() -> SetTitle(sCountToUse.Data());
0582       hPhysVarDiff[iType][iPhysVar]     -> GetYaxis() -> SetTitleFont(FTxt);
0583       hPhysVarDiff[iType][iPhysVar]     -> GetYaxis() -> SetTitleOffset(fOffY);
0584       hPhysVarFrac[iType][iPhysVar]     -> SetMarkerColor(fTypeCol[iType]);
0585       hPhysVarFrac[iType][iPhysVar]     -> SetMarkerStyle(fTypeMar[iType]);
0586       hPhysVarFrac[iType][iPhysVar]     -> SetLineColor(fTypeCol[iType]);
0587       hPhysVarFrac[iType][iPhysVar]     -> SetLineStyle(fLin);
0588       hPhysVarFrac[iType][iPhysVar]     -> SetFillColor(fTypeCol[iType]);
0589       hPhysVarFrac[iType][iPhysVar]     -> SetFillStyle(fFil);
0590       hPhysVarFrac[iType][iPhysVar]     -> SetTitleFont(FTxt);
0591       hPhysVarFrac[iType][iPhysVar]     -> GetXaxis() -> SetTitle(sPhysFracTitles[iPhysVar].Data());
0592       hPhysVarFrac[iType][iPhysVar]     -> GetXaxis() -> SetTitleFont(FTxt);
0593       hPhysVarFrac[iType][iPhysVar]     -> GetXaxis() -> SetTitleOffset(fOffX);
0594       hPhysVarFrac[iType][iPhysVar]     -> GetYaxis() -> SetTitle(sCountToUse.Data());
0595       hPhysVarFrac[iType][iPhysVar]     -> GetYaxis() -> SetTitleFont(FTxt);
0596       hPhysVarFrac[iType][iPhysVar]     -> GetYaxis() -> SetTitleOffset(fOffY);
0597       hPhysVarVsNTpc[iType][iPhysVar]   -> SetMarkerColor(fTypeCol[iType]);
0598       hPhysVarVsNTpc[iType][iPhysVar]   -> SetMarkerStyle(fMar2D);
0599       hPhysVarVsNTpc[iType][iPhysVar]   -> SetLineColor(fTypeCol[iType]);
0600       hPhysVarVsNTpc[iType][iPhysVar]   -> SetLineStyle(fLin);
0601       hPhysVarVsNTpc[iType][iPhysVar]   -> SetFillColor(fTypeCol[iType]);
0602       hPhysVarVsNTpc[iType][iPhysVar]   -> SetFillStyle(fFil);
0603       hPhysVarVsNTpc[iType][iPhysVar]   -> SetTitleFont(FTxt);
0604       hPhysVarVsNTpc[iType][iPhysVar]   -> GetXaxis() -> SetTitle(sTrkNTpc.Data());
0605       hPhysVarVsNTpc[iType][iPhysVar]   -> GetXaxis() -> SetTitleFont(FTxt);
0606       hPhysVarVsNTpc[iType][iPhysVar]   -> GetXaxis() -> SetTitleOffset(fOffX);
0607       hPhysVarVsNTpc[iType][iPhysVar]   -> GetYaxis() -> SetTitle(sPhysTitles[iPhysVar].Data());
0608       hPhysVarVsNTpc[iType][iPhysVar]   -> GetYaxis() -> SetTitleFont(FTxt);
0609       hPhysVarVsNTpc[iType][iPhysVar]   -> GetYaxis() -> SetTitleOffset(fOffY);
0610       hPhysVarVsNTpc[iType][iPhysVar]   -> GetZaxis() -> SetTitle(sCountToUse.Data());
0611       hPhysVarVsNTpc[iType][iPhysVar]   -> GetZaxis() -> SetTitleFont(FTxt);
0612       hPhysVarVsNTpc[iType][iPhysVar]   -> GetZaxis() -> SetTitleOffset(fOffZ);
0613       hPhysVarVsDcaXY[iType][iPhysVar]  -> SetMarkerColor(fTypeCol[iType]);
0614       hPhysVarVsDcaXY[iType][iPhysVar]  -> SetMarkerStyle(fMar2D);
0615       hPhysVarVsDcaXY[iType][iPhysVar]  -> SetLineColor(fTypeCol[iType]);
0616       hPhysVarVsDcaXY[iType][iPhysVar]  -> SetLineStyle(fLin);
0617       hPhysVarVsDcaXY[iType][iPhysVar]  -> SetFillColor(fTypeCol[iType]);
0618       hPhysVarVsDcaXY[iType][iPhysVar]  -> SetFillStyle(fFil);
0619       hPhysVarVsDcaXY[iType][iPhysVar]  -> SetTitleFont(FTxt);
0620       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetXaxis() -> SetTitle(sTrkDCAxy.Data());
0621       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetXaxis() -> SetTitleFont(FTxt);
0622       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetXaxis() -> SetTitleOffset(fOffX);
0623       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetYaxis() -> SetTitle(sPhysTitles[iPhysVar].Data());
0624       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetYaxis() -> SetTitleFont(FTxt);
0625       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetYaxis() -> SetTitleOffset(fOffY);
0626       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetZaxis() -> SetTitle(sCountToUse.Data());
0627       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetZaxis() -> SetTitleFont(FTxt);
0628       hPhysVarVsDcaXY[iType][iPhysVar]  -> GetZaxis() -> SetTitleOffset(fOffZ);
0629       hPhysVarVsDcaZ[iType][iPhysVar]   -> SetMarkerColor(fTypeCol[iType]);
0630       hPhysVarVsDcaZ[iType][iPhysVar]   -> SetMarkerStyle(fMar2D);
0631       hPhysVarVsDcaZ[iType][iPhysVar]   -> SetLineColor(fTypeCol[iType]);
0632       hPhysVarVsDcaZ[iType][iPhysVar]   -> SetLineStyle(fLin);
0633       hPhysVarVsDcaZ[iType][iPhysVar]   -> SetFillColor(fTypeCol[iType]);
0634       hPhysVarVsDcaZ[iType][iPhysVar]   -> SetFillStyle(fFil);
0635       hPhysVarVsDcaZ[iType][iPhysVar]   -> SetTitleFont(FTxt);
0636       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetXaxis() -> SetTitle(sTrkDCAz.Data());
0637       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetXaxis() -> SetTitleFont(FTxt);
0638       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetXaxis() -> SetTitleOffset(fOffX);
0639       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetYaxis() -> SetTitle(sPhysTitles[iPhysVar].Data());
0640       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetYaxis() -> SetTitleFont(FTxt);
0641       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetYaxis() -> SetTitleOffset(fOffY);
0642       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetZaxis() -> SetTitle(sCountToUse.Data());
0643       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetZaxis() -> SetTitleFont(FTxt);
0644       hPhysVarVsDcaZ[iType][iPhysVar]   -> GetZaxis() -> SetTitleOffset(fOffZ);
0645       hPhysVarVsPtReco[iType][iPhysVar] -> SetMarkerColor(fTypeCol[iType]);
0646       hPhysVarVsPtReco[iType][iPhysVar] -> SetMarkerStyle(fMar2D);
0647       hPhysVarVsPtReco[iType][iPhysVar] -> SetLineColor(fTypeCol[iType]);
0648       hPhysVarVsPtReco[iType][iPhysVar] -> SetLineStyle(fLin);
0649       hPhysVarVsPtReco[iType][iPhysVar] -> SetFillColor(fTypeCol[iType]);
0650       hPhysVarVsPtReco[iType][iPhysVar] -> SetFillStyle(fFil);
0651       hPhysVarVsPtReco[iType][iPhysVar] -> SetTitleFont(FTxt);
0652       hPhysVarVsPtReco[iType][iPhysVar] -> GetXaxis() -> SetTitle(sTrkPt.Data());
0653       hPhysVarVsPtReco[iType][iPhysVar] -> GetXaxis() -> SetTitleFont(FTxt);
0654       hPhysVarVsPtReco[iType][iPhysVar] -> GetXaxis() -> SetTitleOffset(fOffX);
0655       hPhysVarVsPtReco[iType][iPhysVar] -> GetYaxis() -> SetTitle(sPhysTitles[iPhysVar].Data());
0656       hPhysVarVsPtReco[iType][iPhysVar] -> GetYaxis() -> SetTitleFont(FTxt);
0657       hPhysVarVsPtReco[iType][iPhysVar] -> GetYaxis() -> SetTitleOffset(fOffY);
0658       hPhysVarVsPtReco[iType][iPhysVar] -> GetZaxis() -> SetTitle(sCountToUse.Data());
0659       hPhysVarVsPtReco[iType][iPhysVar] -> GetZaxis() -> SetTitleFont(FTxt);
0660       hPhysVarVsPtReco[iType][iPhysVar] -> GetZaxis() -> SetTitleOffset(fOffZ);
0661       hPhysVarVsPtTrue[iType][iPhysVar] -> SetMarkerColor(fTypeCol[iType]);
0662       hPhysVarVsPtTrue[iType][iPhysVar] -> SetMarkerStyle(fMar2D);
0663       hPhysVarVsPtTrue[iType][iPhysVar] -> SetLineColor(fTypeCol[iType]);
0664       hPhysVarVsPtTrue[iType][iPhysVar] -> SetLineStyle(fLin);
0665       hPhysVarVsPtTrue[iType][iPhysVar] -> SetFillColor(fTypeCol[iType]);
0666       hPhysVarVsPtTrue[iType][iPhysVar] -> SetFillStyle(fFil);
0667       hPhysVarVsPtTrue[iType][iPhysVar] -> SetTitleFont(FTxt);
0668       hPhysVarVsPtTrue[iType][iPhysVar] -> GetXaxis() -> SetTitle(sTruPt.Data());
0669       hPhysVarVsPtTrue[iType][iPhysVar] -> GetXaxis() -> SetTitleFont(FTxt);
0670       hPhysVarVsPtTrue[iType][iPhysVar] -> GetXaxis() -> SetTitleOffset(fOffX);
0671       hPhysVarVsPtTrue[iType][iPhysVar] -> GetYaxis() -> SetTitle(sPhysTitles[iPhysVar].Data());
0672       hPhysVarVsPtTrue[iType][iPhysVar] -> GetYaxis() -> SetTitleFont(FTxt);
0673       hPhysVarVsPtTrue[iType][iPhysVar] -> GetYaxis() -> SetTitleOffset(fOffY);
0674       hPhysVarVsPtTrue[iType][iPhysVar] -> GetZaxis() -> SetTitle(sCountToUse.Data());
0675       hPhysVarVsPtTrue[iType][iPhysVar] -> GetZaxis() -> SetTitleFont(FTxt);
0676       hPhysVarVsPtTrue[iType][iPhysVar] -> GetZaxis() -> SetTitleOffset(fOffZ);
0677       hPhysVarVsPtFrac[iType][iPhysVar] -> SetMarkerColor(fTypeCol[iType]);
0678       hPhysVarVsPtFrac[iType][iPhysVar] -> SetMarkerStyle(fMar2D);
0679       hPhysVarVsPtFrac[iType][iPhysVar] -> SetLineColor(fTypeCol[iType]);
0680       hPhysVarVsPtFrac[iType][iPhysVar] -> SetLineStyle(fLin);
0681       hPhysVarVsPtFrac[iType][iPhysVar] -> SetFillColor(fTypeCol[iType]);
0682       hPhysVarVsPtFrac[iType][iPhysVar] -> SetFillStyle(fFil);
0683       hPhysVarVsPtFrac[iType][iPhysVar] -> SetTitleFont(FTxt);
0684       hPhysVarVsPtFrac[iType][iPhysVar] -> GetXaxis() -> SetTitle(sFracPt.Data());
0685       hPhysVarVsPtFrac[iType][iPhysVar] -> GetXaxis() -> SetTitleFont(FTxt);
0686       hPhysVarVsPtFrac[iType][iPhysVar] -> GetXaxis() -> SetTitleOffset(fOffX);
0687       hPhysVarVsPtFrac[iType][iPhysVar] -> GetYaxis() -> SetTitle(sPhysTitles[iPhysVar].Data());
0688       hPhysVarVsPtFrac[iType][iPhysVar] -> GetYaxis() -> SetTitleFont(FTxt);
0689       hPhysVarVsPtFrac[iType][iPhysVar] -> GetYaxis() -> SetTitleOffset(fOffY);
0690       hPhysVarVsPtFrac[iType][iPhysVar] -> GetZaxis() -> SetTitle(sCountToUse.Data());
0691       hPhysVarVsPtFrac[iType][iPhysVar] -> GetZaxis() -> SetTitleFont(FTxt);
0692       hPhysVarVsPtFrac[iType][iPhysVar] -> GetZaxis() -> SetTitleOffset(fOffZ);
0693     }
0694   }
0695   cout << "      Set histogram styles." << endl;
0696   return;
0697 
0698 }  // end 'SetHistStyles()'
0699 
0700 
0701 
0702 void STrackCutStudy::FillTrackHistograms(const Int_t type, const Double_t recoTrkVars[], const Double_t trueTrkVars[], const Double_t recoPhysVars[], const Double_t truePhysVars[]) {
0703 
0704   // make sure you're filling a non-truth-type histogram
0705   if (isTruth[type]) {
0706     cerr << "PANIC: trying to fill truth histograms in non-truth style! Check what you wrote!\n" << endl;
0707     assert(!isTruth[type]);
0708   }
0709 
0710   // grab 2d x-axes
0711   const auto nTpc   = recoTrkVars[TRKVAR::NTPC];
0712   const auto dcaXY  = recoTrkVars[TRKVAR::DCAXY];
0713   const auto dcaZ   = recoTrkVars[TRKVAR::DCAZ];
0714   const auto ptRec  = recoPhysVars[PHYSVAR::PT];
0715   const auto ptTrue = truePhysVars[PHYSVAR::PT];
0716   const auto ptFrac = ptRec / ptTrue;
0717 
0718   // fill track variable hists
0719   for (size_t iTrkVar = 0; iTrkVar < NTrkVar; iTrkVar++) {
0720 
0721     // calculate difference and fraction
0722     const auto trkVarDiff = recoTrkVars[iTrkVar] - trueTrkVars[iTrkVar];
0723     const auto trkVarFrac = recoTrkVars[iTrkVar] / trueTrkVars[iTrkVar];
0724 
0725     // fill hists
0726     hTrkVar[type][iTrkVar]         -> Fill(recoTrkVars[iTrkVar]);
0727     hTrkVarDiff[type][iTrkVar]     -> Fill(trkVarDiff);
0728     hTrkVarFrac[type][iTrkVar]     -> Fill(trkVarFrac);
0729     hTrkVarVsNTpc[type][iTrkVar]   -> Fill(nTpc,   recoTrkVars[iTrkVar]);
0730     hTrkVarVsDcaXY[type][iTrkVar]  -> Fill(dcaXY,  recoTrkVars[iTrkVar]);
0731     hTrkVarVsDcaZ[type][iTrkVar]   -> Fill(dcaZ,   recoTrkVars[iTrkVar]);
0732     hTrkVarVsPtReco[type][iTrkVar] -> Fill(ptRec,  recoTrkVars[iTrkVar]);
0733     hTrkVarVsPtTrue[type][iTrkVar] -> Fill(ptTrue, recoTrkVars[iTrkVar]);
0734     hTrkVarVsPtFrac[type][iTrkVar] -> Fill(ptFrac, recoTrkVars[iTrkVar]); 
0735   }
0736 
0737   // fill track variable hists
0738   for (size_t iPhysVar = 0; iPhysVar < NPhysVar; iPhysVar++) {
0739 
0740     // calculate difference and fraction
0741     const auto trkVarDiff = recoPhysVars[iPhysVar] - truePhysVars[iPhysVar];
0742     const auto trkVarFrac = recoPhysVars[iPhysVar] / truePhysVars[iPhysVar];
0743 
0744     // fill hists
0745     hPhysVar[type][iPhysVar]         -> Fill(recoPhysVars[iPhysVar]);
0746     hPhysVarDiff[type][iPhysVar]     -> Fill(trkVarDiff);
0747     hPhysVarFrac[type][iPhysVar]     -> Fill(trkVarFrac);
0748     hPhysVarVsNTpc[type][iPhysVar]   -> Fill(nTpc,   recoPhysVars[iPhysVar]);
0749     hPhysVarVsDcaXY[type][iPhysVar]  -> Fill(dcaXY,  recoPhysVars[iPhysVar]);
0750     hPhysVarVsDcaZ[type][iPhysVar]   -> Fill(dcaZ,   recoPhysVars[iPhysVar]);
0751     hPhysVarVsPtReco[type][iPhysVar] -> Fill(ptRec,  recoPhysVars[iPhysVar]);
0752     hPhysVarVsPtTrue[type][iPhysVar] -> Fill(ptTrue, recoPhysVars[iPhysVar]);
0753     hPhysVarVsPtFrac[type][iPhysVar] -> Fill(ptFrac, recoPhysVars[iPhysVar]); 
0754   }
0755   return;
0756 
0757 }  // end 'FillTrackHistograms(Int_t, Double_t[], Double_t[], Double_t[], Double_t[])'
0758 
0759 
0760 
0761 void STrackCutStudy::FillTruthHistograms(const Int_t type, const Double_t recoTrkVars[], const Double_t trueTrkVars[], const Double_t recoPhysVars[], const Double_t truePhysVars[]) {
0762 
0763   // make sure you're filling a truth-type histogram
0764   if (!isTruth[type]) {
0765     cerr << "PANIC: trying to fill non-truth histograms in truth style! Check what you wrote!\n" << endl;
0766     assert(isTruth[type]);
0767   }
0768 
0769   // grab 2d x-axes
0770   const auto nTpc   = recoTrkVars[TRKVAR::NTPC];
0771   const auto dcaXY  = recoTrkVars[TRKVAR::DCAXY];
0772   const auto dcaZ   = recoTrkVars[TRKVAR::DCAZ];
0773   const auto ptRec  = recoPhysVars[PHYSVAR::PT];
0774   const auto ptTrue = truePhysVars[PHYSVAR::PT];
0775   const auto ptFrac = ptRec / ptTrue;
0776 
0777   // fill track variable hists
0778   for (size_t iTrkVar = 0; iTrkVar < NTrkVar; iTrkVar++) {
0779 
0780     // make sure variable has truth value
0781     if (!trkVarHasTruVal[iTrkVar]) continue;
0782 
0783     // fill hists
0784     hTrkVar[type][iTrkVar]         -> Fill(trueTrkVars[iTrkVar]);
0785     hTrkVarVsNTpc[type][iTrkVar]   -> Fill(nTpc,   trueTrkVars[iTrkVar]);
0786     hTrkVarVsDcaXY[type][iTrkVar]  -> Fill(dcaXY,  trueTrkVars[iTrkVar]);
0787     hTrkVarVsDcaZ[type][iTrkVar]   -> Fill(dcaZ,   trueTrkVars[iTrkVar]);
0788     hTrkVarVsPtReco[type][iTrkVar] -> Fill(ptRec,  trueTrkVars[iTrkVar]);
0789     hTrkVarVsPtTrue[type][iTrkVar] -> Fill(ptTrue, trueTrkVars[iTrkVar]);
0790     hTrkVarVsPtFrac[type][iTrkVar] -> Fill(ptFrac, trueTrkVars[iTrkVar]); 
0791   }
0792 
0793   // fill track variable hists
0794   for (size_t iPhysVar = 0; iPhysVar < NPhysVar; iPhysVar++) {
0795 
0796     // make sure variable has truth value
0797     if (!physVarHasTruVal[iPhysVar]) continue;
0798 
0799     // fill hists
0800     hPhysVar[type][iPhysVar]         -> Fill(truePhysVars[iPhysVar]);
0801     hPhysVarVsNTpc[type][iPhysVar]   -> Fill(nTpc,   truePhysVars[iPhysVar]);
0802     hPhysVarVsDcaXY[type][iPhysVar]  -> Fill(dcaXY,  truePhysVars[iPhysVar]);
0803     hPhysVarVsDcaZ[type][iPhysVar]   -> Fill(dcaZ,   truePhysVars[iPhysVar]);
0804     hPhysVarVsPtReco[type][iPhysVar] -> Fill(ptRec,  truePhysVars[iPhysVar]);
0805     hPhysVarVsPtTrue[type][iPhysVar] -> Fill(ptTrue, truePhysVars[iPhysVar]);
0806     hPhysVarVsPtFrac[type][iPhysVar] -> Fill(ptFrac, truePhysVars[iPhysVar]); 
0807   }
0808   return;
0809 
0810 }  // end 'FillTruthHistograms(Int_t, Double_t[], Double_t[], Double_t[], Double_t[])'
0811 
0812 // end ------------------------------------------------------------------------