CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
CTPPSFastTrackingProducer Class Reference

#include <FastSimulation/CTPPSFastTrackingProducer/plugins/CTPPSFastTrackingProducer.cc>

Inheritance diagram for CTPPSFastTrackingProducer:
edm::stream::EDProducer<>

Public Member Functions

 CTPPSFastTrackingProducer (const edm::ParameterSet &)
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Types

typedef std::vector
< CTPPSFastRecHit
CTPPSFastRecHitContainer
 

Private Member Functions

void FastReco (int Direction, H_RecRPObject *station)
 
void MatchCellId (int cellId, std::vector< int > vrecCellId, std::vector< double > vrecTof, bool &match, double &recTof)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
void ProjectToToF (const double x1, const double y1, const double x2, const double y2, double &xt, double &yt)
 
void ReadRecHits (edm::Handle< CTPPSFastRecHitContainer > &)
 
void ReconstructArm (H_RecRPObject *pps_station, double x1, double y1, double x2, double y2, double &tx, double &ty, double &eloss)
 
void Reconstruction ()
 
bool SearchTrack (int, int, int Direction, double &xi, double &t, double &partP, double &pt, double &thx, double &thy, double &x0, double &y0, double &xt, double &yt, double &X1d, double &Y1d, double &X2d, double &Y2d)
 
bool SetBeamLine ()
 
void TrackerStationClear ()
 
void TrackerStationStarting ()
 

Private Attributes

edm::EDGetTokenT
< CTPPSFastRecHitContainer
_recHitToken
 
std::string beam1filename
 
std::string beam2filename
 
std::unique_ptr< CTPPSTrkDetectordet1B
 
std::unique_ptr< CTPPSTrkDetectordet1F
 
std::unique_ptr< CTPPSTrkDetectordet2B
 
std::unique_ptr< CTPPSTrkDetectordet2F
 
std::unique_ptr< CTPPSToFDetectordetToF_B
 
std::unique_ptr< CTPPSToFDetectordetToF_F
 
double fBeamEnergy
 
double fBeamMomentum
 
double fBeamXRMS_ToF
 
double fBeamXRMS_Trk1
 
double fBeamXRMS_Trk2
 
bool fCrossAngleCorr
 
double fCrossingAngleBeam1
 
double fCrossingAngleBeam2
 
double fImpParcut
 
double fTimeSigma
 
double fToFCellHeight
 
std::vector< double > fToFCellWidth
 
double fToFInsertion
 
int fToFNCellX
 
int fToFNCellY
 
double fToFPitchX
 
double fToFPitchY
 
double fToFXOffset
 
double fTrackerHeight
 
double fTrackerInsertion
 
double fTrackerWidth
 
double fTrk1XOffset
 
double fTrk2XOffset
 
double fz_timing
 
double fz_tracker1
 
double fz_tracker2
 
double lengthctpps
 
std::unique_ptr< H_BeamLine > m_beamlineCTPPS1
 
std::unique_ptr< H_BeamLine > m_beamlineCTPPS2
 
bool m_verbosity
 
std::unique_ptr< H_RecRPObject > pps_stationB
 
std::unique_ptr< H_RecRPObject > pps_stationF
 
std::vector< int > recCellId_B
 
std::vector< int > recCellId_F
 
std::vector< double > recTof_B
 
std::vector< double > recTof_F
 
std::vector< CTPPSFastTracktheCTPPSFastTrack
 
CTPPSFastTrack track
 
std::unique_ptr< CTPPSTrkStationTrkStation_B
 
std::unique_ptr< CTPPSTrkStationTrkStation_F
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Description: [one line class summary]

Implementation: [Notes on implementation]

Definition at line 50 of file CTPPSFastTrackingProducer.cc.

Member Typedef Documentation

Definition at line 59 of file CTPPSFastTrackingProducer.cc.

Constructor & Destructor Documentation

CTPPSFastTrackingProducer::CTPPSFastTrackingProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 136 of file CTPPSFastTrackingProducer.cc.

References _recHitToken, beam1filename, beam2filename, det1B, det1F, det2B, det2F, detToF_B, detToF_F, fBeamEnergy, fBeamMomentum, fBeamXRMS_ToF, fBeamXRMS_Trk1, fBeamXRMS_Trk2, fCrossAngleCorr, fCrossingAngleBeam1, fCrossingAngleBeam2, fImpParcut, fTimeSigma, fToFCellHeight, fToFCellWidth, fToFInsertion, fToFNCellX, fToFNCellY, fToFPitchX, fToFPitchY, fToFXOffset, fTrackerHeight, fTrackerInsertion, fTrackerWidth, fTrk1XOffset, fTrk2XOffset, fz_timing, fz_tracker1, fz_tracker2, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), mps_fire::i, lengthctpps, LogDebug, m_verbosity, PPSTools::ProtonMassSQ, SetBeamLine(), and mathSSE::sqrt().

138  //register your products
139  produces<edm::CTPPSFastTrackContainer>("CTPPSFastTrack");
140  using namespace edm;
141  _recHitToken = consumes<CTPPSFastRecHitContainer>(iConfig.getParameter<edm::InputTag>("recHitTag"));
142  m_verbosity = iConfig.getParameter<bool>("Verbosity");
143  // User definitons
144 
145  // Read beam parameters needed for Hector reconstruction
146  lengthctpps = iConfig.getParameter<double>("BeamLineLengthCTPPS");
147  beam1filename = iConfig.getParameter<string>("Beam1");
148  beam2filename = iConfig.getParameter<string>("Beam2");
149  fBeamEnergy = iConfig.getParameter<double>("BeamEnergy"); // beam energy in GeV
151  fCrossingAngleBeam1 = iConfig.getParameter<double>("CrossingAngleBeam1");
152  fCrossingAngleBeam2 = iConfig.getParameter<double>("CrossingAngleBeam2");
153 
154  if (fCrossingAngleBeam1 != 0 || fCrossingAngleBeam2 != 0)
155  fCrossAngleCorr = true;
156  //Read detectors positions and parameters
157 
158  fz_tracker1 = iConfig.getParameter<double>("Z_Tracker1");
159  fz_tracker2 = iConfig.getParameter<double>("Z_Tracker2");
160  fz_timing = iConfig.getParameter<double>("Z_Timing");
161  //
162  fTrackerWidth = iConfig.getParameter<double>("TrackerWidth");
163  fTrackerHeight = iConfig.getParameter<double>("TrackerHeight");
164  fTrackerInsertion = iConfig.getParameter<double>("TrackerInsertion");
165  fBeamXRMS_Trk1 = iConfig.getParameter<double>("BeamXRMS_Trk1");
166  fBeamXRMS_Trk2 = iConfig.getParameter<double>("BeamXRMS_Trk2");
167  fTrk1XOffset = iConfig.getParameter<double>("Trk1XOffset");
168  fTrk2XOffset = iConfig.getParameter<double>("Trk2XOffset");
169  fToFCellWidth = iConfig.getUntrackedParameter<std::vector<double> >("ToFCellWidth");
170  fToFCellHeight = iConfig.getParameter<double>("ToFCellHeight");
171  fToFPitchX = iConfig.getParameter<double>("ToFPitchX");
172  fToFPitchY = iConfig.getParameter<double>("ToFPitchY");
173  fToFNCellX = iConfig.getParameter<int>("ToFNCellX");
174  fToFNCellY = iConfig.getParameter<int>("ToFNCellY");
175  fToFInsertion = iConfig.getParameter<double>("ToFInsertion");
176  fBeamXRMS_ToF = iConfig.getParameter<double>("BeamXRMS_ToF");
177  fToFXOffset = iConfig.getParameter<double>("ToFXOffset");
178  fTimeSigma = iConfig.getParameter<double>("TimeSigma");
179  fImpParcut = iConfig.getParameter<double>("ImpParcut");
180 
181  if (!SetBeamLine()) {
182  if (m_verbosity)
183  LogDebug("CTPPSFastTrackingProducer") << "CTPPSFastTrackingProducer: WARNING: lengthctpps= " << lengthctpps;
184  return;
185  }
186 
187  // Create a particle to get the beam energy from the beam file
188  // Take care: the z inside the station is in meters
189  //
190  //Tracker Detector Description
191  det1F = std::make_unique<CTPPSTrkDetector>(
193  det2F = std::make_unique<CTPPSTrkDetector>(
195  det1B = std::make_unique<CTPPSTrkDetector>(
197  det2B = std::make_unique<CTPPSTrkDetector>(
199 
200  //Timing Detector Description
201  std::vector<double> vToFCellWidth;
202  vToFCellWidth.reserve(8);
203  for (int i = 0; i < 8; i++) {
204  vToFCellWidth.push_back(fToFCellWidth[i]);
205  }
206  double pos_tof = fToFInsertion * fBeamXRMS_ToF + fToFXOffset;
207  detToF_F = std::make_unique<CTPPSToFDetector>(
208  fToFNCellX, fToFNCellY, vToFCellWidth, fToFCellHeight, fToFPitchX, fToFPitchY, pos_tof, fTimeSigma);
209  detToF_B = std::make_unique<CTPPSToFDetector>(
210  fToFNCellX, fToFNCellY, vToFCellWidth, fToFCellHeight, fToFPitchX, fToFPitchY, pos_tof, fTimeSigma);
211  //
212 }
T getUntrackedParameter(std::string const &, T const &) const
std::unique_ptr< CTPPSTrkDetector > det2B
std::unique_ptr< CTPPSToFDetector > detToF_F
std::unique_ptr< CTPPSTrkDetector > det2F
std::unique_ptr< CTPPSTrkDetector > det1B
T sqrt(T t)
Definition: SSEVec.h:19
const double ProtonMassSQ
Definition: PPSUtilities.h:31
std::unique_ptr< CTPPSToFDetector > detToF_B
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::unique_ptr< CTPPSTrkDetector > det1F
edm::EDGetTokenT< CTPPSFastRecHitContainer > _recHitToken
#define LogDebug(id)

Member Function Documentation

void CTPPSFastTrackingProducer::FastReco ( int  Direction,
H_RecRPObject *  station 
)
private

Definition at line 435 of file CTPPSFastTrackingProducer.cc.

References funct::cos(), alignCSCRings::e, fBeamEnergy, fBeamMomentum, fBeamXRMS_ToF, fCrossAngleCorr, fCrossingAngleBeam1, fCrossingAngleBeam2, CTPPSToFDetector::findCellId(), fTimeSigma, fToFCellHeight, fToFCellWidth, fToFInsertion, fToFNCellX, fToFNCellY, fToFPitchX, fToFPitchY, fToFXOffset, PPSTools::Get_t_and_xi(), mps_fire::i, dqmiolumiharvest::j, PPSTools::LorentzBoost(), MatchCellId(), AlCaHLTBitMon_ParallelJobs::p, phi, Pi, CTPPSTrkDetector::ppsNHits_, PPSTools::ProtonMassSQ, DiDispStaMuonMonitor_cfi::pt, recCellId_B, recCellId_F, recTof_B, recTof_F, SearchTrack(), CTPPSFastTrack::setcellid(), CTPPSFastTrack::setp(), CTPPSFastTrack::sett(), CTPPSFastTrack::settof(), CTPPSFastTrack::setvertex(), CTPPSFastTrack::setx1(), CTPPSFastTrack::setx2(), CTPPSFastTrack::setxi(), CTPPSFastTrack::sety1(), CTPPSFastTrack::sety2(), funct::sin(), mathSSE::sqrt(), submitPVValidationJobs::t, theCTPPSFastTrack, theta(), track, TrkStation_B, TrkStation_F, and urad.

Referenced by Reconstruction().

435  {
436  double theta = 0.;
437  double xi, t, partP, pt, phi, x0, y0, thx, thy, xt, yt, X1d, Y1d, X2d, Y2d;
438  CTPPSTrkDetector* Trk1 = nullptr;
439  CTPPSTrkDetector* Trk2 = nullptr;
440  double pos_tof = fToFInsertion * fBeamXRMS_ToF + fToFXOffset;
441  int cellId = 0;
442  std::vector<double> vToFCellWidth;
443  vToFCellWidth.reserve(8);
444  for (int i = 0; i < 8; i++) {
445  vToFCellWidth.push_back(fToFCellWidth[i]);
446  }
448  fToFNCellX, fToFNCellY, vToFCellWidth, fToFCellHeight, fToFPitchX, fToFPitchY, pos_tof, fTimeSigma);
449  if (Direction > 0) {
450  Trk1 = &(TrkStation_F->first);
451  Trk2 = &(TrkStation_F->second);
452  } else {
453  Trk1 = &(TrkStation_B->first);
454  Trk2 = &(TrkStation_B->second);
455  }
456  // Make a track from EVERY pair of hits combining Tracker1 and Tracker2.
457  // The tracks may not be independent as 1 hit may belong to more than 1 track.
458  for (int i = 0; i < (int)Trk1->ppsNHits_; i++) {
459  for (int j = 0; j < (int)Trk2->ppsNHits_; j++) {
460  if (SearchTrack(i, j, Direction, xi, t, partP, pt, thx, thy, x0, y0, xt, yt, X1d, Y1d, X2d, Y2d)) {
461  // Check if the hitted timing cell matches the reconstructed track
462  cellId = ToF->findCellId(xt, yt);
463  double recTof = 0.;
464  bool matchCellId = false;
465  if (Direction > 0) {
466  theta = sqrt(thx * thx + thy * thy) * urad;
467  MatchCellId(cellId, recCellId_F, recTof_F, matchCellId, recTof);
468  } else if (Direction < 0) {
469  theta = TMath::Pi() - sqrt(thx * thx + thy * thy) * urad;
470  MatchCellId(cellId, recCellId_B, recTof_B, matchCellId, recTof);
471  }
472  phi = atan2(thy, thx); // at this point, thx is already in the cms ref. frame
473 
474  double px = partP * sin(theta) * cos(phi);
475  double py = partP * sin(theta) * sin(phi);
476  double pz = partP * cos(theta);
477  double e = sqrt(partP * partP + PPSTools::ProtonMassSQ);
478  TLorentzVector p(px, py, pz, e);
479  // Invert the Lorentz boost made to take into account the crossing angle during simulation
480  if (fCrossAngleCorr) {
482  }
483  //Getting the Xi and t (squared four momentum transferred) of the reconstructed track
484  PPSTools::Get_t_and_xi(const_cast<TLorentzVector*>(&p), t, xi, {fBeamMomentum, fBeamEnergy});
485  double pxx = p.Px();
486  double pyy = p.Py();
487  double pzz = p.Pz();
488  math::XYZVector momentum(pxx, pyy, pzz);
489  math::XYZPoint vertex(x0, y0, 0);
490 
491  track.setp(momentum);
492  track.setvertex(vertex);
493  track.sett(t);
494  track.setxi(xi);
495  track.setx1(X1d);
496  track.sety1(Y1d);
497  track.setx2(X2d);
498  track.sety2(Y2d);
499  if (matchCellId) {
500  track.setcellid(cellId);
501  track.settof(recTof);
502  } else {
503  track.setcellid(0);
504  track.settof(0.);
505  }
506  theCTPPSFastTrack.push_back(track);
507  }
508  }
509  }
510 } //end FastReco
void LorentzBoost(H_BeamParticle &h_p, int dir, const std::string &frame, FullBeamInfo const &bi)
void sett(float t)
const double Pi
int findCellId(double x, double y)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
void setvertex(const Point &vertex)
static const double urad
void sety1(float y1)
void setx2(float x2)
void setp(const Vector &momentum)
void setx1(float x1)
T sqrt(T t)
Definition: SSEVec.h:19
std::unique_ptr< CTPPSTrkStation > TrkStation_B
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
void setxi(float xi)
const double ProtonMassSQ
Definition: PPSUtilities.h:31
void MatchCellId(int cellId, std::vector< int > vrecCellId, std::vector< double > vrecTof, bool &match, double &recTof)
std::unique_ptr< CTPPSTrkStation > TrkStation_F
std::vector< CTPPSFastTrack > theCTPPSFastTrack
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
void settof(float tof)
void sety2(float y2)
void Get_t_and_xi(const TLorentzVector *proton, double &t, double &xi, LimitedBeamInfo const &bi)
Definition: PPSUtilities.cc:72
void setcellid(unsigned int cellid)
bool SearchTrack(int, int, int Direction, double &xi, double &t, double &partP, double &pt, double &thx, double &thy, double &x0, double &y0, double &xt, double &yt, double &X1d, double &Y1d, double &X2d, double &Y2d)
void CTPPSFastTrackingProducer::MatchCellId ( int  cellId,
std::vector< int >  vrecCellId,
std::vector< double >  vrecTof,
bool &  match,
double &  recTof 
)
private

Definition at line 424 of file CTPPSFastTrackingProducer.cc.

References mps_fire::i.

Referenced by FastReco().

425  {
426  for (unsigned int i = 0; i < vrecCellId.size(); i++) {
427  if (cellId == vrecCellId.at(i)) {
428  match = true;
429  recTof = vrecTof.at(i);
430  continue;
431  }
432  }
433 }
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
void CTPPSFastTrackingProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 215 of file CTPPSFastTrackingProducer.cc.

References _recHitToken, edm::Event::getByToken(), mps_fire::i, eostools::move(), dqmiodumpmetadata::n, edm::Event::put(), ReadRecHits(), recCellId_B, recCellId_F, HLT_FULL_cff::recHits, Reconstruction(), recTof_B, recTof_F, theCTPPSFastTrack, TrackerStationClear(), and TrackerStationStarting().

215  {
216  using namespace edm;
220  recCellId_F.clear();
221  recCellId_B.clear();
222  recTof_F.clear();
223  recTof_B.clear();
225  Reconstruction();
227 
228  std::unique_ptr<CTPPSFastTrackContainer> output_tracks(new CTPPSFastTrackContainer);
229  int n = 0;
230  for (std::vector<CTPPSFastTrack>::const_iterator i = theCTPPSFastTrack.begin(); i != theCTPPSFastTrack.end(); i++) {
231  output_tracks->push_back(*i);
232  n += 1;
233  }
234 
235  iEvent.put(std::move(output_tracks), "CTPPSFastTrack");
236 } //end
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
def move
Definition: eostools.py:511
std::vector< CTPPSFastTrack > theCTPPSFastTrack
edm::EDGetTokenT< CTPPSFastRecHitContainer > _recHitToken
std::vector< CTPPSFastTrack > CTPPSFastTrackContainer
void ReadRecHits(edm::Handle< CTPPSFastRecHitContainer > &)
void CTPPSFastTrackingProducer::ProjectToToF ( const double  x1,
const double  y1,
const double  x2,
const double  y2,
double &  xt,
double &  yt 
)
inlineprivate

Definition at line 86 of file CTPPSFastTrackingProducer.cc.

References fz_timing, fz_tracker1, and fz_tracker2.

Referenced by SearchTrack().

86  {
87  xt = ((fz_timing - fz_tracker2) * (x2 - x1) / (fz_tracker2 - fz_tracker1)) + x2;
88  yt = ((fz_timing - fz_tracker2) * (y2 - y1) / (fz_tracker2 - fz_tracker1)) + y2;
89  };
void CTPPSFastTrackingProducer::ReadRecHits ( edm::Handle< CTPPSFastRecHitContainer > &  recHits)
private

Definition at line 256 of file CTPPSFastTrackingProducer.cc.

References det1B, det1F, det2B, det2F, detToF_B, detToF_F, CTPPSFastRecHit::detUnitId(), CTPPSFastRecHit::entryPoint(), recCellId_B, recCellId_F, recHitDet(), recTof_B, recTof_F, CTPPSFastRecHit::tof(), TrkStation_B, TrkStation_F, x, PV3DBase< T, PVType, FrameType >::x(), y, PV3DBase< T, PVType, FrameType >::y(), z, and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce().

256  {
257  // DetId codification for PSimHit taken from CTPPSPixel- It will be replaced by CTPPSDetId
258  // 2014314496 -> Tracker1 zPositive
259  // 2014838784 -> Tracker2 zPositive
260  // 2046820352 -> Timing zPositive
261  // 2031091712 -> Tracker1 zNegative
262  // 2031616000 -> Tracker2 zNegative
263  // 2063597568 -> Timing zNegative
264 
265  for (unsigned int irecHits = 0; irecHits < recHits->size(); ++irecHits) {
266  const CTPPSFastRecHit* recHitDet = &(*recHits)[irecHits];
267  unsigned int detlayerId = recHitDet->detUnitId();
268  double x = recHitDet->entryPoint().x();
269  double y = recHitDet->entryPoint().y();
270  double z = recHitDet->entryPoint().z();
271  float tof = recHitDet->tof();
272  if (detlayerId == 2014314496)
273  det1F->AddHit(detlayerId, x, y, z);
274  else if (detlayerId == 2014838784)
275  det2F->AddHit(detlayerId, x, y, z);
276  else if (detlayerId == 2031091712)
277  det1B->AddHit(detlayerId, x, y, z);
278  else if (detlayerId == 2031616000)
279  det2B->AddHit(detlayerId, x, y, z);
280  else if (detlayerId == 2046820352) {
281  detToF_F->AddHit(x, y, tof);
282  recCellId_F.push_back(detToF_F->findCellId(x, y));
283  recTof_F.push_back(tof);
284  } else if (detlayerId == 2063597568) {
285  detToF_B->AddHit(x, y, tof);
286  recCellId_B.push_back(detToF_B->findCellId(x, y));
287  recTof_B.push_back(tof);
288  }
289 
290  } //LOOP TRK
291  //creating Stations
292  TrkStation_F = std::make_unique<CTPPSTrkStation>(*det1F, *det2F);
293  TrkStation_B = std::make_unique<CTPPSTrkStation>(*det1B, *det2B);
294 } // end function
std::unique_ptr< CTPPSTrkDetector > det2B
T y() const
Definition: PV3DBase.h:60
std::unique_ptr< CTPPSToFDetector > detToF_F
float tof() const
deprecated name for timeOfFlight()
std::unique_ptr< CTPPSTrkDetector > det2F
std::unique_ptr< CTPPSTrkDetector > det1B
unsigned int detUnitId() const
T z() const
Definition: PV3DBase.h:61
std::unique_ptr< CTPPSTrkStation > TrkStation_B
std::unique_ptr< CTPPSToFDetector > detToF_B
std::unique_ptr< CTPPSTrkStation > TrkStation_F
Local3DPoint entryPoint() const
Entry point in the local Det frame.
std::unique_ptr< CTPPSTrkDetector > det1F
T x() const
Definition: PV3DBase.h:59
const GeomDet * recHitDet(const TrackingRecHit &hit, const TrackingGeometry *geom)
void CTPPSFastTrackingProducer::ReconstructArm ( H_RecRPObject *  pps_station,
double  x1,
double  y1,
double  x2,
double  y2,
double &  tx,
double &  ty,
double &  eloss 
)
private

Definition at line 404 of file CTPPSFastTrackingProducer.cc.

References relval_parameters_module::energy, edm::isNotFinite(), and mm_to_um.

Referenced by SearchTrack().

405  {
406  tx = 0.;
407  ty = 0.;
408  eloss = 0.;
409  if (!pps_station)
410  return;
411  x1 *= mm_to_um;
412  x2 *= mm_to_um;
413  y1 *= mm_to_um;
414  y2 *= mm_to_um;
415  pps_station->setPositions(x1, y1, x2, y2);
416  double energy = pps_station->getE(AM); // dummy call needed to calculate some Hector internal parameter
417  if (edm::isNotFinite(energy))
418  return;
419  tx = pps_station->getTXIP(); // change orientation to CMS
420  ty = pps_station->getTYIP();
421  eloss = pps_station->getE();
422 }
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
static const double mm_to_um
void CTPPSFastTrackingProducer::Reconstruction ( )
private

Definition at line 296 of file CTPPSFastTrackingProducer.cc.

References FastReco(), pps_stationB, pps_stationF, and theCTPPSFastTrack.

Referenced by produce().

296  {
297  theCTPPSFastTrack.clear();
298  int Direction;
299  Direction = 1; //cms positive Z / forward
300  FastReco(Direction, &*pps_stationF);
301  Direction = -1; //cms negative Z / backward
302  FastReco(Direction, &*pps_stationB);
303 } //end Reconstruction
void FastReco(int Direction, H_RecRPObject *station)
std::unique_ptr< H_RecRPObject > pps_stationB
std::unique_ptr< H_RecRPObject > pps_stationF
std::vector< CTPPSFastTrack > theCTPPSFastTrack
bool CTPPSFastTrackingProducer::SearchTrack ( int  i,
int  j,
int  Direction,
double &  xi,
double &  t,
double &  partP,
double &  pt,
double &  thx,
double &  thy,
double &  x0,
double &  y0,
double &  xt,
double &  yt,
double &  X1d,
double &  Y1d,
double &  X2d,
double &  Y2d 
)
private

Definition at line 305 of file CTPPSFastTrackingProducer.cc.

References funct::cos(), relval_parameters_module::energy, fBeamEnergy, fBeamMomentum, fImpParcut, edm::isNotFinite(), LogDebug, m_verbosity, pps_stationB, pps_stationF, CTPPSTrkDetector::ppsNHits_, CTPPSTrkDetector::ppsX_, CTPPSTrkDetector::ppsY_, ProjectToToF(), PPSTools::ProtonMassSQ, ReconstructArm(), mathSSE::sqrt(), relativeConstraints::station, theta(), TrkStation_B, TrkStation_F, um_to_cm, and urad.

Referenced by FastReco().

321  {
322  // Given 1 hit in Tracker1 and 1 hit in Tracker2 try to make a track with Hector
323  xi = 0;
324  t = 0;
325  partP = 0;
326  pt = 0;
327  x0 = 0.;
328  y0 = 0.;
329  xt = 0.;
330  yt = 0.;
331  X1d = 0.;
332  Y1d = 0.;
333  X2d = 0.;
334  Y2d = 0.;
335  CTPPSTrkDetector* det1 = nullptr;
336  CTPPSTrkDetector* det2 = nullptr;
337  H_RecRPObject* station = nullptr;
338  // Separate in forward and backward stations according to direction
339  if (Direction > 0) {
340  det1 = &(TrkStation_F->first);
341  det2 = &(TrkStation_F->second);
342  station = &*pps_stationF;
343  } else {
344  det1 = &(TrkStation_B->first);
345  det2 = &(TrkStation_B->second);
346  station = &*pps_stationB;
347  }
348  if (det1->ppsNHits_ <= i || det2->ppsNHits_ <= j)
349  return false;
350  //
351  double x1 = det1->ppsX_.at(i);
352  double y1 = det1->ppsY_.at(i);
353  double x2 = det2->ppsX_.at(j);
354  double y2 = det2->ppsY_.at(j);
355  double eloss;
356 
357  //thx and thy are returned in microrad
359  station, Direction * x1, y1, Direction * x2, y2, thx, thy, eloss); // Pass the hits in the LHC ref. frame
360  thx *= -Direction; // invert to the CMS ref frame
361 
362  // Protect for unphysical results
363  if (edm::isNotFinite(eloss) || edm::isNotFinite(thx) || edm::isNotFinite(thy))
364  return false;
365  //
366 
367  if (m_verbosity)
368  LogDebug("CTPPSFastTrackingProducer::SearchTrack:") << "thx " << thx << " thy " << thy << " eloss " << eloss;
369 
370  // Get the start point of the reconstructed track near the origin made by Hector in the CMS ref. frame
371  x0 = -Direction * station->getX0() * um_to_cm;
372  y0 = station->getY0() * um_to_cm;
373  double ImpPar = sqrt(x0 * x0 + y0 * y0);
374  if (ImpPar > fImpParcut)
375  return false;
376  if (eloss < 0. || eloss > fBeamEnergy)
377  return false;
378  //
379  // Calculate the reconstructed track parameters
380  double theta = sqrt(thx * thx + thy * thy) * urad;
381  xi = eloss / fBeamEnergy;
382  double energy = fBeamEnergy * (1. - xi);
383  partP = sqrt(energy * energy - PPSTools::ProtonMassSQ);
384  t = -2. * (PPSTools::ProtonMassSQ - fBeamEnergy * energy + fBeamMomentum * partP * cos(theta));
385  pt = partP * theta;
386  if (xi < 0. || xi > 1. || t < 0. || t > 10. || pt <= 0.) {
387  xi = 0.;
388  t = 0.;
389  partP = 0.;
390  pt = 0.;
391  x0 = 0.;
392  y0 = 0.;
393  return false; // unphysical values
394  }
395  //Try to include the timing detector in the track
396  ProjectToToF(x1, y1, x2, y2, xt, yt); // the projections is done in the CMS ref frame
397  X1d = x1;
398  Y1d = y1;
399  X2d = x2;
400  Y2d = y2;
401  return true;
402 } //end SearchTrack
std::vector< double > ppsX_
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
Geom::Theta< T > theta() const
static const double urad
void ReconstructArm(H_RecRPObject *pps_station, double x1, double y1, double x2, double y2, double &tx, double &ty, double &eloss)
std::unique_ptr< H_RecRPObject > pps_stationB
std::unique_ptr< H_RecRPObject > pps_stationF
T sqrt(T t)
Definition: SSEVec.h:19
std::unique_ptr< CTPPSTrkStation > TrkStation_B
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
const double ProtonMassSQ
Definition: PPSUtilities.h:31
void ProjectToToF(const double x1, const double y1, const double x2, const double y2, double &xt, double &yt)
std::vector< double > ppsY_
std::unique_ptr< CTPPSTrkStation > TrkStation_F
static const double um_to_cm
#define LogDebug(id)
bool CTPPSFastTrackingProducer::SetBeamLine ( )
private

Definition at line 512 of file CTPPSFastTrackingProducer.cc.

References b1, b2, beam1filename, beam2filename, fz_tracker1, fz_tracker2, lengthctpps, m_beamlineCTPPS1, m_beamlineCTPPS2, pps_stationB, and pps_stationF.

Referenced by CTPPSFastTrackingProducer().

512  {
515  if (lengthctpps <= 0)
516  return false;
517  m_beamlineCTPPS1 = std::make_unique<H_BeamLine>(-1, lengthctpps + 0.1); // (direction, length)
518  m_beamlineCTPPS1->fill(b2.fullPath(), 1, "IP5");
519  m_beamlineCTPPS2 = std::make_unique<H_BeamLine>(1, lengthctpps + 0.1); //
520  m_beamlineCTPPS2->fill(b1.fullPath(), 1, "IP5");
521  m_beamlineCTPPS1->offsetElements(120, 0.097);
522  m_beamlineCTPPS2->offsetElements(120, -0.097);
523  pps_stationF = std::make_unique<H_RecRPObject>(fz_tracker1, fz_tracker2, *m_beamlineCTPPS1);
524  pps_stationB = std::make_unique<H_RecRPObject>(fz_tracker1, fz_tracker2, *m_beamlineCTPPS2);
525  return true;
526 }
std::unique_ptr< H_BeamLine > m_beamlineCTPPS1
std::unique_ptr< H_RecRPObject > pps_stationB
std::unique_ptr< H_RecRPObject > pps_stationF
std::unique_ptr< H_BeamLine > m_beamlineCTPPS2
static constexpr float b2
static constexpr float b1
void CTPPSFastTrackingProducer::TrackerStationClear ( )
private

Definition at line 239 of file CTPPSFastTrackingProducer.cc.

References TrkStation_B, and TrkStation_F.

Referenced by produce().

239  {
240  TrkStation_F->first.clear();
241  TrkStation_F->second.clear();
242  TrkStation_B->first.clear();
243  TrkStation_B->second.clear();
244 }
std::unique_ptr< CTPPSTrkStation > TrkStation_B
std::unique_ptr< CTPPSTrkStation > TrkStation_F
void CTPPSFastTrackingProducer::TrackerStationStarting ( )
private

Definition at line 246 of file CTPPSFastTrackingProducer.cc.

References det1B, det1F, det2B, det2F, detToF_B, and detToF_F.

Referenced by produce().

246  {
247  det1F->clear();
248  det1B->clear();
249  det2F->clear();
250  det2B->clear();
251  detToF_F->clear();
252  detToF_B->clear();
253 }
std::unique_ptr< CTPPSTrkDetector > det2B
std::unique_ptr< CTPPSToFDetector > detToF_F
std::unique_ptr< CTPPSTrkDetector > det2F
std::unique_ptr< CTPPSTrkDetector > det1B
std::unique_ptr< CTPPSToFDetector > detToF_B
std::unique_ptr< CTPPSTrkDetector > det1F

Member Data Documentation

edm::EDGetTokenT<CTPPSFastRecHitContainer> CTPPSFastTrackingProducer::_recHitToken
private

Definition at line 60 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and produce().

std::string CTPPSFastTrackingProducer::beam1filename
private

Definition at line 98 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and SetBeamLine().

std::string CTPPSFastTrackingProducer::beam2filename
private

Definition at line 99 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and SetBeamLine().

std::unique_ptr<CTPPSTrkDetector> CTPPSFastTrackingProducer::det1B
private
std::unique_ptr<CTPPSTrkDetector> CTPPSFastTrackingProducer::det1F
private
std::unique_ptr<CTPPSTrkDetector> CTPPSFastTrackingProducer::det2B
private
std::unique_ptr<CTPPSTrkDetector> CTPPSFastTrackingProducer::det2F
private
std::unique_ptr<CTPPSToFDetector> CTPPSFastTrackingProducer::detToF_B
private
std::unique_ptr<CTPPSToFDetector> CTPPSFastTrackingProducer::detToF_F
private
double CTPPSFastTrackingProducer::fBeamEnergy
private

Definition at line 104 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), FastReco(), and SearchTrack().

double CTPPSFastTrackingProducer::fBeamMomentum
private

Definition at line 105 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), FastReco(), and SearchTrack().

double CTPPSFastTrackingProducer::fBeamXRMS_ToF
private

Definition at line 131 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fBeamXRMS_Trk1
private

Definition at line 127 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer().

double CTPPSFastTrackingProducer::fBeamXRMS_Trk2
private

Definition at line 127 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer().

bool CTPPSFastTrackingProducer::fCrossAngleCorr
private

Definition at line 106 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fCrossingAngleBeam1
private

Definition at line 107 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fCrossingAngleBeam2
private

Definition at line 108 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fImpParcut
private

Definition at line 131 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and SearchTrack().

double CTPPSFastTrackingProducer::fTimeSigma
private

Definition at line 131 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fToFCellHeight
private

Definition at line 129 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

std::vector<double> CTPPSFastTrackingProducer::fToFCellWidth
private

Definition at line 128 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fToFInsertion
private

Definition at line 131 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

int CTPPSFastTrackingProducer::fToFNCellX
private

Definition at line 130 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

int CTPPSFastTrackingProducer::fToFNCellY
private

Definition at line 130 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fToFPitchX
private

Definition at line 129 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fToFPitchY
private

Definition at line 129 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fToFXOffset
private

Definition at line 131 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and FastReco().

double CTPPSFastTrackingProducer::fTrackerHeight
private

Definition at line 127 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer().

double CTPPSFastTrackingProducer::fTrackerInsertion
private

Definition at line 127 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer().

double CTPPSFastTrackingProducer::fTrackerWidth
private

Definition at line 127 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer().

double CTPPSFastTrackingProducer::fTrk1XOffset
private

Definition at line 127 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer().

double CTPPSFastTrackingProducer::fTrk2XOffset
private

Definition at line 127 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer().

double CTPPSFastTrackingProducer::fz_timing
private

Definition at line 126 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and ProjectToToF().

double CTPPSFastTrackingProducer::fz_tracker1
private
double CTPPSFastTrackingProducer::fz_tracker2
private
double CTPPSFastTrackingProducer::lengthctpps
private

Definition at line 102 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and SetBeamLine().

std::unique_ptr<H_BeamLine> CTPPSFastTrackingProducer::m_beamlineCTPPS1
private

Definition at line 93 of file CTPPSFastTrackingProducer.cc.

Referenced by SetBeamLine().

std::unique_ptr<H_BeamLine> CTPPSFastTrackingProducer::m_beamlineCTPPS2
private

Definition at line 94 of file CTPPSFastTrackingProducer.cc.

Referenced by SetBeamLine().

bool CTPPSFastTrackingProducer::m_verbosity
private

Definition at line 103 of file CTPPSFastTrackingProducer.cc.

Referenced by CTPPSFastTrackingProducer(), and SearchTrack().

std::unique_ptr<H_RecRPObject> CTPPSFastTrackingProducer::pps_stationB
private

Definition at line 96 of file CTPPSFastTrackingProducer.cc.

Referenced by Reconstruction(), SearchTrack(), and SetBeamLine().

std::unique_ptr<H_RecRPObject> CTPPSFastTrackingProducer::pps_stationF
private

Definition at line 95 of file CTPPSFastTrackingProducer.cc.

Referenced by Reconstruction(), SearchTrack(), and SetBeamLine().

std::vector<int> CTPPSFastTrackingProducer::recCellId_B
private

Definition at line 123 of file CTPPSFastTrackingProducer.cc.

Referenced by FastReco(), produce(), and ReadRecHits().

std::vector<int> CTPPSFastTrackingProducer::recCellId_F
private

Definition at line 123 of file CTPPSFastTrackingProducer.cc.

Referenced by FastReco(), produce(), and ReadRecHits().

std::vector<double> CTPPSFastTrackingProducer::recTof_B
private

Definition at line 124 of file CTPPSFastTrackingProducer.cc.

Referenced by FastReco(), produce(), and ReadRecHits().

std::vector<double> CTPPSFastTrackingProducer::recTof_F
private

Definition at line 124 of file CTPPSFastTrackingProducer.cc.

Referenced by FastReco(), produce(), and ReadRecHits().

std::vector<CTPPSFastTrack> CTPPSFastTrackingProducer::theCTPPSFastTrack
private

Definition at line 119 of file CTPPSFastTrackingProducer.cc.

Referenced by FastReco(), produce(), and Reconstruction().

CTPPSFastTrack CTPPSFastTrackingProducer::track
private

Definition at line 121 of file CTPPSFastTrackingProducer.cc.

Referenced by FastReco().

std::unique_ptr<CTPPSTrkStation> CTPPSFastTrackingProducer::TrkStation_B
private
std::unique_ptr<CTPPSTrkStation> CTPPSFastTrackingProducer::TrkStation_F
private