CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
CTPPSProtonReconstructionPlotter Class Reference
Inheritance diagram for CTPPSProtonReconstructionPlotter:
edm::one::EDAnalyzer<> edm::one::EDAnalyzerBase edm::EDConsumerBase

Classes

struct  ArmCorrelationPlots
 
struct  MultiRPPlots
 
struct  SingleMultiCorrelationPlots
 
struct  SingleRPPlots
 

Public Member Functions

 CTPPSProtonReconstructionPlotter (const edm::ParameterSet &)
 
 ~CTPPSProtonReconstructionPlotter () override
 
- Public Member Functions inherited from edm::one::EDAnalyzer<>
 EDAnalyzer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDAnalyzerBase () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void endJob () override
 

Static Private Member Functions

static void profileToRMSGraph (TProfile *p, TGraphErrors *g)
 

Private Attributes

std::map< unsigned int, ArmCorrelationPlotsarmCorrelationPlots_
 
signed int maxNonEmptyEvents_
 
std::map< unsigned int, MultiRPPlotsmultiRPPlots_
 
signed int n_non_empty_events_
 
std::string outputFile_
 
std::unique_ptr< TProfile > p_x_L_diffNF_vs_x_L_N_
 
std::unique_ptr< TProfile > p_x_R_diffNF_vs_x_R_N_
 
std::unique_ptr< TProfile > p_y_L_diffNF_vs_y_L_N_
 
std::unique_ptr< TProfile > p_y_R_diffNF_vs_y_R_N_
 
unsigned int rpId_45_F_
 
unsigned int rpId_45_N_
 
unsigned int rpId_56_F_
 
unsigned int rpId_56_N_
 
std::map< unsigned int, SingleMultiCorrelationPlotssingleMultiCorrelationPlots_
 
std::map< unsigned int, SingleRPPlotssingleRPPlots_
 
edm::EDGetTokenT< reco::ForwardProtonCollectiontokenRecoProtonsMultiRP_
 
edm::EDGetTokenT< reco::ForwardProtonCollectiontokenRecoProtonsSingleRP_
 
edm::EDGetTokenT< CTPPSLocalTrackLiteCollectiontokenTracks_
 

Additional Inherited Members

- Public Types inherited from edm::one::EDAnalyzerBase
typedef EDAnalyzerBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 29 of file CTPPSProtonReconstructionPlotter.cc.

Constructor & Destructor Documentation

CTPPSProtonReconstructionPlotter::CTPPSProtonReconstructionPlotter ( const edm::ParameterSet ps)
explicit

Definition at line 330 of file CTPPSProtonReconstructionPlotter.cc.

331  : tokenTracks_(consumes<CTPPSLocalTrackLiteCollection>(ps.getParameter<edm::InputTag>("tagTracks"))),
333  consumes<reco::ForwardProtonCollection>(ps.getParameter<InputTag>("tagRecoProtonsSingleRP"))),
335  consumes<reco::ForwardProtonCollection>(ps.getParameter<InputTag>("tagRecoProtonsMultiRP"))),
336 
337  rpId_45_N_(ps.getParameter<unsigned int>("rpId_45_N")),
338  rpId_45_F_(ps.getParameter<unsigned int>("rpId_45_F")),
339  rpId_56_N_(ps.getParameter<unsigned int>("rpId_56_N")),
340  rpId_56_F_(ps.getParameter<unsigned int>("rpId_56_F")),
341 
342  outputFile_(ps.getParameter<string>("outputFile")),
343  maxNonEmptyEvents_(ps.getUntrackedParameter<signed int>("maxNonEmptyEvents", -1)),
344 
345  p_x_L_diffNF_vs_x_L_N_(new TProfile("p_x_L_diffNF_vs_x_L_N", ";x_{LN};x_{LF} - x_{LN}", 100, 0., +20.)),
346  p_x_R_diffNF_vs_x_R_N_(new TProfile("p_x_R_diffNF_vs_x_R_N", ";x_{RN};x_{RF} - x_{RN}", 100, 0., +20.)),
347 
348  p_y_L_diffNF_vs_y_L_N_(new TProfile("p_y_L_diffNF_vs_y_L_N", ";y_{LN};y_{LF} - y_{LN}", 100, -20., +20.)),
349  p_y_R_diffNF_vs_y_R_N_(new TProfile("p_y_R_diffNF_vs_y_R_N", ";y_{RN};y_{RF} - y_{RN}", 100, -20., +20.)),
350 
351  n_non_empty_events_(0) {}
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< reco::ForwardProtonCollection > tokenRecoProtonsSingleRP_
edm::EDGetTokenT< CTPPSLocalTrackLiteCollection > tokenTracks_
edm::EDGetTokenT< reco::ForwardProtonCollection > tokenRecoProtonsMultiRP_
CTPPSProtonReconstructionPlotter::~CTPPSProtonReconstructionPlotter ( )
inlineoverride

Definition at line 32 of file CTPPSProtonReconstructionPlotter.cc.

References analyze(), and endJob().

32 {}

Member Function Documentation

void CTPPSProtonReconstructionPlotter::analyze ( const edm::Event event,
const edm::EventSetup  
)
overrideprivate

Definition at line 355 of file CTPPSProtonReconstructionPlotter.cc.

References CTPPSDetId::arm(), armCorrelationPlots_, Exception, training_settings::idx, maxNonEmptyEvents_, multiRPPlots_, n_non_empty_events_, p_x_L_diffNF_vs_x_L_N_, p_x_R_diffNF_vs_x_R_N_, p_y_L_diffNF_vs_y_L_N_, p_y_R_diffNF_vs_y_R_N_, rpId_45_F_, rpId_45_N_, rpId_56_F_, rpId_56_N_, singleMultiCorrelationPlots_, singleRPPlots_, tokenRecoProtonsMultiRP_, tokenRecoProtonsSingleRP_, tokenTracks_, CTPPSLocalTrackLite::x(), and CTPPSLocalTrackLite::y().

Referenced by ~CTPPSProtonReconstructionPlotter().

355  {
356  // get input
358  event.getByToken(tokenTracks_, hTracks);
359 
360  Handle<reco::ForwardProtonCollection> hRecoProtonsSingleRP;
361  event.getByToken(tokenRecoProtonsSingleRP_, hRecoProtonsSingleRP);
362 
363  Handle<reco::ForwardProtonCollection> hRecoProtonsMultiRP;
364  event.getByToken(tokenRecoProtonsMultiRP_, hRecoProtonsMultiRP);
365 
366  if (!hRecoProtonsSingleRP->empty())
368 
370  throw cms::Exception("CTPPSProtonReconstructionPlotter") << "Number of non empty events reached maximum.";
371 
372  // track plots
373  const CTPPSLocalTrackLite *tr_L_N = nullptr;
374  const CTPPSLocalTrackLite *tr_L_F = nullptr;
375  const CTPPSLocalTrackLite *tr_R_N = nullptr;
376  const CTPPSLocalTrackLite *tr_R_F = nullptr;
377 
378  for (const auto &tr : *hTracks) {
379  CTPPSDetId rpId(tr.rpId());
380  unsigned int decRPId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp();
381 
382  if (decRPId == rpId_45_N_)
383  tr_L_N = &tr;
384  if (decRPId == rpId_45_F_)
385  tr_L_F = &tr;
386  if (decRPId == rpId_56_N_)
387  tr_R_N = &tr;
388  if (decRPId == rpId_56_F_)
389  tr_R_F = &tr;
390  }
391 
392  if (tr_L_N && tr_L_F) {
393  p_x_L_diffNF_vs_x_L_N_->Fill(tr_L_N->x(), tr_L_F->x() - tr_L_N->x());
394  p_y_L_diffNF_vs_y_L_N_->Fill(tr_L_N->y(), tr_L_F->y() - tr_L_N->y());
395  }
396 
397  if (tr_R_N && tr_R_F) {
398  p_x_R_diffNF_vs_x_R_N_->Fill(tr_R_N->x(), tr_R_F->x() - tr_R_N->x());
399  p_y_R_diffNF_vs_y_R_N_->Fill(tr_R_N->y(), tr_R_F->y() - tr_R_N->y());
400  }
401 
402  // make single-RP-reco plots
403  for (const auto &proton : *hRecoProtonsSingleRP) {
404  CTPPSDetId rpId((*proton.contributingLocalTracks().begin())->rpId());
405  unsigned int decRPId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp();
406  singleRPPlots_[decRPId].fill(proton);
407  }
408 
409  // make multi-RP-reco plots
410  for (const auto &proton : *hRecoProtonsMultiRP) {
411  CTPPSDetId rpId((*proton.contributingLocalTracks().begin())->rpId());
412  unsigned int armId = rpId.arm();
413  multiRPPlots_[armId].fill(proton);
414  }
415 
416  // make correlation plots
417  for (const auto &proton_s : *hRecoProtonsSingleRP) {
418  for (const auto &proton_m : *hRecoProtonsMultiRP) {
419  // only compare object from the same arm
420  CTPPSDetId rpId_s((*proton_s.contributingLocalTracks().begin())->rpId());
421  CTPPSDetId rpId_m((*proton_m.contributingLocalTracks().begin())->rpId());
422 
423  if (rpId_s.arm() != rpId_m.arm())
424  continue;
425 
426  // build index
427  const unsigned int idx = rpId_s.arm() * 1000 + rpId_s.station() * 100 + rpId_s.rp() * 10 + rpId_m.arm();
428 
429  // fill plots
430  singleMultiCorrelationPlots_[idx].fill(proton_s, proton_m);
431  }
432  }
433 
434  // arm correlation plots
435  const reco::ForwardProton *p_arm0_s_N = nullptr, *p_arm0_s_F = nullptr, *p_arm0_m = nullptr;
436  const reco::ForwardProton *p_arm1_s_N = nullptr, *p_arm1_s_F = nullptr, *p_arm1_m = nullptr;
437 
438  for (const auto &proton : *hRecoProtonsSingleRP) {
439  CTPPSDetId rpId((*proton.contributingLocalTracks().begin())->rpId());
440  const unsigned int rpDecId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp();
441 
442  if (rpDecId == rpId_45_N_)
443  p_arm0_s_N = &proton;
444  if (rpDecId == rpId_45_F_)
445  p_arm0_s_F = &proton;
446 
447  if (rpDecId == rpId_56_N_)
448  p_arm1_s_N = &proton;
449  if (rpDecId == rpId_56_F_)
450  p_arm1_s_F = &proton;
451  }
452 
453  for (const auto &proton : *hRecoProtonsMultiRP) {
454  CTPPSDetId rpId((*proton.contributingLocalTracks().begin())->rpId());
455  const unsigned int arm = rpId.arm();
456 
457  if (arm == 0)
458  p_arm0_m = &proton;
459  if (arm == 1)
460  p_arm1_m = &proton;
461  }
462 
463  if (p_arm0_s_N && p_arm0_s_F && p_arm0_m)
464  armCorrelationPlots_[0].fill(*p_arm0_s_N, *p_arm0_s_F, *p_arm0_m);
465 
466  if (p_arm1_s_N && p_arm1_s_F && p_arm1_m)
467  armCorrelationPlots_[1].fill(*p_arm1_s_N, *p_arm1_s_F, *p_arm1_m);
468 }
std::map< unsigned int, MultiRPPlots > multiRPPlots_
edm::EDGetTokenT< reco::ForwardProtonCollection > tokenRecoProtonsSingleRP_
std::map< unsigned int, SingleRPPlots > singleRPPlots_
Local (=single RP) track with essential information only.
edm::EDGetTokenT< CTPPSLocalTrackLiteCollection > tokenTracks_
uint32_t arm() const
Definition: CTPPSDetId.h:51
std::map< unsigned int, ArmCorrelationPlots > armCorrelationPlots_
Base class for CTPPS detector IDs.
Definition: CTPPSDetId.h:32
float y() const
returns the vertical track position
std::map< unsigned int, SingleMultiCorrelationPlots > singleMultiCorrelationPlots_
float x() const
returns the horizontal track position
edm::EDGetTokenT< reco::ForwardProtonCollection > tokenRecoProtonsMultiRP_
void CTPPSProtonReconstructionPlotter::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::one::EDAnalyzerBase.

Definition at line 472 of file CTPPSProtonReconstructionPlotter.cc.

References armCorrelationPlots_, DEFINE_FWK_MODULE, multiRPPlots_, n_non_empty_events_, outputFile_, p_x_L_diffNF_vs_x_L_N_, p_x_R_diffNF_vs_x_R_N_, p_y_L_diffNF_vs_y_L_N_, p_y_R_diffNF_vs_y_R_N_, singleMultiCorrelationPlots_, and singleRPPlots_.

Referenced by ~CTPPSProtonReconstructionPlotter().

472  {
473  LogInfo("CTPPSProtonReconstructionPlotter") << "n_non_empty_events = " << n_non_empty_events_;
474 
475  auto f_out = std::make_unique<TFile>(outputFile_.c_str(), "recreate");
476 
477  p_x_L_diffNF_vs_x_L_N_->Write();
478  p_x_R_diffNF_vs_x_R_N_->Write();
479 
480  p_y_L_diffNF_vs_y_L_N_->Write();
481  p_y_R_diffNF_vs_y_R_N_->Write();
482 
483  TDirectory *d_singleRPPlots = f_out->mkdir("singleRPPlots");
484  for (const auto &it : singleRPPlots_) {
485  gDirectory = d_singleRPPlots->mkdir(Form("rp%u", it.first));
486  it.second.write();
487  }
488 
489  TDirectory *d_multiRPPlots = f_out->mkdir("multiRPPlots");
490  for (const auto &it : multiRPPlots_) {
491  gDirectory = d_multiRPPlots->mkdir(Form("arm%u", it.first));
492  it.second.write();
493  }
494 
495  TDirectory *d_singleMultiCorrelationPlots = f_out->mkdir("singleMultiCorrelationPlots");
496  for (const auto &it : singleMultiCorrelationPlots_) {
497  unsigned int si_rp = it.first / 10;
498  unsigned int mu_arm = it.first % 10;
499 
500  gDirectory = d_singleMultiCorrelationPlots->mkdir(Form("si_rp%u_mu_arm%u", si_rp, mu_arm));
501  it.second.write();
502  }
503 
504  TDirectory *d_armCorrelationPlots = f_out->mkdir("armCorrelationPlots");
505  for (const auto &it : armCorrelationPlots_) {
506  gDirectory = d_armCorrelationPlots->mkdir(Form("arm%u", it.first));
507  it.second.write();
508  }
509 }
std::map< unsigned int, MultiRPPlots > multiRPPlots_
std::map< unsigned int, SingleRPPlots > singleRPPlots_
std::map< unsigned int, ArmCorrelationPlots > armCorrelationPlots_
std::map< unsigned int, SingleMultiCorrelationPlots > singleMultiCorrelationPlots_
static void CTPPSProtonReconstructionPlotter::profileToRMSGraph ( TProfile *  p,
TGraphErrors *  g 
)
inlinestaticprivate

Definition at line 50 of file CTPPSProtonReconstructionPlotter.cc.

References HltBtagPostValidation_cff::c, training_settings::idx, N, and mathSSE::sqrt().

Referenced by CTPPSProtonReconstructionPlotter::MultiRPPlots::write().

50  {
51  for (int bi = 1; bi <= p->GetNbinsX(); ++bi) {
52  double c = p->GetBinCenter(bi);
53 
54  double N = p->GetBinEntries(bi);
55  double Sy = p->GetBinContent(bi) * N;
56  double Syy = p->GetSumw2()->At(bi);
57 
58  double si_sq = Syy / N - Sy * Sy / N / N;
59  double si = (si_sq >= 0.) ? sqrt(si_sq) : 0.;
60  double si_unc_sq = si_sq / 2. / N; // Gaussian approximation
61  double si_unc = (si_unc_sq >= 0.) ? sqrt(si_unc_sq) : 0.;
62 
63  int idx = g->GetN();
64  g->SetPoint(idx, c, si);
65  g->SetPointError(idx, 0., si_unc);
66  }
67  }
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
T sqrt(T t)
Definition: SSEVec.h:19
#define N
Definition: blowfish.cc:9

Member Data Documentation

std::map<unsigned int, ArmCorrelationPlots> CTPPSProtonReconstructionPlotter::armCorrelationPlots_
private

Definition at line 315 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

signed int CTPPSProtonReconstructionPlotter::maxNonEmptyEvents_
private

Definition at line 48 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

std::map<unsigned int, MultiRPPlots> CTPPSProtonReconstructionPlotter::multiRPPlots_
private

Definition at line 228 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

signed int CTPPSProtonReconstructionPlotter::n_non_empty_events_
private

Definition at line 320 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

std::string CTPPSProtonReconstructionPlotter::outputFile_
private

Definition at line 46 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by endJob().

std::unique_ptr<TProfile> CTPPSProtonReconstructionPlotter::p_x_L_diffNF_vs_x_L_N_
private

Definition at line 317 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

std::unique_ptr<TProfile> CTPPSProtonReconstructionPlotter::p_x_R_diffNF_vs_x_R_N_
private

Definition at line 317 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

std::unique_ptr<TProfile> CTPPSProtonReconstructionPlotter::p_y_L_diffNF_vs_y_L_N_
private

Definition at line 318 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

std::unique_ptr<TProfile> CTPPSProtonReconstructionPlotter::p_y_R_diffNF_vs_y_R_N_
private

Definition at line 318 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

unsigned int CTPPSProtonReconstructionPlotter::rpId_45_F_
private

Definition at line 43 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

unsigned int CTPPSProtonReconstructionPlotter::rpId_45_N_
private

Definition at line 43 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

unsigned int CTPPSProtonReconstructionPlotter::rpId_56_F_
private

Definition at line 44 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

unsigned int CTPPSProtonReconstructionPlotter::rpId_56_N_
private

Definition at line 44 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

std::map<unsigned int, SingleMultiCorrelationPlots> CTPPSProtonReconstructionPlotter::singleMultiCorrelationPlots_
private

Definition at line 277 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

std::map<unsigned int, SingleRPPlots> CTPPSProtonReconstructionPlotter::singleRPPlots_
private

Definition at line 97 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

edm::EDGetTokenT<reco::ForwardProtonCollection> CTPPSProtonReconstructionPlotter::tokenRecoProtonsMultiRP_
private

Definition at line 41 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

edm::EDGetTokenT<reco::ForwardProtonCollection> CTPPSProtonReconstructionPlotter::tokenRecoProtonsSingleRP_
private

Definition at line 40 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

edm::EDGetTokenT<CTPPSLocalTrackLiteCollection> CTPPSProtonReconstructionPlotter::tokenTracks_
private

Definition at line 39 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().