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  AssociationCuts
 
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 &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
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
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
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 CalculateTimingTrackingDistance (const reco::ForwardProton &proton, const CTPPSLocalTrackLite &tr, const CTPPSGeometry &geometry, double &de_x, double &de_x_unc)
 
void endJob () override
 

Static Private Member Functions

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

Private Attributes

std::map< unsigned int, ArmCorrelationPlotsarmCorrelationPlots_
 
std::map< unsigned int, AssociationCutsassociation_cuts_
 
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
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (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)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 

Detailed Description

Definition at line 31 of file CTPPSProtonReconstructionPlotter.cc.

Constructor & Destructor Documentation

◆ CTPPSProtonReconstructionPlotter()

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

Definition at line 461 of file CTPPSProtonReconstructionPlotter.cc.

463  : tokenTracks_(consumes<CTPPSLocalTrackLiteCollection>(ps.getParameter<edm::InputTag>("tagTracks"))),
465  consumes<reco::ForwardProtonCollection>(ps.getParameter<InputTag>("tagRecoProtonsSingleRP"))),
467  consumes<reco::ForwardProtonCollection>(ps.getParameter<InputTag>("tagRecoProtonsMultiRP"))),
468 
469  rpId_45_N_(ps.getParameter<unsigned int>("rpId_45_N")),
470  rpId_45_F_(ps.getParameter<unsigned int>("rpId_45_F")),
471  rpId_56_N_(ps.getParameter<unsigned int>("rpId_56_N")),
472  rpId_56_F_(ps.getParameter<unsigned int>("rpId_56_F")),
473 
474  outputFile_(ps.getParameter<string>("outputFile")),
475  maxNonEmptyEvents_(ps.getUntrackedParameter<signed int>("maxNonEmptyEvents", -1)),
476 
477  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.)),
478  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.)),
479 
480  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.)),
481  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.)),
482 
484  for (const std::string &sector : {"45", "56"}) {
485  const unsigned int arm = (sector == "45") ? 0 : 1;
486  association_cuts_[arm].load(ps.getParameterSet("association_cuts_" + sector));
487  }

References association_cuts_, edm::ParameterSet::getParameterSet(), and AlCaHLTBitMon_QueryRunRegistry::string.

◆ ~CTPPSProtonReconstructionPlotter()

CTPPSProtonReconstructionPlotter::~CTPPSProtonReconstructionPlotter ( )
inlineoverride

Definition at line 36 of file CTPPSProtonReconstructionPlotter.cc.

37 :
38  void analyze(const edm::Event &, const edm::EventSetup &) override;

Member Function Documentation

◆ analyze()

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

Implements edm::one::EDAnalyzerBase.

Definition at line 516 of file CTPPSProtonReconstructionPlotter.cc.

517  {
518  // get input
520  event.getByToken(tokenTracks_, hTracks);
521 
522  Handle<reco::ForwardProtonCollection> hRecoProtonsSingleRP;
523  event.getByToken(tokenRecoProtonsSingleRP_, hRecoProtonsSingleRP);
524 
525  Handle<reco::ForwardProtonCollection> hRecoProtonsMultiRP;
526  event.getByToken(tokenRecoProtonsMultiRP_, hRecoProtonsMultiRP);
527 
528  if (!hRecoProtonsSingleRP->empty())
530 
532  throw cms::Exception("CTPPSProtonReconstructionPlotter") << "Number of non empty events reached maximum.";
533 
534  // get conditions
536  iSetup.get<VeryForwardRealGeometryRecord>().get(hGeometry);
537 
538  // track plots
539  const CTPPSLocalTrackLite *tr_L_N = nullptr;
540  const CTPPSLocalTrackLite *tr_L_F = nullptr;
541  const CTPPSLocalTrackLite *tr_R_N = nullptr;
542  const CTPPSLocalTrackLite *tr_R_F = nullptr;
543  std::map<unsigned int, unsigned int> armTrackCounter, armTimingTrackCounter;
544  std::map<unsigned int, unsigned int> armTrackCounter_N, armTrackCounter_F;
545 
546  for (const auto &tr : *hTracks) {
547  CTPPSDetId rpId(tr.rpId());
548  unsigned int decRPId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp();
549 
550  if (decRPId == rpId_45_N_) {
551  tr_L_N = &tr;
552  armTrackCounter_N[0]++;
553  }
554  if (decRPId == rpId_45_F_) {
555  tr_L_F = &tr;
556  armTrackCounter_F[0]++;
557  }
558  if (decRPId == rpId_56_N_) {
559  tr_R_N = &tr;
560  armTrackCounter_N[1]++;
561  }
562  if (decRPId == rpId_56_F_) {
563  tr_R_F = &tr;
564  armTrackCounter_F[1]++;
565  }
566 
567  armTrackCounter[rpId.arm()]++;
568 
569  const bool trackerRP =
570  (rpId.subdetId() == CTPPSDetId::sdTrackingStrip || rpId.subdetId() == CTPPSDetId::sdTrackingPixel);
571  if (!trackerRP)
572  armTimingTrackCounter[rpId.arm()]++;
573  }
574 
575  if (tr_L_N && tr_L_F) {
576  p_x_L_diffNF_vs_x_L_N_->Fill(tr_L_N->x(), tr_L_F->x() - tr_L_N->x());
577  p_y_L_diffNF_vs_y_L_N_->Fill(tr_L_N->y(), tr_L_F->y() - tr_L_N->y());
578  }
579 
580  if (tr_R_N && tr_R_F) {
581  p_x_R_diffNF_vs_x_R_N_->Fill(tr_R_N->x(), tr_R_F->x() - tr_R_N->x());
582  p_y_R_diffNF_vs_y_R_N_->Fill(tr_R_N->y(), tr_R_F->y() - tr_R_N->y());
583  }
584 
585  // initialise multiplicity counters
586  std::map<unsigned int, unsigned int> singleRPMultiplicity, multiRPMultiplicity;
587  singleRPMultiplicity[rpId_45_N_] = singleRPMultiplicity[rpId_45_F_] = singleRPMultiplicity[rpId_56_N_] =
588  singleRPMultiplicity[rpId_56_F_] = 0;
589  multiRPMultiplicity[0] = multiRPMultiplicity[1] = 0;
590 
591  // make single-RP-reco plots
592  for (const auto &proton : *hRecoProtonsSingleRP) {
593  CTPPSDetId rpId((*proton.contributingLocalTracks().begin())->rpId());
594  unsigned int decRPId = rpId.arm() * 100 + rpId.station() * 10 + rpId.rp();
595 
596  const bool n1f1 = (armTrackCounter_N[rpId.arm()] == 1 && armTrackCounter_F[rpId.arm()] == 1);
597 
598  singleRPPlots_[decRPId].fill(proton, armTrackCounter[rpId.arm()], n1f1);
599 
600  if (proton.validFit())
601  singleRPMultiplicity[decRPId]++;
602  }
603 
604  for (const auto it : singleRPMultiplicity)
605  singleRPPlots_[it.first].h_multiplicity->Fill(it.second);
606 
607  // make multi-RP-reco plots
608  for (const auto &proton : *hRecoProtonsMultiRP) {
609  CTPPSDetId rpId((*proton.contributingLocalTracks().begin())->rpId());
610  unsigned int armId = rpId.arm();
611 
612  const bool n1f1 = (armTrackCounter_N[armId] == 1 && armTrackCounter_F[armId] == 1);
613 
614  multiRPPlots_[armId].fill(proton, armTrackCounter[armId], n1f1);
615 
616  if (proton.validFit())
617  multiRPMultiplicity[armId]++;
618  }
619 
620  for (const auto it : multiRPMultiplicity) {
621  const auto &pl = multiRPPlots_[it.first];
622  pl.h_multiplicity->Fill(it.second);
623  pl.h2_timing_tracks_vs_prot_mult->Fill(it.second, armTimingTrackCounter[it.first]);
624  }
625 
626  // define "clean condition" for each arm
627  map<unsigned int, bool> clCo;
628  clCo[0] = (singleRPMultiplicity[rpId_45_N_] && singleRPMultiplicity[rpId_45_F_] && multiRPMultiplicity[0] == 1);
629  clCo[1] = (singleRPMultiplicity[rpId_56_N_] && singleRPMultiplicity[rpId_56_F_] && multiRPMultiplicity[1] == 1);
630 
631  // plot distances between multi-RP protons and timing tracks in the same arm
632  for (const auto &proton : *hRecoProtonsMultiRP) {
633  if (!proton.validFit())
634  continue;
635 
636  CTPPSDetId rpId_proton((*proton.contributingLocalTracks().begin())->rpId());
637  unsigned int armId = rpId_proton.arm();
638  const auto &pl = multiRPPlots_[armId];
639 
640  for (const auto &tr : *hTracks) {
641  CTPPSDetId rpId_tr(tr.rpId());
642  if (rpId_tr.arm() != armId)
643  continue;
644 
645  const bool trackerRP =
646  (rpId_tr.subdetId() == CTPPSDetId::sdTrackingStrip || rpId_tr.subdetId() == CTPPSDetId::sdTrackingPixel);
647  if (trackerRP)
648  continue;
649 
650  double de_x = 0., de_x_unc = 0.;
651  CalculateTimingTrackingDistance(proton, tr, *hGeometry, de_x, de_x_unc);
652 
653  const double rd = (de_x_unc > 0.) ? de_x / de_x_unc : -1E10;
654  const auto &ac = association_cuts_[armId];
655  const bool match = (ac.ti_tr_min <= fabs(rd) && fabs(rd) <= ac.ti_tr_max);
656 
657  pl.h_de_x_timing_vs_tracking->Fill(de_x);
658  pl.h_de_x_rel_timing_vs_tracking->Fill(rd);
659  pl.h_de_x_match_timing_vs_tracking->Fill(match ? 1. : 0.);
660 
661  if (clCo[armId] && armTimingTrackCounter[armId] == 1) {
662  pl.h_de_x_timing_vs_tracking_ClCo->Fill(de_x);
663  pl.h_de_x_rel_timing_vs_tracking_ClCo->Fill(rd);
664  pl.h_de_x_match_timing_vs_tracking_ClCo->Fill(match ? 1. : 0.);
665  }
666  }
667  }
668 
669  // plot xy maps
670  for (const auto &proton : *hRecoProtonsMultiRP) {
671  if (!proton.validFit())
672  continue;
673 
674  CTPPSDetId rpId((*proton.contributingLocalTracks().begin())->rpId());
675  unsigned int armId = rpId.arm();
676  const auto &pl = multiRPPlots_[armId];
677  const auto &nTimingTracks = armTimingTrackCounter[armId];
678 
679  if (!clCo[armId])
680  continue;
681 
682  double x_ref = 0., y_ref = 0.;
683  if (armId == 0) {
684  x_ref = tr_L_N->x();
685  y_ref = tr_L_N->y();
686  }
687  if (armId == 1) {
688  x_ref = tr_R_N->x();
689  y_ref = tr_R_N->y();
690  }
691 
692  if (nTimingTracks == 0)
693  pl.h2_y_vs_x_tt0_ClCo->Fill(x_ref, y_ref);
694  if (nTimingTracks == 1)
695  pl.h2_y_vs_x_tt1_ClCo->Fill(x_ref, y_ref);
696  if (nTimingTracks > 1)
697  pl.h2_y_vs_x_ttm_ClCo->Fill(x_ref, y_ref);
698  }
699 
700  // make correlation plots
701  for (const auto &proton_m : *hRecoProtonsMultiRP) {
702  CTPPSDetId rpId_m((*proton_m.contributingLocalTracks().begin())->rpId());
703  unsigned int arm = rpId_m.arm();
704 
705  const reco::ForwardProton *p_s_N = nullptr, *p_s_F = nullptr;
706 
707  for (const auto &proton_s : *hRecoProtonsSingleRP) {
708  // skip if source of single-RP reco not included in multi-RP reco
709  const auto key_s = proton_s.contributingLocalTracks()[0].key();
710  bool compatible = false;
711  for (const auto &tr_m : proton_m.contributingLocalTracks()) {
712  if (tr_m.key() == key_s) {
713  compatible = true;
714  break;
715  }
716  }
717 
718  if (!compatible)
719  continue;
720 
721  // fill single-multi plots
722  CTPPSDetId rpId_s((*proton_s.contributingLocalTracks().begin())->rpId());
723  const unsigned int idx = rpId_s.arm() * 1000 + rpId_s.station() * 100 + rpId_s.rp() * 10 + rpId_s.arm();
724  singleMultiCorrelationPlots_[idx].fill(proton_s, proton_m);
725 
726  // select protons for arm-correlation plots
727  const unsigned int rpDecId_s = rpId_s.arm() * 100 + rpId_s.station() * 10 + rpId_s.rp();
728  if (rpDecId_s == rpId_45_N_ || rpDecId_s == rpId_56_N_)
729  p_s_N = &proton_s;
730  if (rpDecId_s == rpId_45_F_ || rpDecId_s == rpId_56_F_)
731  p_s_F = &proton_s;
732  }
733 
734  // fill arm-correlation plots
735  if (p_s_N && p_s_F)
736  armCorrelationPlots_[arm].fill(*p_s_N, *p_s_F, proton_m);
737  }

References CTPPSDetId::arm(), armCorrelationPlots_, association_cuts_, CalculateTimingTrackingDistance(), reco::ForwardProton::contributingLocalTracks(), alignCSCRings::de_x, Exception, edm::EventSetup::get(), get, charmTagsComputerCvsB_cfi::idx, match(), 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_, year_2016_postTS2_cff::rpId, rpId_45_F_, rpId_45_N_, rpId_56_F_, rpId_56_N_, CTPPSDetId::sdTrackingPixel, CTPPSDetId::sdTrackingStrip, singleMultiCorrelationPlots_, singleRPPlots_, tokenRecoProtonsMultiRP_, tokenRecoProtonsSingleRP_, tokenTracks_, CTPPSLocalTrackLite::x(), and CTPPSLocalTrackLite::y().

◆ CalculateTimingTrackingDistance()

void CTPPSProtonReconstructionPlotter::CalculateTimingTrackingDistance ( const reco::ForwardProton proton,
const CTPPSLocalTrackLite tr,
const CTPPSGeometry geometry,
double &  de_x,
double &  de_x_unc 
)
private

Definition at line 491 of file CTPPSProtonReconstructionPlotter.cc.

496  {
497  // identify tracking-RP tracks
498  const auto &tr_i = *proton.contributingLocalTracks().at(0);
499  const auto &tr_j = *proton.contributingLocalTracks().at(1);
500 
501  const double z_i = geometry.rpTranslation(tr_i.rpId()).z();
502  const double z_j = geometry.rpTranslation(tr_j.rpId()).z();
503 
504  // interpolation from tracking RPs
505  const double z_ti = -geometry.rpTranslation(tr_ti.rpId()).z(); // the minus sign fixes a bug in the diamond geometry
506  const double f_i = (z_ti - z_j) / (z_i - z_j), f_j = (z_i - z_ti) / (z_i - z_j);
507  const double x_inter = f_i * tr_i.x() + f_j * tr_j.x();
508  const double x_inter_unc_sq = f_i * f_i * tr_i.xUnc() * tr_i.xUnc() + f_j * f_j * tr_j.xUnc() * tr_j.xUnc();
509 
510  // save distance
511  de_x = tr_ti.x() - x_inter;
512  de_x_unc = sqrt(tr_ti.xUnc() * tr_ti.xUnc() + x_inter_unc_sq);

References edm::RefVector< C, T, F >::at(), reco::ForwardProton::contributingLocalTracks(), alignCSCRings::de_x, CTPPSLocalTrackLite::rpId(), mathSSE::sqrt(), CTPPSLocalTrackLite::x(), CTPPSLocalTrackLite::xUnc(), and z.

Referenced by analyze().

◆ endJob()

void CTPPSProtonReconstructionPlotter::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::one::EDAnalyzerBase.

Definition at line 741 of file CTPPSProtonReconstructionPlotter.cc.

742  {
743  LogInfo("CTPPSProtonReconstructionPlotter") << "n_non_empty_events = " << n_non_empty_events_;
744 
745  auto f_out = std::make_unique<TFile>(outputFile_.c_str(), "recreate");
746 
747  p_x_L_diffNF_vs_x_L_N_->Write();
748  p_x_R_diffNF_vs_x_R_N_->Write();
749 
750  p_y_L_diffNF_vs_y_L_N_->Write();
751  p_y_R_diffNF_vs_y_R_N_->Write();
752 
753  TDirectory *d_singleRPPlots = f_out->mkdir("singleRPPlots");
754  for (const auto &it : singleRPPlots_) {
755  gDirectory = d_singleRPPlots->mkdir(Form("rp%u", it.first));
756  it.second.write();
757  }
758 
759  TDirectory *d_multiRPPlots = f_out->mkdir("multiRPPlots");
760  for (const auto &it : multiRPPlots_) {
761  gDirectory = d_multiRPPlots->mkdir(Form("arm%u", it.first));
762  it.second.write();
763  }
764 
765  TDirectory *d_singleMultiCorrelationPlots = f_out->mkdir("singleMultiCorrelationPlots");
766  for (const auto &it : singleMultiCorrelationPlots_) {
767  unsigned int si_rp = it.first / 10;
768  unsigned int mu_arm = it.first % 10;
769 
770  gDirectory = d_singleMultiCorrelationPlots->mkdir(Form("si_rp%u_mu_arm%u", si_rp, mu_arm));
771  it.second.write();
772  }
773 
774  TDirectory *d_armCorrelationPlots = f_out->mkdir("armCorrelationPlots");
775  for (const auto &it : armCorrelationPlots_) {
776  gDirectory = d_armCorrelationPlots->mkdir(Form("arm%u", it.first));
777  it.second.write();
778  }

References armCorrelationPlots_, 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_.

◆ profileToRMSGraph()

static void CTPPSProtonReconstructionPlotter::profileToRMSGraph ( TProfile *  p,
TGraphErrors *  g 
)
inlinestaticprivate

Definition at line 66 of file CTPPSProtonReconstructionPlotter.cc.

66  {
67  double c = p->GetBinCenter(bi);
68 
69  double N = p->GetBinEntries(bi);
70  double Sy = p->GetBinContent(bi) * N;
71  double Syy = p->GetSumw2()->At(bi);
72 
73  double si_sq = Syy / N - Sy * Sy / N / N;
74  double si = (si_sq >= 0.) ? sqrt(si_sq) : 0.;
75  double si_unc_sq = si_sq / 2. / N; // Gaussian approximation
76  double si_unc = (si_unc_sq >= 0.) ? sqrt(si_unc_sq) : 0.;
77 
78  int idx = g->GetN();
79  g->SetPoint(idx, c, si);
80  g->SetPointError(idx, 0., si_unc);
81  }
82  }
83 

References HltBtagPostValidation_cff::c, g, charmTagsComputerCvsB_cfi::idx, N, AlCaHLTBitMon_ParallelJobs::p, and mathSSE::sqrt().

Member Data Documentation

◆ armCorrelationPlots_

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

Definition at line 448 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ association_cuts_

std::map<unsigned int, AssociationCuts> CTPPSProtonReconstructionPlotter::association_cuts_
private

◆ maxNonEmptyEvents_

signed int CTPPSProtonReconstructionPlotter::maxNonEmptyEvents_
private

Definition at line 64 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ multiRPPlots_

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

Definition at line 357 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ n_non_empty_events_

signed int CTPPSProtonReconstructionPlotter::n_non_empty_events_
private

Definition at line 453 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ outputFile_

std::string CTPPSProtonReconstructionPlotter::outputFile_
private

Definition at line 62 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by endJob().

◆ p_x_L_diffNF_vs_x_L_N_

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

Definition at line 450 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ p_x_R_diffNF_vs_x_R_N_

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

Definition at line 450 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ p_y_L_diffNF_vs_y_L_N_

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

Definition at line 451 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ p_y_R_diffNF_vs_y_R_N_

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

Definition at line 451 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ rpId_45_F_

unsigned int CTPPSProtonReconstructionPlotter::rpId_45_F_
private

Definition at line 47 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ rpId_45_N_

unsigned int CTPPSProtonReconstructionPlotter::rpId_45_N_
private

Definition at line 47 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ rpId_56_F_

unsigned int CTPPSProtonReconstructionPlotter::rpId_56_F_
private

Definition at line 48 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ rpId_56_N_

unsigned int CTPPSProtonReconstructionPlotter::rpId_56_N_
private

Definition at line 48 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ singleMultiCorrelationPlots_

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

Definition at line 406 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ singleRPPlots_

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

Definition at line 149 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ tokenRecoProtonsMultiRP_

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

Definition at line 45 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ tokenRecoProtonsSingleRP_

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

Definition at line 44 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ tokenTracks_

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

Definition at line 43 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

VeryForwardRealGeometryRecord
Event setup record containing the real (actual) geometry information.
Definition: VeryForwardRealGeometryRecord.h:22
CTPPSLocalTrackLite
Local (=single RP) track with essential information only.
Definition: CTPPSLocalTrackLite.h:19
CTPPSProtonReconstructionPlotter::armCorrelationPlots_
std::map< unsigned int, ArmCorrelationPlots > armCorrelationPlots_
Definition: CTPPSProtonReconstructionPlotter.cc:448
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
geometry
Definition: geometry.py:1
edm::LogInfo
Definition: MessageLogger.h:254
CTPPSProtonReconstructionPlotter::outputFile_
std::string outputFile_
Definition: CTPPSProtonReconstructionPlotter.cc:62
reco::ForwardProton
Definition: ForwardProton.h:22
charmTagsComputerCvsB_cfi.idx
idx
Definition: charmTagsComputerCvsB_cfi.py:108
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
year_2016_postTS2_cff.rpId
rpId
Definition: year_2016_postTS2_cff.py:23
CTPPSProtonReconstructionPlotter::CalculateTimingTrackingDistance
void CalculateTimingTrackingDistance(const reco::ForwardProton &proton, const CTPPSLocalTrackLite &tr, const CTPPSGeometry &geometry, double &de_x, double &de_x_unc)
Definition: CTPPSProtonReconstructionPlotter.cc:491
edm::Handle
Definition: AssociativeIterator.h:50
CTPPSProtonReconstructionPlotter::p_x_L_diffNF_vs_x_L_N_
std::unique_ptr< TProfile > p_x_L_diffNF_vs_x_L_N_
Definition: CTPPSProtonReconstructionPlotter.cc:450
CTPPSProtonReconstructionPlotter::singleMultiCorrelationPlots_
std::map< unsigned int, SingleMultiCorrelationPlots > singleMultiCorrelationPlots_
Definition: CTPPSProtonReconstructionPlotter.cc:406
CTPPSProtonReconstructionPlotter::tokenRecoProtonsMultiRP_
edm::EDGetTokenT< reco::ForwardProtonCollection > tokenRecoProtonsMultiRP_
Definition: CTPPSProtonReconstructionPlotter.cc:45
CTPPSProtonReconstructionPlotter::association_cuts_
std::map< unsigned int, AssociationCuts > association_cuts_
Definition: CTPPSProtonReconstructionPlotter.cc:60
CTPPSDetId::sdTrackingStrip
Definition: CTPPSDetId.h:44
CTPPSLocalTrackLite::x
float x() const
returns the horizontal track position
Definition: CTPPSLocalTrackLite.h:75
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
CTPPSProtonReconstructionPlotter::tokenTracks_
edm::EDGetTokenT< CTPPSLocalTrackLiteCollection > tokenTracks_
Definition: CTPPSProtonReconstructionPlotter.cc:43
CTPPSProtonReconstructionPlotter::rpId_56_N_
unsigned int rpId_56_N_
Definition: CTPPSProtonReconstructionPlotter.cc:48
CTPPSProtonReconstructionPlotter::maxNonEmptyEvents_
signed int maxNonEmptyEvents_
Definition: CTPPSProtonReconstructionPlotter.cc:64
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
CTPPSProtonReconstructionPlotter::singleRPPlots_
std::map< unsigned int, SingleRPPlots > singleRPPlots_
Definition: CTPPSProtonReconstructionPlotter.cc:149
DDAxes::z
edm::ESHandle
Definition: DTSurvey.h:22
N
#define N
Definition: blowfish.cc:9
CTPPSProtonReconstructionPlotter::multiRPPlots_
std::map< unsigned int, MultiRPPlots > multiRPPlots_
Definition: CTPPSProtonReconstructionPlotter.cc:357
CTPPSDetId::sdTrackingPixel
Definition: CTPPSDetId.h:44
reco::ForwardProton::contributingLocalTracks
const CTPPSLocalTrackLiteRefVector & contributingLocalTracks() const
list of RP tracks that contributed to this global track
Definition: ForwardProton.h:137
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
CTPPSDetId::arm
uint32_t arm() const
Definition: CTPPSDetId.h:55
CTPPSProtonReconstructionPlotter::rpId_45_F_
unsigned int rpId_45_F_
Definition: CTPPSProtonReconstructionPlotter.cc:47
match
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
CTPPSProtonReconstructionPlotter::tokenRecoProtonsSingleRP_
edm::EDGetTokenT< reco::ForwardProtonCollection > tokenRecoProtonsSingleRP_
Definition: CTPPSProtonReconstructionPlotter.cc:44
CTPPSDetId
Base class for CTPPS detector IDs.
Definition: CTPPSDetId.h:31
edm::EventSetup
Definition: EventSetup.h:57
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
get
#define get
CTPPSProtonReconstructionPlotter::rpId_56_F_
unsigned int rpId_56_F_
Definition: CTPPSProtonReconstructionPlotter.cc:48
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
CTPPSProtonReconstructionPlotter::p_y_R_diffNF_vs_y_R_N_
std::unique_ptr< TProfile > p_y_R_diffNF_vs_y_R_N_
Definition: CTPPSProtonReconstructionPlotter.cc:451
CTPPSProtonReconstructionPlotter::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: CTPPSProtonReconstructionPlotter.cc:516
CTPPSLocalTrackLite::y
float y() const
returns the vertical track position
Definition: CTPPSLocalTrackLite.h:81
Exception
Definition: hltDiff.cc:246
alignCSCRings.de_x
de_x
Definition: alignCSCRings.py:85
CTPPSProtonReconstructionPlotter::n_non_empty_events_
signed int n_non_empty_events_
Definition: CTPPSProtonReconstructionPlotter.cc:453
CTPPSProtonReconstructionPlotter::p_y_L_diffNF_vs_y_L_N_
std::unique_ptr< TProfile > p_y_L_diffNF_vs_y_L_N_
Definition: CTPPSProtonReconstructionPlotter.cc:451
edm::RefVector::at
const value_type at(size_type idx) const
Retrieve an element of the RefVector.
Definition: RefVector.h:83
edm::Event
Definition: Event.h:73
edm::InputTag
Definition: InputTag.h:15
edm::ParameterSet::getParameterSet
ParameterSet const & getParameterSet(std::string const &) const
Definition: ParameterSet.cc:2121
CTPPSProtonReconstructionPlotter::p_x_R_diffNF_vs_x_R_N_
std::unique_ptr< TProfile > p_x_R_diffNF_vs_x_R_N_
Definition: CTPPSProtonReconstructionPlotter.cc:450
g
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
CTPPSProtonReconstructionPlotter::rpId_45_N_
unsigned int rpId_45_N_
Definition: CTPPSProtonReconstructionPlotter.cc:47