51#ifndef G4ProductionCutsTable_h
52#define G4ProductionCutsTable_h 1
112 typedef std::vector<G4MaterialCutsCouple*> G4CoupleTable;
113 typedef std::vector<G4MaterialCutsCouple*>::const_iterator CoupleTableIterator;
114 typedef std::vector<G4double> G4CutVectorForAParticle;
115 typedef std::vector<G4CutVectorForAParticle*> G4CutTable;
116 G4CoupleTable coupleTable;
117 G4CutTable rangeCutTable;
118 G4CutTable energyCutTable;
227 enum { FixedStringLengthForStore = 32 };
246 return rangeCutTable[pcIdx];
252 return energyCutTable[pcIdx];
258 return coupleTable.size();
264 return coupleTable[size_t(i)];
270 if(firstUse)
return true;
271 for(G4ProductionCutsTable::CoupleTableIterator itr=coupleTable.begin();
272 itr!=coupleTable.end();itr++){
273 if((*itr)->IsRecalcNeeded())
284 for(G4ProductionCutsTable::CoupleTableIterator itr=coupleTable.begin();itr!=coupleTable.end();itr++){
285 (*itr)->PhysicsTableUpdated();
291{
return rangeDoubleVector[pcIdx]; }
295{
return energyDoubleVector[pcIdx]; }
299{
return defaultProductionCuts; }
302bool G4ProductionCutsTable::IsCoupleUsedInTheRegion(
309 for(
size_t iMate=0;iMate<nMaterial;iMate++, mItr++){
323 for(CoupleTableIterator cItr=coupleTable.begin();cItr!=coupleTable.end();cItr++)
325 if((*cItr)->GetMaterial()!=aMat)
continue;
326 if((*cItr)->GetProductionCuts()==aCut)
return (*cItr);
335 for(CoupleTableIterator cItr=coupleTable.begin();cItr!=coupleTable.end();cItr++)
337 if((*cItr)==aCouple)
return idx;
361 return &mccConversionTable;
const G4Material * GetMaterial() const
G4ProductionCuts * GetProductionCuts() const
virtual G4bool RetrieveCutsInfo(const G4String &directory, G4bool ascii=false)
G4bool RetrieveCutsTable(const G4String &directory, G4bool ascii=false)
virtual G4bool StoreCutsInfo(const G4String &directory, G4bool ascii=false)
const std::vector< G4double > * GetRangeCutsVector(size_t pcIdx) const
G4double GetLowEdgeEnergy() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
G4double * GetEnergyCutsDoubleVector(size_t pcIdx) const
void SetMaxEnergyCut(G4double value)
void UpdateCoupleTable(G4VPhysicalVolume *currentWorld)
G4double GetMaxEnergyCut()
void SetVerboseLevel(G4int value)
virtual G4bool CheckMaterialInfo(const G4String &directory, G4bool ascii=false)
G4int GetVerboseLevel() const
virtual G4bool StoreMaterialInfo(const G4String &directory, G4bool ascii=false)
G4double GetHighEdgeEnergy() const
virtual ~G4ProductionCutsTable()
size_t GetTableSize() const
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const
G4bool StoreCutsTable(const G4String &directory, G4bool ascii=false)
const G4MCCIndexConversionTable * GetMCCIndexConversionTable() const
G4double * GetRangeCutsDoubleVector(size_t pcIdx) const
G4bool CheckForRetrieveCutsTable(const G4String &directory, G4bool ascii=false)
void PhysicsTableUpdated()
void SetEnergyRange(G4double lowedge, G4double highedge)
static G4ProductionCutsTable * GetProductionCutsTable()
G4int GetCoupleIndex(const G4MaterialCutsCouple *aCouple) const
virtual G4bool CheckMaterialCutsCoupleInfo(const G4String &directory, G4bool ascii=false)
G4ProductionCuts * GetDefaultProductionCuts() const
G4bool IsModified() const
G4double ConvertRangeToEnergy(const G4ParticleDefinition *particle, const G4Material *material, G4double range)
virtual G4bool StoreMaterialCutsCoupleInfo(const G4String &directory, G4bool ascii=false)
G4ProductionCuts * GetProductionCuts() const
size_t GetNumberOfMaterials() const
std::vector< G4Material * >::const_iterator GetMaterialIterator() const