Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/Geant4/G4ExcitedString.hh was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 //
0028 
0029 #ifndef G4ExcitedString_h
0030 #define G4ExcitedString_h 1
0031 
0032 // ------------------------------------------------------------
0033 //      GEANT 4 class header file
0034 //
0035 //      ---------------- G4ExcitedString ----------------
0036 //             by Gunter Folger, June 1998.
0037 //       class for an excited string used by Parton String Models
0038 // ------------------------------------------------------------
0039 
0040 #include "G4ios.hh"
0041 #include "globals.hh"
0042 #include "G4ThreeVector.hh"
0043 #include "G4LorentzVector.hh"
0044 #include "G4LorentzRotation.hh"
0045 #include "G4Parton.hh"
0046 #include "G4PartonVector.hh"
0047 #include "G4KineticTrack.hh"
0048 #include "G4HadronicException.hh"
0049 #include <algorithm>
0050 
0051 class G4ExcitedString 
0052 {
0053 
0054   public:
0055 
0056       enum {
0057            PROJECTILE  = 1, 
0058            TARGET  = -1 
0059            };
0060 
0061       G4ExcitedString(G4Parton* Color, G4Parton* Gluon,  G4Parton* AntiColor, G4int Direction=PROJECTILE);
0062       G4ExcitedString(G4Parton* Color, G4Parton* AntiColor, G4int Direction=PROJECTILE);
0063       G4ExcitedString(G4KineticTrack * atrack);
0064      
0065 
0066       ~G4ExcitedString();
0067 
0068 private:
0069       G4ExcitedString(const G4ExcitedString &right);
0070       G4ExcitedString& operator= (const G4ExcitedString &right);
0071 
0072 public:
0073       G4bool operator==(const G4ExcitedString &right) const;
0074       G4bool operator!=(const G4ExcitedString &right) const;
0075 
0076 public:
0077       G4double GetTimeOfCreation() const;
0078 
0079       void  SetTimeOfCreation(G4double aTime);
0080 
0081       const G4ThreeVector & GetPosition() const;
0082 
0083       void SetPosition(const G4ThreeVector &aPosition); 
0084 
0085       const G4PartonVector * GetPartonList() const;
0086 
0087       G4LorentzVector Get4Momentum() const;
0088       void LorentzRotate(const G4LorentzRotation & rotation);
0089 
0090       void InsertParton(G4Parton * aParton, const G4Parton * addafter = NULL);
0091 
0092       G4LorentzRotation TransformToCenterOfMass();
0093       G4LorentzRotation TransformToAlignedCms();
0094 
0095 
0096       void      Boost(G4ThreeVector& Velocity);
0097 
0098       G4Parton* GetColorParton(void) const;
0099       G4Parton* GetGluon(void) const;
0100       G4Parton* GetAntiColorParton(void) const;
0101       G4Parton* GetGluon(G4int GluonPos) const;
0102       
0103       G4KineticTrack * GetKineticTrack() const;
0104 
0105       G4Parton* GetLeftParton(void) const;
0106       G4Parton* GetRightParton(void) const;
0107 
0108       G4bool    IsItKinkyString(void) const;
0109       G4int     GetDirection(void) const;
0110       
0111       G4bool    IsExcited() const;
0112 
0113 
0114   private:
0115 
0116       G4int    theDirection;  // must be 1 or -1 (PROJECTILE or TARGET)
0117       G4double theTimeOfCreation;
0118       G4ThreeVector thePosition;
0119       G4PartonVector thePartons;  // would like initial capacity for 3 Partons.
0120       G4KineticTrack* theTrack;
0121 
0122 };
0123 
0124 inline
0125 G4bool G4ExcitedString::operator==(const G4ExcitedString &right) const
0126 {
0127     return this == &right;
0128 }
0129 
0130 inline
0131 G4bool G4ExcitedString::operator!=(const G4ExcitedString &right) const
0132 {
0133     return this != &right;
0134 }
0135 
0136 inline
0137 G4double G4ExcitedString::GetTimeOfCreation() const
0138 {
0139     return theTimeOfCreation;
0140 }
0141 
0142 inline
0143 void G4ExcitedString::SetTimeOfCreation(G4double aTime)
0144 {
0145     theTimeOfCreation=aTime;
0146 }
0147 
0148 inline
0149 const G4ThreeVector & G4ExcitedString::GetPosition() const 
0150 {
0151     return thePosition;
0152 }
0153 
0154 inline
0155 void G4ExcitedString::SetPosition(const G4ThreeVector &aPosition)
0156 {
0157     thePosition= aPosition;
0158 }
0159 
0160 inline
0161 G4LorentzVector G4ExcitedString::Get4Momentum() const
0162 {
0163     G4LorentzVector momentum;
0164         if ( IsExcited() )
0165         {
0166         for ( unsigned int index=0; index < thePartons.size() ; index++ )
0167         {
0168             // std::cout << "HPW "<<thePartons[index]->Get4Momentum()<<std::endl;
0169             momentum += thePartons[index]->Get4Momentum();
0170         }
0171         }
0172         else
0173         {
0174             momentum=theTrack->Get4Momentum();
0175         }
0176     return momentum;
0177 }
0178 
0179 inline
0180 void G4ExcitedString::LorentzRotate(const G4LorentzRotation & rotation)
0181 {
0182         if ( IsExcited() )
0183         {
0184         for ( unsigned int index=0; index < thePartons.size() ; index++ )
0185         {
0186             thePartons[index]->Set4Momentum(rotation*thePartons[index]->Get4Momentum());
0187         }
0188         }
0189         else
0190         {
0191             theTrack->Set4Momentum(rotation*theTrack->Get4Momentum());
0192         }
0193 }
0194 
0195 inline
0196 void G4ExcitedString::InsertParton(G4Parton *aParton, const G4Parton * addafter)
0197 {
0198 
0199     G4PartonVector::iterator insert_index;
0200     
0201     if ( addafter != NULL ) 
0202     {
0203         insert_index=std::find(thePartons.begin(), thePartons.end(), addafter);
0204         if ( insert_index == thePartons.end() )     // No object addafter in thePartons
0205         {
0206             G4String text = "G4ExcitedString::InsertParton called with invalid second argument";
0207             throw G4HadronicException(__FILE__, __LINE__, text);
0208         }
0209     }
0210     
0211     thePartons.insert(insert_index+1, aParton);
0212 } 
0213 
0214 inline
0215 G4LorentzRotation G4ExcitedString::TransformToCenterOfMass()
0216 {
0217     G4LorentzVector momentum=Get4Momentum();
0218     G4LorentzRotation toCms(-1*momentum.boostVector());
0219 
0220         if ( IsExcited() )
0221         {
0222         for ( unsigned int index=0; index < thePartons.size() ; index++ )
0223         {
0224             momentum=toCms * thePartons[index]->Get4Momentum();
0225             thePartons[index]->Set4Momentum(momentum);
0226         }
0227         }
0228         else
0229         {
0230             momentum*=toCms;
0231             theTrack->Set4Momentum(momentum);
0232         }
0233     return toCms;
0234 }
0235 
0236 inline
0237 G4LorentzRotation G4ExcitedString::TransformToAlignedCms()
0238 {
0239     G4LorentzVector momentum=Get4Momentum();
0240     G4LorentzRotation toAlignedCms(-1*momentum.boostVector());
0241 
0242     momentum= toAlignedCms* thePartons[0]->Get4Momentum();
0243     toAlignedCms.rotateZ(-1*momentum.phi());
0244     toAlignedCms.rotateY(-1*momentum.theta());
0245     
0246     for ( unsigned int index=0; index < thePartons.size() ; index++ )
0247     {
0248         momentum=toAlignedCms * thePartons[index]->Get4Momentum();
0249         thePartons[index]->Set4Momentum(momentum);
0250     }
0251     return toAlignedCms;
0252 }
0253 
0254 
0255 inline 
0256 const G4PartonVector * G4ExcitedString::GetPartonList() const
0257 {
0258     return &thePartons;
0259 }
0260 
0261 inline 
0262 G4KineticTrack * G4ExcitedString::GetKineticTrack() const
0263 {
0264     return theTrack;
0265 }
0266 
0267 inline 
0268 G4bool G4ExcitedString::IsExcited() const
0269 {
0270     return theTrack == 0;
0271 }
0272 
0273 
0274 #endif