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
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () 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
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (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 &x_tr, double &x_ti, 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 = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
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<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
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 33 of file CTPPSProtonReconstructionPlotter.cc.

Constructor & Destructor Documentation

◆ CTPPSProtonReconstructionPlotter()

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

Definition at line 482 of file CTPPSProtonReconstructionPlotter.cc.

484  : tokenTracks_(consumes<CTPPSLocalTrackLiteCollection>(ps.getParameter<edm::InputTag>("tagTracks"))),
486  consumes<reco::ForwardProtonCollection>(ps.getParameter<InputTag>("tagRecoProtonsSingleRP"))),
488  consumes<reco::ForwardProtonCollection>(ps.getParameter<InputTag>("tagRecoProtonsMultiRP"))),
489 
490  rpId_45_N_(ps.getParameter<unsigned int>("rpId_45_N")),
491  rpId_45_F_(ps.getParameter<unsigned int>("rpId_45_F")),
492  rpId_56_N_(ps.getParameter<unsigned int>("rpId_56_N")),
493  rpId_56_F_(ps.getParameter<unsigned int>("rpId_56_F")),
494 
495  outputFile_(ps.getParameter<string>("outputFile")),
496  maxNonEmptyEvents_(ps.getUntrackedParameter<signed int>("maxNonEmptyEvents", -1)),
497 
498  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.)),
499  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.)),
500 
501  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.)),
502  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.)),
503 
505  for (const std::string &sector : {"45", "56"}) {
506  const unsigned int arm = (sector == "45") ? 0 : 1;
507  association_cuts_[arm].load(ps.getParameterSet("association_cuts_" + sector));
508  }

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

◆ ~CTPPSProtonReconstructionPlotter()

CTPPSProtonReconstructionPlotter::~CTPPSProtonReconstructionPlotter ( )
inlineoverride

Definition at line 38 of file CTPPSProtonReconstructionPlotter.cc.

39 :
40  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 542 of file CTPPSProtonReconstructionPlotter.cc.

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

References CTPPSDetId::arm(), armCorrelationPlots_, association_cuts_, CalculateTimingTrackingDistance(), reco::ForwardProton::contributingLocalTracks(), alignCSCRings::de_x, Exception, edm::EventSetup::get(), get, heavyIonCSV_trainingSettings::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 &  x_tr,
double &  x_ti,
double &  de_x,
double &  de_x_unc 
)
private

Definition at line 512 of file CTPPSProtonReconstructionPlotter.cc.

519  {
520  // identify tracking-RP tracks
521  const auto &tr_i = *proton.contributingLocalTracks().at(0);
522  const auto &tr_j = *proton.contributingLocalTracks().at(1);
523 
524  const double z_i = geometry.rpTranslation(tr_i.rpId()).z();
525  const double z_j = geometry.rpTranslation(tr_j.rpId()).z();
526 
527  // interpolation from tracking RPs
528  const double z_ti = -geometry.rpTranslation(tr_ti.rpId()).z(); // the minus sign fixes a bug in the diamond geometry
529  const double f_i = (z_ti - z_j) / (z_i - z_j), f_j = (z_i - z_ti) / (z_i - z_j);
530  const double x_inter = f_i * tr_i.x() + f_j * tr_j.x();
531  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();
532 
533  // save distance
534  x_tr = x_inter;
535  x_ti = tr_ti.x();
536 
537  de_x = tr_ti.x() - x_inter;
538  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 772 of file CTPPSProtonReconstructionPlotter.cc.

773  {
774  LogInfo("CTPPSProtonReconstructionPlotter") << "n_non_empty_events = " << n_non_empty_events_;
775 
776  auto f_out = std::make_unique<TFile>(outputFile_.c_str(), "recreate");
777 
778  p_x_L_diffNF_vs_x_L_N_->Write();
779  p_x_R_diffNF_vs_x_R_N_->Write();
780 
781  p_y_L_diffNF_vs_y_L_N_->Write();
782  p_y_R_diffNF_vs_y_R_N_->Write();
783 
784  TDirectory *d_singleRPPlots = f_out->mkdir("singleRPPlots");
785  for (const auto &it : singleRPPlots_) {
786  gDirectory = d_singleRPPlots->mkdir(Form("rp%u", it.first));
787  it.second.write();
788  }
789 
790  TDirectory *d_multiRPPlots = f_out->mkdir("multiRPPlots");
791  for (const auto &it : multiRPPlots_) {
792  gDirectory = d_multiRPPlots->mkdir(Form("arm%u", it.first));
793  it.second.write();
794  }
795 
796  TDirectory *d_singleMultiCorrelationPlots = f_out->mkdir("singleMultiCorrelationPlots");
797  for (const auto &it : singleMultiCorrelationPlots_) {
798  unsigned int si_rp = it.first / 10;
799  unsigned int mu_arm = it.first % 10;
800 
801  gDirectory = d_singleMultiCorrelationPlots->mkdir(Form("si_rp%u_mu_arm%u", si_rp, mu_arm));
802  it.second.write();
803  }
804 
805  TDirectory *d_armCorrelationPlots = f_out->mkdir("armCorrelationPlots");
806  for (const auto &it : armCorrelationPlots_) {
807  gDirectory = d_armCorrelationPlots->mkdir(Form("arm%u", it.first));
808  it.second.write();
809  }

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 68 of file CTPPSProtonReconstructionPlotter.cc.

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

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

Member Data Documentation

◆ armCorrelationPlots_

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

Definition at line 469 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 66 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ multiRPPlots_

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

Definition at line 378 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ n_non_empty_events_

signed int CTPPSProtonReconstructionPlotter::n_non_empty_events_
private

Definition at line 474 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ outputFile_

std::string CTPPSProtonReconstructionPlotter::outputFile_
private

Definition at line 64 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 471 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 471 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 472 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 472 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ rpId_45_F_

unsigned int CTPPSProtonReconstructionPlotter::rpId_45_F_
private

Definition at line 49 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ rpId_45_N_

unsigned int CTPPSProtonReconstructionPlotter::rpId_45_N_
private

Definition at line 49 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ rpId_56_F_

unsigned int CTPPSProtonReconstructionPlotter::rpId_56_F_
private

Definition at line 50 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ rpId_56_N_

unsigned int CTPPSProtonReconstructionPlotter::rpId_56_N_
private

Definition at line 50 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ singleMultiCorrelationPlots_

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

Definition at line 427 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ singleRPPlots_

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

Definition at line 153 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze(), and endJob().

◆ tokenRecoProtonsMultiRP_

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

Definition at line 47 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ tokenRecoProtonsSingleRP_

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

Definition at line 46 of file CTPPSProtonReconstructionPlotter.cc.

Referenced by analyze().

◆ tokenTracks_

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

Definition at line 45 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:18
CTPPSProtonReconstructionPlotter::armCorrelationPlots_
std::map< unsigned int, ArmCorrelationPlots > armCorrelationPlots_
Definition: CTPPSProtonReconstructionPlotter.cc:469
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
geometry
Definition: geometry.py:1
CTPPSProtonReconstructionPlotter::outputFile_
std::string outputFile_
Definition: CTPPSProtonReconstructionPlotter.cc:64
reco::ForwardProton
Definition: ForwardProton.h:21
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
year_2016_postTS2_cff.rpId
rpId
Definition: year_2016_postTS2_cff.py:23
edm::Handle
Definition: AssociativeIterator.h:50
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
CTPPSProtonReconstructionPlotter::p_x_L_diffNF_vs_x_L_N_
std::unique_ptr< TProfile > p_x_L_diffNF_vs_x_L_N_
Definition: CTPPSProtonReconstructionPlotter.cc:471
CTPPSProtonReconstructionPlotter::singleMultiCorrelationPlots_
std::map< unsigned int, SingleMultiCorrelationPlots > singleMultiCorrelationPlots_
Definition: CTPPSProtonReconstructionPlotter.cc:427
CTPPSProtonReconstructionPlotter::tokenRecoProtonsMultiRP_
edm::EDGetTokenT< reco::ForwardProtonCollection > tokenRecoProtonsMultiRP_
Definition: CTPPSProtonReconstructionPlotter.cc:47
CTPPSProtonReconstructionPlotter::CalculateTimingTrackingDistance
void CalculateTimingTrackingDistance(const reco::ForwardProton &proton, const CTPPSLocalTrackLite &tr, const CTPPSGeometry &geometry, double &x_tr, double &x_ti, double &de_x, double &de_x_unc)
Definition: CTPPSProtonReconstructionPlotter.cc:512
CTPPSProtonReconstructionPlotter::association_cuts_
std::map< unsigned int, AssociationCuts > association_cuts_
Definition: CTPPSProtonReconstructionPlotter.cc:62
CTPPSDetId::sdTrackingStrip
Definition: CTPPSDetId.h:44
CTPPSLocalTrackLite::x
float x() const
returns the horizontal track position
Definition: CTPPSLocalTrackLite.h:74
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
CTPPSProtonReconstructionPlotter::tokenTracks_
edm::EDGetTokenT< CTPPSLocalTrackLiteCollection > tokenTracks_
Definition: CTPPSProtonReconstructionPlotter.cc:45
CTPPSProtonReconstructionPlotter::rpId_56_N_
unsigned int rpId_56_N_
Definition: CTPPSProtonReconstructionPlotter.cc:50
CTPPSProtonReconstructionPlotter::maxNonEmptyEvents_
signed int maxNonEmptyEvents_
Definition: CTPPSProtonReconstructionPlotter.cc:66
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
CTPPSProtonReconstructionPlotter::singleRPPlots_
std::map< unsigned int, SingleRPPlots > singleRPPlots_
Definition: CTPPSProtonReconstructionPlotter.cc:153
DDAxes::z
edm::ESHandle< CTPPSGeometry >
N
#define N
Definition: blowfish.cc:9
CTPPSProtonReconstructionPlotter::multiRPPlots_
std::map< unsigned int, MultiRPPlots > multiRPPlots_
Definition: CTPPSProtonReconstructionPlotter.cc:378
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:136
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:49
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:46
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:50
CTPPSProtonReconstructionPlotter::p_y_R_diffNF_vs_y_R_N_
std::unique_ptr< TProfile > p_y_R_diffNF_vs_y_R_N_
Definition: CTPPSProtonReconstructionPlotter.cc:472
CTPPSProtonReconstructionPlotter::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: CTPPSProtonReconstructionPlotter.cc:542
CTPPSLocalTrackLite::y
float y() const
returns the vertical track position
Definition: CTPPSLocalTrackLite.h:80
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:474
CTPPSProtonReconstructionPlotter::p_y_L_diffNF_vs_y_L_N_
std::unique_ptr< TProfile > p_y_L_diffNF_vs_y_L_N_
Definition: CTPPSProtonReconstructionPlotter.cc:472
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
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:2128
CTPPSProtonReconstructionPlotter::p_x_R_diffNF_vs_x_R_N_
std::unique_ptr< TProfile > p_x_R_diffNF_vs_x_R_N_
Definition: CTPPSProtonReconstructionPlotter.cc:471
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:49