ATLAS Offline Software
Functions
ISF_HitAnalysis.cxx File Reference
#include "./ISF_HitAnalysis.h"
#include "ISF_FastCaloSimEvent/TFCSTruthState.h"
#include "ISF_FastCaloSimEvent/TFCSExtrapolationState.h"
#include "LArSimEvent/LArHitContainer.h"
#include "CaloDetDescr/CaloDetDescrElement.h"
#include "AthenaPoolUtilities/AthenaAttributeList.h"
#include "CaloIdentifier/CaloIdManager.h"
#include "CaloIdentifier/LArEM_ID.h"
#include "CaloIdentifier/LArFCAL_ID.h"
#include "CaloIdentifier/LArHEC_ID.h"
#include "TileConditions/TileInfo.h"
#include "TileDetDescr/TileDetDescrManager.h"
#include "CaloIdentifier/TileID.h"
#include "TileIdentifier/TileHWID.h"
#include "TileSimEvent/TileHit.h"
#include "TileSimEvent/TileHitVector.h"
#include "TrackRecord/TrackRecordCollection.h"
#include "CaloEvent/CaloCellContainer.h"
#include "CaloEvent/CaloClusterCellLinkContainer.h"
#include "xAODCaloEvent/CaloClusterContainer.h"
#include "xAODCaloEvent/CaloCluster.h"
#include "ISF_FastCaloSimEvent/FCS_StepInfoCollection.h"
#include "GeneratorObjects/McEventCollection.h"
#include "CaloDetDescr/CaloDepthTool.h"
#include "TrkParameters/TrackParameters.h"
#include "TrkSurfaces/CylinderSurface.h"
#include "TrkSurfaces/DiscSurface.h"
#include "TrkSurfaces/DiscBounds.h"
#include "TrkExInterfaces/IExtrapolator.h"
#include "TrkMaterialOnTrack/EnergyLoss.h"
#include "TrkGeometry/TrackingGeometry.h"
#include "HepPDT/ParticleData.hh"
#include "TTree.h"
#include "TFile.h"
#include "TString.h"
#include "TVector3.h"
#include <sstream>
#include <algorithm>
#include <cmath>
#include <functional>
#include <iostream>

Go to the source code of this file.

Functions

StatusCode ISF_HitAnalysis::initialize ATLAS_NOT_THREAD_SAFE ()
 Install fatal handler with default options. More...
 

Function Documentation

◆ ATLAS_NOT_THREAD_SAFE()

StatusCode ISF_HitAnalysis::initialize ATLAS_NOT_THREAD_SAFE ( )
inline

Install fatal handler with default options.

This is meant to be easy to call from python via ctypes.

Install fatal handler with default options.

getLorentzAngle() Read LorentzAngle from HIST and write out into local DB

getBSErrors() Read BSErrors from Monitoring HIST and write out into local DB

getEfficiency() Read Efficiency from Monitoring HIST and write out into local DB

getRawOccupancy() Read RawOccupancy from Monitoring HIST and write out into local DB

getNoiseOccupancy() Read NoiseOccupancy from HIST and write out into local DB

getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats

now add branches and leaves to the tree

now add branches and leaves to the tree

Definition at line 121 of file ISF_HitAnalysis.cxx.

122 {
123  ATH_MSG_VERBOSE( "Initializing ISF_HitAnalysis" );
124  //
125  // Register the callback(s):
126  //
127  ATH_CHECK(m_geoModel.retrieve());
128  ATH_CHECK(detStore()->retrieve(m_tileMgr));
129  ATH_CHECK(detStore()->retrieve(m_tileID));
130 
131  const CaloIdManager* caloIdManager{nullptr};
132  ATH_CHECK(detStore()->retrieve(caloIdManager));
133  m_larEmID=caloIdManager->getEM_ID();
134  if(m_larEmID==nullptr)
135  throw std::runtime_error("ISF_HitAnalysis: Invalid LAr EM ID helper");
136  m_larFcalID=caloIdManager->getFCAL_ID();
137  if(m_larFcalID==nullptr)
138  throw std::runtime_error("ISF_HitAnalysis: Invalid FCAL ID helper");
139  m_larHecID=caloIdManager->getHEC_ID();
140  if(m_larHecID==nullptr)
141  throw std::runtime_error("ISF_HitAnalysis: Invalid HEC ID helper");
142  m_tileID=caloIdManager->getTileID();
143  if(m_tileID==nullptr)
144  throw std::runtime_error("ISF_HitAnalysis: Invalid Tile ID helper");
145 
146  ATH_CHECK( m_fSamplKey.initialize() );
147 
148  ATH_CHECK(detStore()->retrieve(m_tileHWID));
149  ATH_CHECK( m_tileSamplingFractionKey.initialize() );
150 
151  ATH_CHECK( m_tileCablingSvc.retrieve() );
152  m_tileCabling = m_tileCablingSvc->cablingService();
153 
154  ATH_CHECK(m_caloMgrKey.initialize());
155 
156  // Get TimedExtrapolator ***************************************************************************************************
157  if (!m_extrapolator.empty() && m_extrapolator.retrieve().isFailure()) {
158  return StatusCode::FAILURE;
159  }
160  ATH_MSG_DEBUG("Extrapolator retrieved "<< m_extrapolator);
161 
162  ATH_CHECK(m_calo_tb_coord.retrieve());
163  ATH_MSG_VERBOSE("retrieved " << m_calo_tb_coord);
164 
165  if( detStore()->contains< AthenaAttributeList >( m_MC_DIGI_PARAM ) )
166  {
168  if( detStore()->regFcn( &ISF_HitAnalysis::updateMetaData, this, aptr,m_MC_DIGI_PARAM, true ).isFailure() )
169  {
170  ATH_MSG_ERROR( "Could not register callback for "<< m_MC_DIGI_PARAM );
171  return StatusCode::FAILURE;
172  }
173  }
174  else
175  {
176  ATH_MSG_WARNING( "MetaData not found for "<< m_MC_DIGI_PARAM );
177  }
178 
179  if(detStore()->contains< AthenaAttributeList >( m_MC_SIM_PARAM ) )
180  {
182  if( detStore()->regFcn( &ISF_HitAnalysis::updateMetaData, this, aptr,m_MC_SIM_PARAM, true ).isFailure() )
183  {
184  ATH_MSG_ERROR( "Could not register callback for "<< m_MC_SIM_PARAM );
185  return StatusCode::FAILURE;
186  }
187  }
188  else {
189  ATH_MSG_WARNING( "MetaData not found for "<< m_MC_SIM_PARAM );
190  }
191 
192  // Get FastCaloSimCaloExtrapolation
193  ATH_CHECK (m_FastCaloSimCaloExtrapolation.retrieve());
194 
195  // Grab the Ntuple and histogramming service for the tree
196  ATH_CHECK(m_thistSvc.retrieve());
197 
198  //#########################
199  ATH_CHECK(m_partPropSvc.retrieve());
200 
201  m_particleDataTable = (HepPDT::ParticleDataTable*) m_partPropSvc->PDT();
202  if(m_particleDataTable == nullptr) {
203  ATH_MSG_ERROR("PDG table not found");
204  return StatusCode::FAILURE;
205  }
206  //#########################
207  std::unique_ptr<TFile> dummyFile = std::unique_ptr<TFile>(TFile::Open("dummyFile.root", "RECREATE")); //This is added to suppress the error messages about memory-resident trees
208  m_tree = new TTree("FCS_ParametrizationInput", "FCS_ParametrizationInput");
209  std::string fullNtupleName = "/"+m_ntupleFileName+"/"+m_ntupleTreeName;
210  StatusCode sc = m_thistSvc->regTree(fullNtupleName, m_tree);
211  if (sc.isFailure() || !m_tree )
212  {
213  ATH_MSG_ERROR("Unable to register TTree: " << fullNtupleName);
214  return StatusCode::FAILURE;
215  }
216 
218  if (m_tree)
219  {
220  ATH_MSG_INFO("Successfull registered TTree: " << fullNtupleName);
221  //initialize the variables before creating the branches
222  m_hit_x = new std::vector<float>;
223  m_hit_y = new std::vector<float>;
224  m_hit_z = new std::vector<float>;
225  m_hit_energy = new std::vector<float>;
226  m_hit_time = new std::vector<float>;
227  m_hit_identifier = new std::vector<Long64_t>;
228  m_hit_cellidentifier = new std::vector<Long64_t>;
229  m_islarbarrel = new std::vector<bool>;
230  m_islarendcap = new std::vector<bool>;
231  m_islarhec = new std::vector<bool>;
232  m_islarfcal = new std::vector<bool>;
233  m_istile = new std::vector<bool>;
234  m_hit_sampling = new std::vector<int>;
235  m_hit_samplingfraction = new std::vector<float>;
236 
237  m_truth_energy = new std::vector<float>;
238  m_truth_px = new std::vector<float>;
239  m_truth_py = new std::vector<float>;
240  m_truth_pz = new std::vector<float>;
241  m_truth_pdg = new std::vector<int>;
242  m_truth_barcode = new std::vector<int>;
243  m_truth_vtxbarcode = new std::vector<int>;
244 
245  m_cluster_energy = new std::vector<float>;
246  m_cluster_eta = new std::vector<float>;
247  m_cluster_phi = new std::vector<float>;
248  m_cluster_size = new std::vector<unsigned>;
249  m_cluster_cellID = new std::vector<std::vector<Long64_t > >;
250 
251  m_cell_identifier = new std::vector<Long64_t>;
252  m_cell_energy = new std::vector<float>;
253  m_cell_sampling = new std::vector<int>;
254 
255  m_g4hit_energy = new std::vector<float>;
256  m_g4hit_time = new std::vector<float>;
257  m_g4hit_identifier = new std::vector<Long64_t>;
258  m_g4hit_cellidentifier = new std::vector<Long64_t>;
259  m_g4hit_samplingfraction = new std::vector<float>;
260  m_g4hit_sampling = new std::vector<int>;
261 
262  m_total_cell_e = 0;
263  m_total_hit_e = 0;
264  m_total_g4hit_e = 0;
265 
266  m_final_cell_energy = new std::vector<Float_t>;
267  m_final_hit_energy = new std::vector<Float_t>;
268  m_final_g4hit_energy = new std::vector<Float_t>;
269 
270  m_newTTC_entrance_eta = new std::vector<std::vector<float> >;
271  m_newTTC_entrance_phi = new std::vector<std::vector<float> >;
272  m_newTTC_entrance_r = new std::vector<std::vector<float> >;
273  m_newTTC_entrance_z = new std::vector<std::vector<float> >;
274  m_newTTC_entrance_detaBorder = new std::vector<std::vector<float> >;
275  m_newTTC_entrance_OK = new std::vector<std::vector<bool> >;
276  m_newTTC_back_eta = new std::vector<std::vector<float> >;
277  m_newTTC_back_phi = new std::vector<std::vector<float> >;
278  m_newTTC_back_r = new std::vector<std::vector<float> >;
279  m_newTTC_back_z = new std::vector<std::vector<float> >;
280  m_newTTC_back_detaBorder = new std::vector<std::vector<float> >;
281  m_newTTC_back_OK = new std::vector<std::vector<bool> >;
282  m_newTTC_mid_eta = new std::vector<std::vector<float> >;
283  m_newTTC_mid_phi = new std::vector<std::vector<float> >;
284  m_newTTC_mid_r = new std::vector<std::vector<float> >;
285  m_newTTC_mid_z = new std::vector<std::vector<float> >;
286  m_newTTC_mid_detaBorder = new std::vector<std::vector<float> >;
287  m_newTTC_mid_OK = new std::vector<std::vector<bool> >;
288  m_newTTC_IDCaloBoundary_eta = new std::vector<float>;
289  m_newTTC_IDCaloBoundary_phi = new std::vector<float>;
290  m_newTTC_IDCaloBoundary_r = new std::vector<float>;
291  m_newTTC_IDCaloBoundary_z = new std::vector<float>;
292  m_newTTC_Angle3D = new std::vector<float>;
293  m_newTTC_AngleEta = new std::vector<float>;
294 
295  m_MuonEntryLayer_E = new std::vector<float>;
296  m_MuonEntryLayer_px = new std::vector<float>;
297  m_MuonEntryLayer_py = new std::vector<float>;
298  m_MuonEntryLayer_pz = new std::vector<float>;
299  m_MuonEntryLayer_x = new std::vector<float>;
300  m_MuonEntryLayer_y = new std::vector<float>;
301  m_MuonEntryLayer_z = new std::vector<float>;
302  m_MuonEntryLayer_pdg = new std::vector<int>;
303 
304  // Optional branches
305  if(m_saveAllBranches){
306  m_tree->Branch("HitX", &m_hit_x);
307  m_tree->Branch("HitY", &m_hit_y);
308  m_tree->Branch("HitZ", &m_hit_z);
309  m_tree->Branch("HitE", &m_hit_energy);
310  m_tree->Branch("HitT", &m_hit_time);
311  m_tree->Branch("HitIdentifier", &m_hit_identifier);
312  m_tree->Branch("HitCellIdentifier", &m_hit_cellidentifier);
313  m_tree->Branch("HitIsLArBarrel", &m_islarbarrel);
314  m_tree->Branch("HitIsLArEndCap", &m_islarendcap);
315  m_tree->Branch("HitIsHEC", &m_islarhec);
316  m_tree->Branch("HitIsFCAL", &m_islarfcal);
317  m_tree->Branch("HitIsTile", &m_istile);
318  m_tree->Branch("HitSampling", &m_hit_sampling);
319  m_tree->Branch("HitSamplingFraction", &m_hit_samplingfraction);
320 
321  m_tree->Branch("CellIdentifier", &m_cell_identifier);
322  m_tree->Branch("CellE", &m_cell_energy);
323  m_tree->Branch("CellSampling", &m_cell_sampling);
324 
325  m_tree->Branch("G4HitE", &m_g4hit_energy);
326  m_tree->Branch("G4HitT", &m_g4hit_time);
327  m_tree->Branch("G4HitIdentifier", &m_g4hit_identifier);
328  m_tree->Branch("G4HitCellIdentifier", &m_g4hit_cellidentifier);
329  m_tree->Branch("G4HitSamplingFraction",&m_g4hit_samplingfraction);
330  m_tree->Branch("G4HitSampling", &m_g4hit_sampling);
331  }
332 
333  //CaloHitAna output variables
334  m_tree->Branch("TruthE", &m_truth_energy);
335  m_tree->Branch("TruthPx", &m_truth_px);
336  m_tree->Branch("TruthPy", &m_truth_py);
337  m_tree->Branch("TruthPz", &m_truth_pz);
338  m_tree->Branch("TruthPDG", &m_truth_pdg);
339  m_tree->Branch("TruthBarcode", &m_truth_barcode);
340  m_tree->Branch("TruthVtxBarcode", &m_truth_vtxbarcode);
341 
342  if(m_doClusterInfo){
343  m_tree->Branch("ClusterE", &m_cluster_energy);
344  m_tree->Branch("ClusterEta", &m_cluster_eta);
345  m_tree->Branch("ClusterPhi", &m_cluster_phi);
346  m_tree->Branch("ClusterSize", &m_cluster_size);
347  m_tree->Branch("ClusterCellID", &m_cluster_cellID);
348  }
349 
350  m_oneeventcells = new FCS_matchedcellvector;
351  if(m_doAllCells){
352  m_tree->Branch("AllCells", &m_oneeventcells);
353  }
354 
355  //write cells per layer
356  if(m_doLayers){
357  for (Int_t i = 0; i < MAX_LAYER; i++)
358  {
359  TString branchname = "Sampling_";
360  branchname += i;
361  m_layercells[i] = new FCS_matchedcellvector;
362  m_tree->Branch(branchname, &m_layercells[i]);
363  }
364  }
365 
366  if(m_doLayerSums){
367  //write also energies per layer:
368  m_tree->Branch("cell_energy", &m_final_cell_energy);
369  m_tree->Branch("hit_energy", &m_final_hit_energy);
370  m_tree->Branch("g4hit_energy", &m_final_g4hit_energy);
371 
372  //This is a duplicate of cell_energy[25]
373  m_tree->Branch("total_cell_energy", &m_total_cell_e);
374  m_tree->Branch("total_hit_energy", &m_total_hit_e);
375  m_tree->Branch("total_g4hit_energy", &m_total_g4hit_e);
376  }
377 
378  m_tree->Branch("newTTC_back_eta",&m_newTTC_back_eta);
379  m_tree->Branch("newTTC_back_phi",&m_newTTC_back_phi);
380  m_tree->Branch("newTTC_back_r",&m_newTTC_back_r);
381  m_tree->Branch("newTTC_back_z",&m_newTTC_back_z);
382  m_tree->Branch("newTTC_back_detaBorder",&m_newTTC_back_detaBorder);
383  m_tree->Branch("newTTC_back_OK",&m_newTTC_back_OK);
384  m_tree->Branch("newTTC_entrance_eta",&m_newTTC_entrance_eta);
385  m_tree->Branch("newTTC_entrance_phi",&m_newTTC_entrance_phi);
386  m_tree->Branch("newTTC_entrance_r",&m_newTTC_entrance_r);
387  m_tree->Branch("newTTC_entrance_z",&m_newTTC_entrance_z);
388  m_tree->Branch("newTTC_entrance_detaBorder",&m_newTTC_entrance_detaBorder);
389  m_tree->Branch("newTTC_entrance_OK",&m_newTTC_entrance_OK);
390  m_tree->Branch("newTTC_mid_eta",&m_newTTC_mid_eta);
391  m_tree->Branch("newTTC_mid_phi",&m_newTTC_mid_phi);
392  m_tree->Branch("newTTC_mid_r",&m_newTTC_mid_r);
393  m_tree->Branch("newTTC_mid_z",&m_newTTC_mid_z);
394  m_tree->Branch("newTTC_mid_detaBorder",&m_newTTC_mid_detaBorder);
395  m_tree->Branch("newTTC_mid_OK",&m_newTTC_mid_OK);
396  m_tree->Branch("newTTC_IDCaloBoundary_eta",&m_newTTC_IDCaloBoundary_eta);
397  m_tree->Branch("newTTC_IDCaloBoundary_phi",&m_newTTC_IDCaloBoundary_phi);
398  m_tree->Branch("newTTC_IDCaloBoundary_r",&m_newTTC_IDCaloBoundary_r);
399  m_tree->Branch("newTTC_IDCaloBoundary_z",&m_newTTC_IDCaloBoundary_z);
400  m_tree->Branch("newTTC_Angle3D",&m_newTTC_Angle3D);
401  m_tree->Branch("newTTC_AngleEta",&m_newTTC_AngleEta);
402 
403  m_tree->Branch("MuonEntryLayer_E",&m_MuonEntryLayer_E);
404  m_tree->Branch("MuonEntryLayer_px",&m_MuonEntryLayer_px);
405  m_tree->Branch("MuonEntryLayer_py",&m_MuonEntryLayer_py);
406  m_tree->Branch("MuonEntryLayer_pz",&m_MuonEntryLayer_pz);
407  m_tree->Branch("MuonEntryLayer_x",&m_MuonEntryLayer_x);
408  m_tree->Branch("MuonEntryLayer_y",&m_MuonEntryLayer_y);
409  m_tree->Branch("MuonEntryLayer_z",&m_MuonEntryLayer_z);
410  m_tree->Branch("MuonEntryLayer_pdg",&m_MuonEntryLayer_pdg);
411  }
412  dummyFile->Close();
413  return StatusCode::SUCCESS;
414 } //initialize
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
RTTAlgmain.branchname
string branchname
Definition: RTTAlgmain.py:60
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CaloIdManager
This class initializes the Calo (LAr and Tile) offline identifiers.
Definition: CaloIdManager.h:45
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FCS_matchedcellvector
Definition: FCS_Cell.h:73
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
DataHandle< AthenaAttributeList >
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ISF_HitAnalysis::updateMetaData
StatusCode updateMetaData(IOVSVC_CALLBACK_ARGS)
Definition: ISF_HitAnalysis.cxx:79