Changeset 281 in svn for trunk/Utilities/Hector/src/H_AbstractBeamLine.cc
- Timestamp:
- Mar 1, 2009, 3:56:11 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Utilities/Hector/src/H_AbstractBeamLine.cc
r264 r281 1 /* 2 ---- Hector the simulator ---- 3 A fast simulator of particles through generic beamlines. 4 J. de Favereau, X. Rouby ~~~ hector_devel@cp3.phys.ucl.ac.be 5 6 http://www.fynu.ucl.ac.be/hector.html 7 8 Centre de Physique des Particules et de Phénoménologie (CP3) 9 Université Catholique de Louvain (UCL) 10 */ 11 1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * 2 * * 3 * --<--<-- A fast simulator --<--<-- * 4 * / --<--<-- of particle --<--<-- * 5 * ----HECTOR----< * 6 * \ -->-->-- transport through -->-->-- * 7 * -->-->-- generic beamlines -->-->-- * 8 * * 9 * JINST 2:P09005 (2007) * 10 * X Rouby, J de Favereau, K Piotrzkowski (CP3) * 11 * http://www.fynu.ucl.ac.be/hector.html * 12 * * 13 * Center for Cosmology, Particle Physics and Phenomenology * 14 * Universite catholique de Louvain * 15 * Louvain-la-Neuve, Belgium * 16 * * 17 * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 12 18 13 19 /// \file H_AbstractBeamLine.cc … … 45 51 } 46 52 47 H_AbstractBeamLine::H_AbstractBeamLine(const H_AbstractBeamLine& beamline) { 48 elements = beamline.elements; 49 matrices = beamline.matrices; 53 H_AbstractBeamLine::H_AbstractBeamLine(const H_AbstractBeamLine& beamline) : 54 matrices(beamline.matrices) { 55 //elements = beamline.elements; //<-- bad ! the new vector contains the same pointers as the previous one 56 cloneElements(beamline); 50 57 beam_mat.ResizeTo(MDIM,MDIM); 51 58 beam_mat = beamline.beam_mat; … … 55 62 H_AbstractBeamLine& H_AbstractBeamLine::operator=(const H_AbstractBeamLine& beamline) { 56 63 if(this== &beamline) return *this; 57 elements = beamline.elements; 64 //elements = beamline.elements; //<-- bad ! the new vector contains the same pointers as the previous one 65 cloneElements(beamline); 58 66 matrices = beamline.matrices; 59 67 beam_mat = beamline.beam_mat; … … 83 91 elements.clear(); 84 92 matrices.clear(); 93 } 94 95 void H_AbstractBeamLine::cloneElements(const H_AbstractBeamLine& beam) { 96 vector<H_OpticalElement*>::const_iterator element_i; 97 for (element_i = beam.elements.begin(); element_i< beam.elements.end(); element_i++) { 98 H_OpticalElement* temp_el = (*element_i)->clone(); 99 elements.push_back(temp_el); 100 } 85 101 } 86 102 … … 101 117 } 102 118 103 void H_AbstractBeamLine::add(H_OpticalElement & newElement) {104 /// @param newElement is added to the beamline105 // H_OpticalElement * el = new H_OpticalElement(newElement);106 // elements.push_back(el);107 elements.push_back(&newElement);108 float a = newElement.getS()+newElement.getLength();109 if (a > beam_length) {110 beam_length = a;111 if(VERBOSE) cout<<"<H_AbstractBeamLine> WARNING : element ("<< newElement.getName()<<") too far away. The beam length has been extended to "<< beam_length << ". "<<endl;112 }113 calcSequence();114 calcMatrix();115 }116 117 119 const TMatrix H_AbstractBeamLine::getBeamMatrix() const { 118 120 return beam_mat; … … 205 207 } 206 208 207 void H_AbstractBeamLine::printProperties() const { 208 vector<H_OpticalElement*>::const_iterator element_i; 209 cout << "Pointeurs des elements du faisceau" << endl; 210 for (element_i = elements.begin(); element_i < elements.end(); element_i++) { 211 cout << (int)(element_i-elements.begin()) << "\t" << (*element_i)->getName() << "\t" << (*element_i)->getS() << endl; 212 } 213 return; 214 } 209 std::ostream& operator<< (std::ostream& os, const H_AbstractBeamLine& be) { 210 vector<H_OpticalElement*>::const_iterator element_i; 211 os << "Beamline content" << endl; 212 for (element_i = be.elements.begin(); element_i < be.elements.end(); element_i++) { 213 os << (int)(element_i - be.elements.begin()) << "\t" << (*element_i)->getName() << "\t" << (*element_i)->getS() << endl; 214 } 215 return os; 216 } 217 218 void H_AbstractBeamLine::printProperties() const { cout << *this; return; } 215 219 216 220 void H_AbstractBeamLine::showElements() const{ … … 485 489 /// @param offset In meters 486 490 487 extern boolrelative_energy;491 extern int relative_energy; 488 492 if(!relative_energy) { 489 493 vector<H_OpticalElement*>::iterator element_i;
Note:
See TracChangeset
for help on using the changeset viewer.