Fork me on GitHub

Ignore:
Timestamp:
Mar 1, 2009, 3:56:11 PM (15 years ago)
Author:
Xavier Rouby
Message:

new Hector version

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   * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    1218
    1319/// \file H_AbstractBeamLine.cc
     
    4551}
    4652
    47 H_AbstractBeamLine::H_AbstractBeamLine(const H_AbstractBeamLine& beamline) {
    48         elements = beamline.elements;
    49         matrices = beamline.matrices;
     53H_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);
    5057        beam_mat.ResizeTo(MDIM,MDIM);
    5158        beam_mat = beamline.beam_mat;
     
    5562H_AbstractBeamLine& H_AbstractBeamLine::operator=(const H_AbstractBeamLine& beamline) {
    5663        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);
    5866        matrices = beamline.matrices;
    5967        beam_mat = beamline.beam_mat;
     
    8391        elements.clear();
    8492        matrices.clear();
     93}
     94
     95void 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        }
    85101}
    86102
     
    101117}
    102118
    103 void H_AbstractBeamLine::add(H_OpticalElement & newElement) {
    104         /// @param newElement is added to the beamline
    105 //      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 
    117119const TMatrix H_AbstractBeamLine::getBeamMatrix() const {
    118120        return beam_mat;
     
    205207}
    206208
    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 }
     209std::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
     218void H_AbstractBeamLine::printProperties() const { cout << *this; return; }
    215219
    216220void H_AbstractBeamLine::showElements() const{
     
    485489        /// @param offset In meters
    486490
    487         extern bool relative_energy;
     491        extern int relative_energy;
    488492        if(!relative_energy) {
    489493                vector<H_OpticalElement*>::iterator element_i;
Note: See TracChangeset for help on using the changeset viewer.