Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 // ----------------------------------------------------------------------------
0002 // 'STrackCutStudy.h'
0003 // Derek Anderson
0004 // 12.15.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 #ifndef STRACKCUTSTUDY_H
0013 #define STRACKCUTSTUDY_H
0014 
0015 // standard c includes
0016 #include <cmath>
0017 #include <vector>
0018 #include <cassert>
0019 #include <cstdlib>
0020 #include <utility>
0021 #include <iostream>
0022 // root includes
0023 #include <TH1.h>
0024 #include <TH2.h>
0025 #include <TPad.h>
0026 #include <TFile.h>
0027 #include <TMath.h>
0028 #include <TError.h>
0029 #include <TNtuple.h>
0030 #include <TString.h>
0031 #include <TLegend.h>
0032 #include <TCanvas.h>
0033 #include <TPaveText.h>
0034 #include <TDirectory.h>
0035 
0036 using namespace std;
0037 
0038 // global constants
0039 static const Ssiz_t NVtx(4);
0040 static const Ssiz_t NType(18);
0041 static const Ssiz_t NTrkVar(14);
0042 static const Ssiz_t NPhysVar(6);
0043 static const Ssiz_t NRange(2);
0044 static const Ssiz_t NPanel(2);
0045 static const UInt_t FTxt(42);
0046 
0047 
0048 
0049 class STrackCutStudy {
0050 
0051   public:
0052 
0053     // enums
0054     enum TRKVAR {
0055       VX       = 0,
0056       VY       = 1,
0057       VZ       = 2,
0058       NMMS     = 3,
0059       NMAP     = 4,
0060       NINT     = 5,
0061       NTPC     = 6,
0062       QUAL     = 7,
0063       DCAXY    = 8,
0064       DCAZ     = 9,
0065       DELDCAXY = 10,
0066       DELDCAZ  = 11,
0067       NCLUST   = 12,
0068       AVGCLUST = 13
0069     };
0070     enum PHYSVAR {
0071       PHI    = 0,
0072       ETA    = 1,
0073       PT     = 2,
0074       DELPHI = 3,
0075       DELETA = 4,
0076       DELPT  = 5
0077     };
0078     enum TYPE {
0079       TRACK         = 0,
0080       TRUTH         = 1,
0081       WEIRD_ALL     = 2,
0082       WEIRD_SI      = 3,
0083       WEIRD_TPC     = 4,
0084       NORMAL        = 5,
0085       PILEUP        = 6,
0086       PRIMARY       = 7,
0087       NONPRIM       = 8,
0088       TRK_CUT       = 9,
0089       TRU_CUT       = 10,
0090       WEIRD_CUT     = 11,
0091       WEIRD_SI_CUT  = 12,
0092       WEIRD_TPC_CUT = 13,
0093       NORM_CUT      = 14,
0094       PILE_CUT      = 15,
0095       PRIM_CUT      = 16,
0096       NONPRIM_CUT   = 17
0097     };
0098 
0099     // ctor/dtor
0100     STrackCutStudy();
0101     ~STrackCutStudy();
0102 
0103     // public methods
0104     void SetBatchMode(const Bool_t doBatch=false);
0105     void SetInputOutputFiles(const TString sEmbedOnlyInput, const TString sPileupInput, const TString sOutput);
0106     void SetInputTuples(const TString sEmbedOnlyTuple, const TString sPileupTuple, const TString sEmbedOnlyClusterTuple="");
0107     void SetStudyParameters(const Bool_t plots, const Bool_t pileup, const Bool_t intNorm, const Bool_t beforeCuts, const Bool_t avgClustCalc, const Double_t weirdFracMin, const Double_t weirdFracMax);
0108     void SetCutFlags(const Bool_t doPrimary, const Bool_t doTpc, const Bool_t doMVtx, const Bool_t doVz, const Bool_t doDcaXY, const Bool_t doDcaZ, const Bool_t doQuality);
0109     void SetTrackCuts(const pair<UInt_t, UInt_t> nMVtxRange, const pair<UInt_t, UInt_t> nTpcRange, const pair<Double_t, Double_t> vzRange, const pair<Double_t, Double_t> dcaXyRange, const pair <Double_t, Double_t> dcaZRange, const pair<Double_t, Double_t> qualityRange);
0110     void SetPlotText(const Ssiz_t nTxtE, const Ssiz_t nTxtP, const TString sTxtE[], const TString sTxtP[]);
0111     void Init();
0112     void Analyze();
0113     void End();
0114 
0115   private:
0116 
0117     // io/sys members
0118     TFile   *fOut;
0119     TFile   *fInEO;
0120     TFile   *fInPU;
0121     Bool_t   inBatchMode;
0122     TString  sInFileEO;
0123     TString  sInFilePU;
0124     TString  sInTupleEO;
0125     TString  sInTuplePU;
0126     TString  sInClustEO;
0127     TString  sOutfile;
0128     TNtuple *ntTrkEO;
0129     TNtuple *ntTrkPU;
0130     TNtuple *ntClustEO;
0131 
0132     // track type/variable names/styles/labels [set in ctor, *.cc]
0133     Bool_t  isTruth[NType];
0134     Bool_t  isPileup[NType];
0135     Bool_t  isBeforeCuts[NType];
0136     Bool_t  trkVarHasTruVal[NTrkVar];
0137     Bool_t  physVarHasTruVal[NPhysVar];
0138     UInt_t  fTypeCol[NType];
0139     UInt_t  fTypeMar[NType];
0140     TString sTrkNames[NType];
0141     TString sTrkLabels[NType];
0142     TString sTrkVars[NTrkVar];
0143     TString sPhysVars[NPhysVar];
0144 
0145     // track-variable histograms
0146     TH1D *hTrkVar[NType][NTrkVar];
0147     TH1D *hTrkVarDiff[NType][NTrkVar];
0148     TH1D *hTrkVarFrac[NType][NTrkVar];
0149     TH2D *hTrkVarVsNTpc[NType][NTrkVar];
0150     TH2D *hTrkVarVsDcaXY[NType][NTrkVar];
0151     TH2D *hTrkVarVsDcaZ[NType][NTrkVar];
0152     TH2D *hTrkVarVsPtReco[NType][NTrkVar];
0153     TH2D *hTrkVarVsPtTrue[NType][NTrkVar];
0154     TH2D *hTrkVarVsPtFrac[NType][NTrkVar];
0155 
0156     // physics-variable histograms
0157     TH1D *hPhysVar[NType][NPhysVar];
0158     TH1D *hPhysVarDiff[NType][NPhysVar];
0159     TH1D *hPhysVarFrac[NType][NPhysVar];
0160     TH2D *hPhysVarVsNTpc[NType][NPhysVar];
0161     TH2D *hPhysVarVsDcaXY[NType][NPhysVar];
0162     TH2D *hPhysVarVsDcaZ[NType][NPhysVar];
0163     TH2D *hPhysVarVsPtReco[NType][NPhysVar];
0164     TH2D *hPhysVarVsPtTrue[NType][NPhysVar];
0165     TH2D *hPhysVarVsPtFrac[NType][NPhysVar];
0166 
0167     // text parameters
0168     Ssiz_t           nTxtEO;
0169     Ssiz_t           nTxtPU;
0170     TPaveText       *ptCut;
0171     vector<TString>  sTxtEO;
0172     vector<TString>  sTxtPU;
0173 
0174     // study parameters
0175     Bool_t   makePlots;
0176     Bool_t   doPileup;
0177     Bool_t   doIntNorm;
0178     Bool_t   doBeforeCuts;
0179     Bool_t   doAvgClustCalc;
0180     Double_t normalPtFracMin;
0181     Double_t normalPtFracMax;
0182 
0183     // track cuts
0184     Bool_t                   doPrimaryCut;
0185     Bool_t                   doMVtxCut;
0186     Bool_t                   doTpcCut;
0187     Bool_t                   doVzCut;
0188     Bool_t                   doDcaXyCut;
0189     Bool_t                   doDcaZCut;
0190     Bool_t                   doQualityCut;
0191     pair<UInt_t,   UInt_t>   nMVtxCut;
0192     pair<UInt_t,   UInt_t>   nTpcCut;
0193     pair<Double_t, Double_t> vzCut;
0194     pair<Double_t, Double_t> dcaXyCut;
0195     pair<Double_t, Double_t> dcaZCut;
0196     pair<Double_t, Double_t> qualityCut;
0197 
0198     // embed-only leaves
0199     Float_t event;
0200     Float_t seed;
0201     Float_t trackID;
0202     Float_t crossing;
0203     Float_t px;
0204     Float_t py;
0205     Float_t pz;
0206     Float_t pt;
0207     Float_t eta;
0208     Float_t phi;
0209     Float_t deltapt;
0210     Float_t deltaeta;
0211     Float_t deltaphi;
0212     Float_t charge;
0213     Float_t quality;
0214     Float_t chisq;
0215     Float_t ndf;
0216     Float_t nhits;
0217     Float_t nmaps;
0218     Float_t nintt;
0219     Float_t ntpc;
0220     Float_t nmms;
0221     Float_t ntpc1;
0222     Float_t ntpc11;
0223     Float_t ntpc2;
0224     Float_t ntpc3;
0225     Float_t nlmaps;
0226     Float_t nlintt;
0227     Float_t nltpc;
0228     Float_t nlmms;
0229     Float_t layers;
0230     Float_t vertexID;
0231     Float_t vx;
0232     Float_t vy;
0233     Float_t vz;
0234     Float_t dca2d;
0235     Float_t dca2dsigma;
0236     Float_t dca3dxy;
0237     Float_t dca3dxysigma;
0238     Float_t dca3dz;
0239     Float_t dca3dzsigma;
0240     Float_t pcax;
0241     Float_t pcay;
0242     Float_t pcaz;
0243     Float_t gtrackID;
0244     Float_t gflavor;
0245     Float_t gnhits;
0246     Float_t gnmaps;
0247     Float_t gnintt;
0248     Float_t gntpc;
0249     Float_t gnmms;
0250     Float_t gnlmaps;
0251     Float_t gnlintt;
0252     Float_t gnltpc;
0253     Float_t gnlmms;
0254     Float_t gpx;
0255     Float_t gpy;
0256     Float_t gpz;
0257     Float_t gpt;
0258     Float_t geta;
0259     Float_t gphi;
0260     Float_t gvx;
0261     Float_t gvy;
0262     Float_t gvz;
0263     Float_t gvt;
0264     Float_t gfpx;
0265     Float_t gfpy;
0266     Float_t gfpz;
0267     Float_t gfx;
0268     Float_t gfy;
0269     Float_t gfz;
0270     Float_t gembed;
0271     Float_t gprimary;
0272     Float_t nfromtruth;
0273     Float_t nwrong;
0274     Float_t ntrumaps;
0275     Float_t ntruintt;
0276     Float_t ntrutpc;
0277     Float_t ntrumms;
0278     Float_t ntrutpc1;
0279     Float_t ntrutpc11;
0280     Float_t ntrutpc2;
0281     Float_t ntrutpc3;
0282     Float_t layersfromtruth;
0283     Float_t nhittpcall;
0284     Float_t nhittpcin;
0285     Float_t nhittpcmid;
0286     Float_t nhittpcout;
0287     Float_t nclusall;
0288     Float_t nclustpc;
0289     Float_t nclusintt;
0290     Float_t nclusmaps;
0291     Float_t nclusmms;
0292 
0293     // with-pileup leaves
0294     Float_t pu_event;
0295     Float_t pu_seed;
0296     Float_t pu_gntracks;
0297     Float_t pu_gtrackID;
0298     Float_t pu_gflavor;
0299     Float_t pu_gnhits;
0300     Float_t pu_gnmaps;
0301     Float_t pu_gnintt;
0302     Float_t pu_gnmms;
0303     Float_t pu_gnintt1;
0304     Float_t pu_gnintt2;
0305     Float_t pu_gnintt3;
0306     Float_t pu_gnintt4;
0307     Float_t pu_gnintt5;
0308     Float_t pu_gnintt6;
0309     Float_t pu_gnintt7;
0310     Float_t pu_gnintt8;
0311     Float_t pu_gntpc;
0312     Float_t pu_gnlmaps;
0313     Float_t pu_gnlintt;
0314     Float_t pu_gnltpc;
0315     Float_t pu_gnlmms;
0316     Float_t pu_gpx;
0317     Float_t pu_gpy;
0318     Float_t pu_gpz;
0319     Float_t pu_gpt;
0320     Float_t pu_geta;
0321     Float_t pu_gphi;
0322     Float_t pu_gvx;
0323     Float_t pu_gvy;
0324     Float_t pu_gvz;
0325     Float_t pu_gvt;
0326     Float_t pu_gfpx;
0327     Float_t pu_gfpy;
0328     Float_t pu_gfpz;
0329     Float_t pu_gfx;
0330     Float_t pu_gfy;
0331     Float_t pu_gfz;
0332     Float_t pu_gembed;
0333     Float_t pu_gprimary;
0334     Float_t pu_trackID;
0335     Float_t pu_px;
0336     Float_t pu_py;
0337     Float_t pu_pz;
0338     Float_t pu_pt;
0339     Float_t pu_eta;
0340     Float_t pu_phi;
0341     Float_t pu_deltapt;
0342     Float_t pu_deltaeta;
0343     Float_t pu_deltaphi;
0344     Float_t pu_charge;
0345     Float_t pu_quality;
0346     Float_t pu_chisq;
0347     Float_t pu_ndf;
0348     Float_t pu_nhits;
0349     Float_t pu_layers;
0350     Float_t pu_nmaps;
0351     Float_t pu_nintt;
0352     Float_t pu_ntpc;
0353     Float_t pu_nmms;
0354     Float_t pu_ntpc1;
0355     Float_t pu_ntpc11;
0356     Float_t pu_ntpc2;
0357     Float_t pu_ntpc3;
0358     Float_t pu_nlmaps;
0359     Float_t pu_nlintt;
0360     Float_t pu_nltpc;
0361     Float_t pu_nlmms;
0362     Float_t pu_vertexID;
0363     Float_t pu_vx;
0364     Float_t pu_vy;
0365     Float_t pu_vz;
0366     Float_t pu_dca2d;
0367     Float_t pu_dca2dsigma;
0368     Float_t pu_dca3dxy;
0369     Float_t pu_dca3dxysigma;
0370     Float_t pu_dca3dz;
0371     Float_t pu_dca3dzsigma;
0372     Float_t pu_pcax;
0373     Float_t pu_pcay;
0374     Float_t pu_pcaz;
0375     Float_t pu_nfromtruth;
0376     Float_t pu_nwrong;
0377     Float_t pu_ntrumaps;
0378     Float_t pu_ntruintt;
0379     Float_t pu_ntrutpc;
0380     Float_t pu_ntrumms;
0381     Float_t pu_ntrutpc1;
0382     Float_t pu_ntrutpc11;
0383     Float_t pu_ntrutpc2;
0384     Float_t pu_ntrutpc3;
0385     Float_t pu_layersfromtruth;
0386     Float_t pu_nhittpcall;
0387     Float_t pu_nhittpcin;
0388     Float_t pu_nhittpcmid;
0389     Float_t pu_nhittpcout;
0390     Float_t pu_nclusall;
0391     Float_t pu_nclustpc;
0392     Float_t pu_nclusintt;
0393     Float_t pu_nclusmaps;
0394     Float_t pu_nclusmms;
0395 
0396     // i/o methods [*.io.h]
0397     void InitFiles();
0398     void InitTuples();
0399     void SaveHists();
0400 
0401     // analysis methods [*.ana.h]
0402     Bool_t ApplyCuts(const Bool_t isPrimary, const UInt_t trkNMVtx, const UInt_t trkNTpc, const Double_t trkVz, const Double_t trkDcaXY, const Double_t trkDcaZ, const Double_t trkQuality);
0403     Bool_t DoClusterCalculation();
0404 
0405     // histogram methods [*.hist.h]
0406     void InitHists();
0407     void NormalizeHists();
0408     void SetHistStyles();
0409     void FillTrackHistograms(const Int_t type, const Double_t recoTrkVars[], const Double_t trueTrkVars[], const Double_t recoPhysVars[], const Double_t truePhysVars[]);
0410     void FillTruthHistograms(const Int_t type, const Double_t recoTrkVars[], const Double_t trueTrkVars[], const Double_t recoPhysVars[], const Double_t truePhysVars[]);
0411 
0412     // plot methods [*.plot.h]
0413     void MakeCutText();
0414     void ConstructPlots(const Ssiz_t nToDraw, const Int_t typesToDraw[], const TString sDirToSaveTo, const TString sPlotLabel);
0415 
0416 };  // end STrackCutStudy definition
0417 
0418 #endif
0419 
0420 // end ------------------------------------------------------------------------