ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4BiasingProcessSharedData.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4BiasingProcessSharedData.hh
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 //--------------------------------------------------------------------------
28 //
29 // G4BiasingProcessSharedData
30 //
31 // Class Description:
32 // This class represents the data that the G4BiasingProcessInterface
33 // objects attached to a same particle / hold by a same G4ProcessManager
34 // share. It allows the active G4BiasingProcessInterface objects to share
35 // information on operations that are common the these instances:
36 // - the current and previous G4VBiasingOperator objects (their
37 // pointers are collected once, at the beginning of the PostStepGPIL
38 // by the first interface invoked)
39 // - add the list of cooperating G4BiasingProcessInterface objects,
40 // acting on a same particle type.
41 // G4BiasingProcessInterface is friend class of this one.
42 //---------------------------------------------------------------------------
43 // Initial version Sep. 2014 M. Verderi
44 
45 #ifndef G4BiasingProcessSharedData_h
46 #define G4BiasingProcessSharedData_h
47 
48 #include "globals.hh"
49 #include "G4Cache.hh"
50 #include <vector>
51 
52 class G4VBiasingOperator;
54 class G4ProcessManager;
56 
58 
61 
62 public:
63  // -------------------------
64  // -- Public access methods:
65  // -------------------------
66  // -- The biasing process interface objects sharing this shared data class:
67  const std::vector< const G4BiasingProcessInterface* >& GetBiasingProcessInterfaces() const
69  const std::vector< const G4BiasingProcessInterface* >& GetPhysicsBiasingProcessInterfaces() const
71  const std::vector< const G4BiasingProcessInterface* >& GetNonPhysicsBiasingProcessInterfaces() const
73 
74  // -- The possible geometry limiter process:
77 
78 
79 private:
80  // -- Methods used by the G4BiasingProcessInterface objects, thanks to class friendness.
81  // -- Object is created by G4BiasingProcessInterface object:
83  : fProcessManager (mgr),
84  fCurrentBiasingOperator ( nullptr ),
85  fPreviousBiasingOperator ( nullptr ),
86  fParallelGeometryOperator ( nullptr ),
87  fMassGeometryOperator ( nullptr ),
91  {}
93  // -- biasing operators:
98 
99 private:
100  // --
102  // -- biasing operators:
107  // --
110 
111  // -- biasing process interfaces sharing this object:
112  std::vector < G4BiasingProcessInterface* > fBiasingProcessInterfaces;
113  std::vector < G4BiasingProcessInterface* > fPhysicsBiasingProcessInterfaces;
114  std::vector < G4BiasingProcessInterface* > fNonPhysicsBiasingProcessInterfaces;
115  // -- the same ones, for public use:
116  std::vector < const G4BiasingProcessInterface* > fPublicBiasingProcessInterfaces;
117  std::vector < const G4BiasingProcessInterface* > fPublicPhysicsBiasingProcessInterfaces;
118  std::vector < const G4BiasingProcessInterface* > fPublicNonPhysicsBiasingProcessInterfaces;
119 
120  // -- possible process limiting step on parallel geometries:
122 
123 
124  // -- thread local:
125  // -- Map between process managers and shared data. This map is made of
126  // -- pointers of G4BiasingSharedData instead of objects themselves :
127  // -- each process needs to keep a valid pointer of a shared data object
128  // -- but a map of object will make pointers invalid when map is increased.
129  static G4MapCache< const G4ProcessManager*,
131 
132 };
133 
134 #endif