Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/particles/management/src/G4DecayTable.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /particles/management/src/G4DecayTable.cc (Version 11.3.0) and /particles/management/src/G4DecayTable.cc (Version 1.0)


                                                   >>   1 // This code implementation is the intellectual property of
                                                   >>   2 // the GEANT4 collaboration.
  1 //                                                  3 //
  2 // ******************************************* <<   4 // By copying, distributing or modifying the Program (or any work
  3 // * License and Disclaimer                    <<   5 // based on the Program) you indicate your acceptance of this statement,
  4 // *                                           <<   6 // and all its terms.
  5 // * The  Geant4 software  is  copyright of th << 
  6 // * the Geant4 Collaboration.  It is provided << 
  7 // * conditions of the Geant4 Software License << 
  8 // * LICENSE and available at  http://cern.ch/ << 
  9 // * include a list of copyright holders.      << 
 10 // *                                           << 
 11 // * Neither the authors of this software syst << 
 12 // * institutes,nor the agencies providing fin << 
 13 // * work  make  any representation or  warran << 
 14 // * regarding  this  software system or assum << 
 15 // * use.  Please see the license in the file  << 
 16 // * for the full disclaimer and the limitatio << 
 17 // *                                           << 
 18 // * This  code  implementation is the result  << 
 19 // * technical work of the GEANT4 collaboratio << 
 20 // * By using,  copying,  modifying or  distri << 
 21 // * any work based  on the software)  you  ag << 
 22 // * use  in  resulting  scientific  publicati << 
 23 // * acceptance of all terms of the Geant4 Sof << 
 24 // ******************************************* << 
 25 //                                                  7 //
 26 // G4DecayTable class implementation           <<   8 // $Id: G4DecayTable.cc,v 1.4.8.1 1999/12/07 20:49:55 gunter Exp $
                                                   >>   9 // GEANT4 tag $Name: geant4-01-00 $
 27 //                                                 10 //
 28 // Author: H.Kurashige, 7 July 1996            <<  11 // 
 29 // ------------------------------------------- <<  12 // ------------------------------------------------------------
                                                   >>  13 //      GEANT 4 class implementation file
                                                   >>  14 //
                                                   >>  15 //      For information related to this code contact:
                                                   >>  16 //      CERN, CN Division, ASD group
                                                   >>  17 //      History: first implementation, based on object model of
                                                   >>  18 //      2nd December 1995, G.Cosmo
                                                   >>  19 //      27 July 1996 H.Kurashige
                                                   >>  20 // ------------------------------------------------------------
 30                                                    21 
                                                   >>  22 #include "globals.hh"
 31 #include "G4DecayTable.hh"                         23 #include "G4DecayTable.hh"
 32                                                << 
 33 #include "Randomize.hh"                            24 #include "Randomize.hh"
 34 #include "globals.hh"                          << 
 35                                                    25 
 36 G4DecayTable::G4DecayTable()                   <<  26 G4DecayTable::G4DecayTable():parent(0)
 37 {                                                  27 {
 38   channels = new G4VDecayChannelVector;        <<  28   channels =  new G4VDecayChannelVector;
 39 }                                                  29 }
 40                                                    30 
 41 G4DecayTable::~G4DecayTable()                      31 G4DecayTable::~G4DecayTable()
 42 {                                                  32 {
 43   // remove and delete all contents            <<  33   channels->clearAndDestroy();
 44   for (const auto channel : *channels) {       << 
 45     delete channel;                            << 
 46   }                                            << 
 47   channels->clear();                           << 
 48   delete channels;                                 34   delete channels;
 49   channels = nullptr;                          <<  35 }    
 50   parent = nullptr;                            << 
 51 }                                              << 
 52                                                    36 
 53 void G4DecayTable::Insert(G4VDecayChannel* aCh <<  37 void G4DecayTable::Insert( G4VDecayChannel * aChannel){
 54 {                                              <<  38   if (parent == 0) { parent = (G4ParticleDefinition*)(aChannel->GetParent()); }
 55   if (parent == nullptr) {                     << 
 56     parent = (G4ParticleDefinition*)(aChannel- << 
 57   }                                            << 
 58   if (parent != aChannel->GetParent()) {           39   if (parent != aChannel->GetParent()) {
 59 #ifdef G4VERBOSE                                   40 #ifdef G4VERBOSE
 60     G4cout << " G4DecayTable::Insert :: bad G4 <<  41     G4cout << " G4DecayTable::Insert :: bad   G4VDecayChannel (mismatch parent) ";
 61            << "       " << parent->GetParticle <<  42     G4cout << "       " << parent->GetParticleName();
 62            << " input:" << aChannel->GetParent <<  43     G4cout << " input:" << aChannel->GetParent()->GetParticleName() << endl;
 63 #endif                                             44 #endif
 64   }                                            <<  45   } else {
 65   else {                                       <<  46     channels->insert(aChannel);
 66     G4double br = aChannel->GetBR();           << 
 67     for (auto iCh = channels->cbegin(); iCh != << 
 68       if (br > (*iCh)->GetBR()) {              << 
 69         channels->insert(iCh, aChannel);       << 
 70         return;                                << 
 71       }                                        << 
 72     }                                          << 
 73     channels->push_back(aChannel);             << 
 74   }                                                47   }
 75 }                                                  48 }
 76                                                    49 
 77 G4VDecayChannel* G4DecayTable::SelectADecayCha <<  50 G4VDecayChannel *G4DecayTable::SelectADecayChannel()
 78 {                                                  51 {
 79   // check if contents exist                   <<  52   // make cumlative table for branching ratio
 80   if (channels->empty()) return nullptr;       <<  53   G4double sumBR = 0.0;
 81                                                <<  54   G4int index;
 82   if (parentMass < 0.) parentMass = parent->Ge <<  55   G4int    numberofchannels = channels->entries();
 83                                                <<  56   G4double *cumBR = new G4double[numberofchannels];
 84   G4double sumBR = 0.;                         <<  57   for (index=numberofchannels-1; index >=0 ; index--) {
 85   for (const auto channel : *channels) {       <<  58     sumBR += ((*channels)(index))->GetBR();
 86     if (!(channel->IsOKWithParentMass(parentMa <<  59     cumBR[index] = sumBR;
 87     sumBR += channel->GetBR();                 <<  60   }
 88   }                                            <<  61 
 89   if (sumBR <= 0.0) {                          <<  62   // select decay channel
 90 #ifdef G4VERBOSE                               <<  63   G4double r = sumBR* G4UniformRand();
 91     G4cout << " G4DecayTable::SelectADecayChan <<  64   G4VDecayChannel *channel;
 92            << "       " << parent->GetParticle <<  65   for (index= numberofchannels-1; index >=0 ; index--) {
 93 #endif                                         <<  66     if (r < cumBR[index]) {
 94     return nullptr;                            <<  67       channel = (*channels)(index);
 95   }                                            <<  68       break;
 96                                                << 
 97   const std::size_t MAX_LOOP = 10000;          << 
 98   for (std::size_t loop_counter = 0; loop_coun << 
 99     G4double sum = 0.0;                        << 
100     G4double br = sumBR * G4UniformRand();     << 
101     // select decay channel                    << 
102     for (const auto channel : *channels) {     << 
103       sum += channel->GetBR();                 << 
104       if (!(channel->IsOKWithParentMass(parent << 
105       if (br < sum) return channel;            << 
106     }                                              69     }
107   }                                                70   }
108   return nullptr;                              <<  71   delete [] cumBR;
                                                   >>  72   return channel;
109 }                                                  73 }
110                                                    74 
111 void G4DecayTable::DumpInfo() const                75 void G4DecayTable::DumpInfo() const
112 {                                                  76 {
113   G4cout << "G4DecayTable:  " << parent->GetPa <<  77   G4cout << "G4DecayTable:  " << parent->GetParticleName() << endl;
114   G4int index = 0;                             <<  78   G4int numberofchannels = channels->entries();
115   for (const auto channel : *channels) {       <<  79   for (G4int index= numberofchannels -1; index >=0 ; index -=1)
                                                   >>  80   {
116     G4cout << index << ": ";                       81     G4cout << index << ": ";
117     channel->DumpInfo();                       <<  82     ((*channels)(index))->DumpInfo();
118     index += 1;                                << 
119   }                                                83   }
120   G4cout << G4endl;                            <<  84   G4cout << endl;
121 }                                                  85 }
                                                   >>  86 
                                                   >>  87 
                                                   >>  88 
                                                   >>  89 
                                                   >>  90 
                                                   >>  91 
                                                   >>  92 
                                                   >>  93 
                                                   >>  94 
                                                   >>  95 
                                                   >>  96 
122                                                    97