File indexing completed on 2026-04-07 08:08:22
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef STRACKCUTSTUDY_H
0013 #define STRACKCUTSTUDY_H
0014
0015
0016 #include <cmath>
0017 #include <vector>
0018 #include <cassert>
0019 #include <cstdlib>
0020 #include <utility>
0021 #include <iostream>
0022
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
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
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
0100 STrackCutStudy();
0101 ~STrackCutStudy();
0102
0103
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
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
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
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
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
0168 Ssiz_t nTxtEO;
0169 Ssiz_t nTxtPU;
0170 TPaveText *ptCut;
0171 vector<TString> sTxtEO;
0172 vector<TString> sTxtPU;
0173
0174
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
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
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
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
0397 void InitFiles();
0398 void InitTuples();
0399 void SaveHists();
0400
0401
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
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
0413 void MakeCutText();
0414 void ConstructPlots(const Ssiz_t nToDraw, const Int_t typesToDraw[], const TString sDirToSaveTo, const TString sPlotLabel);
0415
0416 };
0417
0418 #endif
0419
0420