Skip to content

Commit

Permalink
Merge pull request #18073 from makortel/mtvNrecNsim
Browse files Browse the repository at this point in the history
Add histograms for nrec/nsim, and average number of pixel/strip hits to MultiTrackValidator
  • Loading branch information
cmsbuild committed Apr 1, 2017
2 parents 82e6e28 + 5ec4f36 commit 507c247
Show file tree
Hide file tree
Showing 13 changed files with 224 additions and 76 deletions.
1 change: 1 addition & 0 deletions CommonTools/RecoAlgos/interface/RecoTrackSelectorBase.h
@@ -1,6 +1,7 @@
#ifndef CommonTools_RecoAlgos_RecoTrackSelectorBase_h
#define CommonTools_RecoAlgos_RecoTrackSelectorBase_h

#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/ConsumesCollector.h"
#include "FWCore/Utilities/interface/InputTag.h"

Expand Down
13 changes: 10 additions & 3 deletions DQMServices/ClientConfig/interface/DQMGenericClient.h
Expand Up @@ -33,11 +33,18 @@ class DQMGenericClient : public DQMEDHarvester

void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override;

enum class EfficType {
none = 0,
efficiency,
fakerate,
simpleratio
};

struct EfficOption
{
std::string name, title;
std::string numerator, denominator;
int type;
EfficType type;
bool isProfile;
};

Expand Down Expand Up @@ -71,7 +78,7 @@ class DQMGenericClient : public DQMEDHarvester
const std::string& efficMETitle,
const std::string& recoMEName,
const std::string& simMEName,
const int type=1,
const EfficType type=EfficType::efficiency,
const bool makeProfile = false);
void computeResolution(DQMStore::IBooker& ibooker,
DQMStore::IGetter& igetter,
Expand Down Expand Up @@ -112,7 +119,7 @@ class DQMGenericClient : public DQMEDHarvester
std::vector<NormOption> normOptions_;
std::vector<CDOption> cdOptions_;

void generic_eff (TH1 * denom, TH1 * numer, MonitorElement * efficiencyHist, const int type=1);
void generic_eff (TH1 * denom, TH1 * numer, MonitorElement * efficiencyHist, const EfficType type=EfficType::efficiency);

void findAllSubdirectories (DQMStore::IBooker& ibooker,
DQMStore::IGetter& igetter,
Expand Down
55 changes: 36 additions & 19 deletions DQMServices/ClientConfig/plugins/DQMGenericClient.cc
Expand Up @@ -70,9 +70,10 @@ DQMGenericClient::DQMGenericClient(const ParameterSet& pset)
opt.isProfile = false;

const string typeName = args.size() == 4 ? "eff" : args[4];
if ( typeName == "eff" ) opt.type = 1;
else if ( typeName == "fake" ) opt.type = 2;
else opt.type = 0;
if ( typeName == "eff" ) opt.type = EfficType::efficiency;
else if ( typeName == "fake" ) opt.type = EfficType::fakerate;
else if ( typeName == "simpleratio" ) opt.type = EfficType::simpleratio;
else opt.type = EfficType::none;

efficOptions_.push_back(opt);
}
Expand All @@ -89,9 +90,10 @@ DQMGenericClient::DQMGenericClient(const ParameterSet& pset)
opt.isProfile = false;

const string typeName = efficSet->getUntrackedParameter<string>("typeName", "eff");
if ( typeName == "eff" ) opt.type = 1;
else if ( typeName == "fake" ) opt.type = 2;
else opt.type = 0;
if ( typeName == "eff" ) opt.type = EfficType::efficiency;
else if ( typeName == "fake" ) opt.type = EfficType::fakerate;
else if ( typeName == "simpleratio" ) opt.type = EfficType::simpleratio;
else opt.type = EfficType::none;

efficOptions_.push_back(opt);
}
Expand Down Expand Up @@ -125,9 +127,10 @@ DQMGenericClient::DQMGenericClient(const ParameterSet& pset)
opt.isProfile = true;

const string typeName = args.size() == 4 ? "eff" : args[4];
if ( typeName == "eff" ) opt.type = 1;
else if ( typeName == "fake" ) opt.type = 2;
else opt.type = 0;
if ( typeName == "eff" ) opt.type = EfficType::efficiency;
else if ( typeName == "fake" ) opt.type = EfficType::fakerate;
else if ( typeName == "simpleratio" ) opt.type = EfficType::simpleratio;
else opt.type = EfficType::none;

efficOptions_.push_back(opt);
}
Expand All @@ -144,9 +147,10 @@ DQMGenericClient::DQMGenericClient(const ParameterSet& pset)
opt.isProfile = true;

const string typeName = effProfileSet->getUntrackedParameter<string>("typeName", "eff");
if ( typeName == "eff" ) opt.type = 1;
else if ( typeName == "fake" ) opt.type = 2;
else opt.type = 0;
if ( typeName == "eff" ) opt.type = EfficType::efficiency;
else if ( typeName == "fake" ) opt.type = EfficType::fakerate;
else if ( typeName == "simpleratio" ) opt.type = EfficType::simpleratio;
else opt.type = EfficType::none;

efficOptions_.push_back(opt);
}
Expand Down Expand Up @@ -399,7 +403,7 @@ void DQMGenericClient::dqmEndJob(DQMStore::IBooker & ibooker, DQMStore::IGetter
}

void DQMGenericClient::computeEfficiency (DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter, const string& startDir, const string& efficMEName,
const string& efficMETitle, const string& recoMEName, const string& simMEName, const int type, const bool makeProfile)
const string& efficMETitle, const string& recoMEName, const string& simMEName, const EfficType type, const bool makeProfile)
{
if ( ! igetter.dirExists(startDir) ) {
if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
Expand Down Expand Up @@ -595,9 +599,17 @@ void DQMGenericClient::computeEfficiency (DQMStore::IBooker& ibooker, DQMStore::
const float nSimAll = hSim->GetEntries();
const float nRecoAll = hReco->GetEntries();
float efficAll=0;
if ( type == 1 ) efficAll = nSimAll ? nRecoAll/nSimAll : 0;
else if ( type == 2 ) efficAll = nSimAll ? 1-nRecoAll/nSimAll : 0;
const float errorAll = nSimAll && efficAll < 1 ? sqrt(efficAll*(1-efficAll)/nSimAll) : 0;
if ( type == EfficType::efficiency || type == EfficType::simpleratio ) efficAll = nSimAll ? nRecoAll/nSimAll : 0;
else if ( type == EfficType::fakerate ) efficAll = nSimAll ? 1-nRecoAll/nSimAll : 0;
float errorAll=0;
if ( type == EfficType::simpleratio ) {
if(nSimAll) {
const float x = nRecoAll/nSimAll;
errorAll = std::sqrt(1.f/nSimAll*x*(1+x));
}
}
else
errorAll = nSimAll && efficAll < 1 ? sqrt(efficAll*(1-efficAll)/nSimAll) : 0;

const int iBin = hGlobalEffic->Fill(newEfficMEName.c_str(), 0);
hGlobalEffic->SetBinContent(iBin, efficAll);
Expand Down Expand Up @@ -927,7 +939,7 @@ void DQMGenericClient::findAllSubdirectories (DQMStore::IBooker& ibooker, DQMSto
}


void DQMGenericClient::generic_eff (TH1* denom, TH1* numer, MonitorElement* efficiencyHist, const int type) {
void DQMGenericClient::generic_eff (TH1* denom, TH1* numer, MonitorElement* efficiencyHist, const EfficType type) {
for (int iBinX = 1; iBinX < denom->GetNbinsX()+1; iBinX++){
for (int iBinY = 1; iBinY < denom->GetNbinsY()+1; iBinY++){
for (int iBinZ = 1; iBinZ < denom->GetNbinsZ()+1; iBinZ++){
Expand All @@ -940,13 +952,18 @@ void DQMGenericClient::generic_eff (TH1* denom, TH1* numer, MonitorElement* effi
float effVal = 0;

// fake eff is in use
if (type == 2 ) {
if (type == EfficType::fakerate) {
effVal = denomVal ? (1 - numerVal / denomVal) : 0;
} else {
effVal = denomVal ? numerVal / denomVal : 0;
}

float errVal = (denomVal && (effVal <=1)) ? sqrt(effVal*(1-effVal)/denomVal) : 0;
float errVal = 0;
if (type == EfficType::simpleratio) {
errVal = denomVal ? 1.f/denomVal*effVal*(1+effVal) : 0;
} else {
errVal = (denomVal && (effVal <=1)) ? sqrt(effVal*(1-effVal)/denomVal) : 0;
}

LogDebug ("DQMGenericClient") << "(iBinX, iBinY, iBinZ) = "
<< iBinX << ", "
Expand Down
31 changes: 22 additions & 9 deletions Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h
Expand Up @@ -22,17 +22,25 @@

#include "SimTracker/Common/interface/TrackingParticleSelector.h"
#include "CommonTools/CandAlgos/interface/GenParticleCustomSelector.h"
#include "CommonTools/RecoAlgos/interface/RecoTrackSelectorBase.h"

#include "DQMServices/Core/interface/MonitorElement.h"
#include "DQMServices/Core/interface/DQMStore.h"

namespace edm { class Event; class EventSetup; }

class MTVHistoProducerAlgoForTracker {
public:
MTVHistoProducerAlgoForTracker(const edm::ParameterSet& pset, const bool doSeedPlots, edm::ConsumesCollector && iC) :
MTVHistoProducerAlgoForTracker(pset, doSeedPlots, iC) {}
MTVHistoProducerAlgoForTracker(const edm::ParameterSet& pset, const bool doSeedPlots, edm::ConsumesCollector & iC) ;
MTVHistoProducerAlgoForTracker(const edm::ParameterSet& pset, const edm::InputTag& beamSpotTag, const bool doSeedPlots, edm::ConsumesCollector && iC) :
MTVHistoProducerAlgoForTracker(pset, beamSpotTag, doSeedPlots, iC) {}
MTVHistoProducerAlgoForTracker(const edm::ParameterSet& pset, const edm::InputTag& beamSpotTag, const bool doSeedPlots, edm::ConsumesCollector & iC) ;
~MTVHistoProducerAlgoForTracker();

static std::unique_ptr<RecoTrackSelectorBase> makeRecoTrackSelectorFromTPSelectorParameters(const edm::ParameterSet& pset, const edm::InputTag& beamSpotTag, edm::ConsumesCollector& iC);
static std::unique_ptr<RecoTrackSelectorBase> makeRecoTrackSelectorFromTPSelectorParameters(const edm::ParameterSet& pset, const edm::InputTag& beamSpotTag, edm::ConsumesCollector&& iC) { return makeRecoTrackSelectorFromTPSelectorParameters(pset, beamSpotTag, iC); }

void init(const edm::Event& event, const edm::EventSetup& setup);

void bookSimHistos(DQMStore::IBooker& ibook);
void bookSimTrackHistos(DQMStore::IBooker& ibook);
void bookSimTrackPVAssociationHistos(DQMStore::IBooker& ibook);
Expand Down Expand Up @@ -94,7 +102,8 @@ class MTVHistoProducerAlgoForTracker {
void fill_trackBased_histos(int count,
int assTracks,
int numRecoTracks,
int numSimTracks);
int numRecoTracksSelected,
int numSimTracksSelected);


void fill_ResoAndPull_recoTrack_histos(int count,
Expand Down Expand Up @@ -131,6 +140,10 @@ class MTVHistoProducerAlgoForTracker {
std::unique_ptr<TrackingParticleSelector> TpSelectorForEfficiencyVsVTXR;
std::unique_ptr<TrackingParticleSelector> TpSelectorForEfficiencyVsVTXZ;

std::unique_ptr<RecoTrackSelectorBase> trackSelectorVsEta;
std::unique_ptr<RecoTrackSelectorBase> trackSelectorVsPhi;
std::unique_ptr<RecoTrackSelectorBase> trackSelectorVsPt;

std::unique_ptr<GenParticleCustomSelector> generalGpSelector;
std::unique_ptr<GenParticleCustomSelector> GpSelectorForEfficiencyVsEta;
std::unique_ptr<GenParticleCustomSelector> GpSelectorForEfficiencyVsPhi;
Expand Down Expand Up @@ -179,13 +192,13 @@ class MTVHistoProducerAlgoForTracker {

//1D
std::vector<MonitorElement*> h_tracks, h_fakes, h_hits, h_charge, h_algo, h_seedsFitFailed, h_seedsFitFailedFraction;
std::vector<MonitorElement*> h_recoeta, h_assoceta, h_assoc2eta, h_simuleta, h_loopereta, h_misideta, h_pileupeta;
std::vector<MonitorElement*> h_recopT, h_assocpT, h_assoc2pT, h_simulpT, h_looperpT, h_misidpT, h_pileuppT;
std::vector<MonitorElement*> h_recoeta, h_reco2eta, h_assoceta, h_assoc2eta, h_simuleta, h_loopereta, h_misideta, h_pileupeta;
std::vector<MonitorElement*> h_recopT, h_reco2pT, h_assocpT, h_assoc2pT, h_simulpT, h_looperpT, h_misidpT, h_pileuppT;
std::vector<MonitorElement*> h_recohit, h_assochit, h_assoc2hit, h_simulhit, h_looperhit, h_misidhit, h_pileuphit;
std::vector<MonitorElement*> h_recolayer, h_assoclayer, h_assoc2layer, h_simullayer, h_looperlayer, h_misidlayer, h_pileuplayer;
std::vector<MonitorElement*> h_recopixellayer, h_assocpixellayer, h_assoc2pixellayer, h_simulpixellayer, h_looperpixellayer, h_misidpixellayer, h_pileuppixellayer;
std::vector<MonitorElement*> h_reco3Dlayer, h_assoc3Dlayer, h_assoc23Dlayer, h_simul3Dlayer, h_looper3Dlayer, h_misid3Dlayer, h_pileup3Dlayer;
std::vector<MonitorElement*> h_recopu, h_assocpu, h_assoc2pu, h_simulpu, h_looperpu, h_misidpu, h_pileuppu;
std::vector<MonitorElement*> h_recopu, h_reco2pu, h_assocpu, h_assoc2pu, h_simulpu, h_looperpu, h_misidpu, h_pileuppu;
std::vector<MonitorElement*> h_recophi, h_assocphi, h_assoc2phi, h_simulphi, h_looperphi, h_misidphi, h_pileupphi;
std::vector<MonitorElement*> h_recodxy, h_assocdxy, h_assoc2dxy, h_simuldxy, h_looperdxy, h_misiddxy, h_pileupdxy;
std::vector<MonitorElement*> h_recodz, h_assocdz, h_assoc2dz, h_simuldz, h_looperdz, h_misiddz, h_pileupdz;
Expand Down Expand Up @@ -235,9 +248,9 @@ class MTVHistoProducerAlgoForTracker {

//#hit vs eta: to be used with doProfileX
std::vector<MonitorElement*> nhits_vs_eta,
nPXBhits_vs_eta, nPXFhits_vs_eta,
nPXBhits_vs_eta, nPXFhits_vs_eta, nPXLhits_vs_eta,
nTIBhits_vs_eta,nTIDhits_vs_eta,
nTOBhits_vs_eta,nTEChits_vs_eta,
nTOBhits_vs_eta,nTEChits_vs_eta, nSTRIPhits_vs_eta,
nLayersWithMeas_vs_eta, nPXLlayersWithMeas_vs_eta,
nSTRIPlayersWithMeas_vs_eta, nSTRIPlayersWith1dMeas_vs_eta, nSTRIPlayersWith2dMeas_vs_eta;

Expand Down
2 changes: 2 additions & 0 deletions Validation/RecoTrack/interface/MultiTrackValidator.h
Expand Up @@ -11,6 +11,7 @@
#include "Validation/RecoTrack/interface/MultiTrackValidatorBase.h"
#include "Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h"
#include "SimDataFormats/Associations/interface/VertexToTrackingVertexAssociator.h"
#include "CommonTools/RecoAlgos/interface/RecoTrackSelectorBase.h"

class MultiTrackValidator : public DQMEDAnalyzer, protected MultiTrackValidatorBase {
public:
Expand Down Expand Up @@ -67,6 +68,7 @@ class MultiTrackValidator : public DQMEDAnalyzer, protected MultiTrackValidatorB
CosmicTrackingParticleSelector cosmictpSelector;
TrackingParticleSelector dRtpSelector;
TrackingParticleSelector dRtpSelectorNoPtCut;
std::unique_ptr<RecoTrackSelectorBase> dRTrackSelector;

edm::EDGetTokenT<SimHitTPAssociationProducer::SimHitTPAssociationList> _simHitTpMapTag;
edm::EDGetTokenT<edm::View<reco::Track> > labelTokenForDrCalculation;
Expand Down
41 changes: 20 additions & 21 deletions Validation/RecoTrack/plugins/MultiTrackValidator.cc
Expand Up @@ -65,7 +65,8 @@ MultiTrackValidator::MultiTrackValidator(const edm::ParameterSet& pset):
simPVMaxZ_(pset.getUntrackedParameter<double>("simPVMaxZ"))
{
ParameterSet psetForHistoProducerAlgo = pset.getParameter<ParameterSet>("histoProducerAlgoBlock");
histoProducerAlgo_ = std::make_unique<MTVHistoProducerAlgoForTracker>(psetForHistoProducerAlgo, doSeedPlots_, consumesCollector());
edm::InputTag beamSpotTag = pset.getParameter<edm::InputTag>("beamSpot");
histoProducerAlgo_ = std::make_unique<MTVHistoProducerAlgoForTracker>(psetForHistoProducerAlgo, beamSpotTag, doSeedPlots_, consumesCollector());

dirName_ = pset.getParameter<std::string>("dirName");
UseAssociators = pset.getParameter< bool >("UseAssociators");
Expand Down Expand Up @@ -148,6 +149,8 @@ MultiTrackValidator::MultiTrackValidator(const edm::ParameterSet& pset):
psetVsPhi.getParameter<bool>("stableOnly"),
psetVsPhi.getParameter<std::vector<int> >("pdgId"));

dRTrackSelector = MTVHistoProducerAlgoForTracker::makeRecoTrackSelectorFromTPSelectorParameters(psetVsPhi, beamSpotTag, consumesCollector());

useGsf = pset.getParameter<bool>("useGsf");

_simHitTpMapTag = mayConsume<SimHitTPAssociationProducer::SimHitTPAssociationList>(pset.getParameter<edm::InputTag>("simHitTpMapTag"));
Expand Down Expand Up @@ -355,6 +358,8 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
parametersDefinerTP->initEvent(simHitsTPAssoc);
cosmictpSelector.initEvent(simHitsTPAssoc);
}
dRTrackSelector->init(event, setup);
histoProducerAlgo_->init(event, setup);

const reco::Vertex::Point *thePVposition = nullptr;
const TrackingVertex::LorentzVector *theSimPVPosition = nullptr;
Expand Down Expand Up @@ -515,6 +520,7 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup

//calculate dR for TPs
float dR_tPCeff[tPCeff.size()];
size_t n_selTP_dr = 0;
{
float etaL[tPCeff.size()], phiL[tPCeff.size()];
for(size_t iTP: selected_tPCeff) {
Expand All @@ -524,22 +530,22 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
etaL[iTP] = etaFromXYZ(p.x(),p.y(),p.z());
phiL[iTP] = atan2f(p.y(),p.x());
}
auto i=0U;
for ( auto const & tpr : tPCeff) {
auto const& tp = *tpr;
for(size_t iTP1: selected_tPCeff) {
auto const& tp = *(tPCeff[iTP1]);
double dR = std::numeric_limits<double>::max();
if(dRtpSelector(tp)) {//only for those needed for efficiency!
++n_selTP_dr;
auto && p = tp.momentum();
float eta = etaFromXYZ(p.x(),p.y(),p.z());
float phi = atan2f(p.y(),p.x());
for(size_t iTP: selected_tPCeff) {
for(size_t iTP2: selected_tPCeff) {
//calculare dR wrt inclusive collection (also with PU, low pT, displaced)
if (i==iTP) {continue;}
auto dR_tmp = reco::deltaR2(eta, phi, etaL[iTP], phiL[iTP]);
if (iTP1==iTP2) {continue;}
auto dR_tmp = reco::deltaR2(eta, phi, etaL[iTP2], phiL[iTP2]);
if (dR_tmp<dR) dR=dR_tmp;
} // ttp2 (iTP)
}
dR_tPCeff[i++] = std::sqrt(dR);
dR_tPCeff[iTP1] = std::sqrt(dR);
} // tp
}

Expand Down Expand Up @@ -661,8 +667,6 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
LogTrace("TrackValidator") << "\n# of TrackingParticles: " << tPCeff.size() << "\n";
int ats(0); //This counter counts the number of simTracks that are "associated" to recoTracks
int st(0); //This counter counts the number of simulated tracks passing the MTV selection (i.e. tpSelector(tp) )
unsigned sts(0); //This counter counts the number of simTracks surviving the bunchcrossing cut
unsigned asts(0); //This counter counts the number of simTracks that are "associated" to recoTracks surviving the bunchcrossing cut

//loop over already-selected TPs for tracking efficiency
for(size_t i=0; i<selected_tPCeff.size(); ++i) {
Expand Down Expand Up @@ -709,11 +713,6 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
}
//---------- THE PART ABOVE HAS TO BE CLEANED UP. THE PARAMETER DEFINER WAS NOT MEANT TO BE USED IN THIS WAY ----------

//This counter counts the number of simulated tracks passing the MTV selection (i.e. tpSelector(tp) ), but only for in-time TPs
if(tp.eventId().bunchCrossing() == 0) {
st++;
}

// in the coming lines, histos are filled using as input
// - momentumTP
// - vertexTP
Expand Down Expand Up @@ -783,9 +782,6 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
int nSimStripMonoAndStereoLayers = nStripMonoAndStereoLayers_tPCeff[tpr];
histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,tp,momentumTP,vertexTP,dxySim,dzSim,dxyPVSim,dzPVSim,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers,matchedTrackPointer,puinfo.getPU_NumInteractions(), dR, thePVposition, theSimPVPosition, mvaValues, selectsLoose, selectsHP);
mvaValues.clear();
sts++;
if(matchedTrackPointer)
asts++;
if(doSummaryPlots_) {
if(dRtpSelectorNoPtCut(tp)) {
h_simul_coll_allPt[ww]->Fill(www);
Expand Down Expand Up @@ -822,6 +818,7 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
int at(0); //This counter counts the number of recoTracks that are associated to SimTracks
int rT(0); //This counter counts the number of recoTracks in general
int seed_fit_failed = 0;
size_t n_selTrack_dr = 0;

//calculate dR for tracks
const edm::View<Track> *trackCollectionDr = &trackCollection;
Expand Down Expand Up @@ -860,6 +857,7 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
auto track = trackCollection.refAt(i);
rT++;
if(trackFromSeedFitFailed(*track)) ++seed_fit_failed;
if((*dRTrackSelector)(*track)) ++n_selTrack_dr;

bool isSigSimMatched(false);
bool isSimMatched(false);
Expand Down Expand Up @@ -970,15 +968,16 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup
mvaCollections.clear();
qualityMaskCollections.clear();

histoProducerAlgo_->fill_trackBased_histos(w,at,rT,st);
histoProducerAlgo_->fill_trackBased_histos(w,at,rT, n_selTrack_dr, n_selTP_dr);
// Fill seed-specific histograms
if(doSeedPlots_) {
histoProducerAlgo_->fill_seed_histos(www, seed_fit_failed, trackCollection.size());
}


LogTrace("TrackValidator") << "Total Simulated: " << st << "\n"
<< "Total Associated (simToReco): " << ats << "\n"
LogTrace("TrackValidator") << "Collection " << www << "\n"
<< "Total Simulated (selected): " << n_selTP_dr << "\n"
<< "Total Reconstructed (selected): " << n_selTrack_dr << "\n"
<< "Total Reconstructed: " << rT << "\n"
<< "Total Associated (recoToSim): " << at << "\n"
<< "Total Fakes: " << rT-at << "\n";
Expand Down

0 comments on commit 507c247

Please sign in to comment.