ATLAS Offline Software
Loading...
Searching...
No Matches
GetLCWeights Class Reference

Top algorithm to generate Weight histograms for Local Hadron Calibration. More...

#include <GetLCWeights.h>

Inheritance diagram for GetLCWeights:
Collaboration diagram for GetLCWeights:

Public Member Functions

 GetLCWeights (const std::string &name, ISvcLocator *pSvcLocator)
virtual ~GetLCWeights ()
virtual StatusCode initialize ()
virtual StatusCode execute ()
virtual StatusCode finalize ()
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

void mapinsert (const std::vector< Gaudi::Histo1DDef > &dims)
void mapparse ()
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

std::vector< std::vector< Gaudi::Histo1DDef > > m_dimensions
 definition of all dimensions used for each sampling
std::map< std::string, Gaudi::Histo1DDef > m_dimensionsmap
 property to set all dimensions introduced above
std::vector< std::vector< int > > m_isampmap
 Vector of indices in m_dimensions for each sampling.
std::vector< std::vector< TProfile2D * > > m_weight
 Vector of vector of actual histograms.
std::string m_outputFileName
 Name of the output file to save histograms in.
std::unique_ptr< TFile > m_outputFile
 Output file to save histograms in.
SG::ReadHandleKey< xAOD::CaloClusterContainerm_clusterCollName
 Name of the CaloClusterContainer to use.
SG::ReadHandleKeyArray< CaloCalibrationHitContainerm_CalibrationHitContainerNames
 vector of calibration hit container names to use.
bool m_useInversionMethod
 flag to switch on/off the use of the inversion method
std::string m_NormalizationType
 string to choose different normalization types
int m_NormalizationTypeNumber
std::string m_ClassificationType
 string to choose different classification types
int m_ClassificationTypeNumber
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Top algorithm to generate Weight histograms for Local Hadron Calibration.

Version
$Id: GetLCWeights.h,v 1.2 2008-12-08 16:57:41 menke Exp $
Author
Sven Menke menke.nosp@m.@mpp.nosp@m.mu.mp.nosp@m.g.de
Date
3-October-2008

This class is an Algorithm to generate the 2D histograms from single pion simulations to cell-weight the hadronic classified clusters.

Definition at line 41 of file GetLCWeights.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ GetLCWeights()

GetLCWeights::GetLCWeights ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 45 of file GetLCWeights.cxx.

47 : AthAlgorithm(name, pSvcLocator),
48 m_outputFile(nullptr),
49 m_clusterCollName("CaloTopoClusters"),
55{
56
57 std::vector<Gaudi::Histo1DDef> dims(7);
58 dims[1] = Gaudi::Histo1DDef("side",-1.5,1.5,1);
59 dims[2] = Gaudi::Histo1DDef("|eta|",0.,1.6,16);
60 dims[3] = Gaudi::Histo1DDef("phi",-M_PI,M_PI,1);
61 dims[4] = Gaudi::Histo1DDef("log10(E_clus (MeV))",log10(200),log10(1e6),14);
62 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.6,1.1,14);
63 dims[6] = Gaudi::Histo1DDef("weight",-2,3,1);
64
65 dims[0] = Gaudi::Histo1DDef("EMB1",0.5,1.5,1);
66 mapinsert(dims);
67 dims[0] = Gaudi::Histo1DDef("EMB2",1.5,2.5,1);
68 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.8,0.5,14);
69 mapinsert(dims);
70 dims[0] = Gaudi::Histo1DDef("EMB3",2.5,3.5,1);
71 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.9,0.6,14);
72 mapinsert(dims);
73 dims[0] = Gaudi::Histo1DDef("EME1",4.5,5.5,1);
74 dims[2] = Gaudi::Histo1DDef("|eta|",1.2,3.2,20);
75 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.5,1.7,14);
76 mapinsert(dims);
77 dims[0] = Gaudi::Histo1DDef("EME2",5.5,6.5,1);
78 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.8,1.2,14);
79 mapinsert(dims);
80 dims[0] = Gaudi::Histo1DDef("EME3",6.5,7.5,1);
81 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.5,1.0,14);
82 mapinsert(dims);
83 dims[0] = Gaudi::Histo1DDef("HEC0",7.5,8.5,1);
84 dims[2] = Gaudi::Histo1DDef("|eta|",1.4,3.4,20);
85 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.8,0.6,14);
86 mapinsert(dims);
87 dims[0] = Gaudi::Histo1DDef("HEC1",8.5,9.5,1);
88 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.9,-0.2,14);
89 mapinsert(dims);
90 dims[0] = Gaudi::Histo1DDef("HEC2",9.5,10.5,1);
91 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.8,-0.2,14);
92 mapinsert(dims);
93 dims[0] = Gaudi::Histo1DDef("HEC3",10.5,11.5,1);
94 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-4.7,-0.2,14);
95 mapinsert(dims);
96 dims[0] = Gaudi::Histo1DDef("TileBar0",11.5,12.5,1);
97 dims[2] = Gaudi::Histo1DDef("|eta|",0.,1.2,12);
98 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6,-1,14);
99 mapinsert(dims);
100 dims[0] = Gaudi::Histo1DDef("TileBar1",12.5,13.5,1);
101 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6.7,-1.2,14);
102 mapinsert(dims);
103 dims[0] = Gaudi::Histo1DDef("TileBar2",13.5,14.5,1);
104 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-7,-1.9,14);
105 mapinsert(dims);
106 dims[0] = Gaudi::Histo1DDef("TileGap1",14.5,15.5,1);
107 dims[2] = Gaudi::Histo1DDef("|eta|",0.8,1.8,10);
108 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6,-1,14);
109 mapinsert(dims);
110 dims[0] = Gaudi::Histo1DDef("TileGap2",15.5,16.5,1);
111 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6.5,-1.5,14);
112 mapinsert(dims);
113 dims[0] = Gaudi::Histo1DDef("TileExt0",17.5,18.5,1);
114 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6.5,-1,14);
115 mapinsert(dims);
116 dims[0] = Gaudi::Histo1DDef("TileExt1",18.5,19.5,1);
117 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-6.6,-1.5,14);
118 mapinsert(dims);
119 dims[0] = Gaudi::Histo1DDef("TileExt2",19.5,20.5,1);
120 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-7.2,-2.4,14);
121 mapinsert(dims);
122 dims[0] = Gaudi::Histo1DDef("FCal1",20.5,21.5,1);
123 dims[2] = Gaudi::Histo1DDef("|eta|",2.8,5.0,22);
124 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-3.5,2,14);
125 mapinsert(dims);
126 dims[0] = Gaudi::Histo1DDef("FCal2",21.5,22.5,1);
127 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-3.5,1.5,14);
128 mapinsert(dims);
129 dims[0] = Gaudi::Histo1DDef("FCal3",22.5,23.5,1);
130 dims[5] = Gaudi::Histo1DDef("log10(rho_cell (MeV/mm^3))",-3.8,1,14);
131 mapinsert(dims);
132
133 // Dimensions to use for all samplings
134 declareProperty("SamplingDimensions",m_dimensionsmap);
135
136 // Name of output file to save histograms in
137 declareProperty("OutputFileName",m_outputFileName);
138
139 // Name of ClusterContainer to use
140 declareProperty("ClusterCollectionName",m_clusterCollName);
141
142 // Names of CalibrationHitContainers to use
143 declareProperty("CalibrationHitContainerNames",m_CalibrationHitContainerNames);
144 // Use Inversion Method
145 declareProperty("UseInversionMethod",m_useInversionMethod);
146 // Normalization type "Const", "Lin", "Log", "NClus"
147 declareProperty("NormalizationType",m_NormalizationType);
148 // Classification type "None" for single pion MC or
149 // "ParticleID_EM" for ParticleID based em-type clusters
150 // "ParticleID_HAD" for ParticleID based had-type clusters
151 declareProperty("ClassificationType", m_ClassificationType);
152}
#define M_PI
AthAlgorithm()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
std::string m_NormalizationType
string to choose different normalization types
bool m_useInversionMethod
flag to switch on/off the use of the inversion method
void mapinsert(const std::vector< Gaudi::Histo1DDef > &dims)
std::unique_ptr< TFile > m_outputFile
Output file to save histograms in.
std::map< std::string, Gaudi::Histo1DDef > m_dimensionsmap
property to set all dimensions introduced above
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clusterCollName
Name of the CaloClusterContainer to use.
int m_NormalizationTypeNumber
int m_ClassificationTypeNumber
std::string m_ClassificationType
string to choose different classification types
std::string m_outputFileName
Name of the output file to save histograms in.
SG::ReadHandleKeyArray< CaloCalibrationHitContainer > m_CalibrationHitContainerNames
vector of calibration hit container names to use.

◆ ~GetLCWeights()

GetLCWeights::~GetLCWeights ( )
virtual

Definition at line 156 of file GetLCWeights.cxx.

157{ }

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode GetLCWeights::execute ( )
virtual

Definition at line 355 of file GetLCWeights.cxx.

356{
357 const EventContext& ctx = getContext();
358 SG::ReadHandle<xAOD::CaloClusterContainer> cc (m_clusterCollName, ctx);
359
360 std::vector<const CaloCalibrationHitContainer *> v_cchc;
361 for (const SG::ReadHandleKey<CaloCalibrationHitContainer>& k : m_CalibrationHitContainerNames) {
362 SG::ReadHandle<CaloCalibrationHitContainer> cchc (k, ctx);
363 v_cchc.push_back(cchc.cptr());
364 }
365
366 std::vector<ClusWeight *> cellVector[CaloCell_ID::NSUBCALO];
367
368 const CaloCell_ID* calo_id = nullptr;
369 ATH_CHECK(detStore()->retrieve(calo_id,"CaloCell_ID"));
370
371 for(int ic=0;ic<CaloCell_ID::NSUBCALO; ic++) {
372 unsigned int maxHashSize(0);
373 IdentifierHash myHashMin,myHashMax;
374 calo_id->calo_cell_hash_range (ic,myHashMin,myHashMax);
375 maxHashSize = myHashMax-myHashMin;
376 cellVector[ic].resize(maxHashSize,nullptr);
377 }
378
379 // loop over all cell members of all clusters and fill cell vector
380 // for used cells
381
382 // total calib hit energy of all clusters
383 double eCalibTot(0.);
384
385 unsigned int iClus = 0;
386 double nClusECalibGt0 = 0.0;
387 for (const xAOD::CaloCluster* theCluster : *cc) {
388 double eC=999;
389 if (!theCluster->retrieveMoment(xAOD::CaloCluster::ENG_CALIB_TOT,eC)) {
390 ATH_MSG_ERROR( "Failed to retrieve cluster moment ENG_CALIB_TOT");
391 return StatusCode::FAILURE;
392 }
394 double emFrac=-999;
395 if (!theCluster->retrieveMoment(xAOD::CaloCluster::ENG_CALIB_FRAC_EM,emFrac)){
396 ATH_MSG_ERROR( "Failed to retrieve cluster moment ENG_CALIB_FAC_EM");
397 return StatusCode::FAILURE;
398 }
400 eC = 0;
402 eC = 0;
403 }
404 eCalibTot += eC;
405 if ( eC > 0 ) {
406 nClusECalibGt0++;
407 }
408 xAOD::CaloCluster::const_cell_iterator cellIter = theCluster->cell_begin();
409 xAOD::CaloCluster::const_cell_iterator cellIterEnd = theCluster->cell_end();
410 for(; cellIter != cellIterEnd; cellIter++ ){
411 const CaloCell* pCell = (*cellIter);
412 Identifier myId = pCell->ID();
413 IdentifierHash myHashId;
414 int otherSubDet(0);
415 myHashId = calo_id->subcalo_cell_hash(myId,otherSubDet);
416 ClusWeight * myClus = new ClusWeight();
417 myClus->iClus = iClus;
418 myClus->weight = cellIter.weight();
419 myClus->next = nullptr;
420 myClus->eCalibTot = 0;
421 ClusWeight * theList = cellVector[otherSubDet][(unsigned int)myHashId];
422 if ( theList ) {
423 while ( theList->next )
424 theList = theList->next;
425 theList->next = myClus;
426 }
427 else {
428 cellVector[otherSubDet][(unsigned int)myHashId] = myClus;
429 }
430 }
431 }
432
433 // calculate total calib energy of each cell in each cluster
434
435 for (const CaloCalibrationHitContainer* cchc : v_cchc) {
436 for (const CaloCalibrationHit* hit : *cchc) {
437 Identifier myId = hit->cellID();
438 int otherSubDet;
439 IdentifierHash myHashId = calo_id->subcalo_cell_hash(myId,otherSubDet);
440 if ( myHashId != CaloCell_ID::NOT_VALID ) {
441 ClusWeight * theList = cellVector[otherSubDet][(unsigned int)myHashId];
442 while ( theList ) {
443 theList->eCalibTot += hit->energyTotal();
444 theList = theList->next;
445 }
446 }
447 }
448 }
449
450 // fill weight histos for all cells in all clusters
451 // since pions can be split in several clusters the weights are
452 // calculated by importance of the cluster for the current pion - i.e.
453 // the weights get a weight itself proportinal to the calib hit energy
454 // sum of the cluster over the total calib hit energy
455
456 if ( eCalibTot > 0 && nClusECalibGt0 > 0 ) {
457 const double inv_eCalibTot = 1. / eCalibTot;
458 const double inv_nClusECalibGt0 = 1. / nClusECalibGt0;
459 for (unsigned int j=0;j<cc->size();j++) {
460 const xAOD::CaloCluster * pClus = cc->at(j);
461 double eng = pClus->e();
462 double eCalib=-999;
464 ATH_MSG_ERROR( "Failed to retrieve cluster moment ENG_CALIB_TOT");
465 return StatusCode::FAILURE;
466 }
467 if ( eng > 0 && eCalib > 0 ) {
469 double emFrac=-999;
471 ATH_MSG_ERROR( "Failed to retrieve cluster moment ENG_CALIB_FAC_EM");
472 return StatusCode::FAILURE;
473 }
475 continue;
477 continue;
478 }
481 for(; cellIter != cellIterEnd; cellIter++ ){
482 const CaloCell* pCell = (*cellIter);
483 const Identifier myId = pCell->ID();
484 const CaloDetDescrElement* myCDDE=pCell->caloDDE();
485 const int caloSample = myCDDE->getSampling();//m_calo_id->calo_sample(myId);
486 if ( !m_isampmap[caloSample].empty() &&
487 !m_weight[caloSample].empty() ) {
488 int isideCell = 0;
489 int ietaCell = 0;
490 int iphiCell = 0;
491 int nside = 1;
492 int neta = 1;
493 int nphi = 1;
494 if ( m_isampmap[caloSample][1] >= 0 ) {
495 const Gaudi::Histo1DDef & hd = m_dimensions[m_isampmap[caloSample][0]][m_isampmap[caloSample][1]];
496 nside = hd.bins();
497 isideCell = (int)(nside*(((pCell->eta()<0?-1.0:1.0) - hd.lowEdge())
498 /(hd.highEdge()-hd.lowEdge())));
499 if ( isideCell < 0 || isideCell > nside-1 ) {
500 ATH_MSG_WARNING( " Side index out of bounds " <<
501 isideCell << " not in [0," << nside-1 << "] for "
502 << "Sampl=" << caloSample );
503 isideCell = -1;
504 }
505 }
506 if ( m_isampmap[caloSample][2] >= 0 ) {
507 const Gaudi::Histo1DDef & hd = m_dimensions[m_isampmap[caloSample][0]][m_isampmap[caloSample][2]];
508 neta = hd.bins();
509 ietaCell = (int)(neta*((fabs(pCell->eta()) - hd.lowEdge())
510 /(hd.highEdge()-hd.lowEdge())));
511 if ( ietaCell < 0 || ietaCell > neta-1 ) {
512 ATH_MSG_WARNING( " Eta index out of bounds " <<
513 ietaCell << " not in [0," << neta-1 << "] for "
514 << "Sampl=" << caloSample );
515 ietaCell = -1;
516 }
517 }
518 if ( m_isampmap[caloSample][3] >= 0 ) {
519 const Gaudi::Histo1DDef & hd = m_dimensions[m_isampmap[caloSample][0]][m_isampmap[caloSample][3]];
520 nphi = hd.bins();
521 iphiCell = (int)(nphi*((pCell->phi() - hd.lowEdge())
522 /(hd.highEdge()-hd.lowEdge())));
523 if ( iphiCell < 0 || iphiCell > nphi-1 ) {
524 ATH_MSG_WARNING( " Phi index out of bounds " <<
525 iphiCell << " not in [0," << nphi-1 << "] for "
526 << "Sampl=" << caloSample );
527 iphiCell = -1;
528 }
529 }
530 if ( isideCell >=0 && ietaCell >=0 && iphiCell >= 0 ) {
531 if ( myCDDE->volume() > 0 ) {
532 IdentifierHash myHashId;
533 int otherSubDet(0);
534 myHashId = calo_id->subcalo_cell_hash(myId,otherSubDet);
535 unsigned int iW = iphiCell*neta*nside+ietaCell*nside+isideCell;
536 if ( iW >= m_weight[caloSample].size() ) {
537 ATH_MSG_WARNING( " Index out of bounds " <<
538 iW << " > " << m_weight[caloSample].size()-1 << " for "
539 << "Sampl=" << caloSample
540 << ", iphi=" << iphiCell
541 << ", ieta=" << ietaCell
542 << ", iside=" << isideCell );
543 }
544 else {
545 ClusWeight * theList = cellVector[otherSubDet][(unsigned int)myHashId];
546 while ( theList && theList->iClus != j )
547 theList = theList->next;
548
549 if (m_weight[caloSample][iW] && theList && eCalibTot > 0) {
550 double norm = 0.0;
552 norm = eCalib * inv_eCalibTot;
553 }
555 if ( eCalib > 0 ) {
556 // cluster has to have at least 1% of the calib hit E
557 norm = log10(eCalib * inv_eCalibTot)+2.0;
558 }
559 }
561 if ( eCalib > 0 ) {
562 norm = inv_nClusECalibGt0;
563 }
564 }
565 else {
566 norm = 1.0;
567 }
568 if ( norm > 0 ) {
569 if ( !m_useInversionMethod && pCell->e()>0 ) {
570 m_weight[caloSample][iW]->Fill(log10(eng),
571 log10(pCell->e()/myCDDE->volume()),
572 theList->eCalibTot/pCell->e(),norm);
573
574 }
575 else if (m_useInversionMethod && theList->eCalibTot>0 ) {
576 m_weight[caloSample][iW]->Fill(log10(eng),
577 log10(theList->eCalibTot/myCDDE->volume()),
578 pCell->e()/theList->eCalibTot,
579 norm);
580 }
581 }
582 }
583 }
584 }
585 }
586 }
587 }
588 }
589 }
590 }
591
592 for(unsigned int ic=0;ic<CaloCell_ID::NSUBCALO; ic++) {
593 for (unsigned int ii = 0;ii<cellVector[ic].size();ii++ ) {
594 ClusWeight * theList = cellVector[ic][ii];
595 ClusWeight * prev = nullptr;
596 while ( theList) {
597 while ( theList->next ) {
598 prev = theList;
599 theList = theList->next;
600 }
601 delete theList;
602 if ( prev )
603 prev->next = nullptr;
604 else
605 cellVector[ic][ii] = nullptr;
606 theList = cellVector[ic][ii];
607 prev = nullptr;
608 }
609 }
610 }
611
612 return StatusCode::SUCCESS;
613}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
CaloCalibrationHitContainer
static const Attributes_t empty
const ServiceHandle< StoreGateSvc > & detStore() const
void calo_cell_hash_range(const Identifier id, IdentifierHash &caloCellMin, IdentifierHash &caloCellMax) const
to loop on 'global' cell hashes of one sub-calorimeter alone
IdentifierHash subcalo_cell_hash(const Identifier cellId, int &subCalo) const
create hash id from 'global' cell id
virtual double e() const override final
get energy (data member) (synonym to method energy()
Definition CaloCell.h:333
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition CaloCell.h:375
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
Definition CaloCell.h:321
virtual double eta() const override final
get eta (through CaloDetDescrElement)
Definition CaloCell.h:382
Identifier ID() const
get ID (from cached data member) non-virtual and inline for fast access
Definition CaloCell.h:295
CaloCell_ID::CaloSample getSampling() const
cell sampling
unsigned int iClus
double eCalibTot
double weight
ClusWeight * next
std::vector< std::vector< Gaudi::Histo1DDef > > m_dimensions
definition of all dimensions used for each sampling
std::vector< std::vector< int > > m_isampmap
Vector of indices in m_dimensions for each sampling.
std::vector< std::vector< TProfile2D * > > m_weight
Vector of vector of actual histograms.
bool retrieveMoment(MomentType type, double &value) const
Retrieve individual moment.
virtual double e() const
The total energy of the particle.
CaloClusterCellLink::const_iterator const_cell_iterator
Iterator of the underlying CaloClusterCellLink (explicitly const version)
const_cell_iterator cell_end() const
@ ENG_CALIB_FRAC_EM
Calibration Hit energy inside the cluster caused by e/gamma/pi0.
@ ENG_CALIB_TOT
Calibration Hit energy inside the cluster.
const_cell_iterator cell_begin() const
Iterator of the underlying CaloClusterCellLink (const version)
@ PARTICLEID_EM
Definition GetLCDefs.h:25
@ PARTICLEID_HAD
Definition GetLCDefs.h:25
int ic
Definition grepfile.py:33
retrieve(aClass, aKey=None)
Definition PyKernel.py:110
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ finalize()

StatusCode GetLCWeights::finalize ( )
virtual

Definition at line 338 of file GetLCWeights.cxx.

339{
340 ATH_MSG_INFO( "Writing out histograms" );
341 m_outputFile->cd();
342 for(unsigned int i=0;i<m_weight.size();i++) {
343 for(unsigned int j=0;j<m_weight[i].size();j++) {
344 if ( m_weight[i][j] )
345 m_weight[i][j]->Write();
346 }
347 }
348 m_outputFile->Close();
349
350 return StatusCode::SUCCESS;
351}
#define ATH_MSG_INFO(x)

◆ initialize()

StatusCode GetLCWeights::initialize ( )
virtual

Definition at line 161 of file GetLCWeights.cxx.

162{
163
164 m_outputFile = std::make_unique<TFile>(m_outputFileName.c_str(),"RECREATE");
165 m_outputFile->cd();
166
167 m_weight.resize(CaloSampling::Unknown);
168 m_isampmap.resize(CaloSampling::Unknown);
169 mapparse();
170
171
172 if ( m_NormalizationType == "Lin" ) {
173 ATH_MSG_INFO( "Using weighting proportional to E_calib" );
175 }
176 else if ( m_NormalizationType == "Log" ) {
177 ATH_MSG_INFO( "Using weighting proportional to log(E_calib)" );
179 }
180 else if ( m_NormalizationType == "NClus" ) {
181 ATH_MSG_INFO( "Using weighting proportional to 1/N_Clus_E_calib>0" );
183 }
184 else {
185 ATH_MSG_INFO( "Using constant weighting" );
187 }
188
189 if ( m_ClassificationType == "None" ) {
190 ATH_MSG_INFO( "Expecting single particle input" );
192 }
193 else if ( m_ClassificationType == "ParticleID_EM" ) {
194 ATH_MSG_INFO( "Expecting ParticleID simulation as input -- use EM type clusters only" );
196 }
197 else if ( m_ClassificationType == "ParticleID_HAD" ) {
198 ATH_MSG_INFO( "Expecting ParticleID simulation as input -- use HAD type clusters only" );
200 }
201 else {
202 ATH_MSG_WARNING( " unknown classification type " << m_ClassificationType << " given! Using None instead" );
204 }
205
206 for(unsigned int isamp=0;isamp<m_dimensions.size();isamp++) {
207 int theSampling(CaloSampling::Unknown);
208 for (unsigned int jsamp = 0;jsamp< CaloSampling::Unknown; jsamp++) {
210 theSampling = jsamp;
211 break;
212 }
213 }
214 if ( theSampling == CaloSampling::Unknown ) {
215 ATH_MSG_ERROR( "Calorimeter sampling "
216 << m_dimensions[isamp][0].title()
217 << " is not a valid Calorimeter sampling name and will be ignored! "
218 << "Valid names are: ";
219 for (unsigned int jsamp = 0;jsamp< CaloSampling::Unknown; jsamp++) {
221 if ( jsamp < CaloSampling::Unknown-1)
222 msg() << ", ";
223 else
224 msg() << ".";
225 }
226 msg() );
227 }
228 else {
229 m_isampmap[theSampling].resize(4,-1);
230 m_isampmap[theSampling][0] = isamp;
231 int iside(-1);
232 int ieta(-1);
233 int iphi(-1);
234 int ilogE(-1);
235 int ilogrho(-1);
236 int iweight(-1);
237
238 for(unsigned int idim=1;idim<m_dimensions[isamp].size();idim++) {
239 if ( m_dimensions[isamp][idim].title() == "side" ) {
240 iside = idim;
241 m_isampmap[theSampling][1] = iside;
242 }
243 else if ( m_dimensions[isamp][idim].title() == "|eta|" ) {
244 ieta = idim;
245 m_isampmap[theSampling][2] = ieta;
246 }
247 else if ( m_dimensions[isamp][idim].title() == "phi" ) {
248 iphi = idim;
249 m_isampmap[theSampling][3] = iphi;
250 }
251 else if ( m_dimensions[isamp][idim].title() == "log10(E_clus (MeV))" )
252 ilogE = idim;
253 else if ( m_dimensions[isamp][idim].title() == "log10(rho_cell (MeV/mm^3))" )
254 ilogrho = idim;
255 else if ( m_dimensions[isamp][idim].title() == "weight" )
256 iweight = idim;
257 }
258 if ( ilogE < 0 || ilogrho < 0 || iweight < 0 ) {
259 ATH_MSG_FATAL( " Mandatory dimension log10E, log10rho or weight missing ..." );
260 return StatusCode::FAILURE;
261 }
262 int nside = (iside>=0?m_dimensions[isamp][iside].bins():1);
263 int neta = (ieta>=0?m_dimensions[isamp][ieta].bins():1);
264 int nphi = (iphi>=0?m_dimensions[isamp][iphi].bins():1);
265 m_weight[theSampling].resize(nside*neta*nphi,nullptr);
266 for ( int jside=0;jside<nside;jside++) {
267 for ( int jeta=0;jeta<neta;jeta++) {
268 for ( int jphi=0;jphi<nphi;jphi++) {
269 TString wname("");
271 wname += "inv_weight";
272 else
273 wname += "weight";
274 wname += "_isamp_";
275 wname += theSampling;
276 wname += "_iside_";
277 wname += jside;
278 wname += "_[";
279 wname += (iside>=0?m_dimensions[isamp][iside].lowEdge():-1);
280 wname += ",";
281 wname += (iside>=0?m_dimensions[isamp][iside].highEdge():-1);
282 wname += ",";
283 wname += nside;
284 wname += "]";
285 wname += "_ieta_";
286 wname += jeta;
287 wname += "_[";
288 wname += (ieta>=0?m_dimensions[isamp][ieta].lowEdge():-1);
289 wname += ",";
290 wname += (ieta>=0?m_dimensions[isamp][ieta].highEdge():-1);
291 wname += ",";
292 wname += neta;
293 wname += "]";
294 wname += "_iphi_";
295 wname += jphi;
296 wname += "_[";
297 wname += (iphi>=0?m_dimensions[isamp][iphi].lowEdge():-1);
298 wname += ",";
299 wname += (iphi>=0?m_dimensions[isamp][iphi].highEdge():-1);
300 wname += ",";
301 wname += nphi;
302 wname += "]";
303 int iW = jphi*neta*nside+jeta*nside+jside;
304 m_weight[theSampling][iW]=
305 new TProfile2D(wname,wname,
306 m_dimensions[isamp][ilogE].bins(),
307 m_dimensions[isamp][ilogE].lowEdge(),
308 m_dimensions[isamp][ilogE].highEdge(),
309 m_dimensions[isamp][ilogrho].bins(),
310 m_dimensions[isamp][ilogrho].lowEdge(),
311 m_dimensions[isamp][ilogrho].highEdge(),
312 m_dimensions[isamp][iweight].lowEdge(),
313 m_dimensions[isamp][iweight].highEdge(),
314 "spread");
315 if ( m_useInversionMethod ) {
316 m_weight[theSampling][iW]->SetYTitle("log10(#rho_{cell}^{true} (MeV/mm^{3}))");
317 m_weight[theSampling][iW]->SetZTitle("E_{reco}/E_{tot}");
318 }
319 else {
320 m_weight[theSampling][iW]->SetYTitle("log10(#rho_{cell} (MeV/mm^{3}))");
321 m_weight[theSampling][iW]->SetZTitle("E_{tot}/E_{reco}");
322 }
323 m_weight[theSampling][iW]->SetXTitle("log10(E_{clus} (MeV))");
324 }
325 }
326 }
327 }
328 }
329
330 ATH_CHECK( m_clusterCollName.initialize() );
332
333 return StatusCode::SUCCESS;
334}
#define ATH_MSG_FATAL(x)
static const std::vector< std::string > bins
MsgStream & msg() const
static const std::string & getSamplingName(const CaloSampling::CaloSample theSample)
Returns a string (name) for each CaloSampling.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ mapinsert()

void GetLCWeights::mapinsert ( const std::vector< Gaudi::Histo1DDef > & dims)
private

Definition at line 615 of file GetLCWeights.cxx.

615 {
616 for (unsigned int i=0;i<dims.size();i++) {
617 m_dimensionsmap[dims[0].title()+":"+dims[i].title()] = dims[i];
618 }
619}

◆ mapparse()

void GetLCWeights::mapparse ( )
private

Definition at line 621 of file GetLCWeights.cxx.

621 {
622
623 std::vector<int> theUsedSamplings(CaloSampling::Unknown,-1);
624
625 int nsamp(-1);
626
627 for (const std::pair<const std::string, Gaudi::Histo1DDef>& p : m_dimensionsmap) {
628 std::string_view dimname = std::string_view(p.first).substr(0,p.first.find(':'));
629 int theSampling(CaloSampling::Unknown);
630 for (unsigned int jsamp = 0;jsamp< CaloSampling::Unknown; jsamp++) {
632 theSampling = jsamp;
633 break;
634 }
635 }
636 if ( theSampling == CaloSampling::Unknown ) {
637 msg(MSG::ERROR) << "Calorimeter sampling " << dimname
638 << " is not a valid Calorimeter sampling name and will be ignored! "
639 << "Valid names are: ";
640 for (unsigned int jsamp = 0;jsamp< CaloSampling::Unknown; jsamp++) {
642 if ( jsamp < CaloSampling::Unknown-1)
643 msg() << ", ";
644 else
645 msg() << ".";
646 }
647 msg() << endmsg;
648 }
649 else {
650 if ( theUsedSamplings[theSampling] == -1 ) {
651 nsamp++;
652 theUsedSamplings[theSampling] = nsamp;
653 m_dimensions.resize(nsamp+1);
654 m_dimensions[nsamp].resize(0);
655 }
656 m_dimensions[theUsedSamplings[theSampling]].push_back(p.second);
657 ATH_MSG_DEBUG(" New Dimension for " << dimname << ": "
658 << p.second.title() << ", [" << p.second.lowEdge()
659 << ", " << p.second.highEdge()
660 << ", " << p.second.bins()
661 << "]");
662 }
663 }
664}
#define endmsg
#define ATH_MSG_DEBUG(x)

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_CalibrationHitContainerNames

SG::ReadHandleKeyArray<CaloCalibrationHitContainer> GetLCWeights::m_CalibrationHitContainerNames
private

vector of calibration hit container names to use.

The containers specified in this property should hold calibration hits inside the calorimeter systems.

Definition at line 138 of file GetLCWeights.h.

◆ m_ClassificationType

std::string GetLCWeights::m_ClassificationType
private

string to choose different classification types

Available options are "None": the input MC is expected to be just a single pion MC with one sort of particles; "ParticleID_EM" Gena's ParticleID classification (EM type objects) for the use of QCD MC; "ParticleID_HAD" Gena's ParticleID classification (HAD type objects) for the use of QCD MC;

Definition at line 175 of file GetLCWeights.h.

◆ m_ClassificationTypeNumber

int GetLCWeights::m_ClassificationTypeNumber
private

Definition at line 176 of file GetLCWeights.h.

◆ m_clusterCollName

SG::ReadHandleKey<xAOD::CaloClusterContainer> GetLCWeights::m_clusterCollName
private

Name of the CaloClusterContainer to use.

Definition at line 131 of file GetLCWeights.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_dimensions

std::vector<std::vector<Gaudi::Histo1DDef> > GetLCWeights::m_dimensions
private

definition of all dimensions used for each sampling

Since samplings can be present or not, the samplings itself are defined via the special first dimension which has to be exactly 1 bin with the title of the sampling and the bounds of the CaloSample enum.

The remaining dimensions are:

side: negative values for eta < 0 and positive for eta > 0; 1 bin from -1.5 to 1.5 for no side dependency

|eta|: the absolute value of eta; normally in ATLAS the bounds are within [0,5], most samplings need smaller ranges and even smaller ones for test beam setups.

phi: the phi range; 1 bin from -pi to pi for no phi dependency

log10(E_clus): the log10 of the cluster energy; typical range should be within the generated energy range of single pions with about 50% room to the maximum created energy - i.e. use log10(1 TeV) as max value if you generated up tp 2 TeV pions

log10(rho_cell): the cell energy density (either truth or reco); typical ranges are from -7 to 1

weight: the ratio E_true/E_rec (or E_rec/E_true for inversion method; the bounds define the level of truncation for the weights to suppress noise and bad sampling ratios. Typical bounds are 0.5 to 3,5, or 10 without inversion method, where 5 and 10 are used for HEC and Tile, respectively. With inversion mewthod the bounds are -2 to 3.

Definition at line 92 of file GetLCWeights.h.

◆ m_dimensionsmap

std::map<std::string,Gaudi::Histo1DDef> GetLCWeights::m_dimensionsmap
private

property to set all dimensions introduced above

Gaudi has only a map<string,Histo1DDef> to use as property. So the syntax for all dimensions introduced above is {'Sampling:Title': ('Title',Low,High,Bins), ... }.

Definition at line 100 of file GetLCWeights.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_isampmap

std::vector<std::vector<int> > GetLCWeights::m_isampmap
private

Vector of indices in m_dimensions for each sampling.

Internal list of indices in m_dimensions object.

Definition at line 106 of file GetLCWeights.h.

◆ m_NormalizationType

std::string GetLCWeights::m_NormalizationType
private

string to choose different normalization types

Available options are "Const": every cluster counts with weight 1; "Lin": Each cluster is weighted with E_calib_clus/E_calib_tot; "Log": Each cluster is weighted with log10(E_calib_clus/E_calib_tot)+2; "NClus": Each cluster is weighted with 1/TotalNumberOfClustersWithE_calib>0.

Definition at line 162 of file GetLCWeights.h.

◆ m_NormalizationTypeNumber

int GetLCWeights::m_NormalizationTypeNumber
private

Definition at line 164 of file GetLCWeights.h.

◆ m_outputFile

std::unique_ptr<TFile> GetLCWeights::m_outputFile
private

Output file to save histograms in.

Internal variable pointing to the output file.

Definition at line 126 of file GetLCWeights.h.

◆ m_outputFileName

std::string GetLCWeights::m_outputFileName
private

Name of the output file to save histograms in.

Use this property to set the name of the output file containing the Weights histograms.

Definition at line 120 of file GetLCWeights.h.

◆ m_useInversionMethod

bool GetLCWeights::m_useInversionMethod
private

flag to switch on/off the use of the inversion method

If true the inversion method is used - i.e. the weights are calculated as E_rec/E_true vs. E_true and not as E_true/E_rec vs. E_rec. If the inversion method is used the actual correction histogram has to be created in a final step after all histograms have been added by looping over the possible E_true values, calculating E_rec from the histogram and then filling E_true/E_rec vs. E_rec in the new weighting histogram.

Definition at line 150 of file GetLCWeights.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_weight

std::vector<std::vector<TProfile2D *> > GetLCWeights::m_weight
private

Vector of vector of actual histograms.

Internal lists of histograms for each possible sampling to fill and save.

Definition at line 113 of file GetLCWeights.h.


The documentation for this class was generated from the following files: