diff --git a/scripts/Validation/Reco_Tracks.cpp b/scripts/Validation/Reco_Tracks.cpp index b919f46d..689492cf 100644 --- a/scripts/Validation/Reco_Tracks.cpp +++ b/scripts/Validation/Reco_Tracks.cpp @@ -7,6 +7,7 @@ // Root specific #include #include +#include #include #include "Truth_Info.h" @@ -39,6 +40,79 @@ Long64_t PrimaryLoop(Truth_Info& truth, Reco_Tree& reco, int numEvents, TFile& o int n_zbins = 50; double z_start = 11000; double z_end = 18500; + + bool has_kalman = reco.HasBranch("KalmanPos"); + std::cout<<"has_kalman status: "< 2) + hist_track_hit_xz_relative_end_m1.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][reco.nHits[itrack]-2][2], + reco.KalmanPos[itrack][ihit][0] - reco.KalmanPos[itrack][reco.nHits[itrack]-2][0]); + if (reco.nHits[itrack] > 3) + hist_track_hit_xz_relative_end_m2.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][reco.nHits[itrack]-3][2], + reco.KalmanPos[itrack][ihit][0] - reco.KalmanPos[itrack][reco.nHits[itrack]-3][0]); + if (reco.nHits[itrack] > 5) + hist_track_hit_xz_relative_end_m4.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][reco.nHits[itrack]-5][2], + reco.KalmanPos[itrack][ihit][0] - reco.KalmanPos[itrack][reco.nHits[itrack]-5][0]); + hist_track_hit_xz_relative_center.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][(reco.nHits[itrack]-1) / 2][2], + reco.KalmanPos[itrack][ihit][0] - reco.KalmanPos[itrack][(reco.nHits[itrack]-1) / 2][0]); + + + if (reco.nHits[itrack] > 2) + hist_track_hit_xz_relative_start_p1.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][1][2], + reco.KalmanPos[itrack][ihit][0] - reco.KalmanPos[itrack][1][0]); + if (reco.nHits[itrack] > 3) + hist_track_hit_xz_relative_start_p2.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][2][2], + reco.KalmanPos[itrack][ihit][0] - reco.KalmanPos[itrack][2][0]); + if (reco.nHits[itrack] > 5) + hist_track_hit_xz_relative_start_p4.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][4][2], + reco.KalmanPos[itrack][ihit][0] - reco.KalmanPos[itrack][4][0]); + + + hist_track_hit_yz_relative_start.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][1][2], + reco.KalmanPos[itrack][ihit][1] - reco.KalmanPos[itrack][1][1]); + hist_track_hit_yz_relative_end.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][reco.nHits[itrack]-1][2], + reco.KalmanPos[itrack][ihit][1] - reco.KalmanPos[itrack][reco.nHits[itrack]-1][1]); + hist_track_hit_yz_relative_center.Fill(reco.KalmanPos[itrack][ihit][2] - reco.KalmanPos[itrack][(reco.nHits[itrack]-1) / 2][2], + reco.KalmanPos[itrack][ihit][1] - reco.KalmanPos[itrack][(reco.nHits[itrack]-1) / 2][1]); + + // Same but subtract a relative offset + if (ihit > 0) + hist_track_hit_dy_relative.Fill((reco.KalmanPos[itrack][ihit][1] - reco.KalmanPos[itrack][ihit-1][1]) -\ + (reco.KalmanTruePos[itrack][ihit][1] - reco.KalmanTruePos[itrack][ihit-1][1])); + if (ihit > 5) + hist_track_hit_dy_relative_5.Fill((reco.KalmanPos[itrack][ihit][1] - reco.KalmanPos[itrack][ihit-5][1]) -\ + (reco.KalmanTruePos[itrack][ihit][1] - reco.KalmanTruePos[itrack][ihit-5][1])); + if (ihit > 10) + hist_track_hit_dy_relative_10.Fill((reco.KalmanPos[itrack][ihit][1] - reco.KalmanPos[itrack][ihit-10][1]) -\ + (reco.KalmanTruePos[itrack][ihit][1] - reco.KalmanTruePos[itrack][ihit-10][1])); + if (ihit > 20) + hist_track_hit_dy_relative_20.Fill((reco.KalmanPos[itrack][ihit][1] - reco.KalmanPos[itrack][ihit-20][1]) -\ + (reco.KalmanTruePos[itrack][ihit][1] - reco.KalmanTruePos[itrack][ihit-20][1])); + if (ihit > 50) + hist_track_hit_dy_relative_50.Fill((reco.KalmanPos[itrack][ihit][1] - reco.KalmanPos[itrack][ihit-50][1]) -\ + (reco.KalmanTruePos[itrack][ihit][1] - reco.KalmanTruePos[itrack][ihit-50][1])); + } + } + for (int itrack = 0; itrack < truth.RecoTrackN; itrack++) { int particle_index = truth.RecoTrackPrimaryParticleIndex[itrack]; int pdg = -999999999; diff --git a/scripts/Validation/Reco_Tree.h b/scripts/Validation/Reco_Tree.h index f09dcc46..87802e1a 100644 --- a/scripts/Validation/Reco_Tree.h +++ b/scripts/Validation/Reco_Tree.h @@ -28,6 +28,8 @@ public : Int_t nTracks; Int_t nHits[20]; //[nTracks] Float_t TrackHitPos[20][200][3]; //[nTracks] + Float_t KalmanPos[20][200][3]; //[nTracks] + Float_t KalmanTruePos[20][200][3]; //[nTracks] Float_t StartPos[20][3]; //[nTracks] Float_t Direction[20][3]; //[nTracks] Float_t EndPos[20][3]; //[nTracks] @@ -42,6 +44,8 @@ public : TBranch *b_nTracks; //! TBranch *b_nHits; //! TBranch *b_TrackHitPos; //! + TBranch *b_KalmanPos; //! + TBranch *b_KalmanTruePos; //! TBranch *b_StartPos; //! TBranch *b_Direction; //! TBranch *b_EndPos; //! @@ -59,6 +63,7 @@ public : virtual Bool_t Notify(); virtual void Show(Long64_t entry = -1); virtual Long64_t GetEntriesFast() { return fChain->GetEntriesFast(); }; + virtual bool HasBranch(const char* branch) { return fChain->GetBranch(branch) != NULL; }; }; #endif @@ -127,6 +132,8 @@ void Reco_Tree::Init(TTree *tree) fChain->SetBranchAddress("nTracks", &nTracks, &b_nTracks); fChain->SetBranchAddress("nHits", nHits, &b_nHits); fChain->SetBranchAddress("TrackHitPos", TrackHitPos, &b_TrackHitPos); + fChain->SetBranchAddress("KalmanPos", KalmanPos, &b_KalmanPos); + fChain->SetBranchAddress("KalmanTruePos", KalmanTruePos, &b_KalmanTruePos); fChain->SetBranchAddress("StartPos", StartPos, &b_StartPos); fChain->SetBranchAddress("Direction", Direction, &b_Direction); fChain->SetBranchAddress("EndPos", EndPos, &b_EndPos); diff --git a/scripts/Validation/Truth_Info.h b/scripts/Validation/Truth_Info.h index fc830c85..a299053c 100644 --- a/scripts/Validation/Truth_Info.h +++ b/scripts/Validation/Truth_Info.h @@ -36,48 +36,48 @@ public : Int_t nTrueParticles; Int_t nTruePrimaryParticles; Int_t nTrueForgottenParticles; - Int_t VertexID[96]; //[nTrueParticles] - Int_t Parent[96]; //[nTrueParticles] - Int_t TrackId[96]; //[nTrueParticles] - Int_t PDG[96]; //[nTrueParticles] - Bool_t IsPrimary[96]; //[nTrueParticles] - Float_t TrueVisibleEnergy[96]; //[nTrueParticles] - Float_t TruePathLength[96]; //[nTrueParticles] - Float_t TruePathLengthIgnoreY[96]; //[nTrueParticles] - Float_t TruePathLengthInTMS[96]; //[nTrueParticles] - Float_t TruePathLengthInTMSIgnoreY[96]; //[nTrueParticles] + Int_t VertexID[20000]; //[nTrueParticles] + Int_t Parent[20000]; //[nTrueParticles] + Int_t TrackId[20000]; //[nTrueParticles] + Int_t PDG[20000]; //[nTrueParticles] + Bool_t IsPrimary[20000]; //[nTrueParticles] + Float_t TrueVisibleEnergy[20000]; //[nTrueParticles] + Float_t TruePathLength[20000]; //[nTrueParticles] + Float_t TruePathLengthIgnoreY[20000]; //[nTrueParticles] + Float_t TruePathLengthInTMS[20000]; //[nTrueParticles] + Float_t TruePathLengthInTMSIgnoreY[20000]; //[nTrueParticles] Bool_t InteractionTMSFiducial; Bool_t InteractionTMSFirstTwoModules; Bool_t InteractionTMSThin; Bool_t InteractionLArFiducial; - Bool_t TMSFiducialStart[96]; //[nTrueParticles] - Bool_t TMSFiducialTouch[96]; //[nTrueParticles] - Bool_t TMSFiducialEnd[96]; //[nTrueParticles] - Bool_t LArFiducialStart[96]; //[nTrueParticles] - Bool_t LArFiducialTouch[96]; //[nTrueParticles] - Bool_t LArFiducialEnd[96]; //[nTrueParticles] - Float_t BirthMomentum[96][4]; //[nTrueParticles] - Float_t BirthPosition[96][4]; //[nTrueParticles] - Float_t DeathMomentum[96][4]; //[nTrueParticles] - Float_t DeathPosition[96][4]; //[nTrueParticles] - Float_t MomentumLArStart[96][4]; //[nTrueParticles] - Float_t PositionLArStart[96][4]; //[nTrueParticles] - Float_t MomentumLArEnd[96][4]; //[nTrueParticles] - Float_t PositionLArEnd[96][4]; //[nTrueParticles] - Float_t MomentumTMSStart[96][4]; //[nTrueParticles] - Float_t PositionTMSStart[96][4]; //[nTrueParticles] - Float_t MomentumTMSFirstTwoModulesEnd[96][4]; //[nTrueParticles] - Float_t PositionTMSFirstTwoModulesEnd[96][4]; //[nTrueParticles] - Float_t MomentumTMSThinEnd[96][4]; //[nTrueParticles] - Float_t PositionTMSThinEnd[96][4]; //[nTrueParticles] - Float_t MomentumTMSEnd[96][4]; //[nTrueParticles] - Float_t PositionTMSEnd[96][4]; //[nTrueParticles] - Float_t MomentumZIsLArEnd[96][4]; //[nTrueParticles] - Float_t PositionZIsLArEnd[96][4]; //[nTrueParticles] - Float_t MomentumZIsTMSStart[96][4]; //[nTrueParticles] - Float_t PositionZIsTMSStart[96][4]; //[nTrueParticles] - Float_t MomentumZIsTMSEnd[96][4]; //[nTrueParticles] - Float_t PositionZIsTMSEnd[96][4]; //[nTrueParticles] + Bool_t TMSFiducialStart[20000]; //[nTrueParticles] + Bool_t TMSFiducialTouch[20000]; //[nTrueParticles] + Bool_t TMSFiducialEnd[20000]; //[nTrueParticles] + Bool_t LArFiducialStart[20000]; //[nTrueParticles] + Bool_t LArFiducialTouch[20000]; //[nTrueParticles] + Bool_t LArFiducialEnd[20000]; //[nTrueParticles] + Float_t BirthMomentum[20000][4]; //[nTrueParticles] + Float_t BirthPosition[20000][4]; //[nTrueParticles] + Float_t DeathMomentum[20000][4]; //[nTrueParticles] + Float_t DeathPosition[20000][4]; //[nTrueParticles] + Float_t MomentumLArStart[20000][4]; //[nTrueParticles] + Float_t PositionLArStart[20000][4]; //[nTrueParticles] + Float_t MomentumLArEnd[20000][4]; //[nTrueParticles] + Float_t PositionLArEnd[20000][4]; //[nTrueParticles] + Float_t MomentumTMSStart[20000][4]; //[nTrueParticles] + Float_t PositionTMSStart[20000][4]; //[nTrueParticles] + Float_t MomentumTMSFirstTwoModulesEnd[20000][4]; //[nTrueParticles] + Float_t PositionTMSFirstTwoModulesEnd[20000][4]; //[nTrueParticles] + Float_t MomentumTMSThinEnd[20000][4]; //[nTrueParticles] + Float_t PositionTMSThinEnd[20000][4]; //[nTrueParticles] + Float_t MomentumTMSEnd[20000][4]; //[nTrueParticles] + Float_t PositionTMSEnd[20000][4]; //[nTrueParticles] + Float_t MomentumZIsLArEnd[20000][4]; //[nTrueParticles] + Float_t PositionZIsLArEnd[20000][4]; //[nTrueParticles] + Float_t MomentumZIsTMSStart[20000][4]; //[nTrueParticles] + Float_t PositionZIsTMSStart[20000][4]; //[nTrueParticles] + Float_t MomentumZIsTMSEnd[20000][4]; //[nTrueParticles] + Float_t PositionZIsTMSEnd[20000][4]; //[nTrueParticles] Int_t nParticles; Int_t LeptonPDG; Float_t LeptonP4[4]; @@ -94,43 +94,43 @@ public : Float_t VertexVisibleEnergyFractionInSlice; Float_t PrimaryVertexVisibleEnergyFraction; Int_t RecoTrackN; - Float_t RecoTrackTrueVisibleEnergy[8]; //[RecoTrackN] - Int_t RecoTrackPrimaryParticleIndex[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueVisibleEnergy[8]; //[RecoTrackN] - Int_t RecoTrackSecondaryParticleIndex[8]; //[RecoTrackN] - Float_t RecoTrackSecondaryParticleTrueVisibleEnergy[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueMomentumTrackStart[8][4]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTruePositionTrackStart[8][4]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueMomentumTrackEnd[8][4]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTruePositionTrackEnd[8][4]; //[RecoTrackN] - Int_t RecoTrackNHits[8]; //[RecoTrackN] - Float_t RecoTrackTrueHitPosition[8][300][4]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueTrackLengthAsMeasured[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueTrackLengthAsMeasuredIgnoreY[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueTrackLengthRecoStart[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueTrackLengthRecoStartIgnoreY[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueTrackLengthInTMSIgnoreY[8]; //[RecoTrackN] - Int_t RecoTrackPrimaryParticlePDG[8]; //[RecoTrackN] - Bool_t RecoTrackPrimaryParticleIsPrimary[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueMomentum[8][4]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTruePositionStart[8][4]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTruePositionEnd[8][4]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueTrackLength[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueTrackLengthIgnoreY[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueTrackLengthInTMS[8]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueMomentumEnteringTMS[8][4]; //[RecoTrackN] - Float_t RecoTrackPrimaryParticleTrueMomentumLeavingTMS[8][4]; //[RecoTrackN] - Bool_t RecoTrackPrimaryParticleTMSFiducialStart[8]; //[RecoTrackN] - Bool_t RecoTrackPrimaryParticleTMSFiducialTouch[8]; //[RecoTrackN] - Bool_t RecoTrackPrimaryParticleTMSFiducialEnd[8]; //[RecoTrackN] - Bool_t RecoTrackPrimaryParticleLArFiducialStart[8]; //[RecoTrackN] - Bool_t RecoTrackPrimaryParticleLArFiducialTouch[8]; //[RecoTrackN] - Bool_t RecoTrackPrimaryParticleLArFiducialEnd[8]; //[RecoTrackN] - Int_t RecoTrackSecondaryParticlePDG[8]; //[RecoTrackN] - Bool_t RecoTrackSecondaryParticleIsPrimary[8]; //[RecoTrackN] - Float_t RecoTrackSecondaryParticleTrueMomentum[8][4]; //[RecoTrackN] - Float_t RecoTrackSecondaryParticleTruePositionStart[8][4]; //[RecoTrackN] - Float_t RecoTrackSecondaryParticleTruePositionEnd[8][4]; //[RecoTrackN] + Float_t RecoTrackTrueVisibleEnergy[10]; //[RecoTrackN] + Int_t RecoTrackPrimaryParticleIndex[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueVisibleEnergy[10]; //[RecoTrackN] + Int_t RecoTrackSecondaryParticleIndex[10]; //[RecoTrackN] + Float_t RecoTrackSecondaryParticleTrueVisibleEnergy[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueMomentumTrackStart[10][4]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTruePositionTrackStart[10][4]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueMomentumTrackEnd[10][4]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTruePositionTrackEnd[10][4]; //[RecoTrackN] + Int_t RecoTrackNHits[10]; //[RecoTrackN] + Float_t RecoTrackTrueHitPosition[10][300][4]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueTrackLengthAsMeasured[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueTrackLengthAsMeasuredIgnoreY[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueTrackLengthRecoStart[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueTrackLengthRecoStartIgnoreY[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueTrackLengthInTMSIgnoreY[10]; //[RecoTrackN] + Int_t RecoTrackPrimaryParticlePDG[10]; //[RecoTrackN] + Bool_t RecoTrackPrimaryParticleIsPrimary[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueMomentum[10][4]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTruePositionStart[10][4]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTruePositionEnd[10][4]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueTrackLength[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueTrackLengthIgnoreY[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueTrackLengthInTMS[10]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueMomentumEnteringTMS[10][4]; //[RecoTrackN] + Float_t RecoTrackPrimaryParticleTrueMomentumLeavingTMS[10][4]; //[RecoTrackN] + Bool_t RecoTrackPrimaryParticleTMSFiducialStart[10]; //[RecoTrackN] + Bool_t RecoTrackPrimaryParticleTMSFiducialTouch[10]; //[RecoTrackN] + Bool_t RecoTrackPrimaryParticleTMSFiducialEnd[10]; //[RecoTrackN] + Bool_t RecoTrackPrimaryParticleLArFiducialStart[10]; //[RecoTrackN] + Bool_t RecoTrackPrimaryParticleLArFiducialTouch[10]; //[RecoTrackN] + Bool_t RecoTrackPrimaryParticleLArFiducialEnd[10]; //[RecoTrackN] + Int_t RecoTrackSecondaryParticlePDG[10]; //[RecoTrackN] + Bool_t RecoTrackSecondaryParticleIsPrimary[10]; //[RecoTrackN] + Float_t RecoTrackSecondaryParticleTrueMomentum[10][4]; //[RecoTrackN] + Float_t RecoTrackSecondaryParticleTruePositionStart[10][4]; //[RecoTrackN] + Float_t RecoTrackSecondaryParticleTruePositionEnd[10][4]; //[RecoTrackN] // List of branches TBranch *b_EventNo; //! diff --git a/scripts/Validation/simply_draw_everything.py b/scripts/Validation/simply_draw_everything.py index e782bdac..8727a943 100644 --- a/scripts/Validation/simply_draw_everything.py +++ b/scripts/Validation/simply_draw_everything.py @@ -23,10 +23,12 @@ def draw_histograms(input_file): obj.GetYaxis().SetTitleOffset(1.4) obj.GetZaxis().SetTitleOffset(0.5) obj.Draw("colz") + print(f"{obj.GetName()} intergral: {obj.Integral()}") canvas.Print(os.path.join(output_dir, obj.GetName() + ".png")) elif isinstance(obj, ROOT.TH1): # For 1D histograms, draw and save as png obj.Draw() + #print(f"{obj.GetName()} intergral: {obj.Integral()}") canvas.Print(os.path.join(output_dir, obj.GetName() + ".png")) # Close the input ROOT file