ATLAS Offline Software
Loading...
Searching...
No Matches
LArRecoMaterialTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5// ***************************************************************************
6//
7// 3.8.2005 Creation of the tool by claire.bourdarios@cern.ch
8//
9// ***************************************************************************
10
11#ifndef LARDETDESCR_LARRECOMATERIALTOOL_H
12#define LARDETDESCR_LARRECOMATERIALTOOL_H
13
16
17class CaloCell_ID;
18class CaloDM_ID;
19
20#include "GeoModelKernel/GeoVPhysVol.h"
21#include "GeoModelKernel/GeoLogVol.h"
22
23#include <string>
24
37
38class LArRecoMaterialTool : public extends<AthAlgTool, ICaloRecoMaterialTool>
39{
40public:
41
42 // Constructor:
43 LArRecoMaterialTool(const std::string& type,
44 const std::string& name,
45 const IInterface* parent);
46
48 virtual StatusCode initialize() override;
49
50 virtual
52 double& mass, double& volume,
53 double& x0, double& dEdx,
54 double& aveA, double& aveZ
55 ) const override;
56
58 virtual
59 void get_default_material (double& density,
60 double& x0, double& dEdx,
61 double& aveA, double& aveZ
62 ) const override;
63
64 void print() const override;
65
66private:
67
71
74 void ScanTree();
75
77
79 double& mass, double& x0, double& dEdx,
80 double& aveA, double& aveZ);
81
83 double& mass, double& x0, double& dEdx,
84 double& aveA, double& aveZ);
85
87 double& mass, double& x0, double& dEdx,
88 double& aveA, double& aveZ);
89
91 double& mass, double& x0, double& dEdx,
92 double& aveA, double& aveZ);
93
95 double& mass, double& x0, double& dEdx,
96 double& aveA, double& aveZ);
97
99 double& mass, double& x0, double& dEdx,
100 double& aveA, double& aveZ);
101
103 void blendGeoVolume(GeoPVConstLink& geoVolLink,
104 std::vector<double>& volume,
105 std::vector<double>& mass,
106 std::vector<double>& x0,
107 std::vector<double>& dEdX,
108 std::vector<double>& aveA,
109 std::vector<double>& aveZ) const;
110
112 void addMaterialFraction(const GeoLogVol& geoVol,
113 std::vector<double>& volume,
114 std::vector<double>& mass,
115 std::vector<double>& x0,
116 std::vector<double>& dEdX,
117 std::vector<double>& aveA,
118 std::vector<double>& aveZ) const;
119
121 void averageFraction (std::vector<double>& volumeFractions,
122 std::vector<double>& massFractions,
123 std::vector<double>& x0Fractions,
124 std::vector<double>& dEdXFractions,
125 std::vector<double>& aveAFractions,
126 std::vector<double>& aveZFractions,
127 double& mass, double& volume,
128 double& x0, double& dEdx,
129 double& aveA, double& aveZ, double& rho );
130
131 // mapping between ALIGNVOL and strings (need to retrieve StoredPV-s)
132 std::string map_av(CaloSubdetNames::ALIGNVOL alvol);
133
134
135 const CaloCell_ID* m_calo_id{nullptr};
136 const CaloDM_ID* m_dm_id{nullptr};
137
138 // Store results per ALIGNVOL :
139 std::vector<CaloSubdetNames::ALIGNVOL> m_alignvol_number;
140 std::vector<double> m_alignvol_mass;
141 std::vector<double> m_alignvol_x0;
142 std::vector<double> m_alignvol_dEdX;
143 std::vector<double> m_alignvol_aveA;
144 std::vector<double> m_alignvol_aveZ;
145
146 // intermediate vectors, cleared and filled within several methods :
147 std::vector<double> m_massFractions;
148 std::vector<double> m_volumeFractions;
149 std::vector<double> m_x0Fractions;
150 std::vector<double> m_dEdXFractions;
151 std::vector<double> m_averageAFractions;
152 std::vector<double> m_averageZFractions;
153
154 std::vector<double> m_child_massFractions;
155 std::vector<double> m_child_volumeFractions;
156 std::vector<double> m_child_x0Fractions;
157 std::vector<double> m_child_dEdXFractions;
158 std::vector<double> m_child_averageAFractions;
159 std::vector<double> m_child_averageZFractions;
160 std::vector<double> m_child_Rho;
161 std::vector<double> m_child_Volume;
162 std::vector<double> m_child_Mass;
163
164};
165
166#endif // LARDETDESCR_LARMATERIALTOOL_H
167
168
169
170
171
172
Helper class for offline cell identifiers.
Definition CaloCell_ID.h:34
Helper class for Calo Dead Material offline identifiers.
Definition CaloDM_ID.h:102
ALIGNVOL
LAr Alignable volumes.
const CaloCell_ID * m_calo_id
LArRecoMaterialTool(const std::string &type, const std::string &name, const IInterface *parent)
std::vector< double > m_child_massFractions
void print() const override
virtual StatusCode initialize() override
std::vector< double > m_child_Volume
~LArRecoMaterialTool()=default
std::string map_av(CaloSubdetNames::ALIGNVOL alvol)
std::vector< double > m_alignvol_x0
std::vector< double > m_child_Rho
std::vector< double > m_alignvol_aveA
bool ScanHEC(CaloSubdetNames::ALIGNVOL alvol, double &mass, double &x0, double &dEdx, double &aveA, double &aveZ)
std::vector< double > m_child_averageAFractions
const CaloDM_ID * m_dm_id
std::vector< double > m_child_volumeFractions
std::vector< double > m_child_Mass
std::vector< double > m_dEdXFractions
std::vector< double > m_child_x0Fractions
std::vector< double > m_x0Fractions
bool ScanFCAL(CaloSubdetNames::ALIGNVOL alvol, double &mass, double &x0, double &dEdx, double &aveA, double &aveZ)
std::vector< double > m_child_averageZFractions
void ScanTree()
Private method called at initialisation : fills all arrays by calling the "optimised" methods.
bool ScanPS(CaloSubdetNames::ALIGNVOL alvol, double &mass, double &x0, double &dEdx, double &aveA, double &aveZ)
std::vector< double > m_child_dEdXFractions
std::vector< double > m_averageAFractions
std::vector< double > m_alignvol_dEdX
void addMaterialFraction(const GeoLogVol &geoVol, std::vector< double > &volume, std::vector< double > &mass, std::vector< double > &x0, std::vector< double > &dEdX, std::vector< double > &aveA, std::vector< double > &aveZ) const
Private method to add material.
std::vector< CaloSubdetNames::ALIGNVOL > m_alignvol_number
void averageFraction(std::vector< double > &volumeFractions, std::vector< double > &massFractions, std::vector< double > &x0Fractions, std::vector< double > &dEdXFractions, std::vector< double > &aveAFractions, std::vector< double > &aveZFractions, double &mass, double &volume, double &x0, double &dEdx, double &aveA, double &aveZ, double &rho)
Private method to average results stored in private arrays.
std::vector< double > m_volumeFractions
bool ScanEMB(CaloSubdetNames::ALIGNVOL alvol, double &mass, double &x0, double &dEdx, double &aveA, double &aveZ)
std::vector< double > m_massFractions
bool ScanEMEC(CaloSubdetNames::ALIGNVOL alvol, double &mass, double &x0, double &dEdx, double &aveA, double &aveZ)
std::vector< double > m_alignvol_aveZ
void blendGeoVolume(GeoPVConstLink &geoVolLink, std::vector< double > &volume, std::vector< double > &mass, std::vector< double > &x0, std::vector< double > &dEdX, std::vector< double > &aveA, std::vector< double > &aveZ) const
Private method to blend GeoLogVolume.
std::vector< double > m_averageZFractions
std::vector< double > m_alignvol_mass
virtual bool get_material(CaloSubdetNames::ALIGNVOL alvol, double &mass, double &volume, double &x0, double &dEdx, double &aveA, double &aveZ) const override
bool ScanCRYO(CaloSubdetNames::ALIGNVOL alvol, double &mass, double &x0, double &dEdx, double &aveA, double &aveZ)
Private optimised methods for each subsystem.
bool m_parseGeoModelForMaterial
Private bool set at initialisation : decides if the GeoModel is parsed or bypassed.
virtual void get_default_material(double &density, double &x0, double &dEdx, double &aveA, double &aveZ) const override
default material used to fill the envelope