CMS 3D CMS Logo

CTPPSHector.cc
Go to the documentation of this file.
3 
5 
7 #include "CLHEP/Units/GlobalSystemOfUnits.h"
8 #include "CLHEP/Units/GlobalPhysicalConstants.h"
9 #include "HepMC/SimpleVector.h"
10 
11 #include "CLHEP/Random/RandGauss.h"
12 
13 #include "TRandom3.h"
14 #include <TMatrixD.h>
15 
16 #include "H_Parameters.h"
17 
18 #include <cmath>
19 
21  m_smearAng(false),m_sig_e(0.),m_smearE(false),m_sigmaSTX(0.),m_sigmaSTY(0.),
22  fCrossAngleCorr(false),fCrossingAngle(0.),fBeamMomentum(0),fBeamEnergy(0),
23  fVtxMeanX(0.),fVtxMeanY(0.),fVtxMeanZ(0.),fMomentumMin(0.),
24  m_verbosity(verbosity),
25  m_CTPPSTransport(CTPPSTransport),NEvent(0)
26 
27 {
28  // Create LHC beam line
29  edm::ParameterSet hector_par = param.getParameter<edm::ParameterSet>("CTPPSHector");
30 
31  // User definitons
32  lengthctpps = hector_par.getParameter<double>("BeamLineLengthCTPPS" );
33  m_f_ctpps_f = (float) hector_par.getParameter<double>("CTPPSf");
34  m_b_ctpps_b = (float) hector_par.getParameter<double>("CTPPSb");
35 
36  beam1filename = hector_par.getParameter<string>("Beam1");
37  beam2filename = hector_par.getParameter<string>("Beam2");
38  m_smearAng = hector_par.getParameter<bool>("smearAng");
39  m_sigmaSTX = hector_par.getParameter<double>("sigmaSTX" );
40  m_sigmaSTY = hector_par.getParameter<double>("sigmaSTY" );
41  m_smearE = hector_par.getParameter<bool>("smearEnergy");
42  m_sig_e = hector_par.getParameter<double>("sigmaEnergy");
43  etacut = hector_par.getParameter<double>("EtaCutForHector" );
44  //CTPPS
45  fCrossAngleCorr = hector_par.getParameter<bool>("CrossAngleCorr");
46  fCrossingAngle = hector_par.getParameter<double>("CrossingAngle");
47  fBeamEnergy = hector_par.getParameter<double>("BeamEnergy"); // beam energy in GeV
48  fVtxMeanX = hector_par.getParameter<double>("VtxMeanX");
49  fVtxMeanY = hector_par.getParameter<double>("VtxMeanY");
50  fVtxMeanZ = hector_par.getParameter<double>("VtxMeanZ");
51  fMomentumMin = hector_par.getParameter<double>("MomentumMin");
52 
53  theCorrespondenceMap.clear();
54 
55  if(m_verbosity) {
56  edm::LogInfo("CTPPSHectorSetup") << "===================================================================\n"
57  << " * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n"
58  << " * * \n"
59  << " * --<--<-- A fast simulator --<--<-- * \n"
60  << " * | --<--<-- of particle --<--<-- * \n"
61  << " * ----HECTOR----< * \n"
62  << " * | -->-->-- transport through-->-->-- * \n"
63  << " * -->-->-- generic beamlines -->-->-- * \n"
64  << " * * \n"
65  << " * JINST 2:P09005 (2007) * \n"
66  << " * X Rouby, J de Favereau, K Piotrzkowski (CP3) * \n"
67  << " * http://www.fynu.ucl.ac.be/hector.html * \n"
68  << " * * \n"
69  << " * Center for Cosmology, Particle Physics and Phenomenology * \n"
70  << " * Universite catholique de Louvain * \n"
71  << " * Louvain-la-Neuve, Belgium * \n"
72  << " * * \n"
73  << " * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n"
74  << " CTPPSHector configuration: \n"
75  << " m_CTPPSTransport = " << m_CTPPSTransport << "\n"
76  << " lengthctpps = " << lengthctpps << "\n"
77  << " m_f_ctpps_f = " << m_f_ctpps_f << "\n"
78  << " m_b_ctpps_b = " << m_b_ctpps_b << "\n"
79  << "===================================================================\n";
80  }
81  edm::FileInPath b1(beam1filename.c_str());
82  edm::FileInPath b2(beam2filename.c_str());
83 
84  // construct beam line for CTPPS (forward 1 backward 2):
85  if(m_CTPPSTransport && lengthctpps>0. ) {
86  m_beamlineCTPPS1 = std::unique_ptr<H_BeamLine>(new H_BeamLine( -1, lengthctpps + 0.1 )); // (direction, length)
87  m_beamlineCTPPS2 = std::unique_ptr<H_BeamLine>(new H_BeamLine( 1, lengthctpps + 0.1 )); //
88  m_beamlineCTPPS1->fill( b2.fullPath(), 1, "IP5" );
89  m_beamlineCTPPS2->fill( b1.fullPath(), 1, "IP5" );
90  m_beamlineCTPPS1->offsetElements( 120, 0.097 );
91  m_beamlineCTPPS2->offsetElements( 120, 0.097 );
92  m_beamlineCTPPS1->calcMatrix();
93  m_beamlineCTPPS2->calcMatrix();
94  } else {
95  if ( m_verbosity ) LogDebug("CTPPSHectorSetup") << "CTPPSHector: WARNING: lengthctpps= " << lengthctpps;
96  }
97 }
98 
100 
101  for (std::map<unsigned int,H_BeamParticle*>::iterator it = m_beamPart.begin(); it != m_beamPart.end(); ++it ) {
102  delete (*it).second;
103  }
104 
105 }
106 
108  m_isStoppedctpps.clear();
109 }
110 
112  for ( std::map<unsigned int,H_BeamParticle*>::iterator it = m_beamPart.begin(); it != m_beamPart.end(); ++it ) {
113  delete (*it).second;
114  };
115  m_beamPart.clear();
116  m_direct.clear();
117  m_eta.clear();
118  m_pdg.clear();
119  m_pz.clear();
120  m_isCharged.clear();
121 }
122 
123 void CTPPSHector::add( const HepMC::GenEvent * evt ,const edm::EventSetup & iSetup, CLHEP::HepRandomEngine * engine) {
124 
125  H_BeamParticle* h_p = nullptr;
126  unsigned int line;
127 
128  for (HepMC::GenEvent::particle_const_iterator eventParticle =evt->particles_begin();
129  eventParticle != evt->particles_end();
130  ++eventParticle ) {
131  if ( (*eventParticle)->status() == 1 && (*eventParticle)->pdg_id()==2212 ){
132  if ( abs( (*eventParticle)->momentum().eta())>etacut && abs( (*eventParticle)->momentum().pz())>fMomentumMin){
133  line = (*eventParticle)->barcode();
134  if ( m_beamPart.find(line) == m_beamPart.end() ) {
135  double charge=1.;
136  m_isCharged[line] = false;// neutrals
137  HepMC::GenParticle * g = (*eventParticle);
138  iSetup.getData( pdt );
139  const ParticleData * part = pdt->particle( g->pdg_id() );
140  if (part){
141  charge = part->charge();
142  }
143  if(charge !=0) m_isCharged[line] = true;//charged
144  double mass = (*eventParticle)->generatedMass();
145 
146  h_p = new H_BeamParticle(mass,charge);
147 
148  double px,py,pz,e;
149  double TXforPosition=0.0, TYforPosition=0.0;//urad
150 
151  px = (*eventParticle)->momentum().px();
152  py = (*eventParticle)->momentum().py();
153  pz = (*eventParticle)->momentum().pz();
154 
155  e = sqrt(pow(mass,2)+pow(px,2)+pow(py,2)+pow(pz,2));
156 
157  // Apply Beam and Crossing Angle Corrections
158  LorentzVector p_out(px,py,pz,e);
159  ApplyBeamCorrection(p_out, engine);
160  if (fCrossAngleCorr) LorentzBoost(const_cast<LorentzVector&>(p_out),"LAB");
161 
162  // from mm to cm
163  double XforPosition = (*eventParticle)->production_vertex()->position().x()/cm;//cm
164  double YforPosition = (*eventParticle)->production_vertex()->position().y()/cm;//cm
165  double ZforPosition = (*eventParticle)->production_vertex()->position().z()/cm;//cm
166 
167  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << " fVtxMeanX: " << fVtxMeanX << " fVtxMeanY: " << fVtxMeanY << " fVtxMeanZ: " << fVtxMeanZ ;
168  // It is important to set the Position before the 4Momentum otherwise HECTOR resets variables
169  h_p->setPosition(-(XforPosition-fVtxMeanX)*cm_to_um,(YforPosition-fVtxMeanY)*cm_to_um,TXforPosition,TYforPosition,-(ZforPosition)*cm_to_m);
170 
171  h_p->set4Momentum( -p_out.px(), p_out.py(), -p_out.pz(), p_out.e() );
172 
173  m_beamPart[line] = h_p;
174  m_direct[line] = 0;
175  m_direct[line] = ( pz > 0 ) ? 1 : -1;
176 
177  m_eta[line] = (*eventParticle)->momentum().eta();
178  m_pdg[line] = (*eventParticle)->pdg_id();
179  m_pz[line] = (*eventParticle)->momentum().pz();
180 
181  if(m_verbosity) {
182  LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:add: barcode = " << line
183  << " status = " << g->status()
184  << " PDG Id = " << g->pdg_id()
185  << " mass = " << mass
186  << " pz = " << pz
187  << " charge = " << charge
188  << " m_isCharged[line] = " << m_isCharged[line];
189  }
190  }// if find line
191  }// if eta > 8.2
192  }// if status
193  }// for loop
194 
195 }
196 
197 void CTPPSHector::filterCTPPS(TRandom3* rootEngine){
198 
199  unsigned int line;
200  H_BeamParticle * part = nullptr;
201 
202  std::map< unsigned int, H_BeamParticle* >::iterator it;
203 
204  bool is_stop;
205  int direction;
206 
207  float x1_ctpps;
208  float y1_ctpps;
209 
210  if ( !m_beamPart.empty() && lengthctpps>0. ) {
211 
212  for (it = m_beamPart.begin(); it != m_beamPart.end(); ++it ) {
213  line = (*it).first;
214  part = (*it).second;
215 
216  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:filterCTPPS: barcode = " << line;
217  if ( (*m_isCharged.find( line )).second ) {
218  direction = (*m_direct.find( line )).second;
219  if ( direction == 1 && m_beamlineCTPPS1 != nullptr ) {
220 
221  part->computePath(&*m_beamlineCTPPS1);
222 
223  is_stop = part->stopped(&* m_beamlineCTPPS1 );
224  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:filterCTPPS: barcode = " << line << " positive is_stop= "<< is_stop;
225  }
226  else if ( direction == -1 && m_beamlineCTPPS2 != nullptr ){
227 
228  part->computePath(&*m_beamlineCTPPS2 );
229 
230  is_stop = part->stopped(&*m_beamlineCTPPS2 );
231  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:filterCTPPS: barcode = " << line << " negative is_stop= "<< is_stop;
232  }
233  else {
234  is_stop = true;
235  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:filterCTPPS: barcode = " << line << " 0 is_stop= "<< is_stop;
236  }
237 
238  //propagating
239  m_isStoppedctpps[line] = is_stop;
240  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:filterCTPPS: barcode = " << line << " isStopped=" << (*m_isStoppedctpps.find(line)).second;
241 
242  if (!is_stop) {
243  if ( direction == 1 ) part->propagate( m_f_ctpps_f );
244  if ( direction == -1 ) part->propagate( m_b_ctpps_b );
245  x1_ctpps = -part->getX()/millimeter;
246  y1_ctpps = part->getY()/millimeter;
247  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:filterCTPPS: barcode = " << line << " x= "<< x1_ctpps <<" y= " << y1_ctpps;
248 
249  m_xAtTrPoint[line] = x1_ctpps;
250  m_yAtTrPoint[line] = y1_ctpps;
251  m_TxAtTrPoint[line] = -part->getTX();
252  m_TyAtTrPoint[line] = part->getTY();
253  m_eAtTrPoint[line] = part->getE();
254 
255  }
256  }// if isCharged
257  else {
258  m_isStoppedctpps[line] = true;// imply that neutral particles stopped to reach 420m
259  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:filterCTPPS: barcode = " << line << " isStopped=" << (*m_isStoppedctpps.find(line)).second;
260  }
261 
262  } // for (it = m_beamPart.begin(); it != m_beamPart.end(); it++ )
263  } // if ( m_beamPart.size() )
264 
265 }//
266 
267 int CTPPSHector::getDirect( unsigned int part_n ) const {
268  std::map<unsigned int, int>::const_iterator it = m_direct.find( part_n );
269  if ( it != m_direct.end() ){
270  return (*it).second;
271  }
272  return 0;
273 }
274 
275 void CTPPSHector::print() const {
276  for (std::map<unsigned int,H_BeamParticle*>::const_iterator it = m_beamPart.begin(); it != m_beamPart.end(); ++it ) {
277  (*it).second->printProperties();
278  };
279 }
280 
281 void CTPPSHector::ApplyBeamCorrection(LorentzVector& p_out, CLHEP::HepRandomEngine* engine)
282 {
283 
284  double microrad = 1.e-6;
285  double theta = p_out.theta(); if (p_out.pz()<0) theta=CLHEP::pi-theta;
286  double dtheta_x = (double)(m_smearAng)?CLHEP::RandGauss::shoot(engine,0.,m_sigmaSTX):0;
287  double dtheta_y = (double)(m_smearAng)?CLHEP::RandGauss::shoot(engine,0.,m_sigmaSTY):0;
288  double denergy = (double)(m_smearE)?CLHEP::RandGauss::shoot(engine,0.,m_sig_e):0.;
289 
290  double p = sqrt((p_out.px())*(p_out.px())+(p_out.py())*(p_out.py())+(p_out.pz())*(p_out.pz()));
291  double px = p*sin(theta+dtheta_x*microrad)*cos(p_out.phi());
292  double py = p*sin(theta+dtheta_y*microrad)*sin(p_out.phi());
293  double pz = p*(cos(theta)+denergy);
294 
295  if (p_out.pz()<0) pz*=-1;
296 
297  double e = sqrt(px*px+py*py+pz*pz+ProtonMassSQ);
298  p_out.setPx(px);
299  p_out.setPy(py);
300  p_out.setPz(pz);
301  p_out.setE(e);
302 
303 }
304 
305 void CTPPSHector::LorentzBoost(LorentzVector& p_out, const string& frame)
306 {
307  // Use a matrix
308  double microrad = 1.e-6;
309  TMatrixD tmpboost(4,4);
310  double alpha_ = 0.;
311  double phi_ = fCrossingAngle*microrad;
312  if (p_out.pz()<0) phi_*=-1;
313  tmpboost(0,0) = 1./cos(phi_);
314  tmpboost(0,1) = - cos(alpha_)*sin(phi_);
315  tmpboost(0,2) = - tan(phi_)*sin(phi_);
316  tmpboost(0,3) = - sin(alpha_)*sin(phi_);
317  tmpboost(1,0) = - cos(alpha_)*tan(phi_);
318  tmpboost(1,1) = 1.;
319  tmpboost(1,2) = cos(alpha_)*tan(phi_);
320  tmpboost(1,3) = 0.;
321  tmpboost(2,0) = 0.;
322  tmpboost(2,1) = - cos(alpha_)*sin(phi_);
323  tmpboost(2,2) = cos(phi_);
324  tmpboost(2,3) = - sin(alpha_)*sin(phi_);
325  tmpboost(3,0) = - sin(alpha_)*tan(phi_);
326  tmpboost(3,1) = 0.;
327  tmpboost(3,2) = sin(alpha_)*tan(phi_);
328  tmpboost(3,3) = 1.;
329 
330  if(frame=="LAB") tmpboost.Invert();
331 
332  TMatrixD p4(4,1);
333  p4(0,0) = p_out.e();
334  p4(1,0) = p_out.px();
335  p4(2,0) = p_out.py();
336  p4(3,0) = p_out.pz();
337  TMatrixD p4lab(4,1);
338  p4lab = tmpboost * p4;
339  p_out.setPx(p4lab(1,0));
340  p_out.setPy(p4lab(2,0));
341  p_out.setPz(p4lab(3,0));
342  p_out.setE(p4lab(0,0));
343 }
344 
345 HepMC::GenEvent * CTPPSHector::addPartToHepMC( HepMC::GenEvent * evt ){
346  NEvent++;
347  theCorrespondenceMap.clear();
348 
349  unsigned int line;
350 
351  HepMC::GenParticle * gpart;
352  long double tx,ty,theta,fi,energy,time = 0;
353  std::map< unsigned int, H_BeamParticle* >::iterator it;
354 
355  for (it = m_beamPart.begin(); it != m_beamPart.end(); ++it ) {
356  line = (*it).first;
358  if(m_verbosity) {
359  LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:addPartToHepMC: barcode = " << line << "\n"
360  << "CTPPSHector:addPartToHepMC: isStoppedctpps=" << (*m_isStoppedctpps.find(line)).second;
361  }
362  if (!((*m_isStoppedctpps.find(line)).second)){
363 
364  gpart = evt->barcode_to_particle( line );
365  if ( gpart ) {
366  tx = (*m_TxAtTrPoint.find(line)).second / 1000000.;
367  ty = (*m_TyAtTrPoint.find(line)).second / 1000000.;
368  theta = sqrt((tx*tx) + (ty*ty));
369  double ddd = 0.;
370  long double fi_ = 0.;
371  if ( !((*m_isStoppedctpps.find(line)).second)) {
372  if( (*m_direct.find( line )).second >0 ) {
373  ddd = m_f_ctpps_f;
374  fi_ = std::atan2(tx,ty); // tx, ty never == 0?
375  }
376  else if((*m_direct.find( line )).second <0 ) {
377  ddd = m_b_ctpps_b;
378  theta= CLHEP::pi-theta;
379  fi_ = std::atan2(tx,ty); // tx, ty never == 0?
380  }
381  }
382  fi = fi_;
383  energy = (*m_eAtTrPoint.find(line)).second;
384  time = ( ddd*meter - gpart->production_vertex()->position().z()*mm ); // mm
385 
386  if(ddd != 0.) {
387  if(m_verbosity) {
388  LogDebug("CTPPSHectorEventProcessing") <<"CTPPSHector:: x= "<< (*(m_xAtTrPoint.find(line))).second*0.001<< "\n"
389  <<"CTPPSHector:: y= "<< (*(m_yAtTrPoint.find(line))).second*0.001<< "\n"
390  <<"CTPPSHector:: z= "<< ddd * (*(m_direct.find( line ))).second*1000. << "\n"
391  <<"CTPPSHector:: t= "<< time;
392  }
393 
394  HepMC::GenVertex * vert = new HepMC::GenVertex( HepMC::FourVector( (*(m_xAtTrPoint.find(line))).second*0.001,
395  (*(m_yAtTrPoint.find(line))).second*0.001,
396  ddd * (*(m_direct.find( line ))).second*1000.,
397  time + .001*time ) );
398 
399  gpart->set_status( 2 );
400  vert->add_particle_in( gpart );
401  double Pmom = sqrt(energy*energy - ProtonMassSQ);
402  vert->add_particle_out( new HepMC::GenParticle( HepMC::FourVector(Pmom*std::sin(theta)*std::sin(fi),
403  Pmom*std::sin(theta)*std::cos(fi),
404  Pmom*std::cos(theta),
405  energy ),gpart->pdg_id(), 1, gpart->flow() ) );
406  evt->add_vertex( vert );
407 
408  int ingoing = (*vert->particles_in_const_begin())->barcode();
409  int outgoing = (*vert->particles_out_const_begin())->barcode();
410  LHCTransportLink theLink(ingoing,outgoing);
411  if (m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector:addPartToHepMC: LHCTransportLink " << theLink;
412  theCorrespondenceMap.push_back(theLink);
413 
414  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector::TRANSPORTED pz= " << gpart->momentum().pz()
415  << " eta= "<< gpart->momentum().eta() << " status= "<< gpart->status();
416  }// ddd
417  }// if gpart
418  }// if !isStopped
419 
420  else {
421  gpart = evt->barcode_to_particle( line );
422  if ( gpart ) {
423  gpart->set_status( 2 );
424  if(m_verbosity) LogDebug("CTPPSHectorEventProcessing") << "CTPPSHector::NON-transp. pz= " << gpart->momentum().pz()
425  << " eta= "<< gpart->momentum().eta() << " status= "<< gpart->status();
426  }
427  }
428  }//for
429 
430  return evt;
431 }
#define LogDebug(id)
HepMC::GenEvent * addPartToHepMC(HepMC::GenEvent *event)
Definition: CTPPSHector.cc:345
T getParameter(std::string const &) const
CTPPSTransport
HepMC source to be processed.
void clearApertureFlags()
Definition: CTPPSHector.cc:107
bool m_verbosity
Definition: CTPPSHector.h:124
std::map< unsigned int, double > m_eAtTrPoint
Definition: CTPPSHector.h:114
double m_sigmaSTY
Definition: CTPPSHector.h:87
bool m_smearAng
Definition: CTPPSHector.h:83
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
std::map< unsigned int, double > m_yAtTrPoint
Definition: CTPPSHector.h:111
Geom::Theta< T > theta() const
std::map< unsigned int, int > m_pdg
Definition: CTPPSHector.h:117
void print() const
Definition: CTPPSHector.cc:275
string beam1filename
Definition: CTPPSHector.h:121
std::map< unsigned int, double > m_pz
Definition: CTPPSHector.h:118
std::map< unsigned int, int > m_direct
Definition: CTPPSHector.h:108
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
void getData(T &iHolder) const
Definition: EventSetup.h:78
const Double_t pi
std::map< unsigned int, H_BeamParticle * > m_beamPart
Definition: CTPPSHector.h:107
U second(std::pair< T, U > const &p)
bool m_CTPPSTransport
Definition: CTPPSHector.h:125
double etacut
Definition: CTPPSHector.h:82
edm::ESHandle< ParticleDataTable > pdt
Definition: CTPPSHector.h:101
double fVtxMeanX
Definition: CTPPSHector.h:96
std::map< unsigned int, bool > m_isStoppedctpps
Definition: CTPPSHector.h:109
T sqrt(T t)
Definition: SSEVec.h:18
double p4[4]
Definition: TauolaWrapper.h:92
void add(const HepMC::GenEvent *ev, const edm::EventSetup &es, CLHEP::HepRandomEngine *engine)
Definition: CTPPSHector.cc:123
double fVtxMeanY
Definition: CTPPSHector.h:97
double fVtxMeanZ
Definition: CTPPSHector.h:98
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double lengthctpps
Definition: CTPPSHector.h:80
float m_f_ctpps_f
Definition: CTPPSHector.h:88
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual ~CTPPSHector()
Definition: CTPPSHector.cc:99
double fMomentumMin
Definition: CTPPSHector.h:99
HepPDT::ParticleData ParticleData
bool m_smearE
Definition: CTPPSHector.h:85
const double ProtonMassSQ
std::map< unsigned int, double > m_eta
Definition: CTPPSHector.h:116
double fCrossingAngle
Definition: CTPPSHector.h:93
std::vector< LHCTransportLink > theCorrespondenceMap
Definition: CTPPSHector.h:127
void clear()
Definition: CTPPSHector.cc:111
const double cm_to_m
std::map< unsigned int, bool > m_isCharged
Definition: CTPPSHector.h:119
int getDirect(unsigned int part_n) const
Definition: CTPPSHector.cc:267
float m_b_ctpps_b
Definition: CTPPSHector.h:89
part
Definition: HCALResponse.h:20
double m_sigmaSTX
Definition: CTPPSHector.h:86
double fBeamEnergy
Definition: CTPPSHector.h:95
const double cm_to_um
std::map< unsigned int, double > m_TxAtTrPoint
Definition: CTPPSHector.h:112
std::map< unsigned int, double > m_xAtTrPoint
Definition: CTPPSHector.h:110
std::unique_ptr< H_BeamLine > m_beamlineCTPPS1
Definition: CTPPSHector.h:104
std::map< unsigned int, double > m_TyAtTrPoint
Definition: CTPPSHector.h:113
CTPPSHector(const edm::ParameterSet &ps, bool verbosity, bool CTPPSTransport)
Definition: CTPPSHector.cc:20
std::unique_ptr< H_BeamLine > m_beamlineCTPPS2
Definition: CTPPSHector.h:105
void filterCTPPS(TRandom3 *)
Definition: CTPPSHector.cc:197
bool fCrossAngleCorr
Definition: CTPPSHector.h:92
string beam2filename
Definition: CTPPSHector.h:122
double m_sig_e
Definition: CTPPSHector.h:84
CLHEP::HepLorentzVector LorentzVector
Definition: CTPPSHector.h:46
void LorentzBoost(LorentzVector &p_out, const string &frame)
Definition: CTPPSHector.cc:305
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
void ApplyBeamCorrection(LorentzVector &, CLHEP::HepRandomEngine *engine)
Definition: CTPPSHector.cc:281