Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:17:41

0001 #include "LightCollectionModel.h"
0002 
0003 #include <fun4all/Fun4AllServer.h>
0004 
0005 #include <ffamodules/CDBInterface.h>
0006 
0007 #include <phool/recoConsts.h>
0008 
0009 #include <TAxis.h>  // for TAxis
0010 #include <TFile.h>
0011 #include <TH1.h>
0012 #include <TH2.h>
0013 #include <TObject.h>  // for TObject
0014 #include <TSystem.h>
0015 
0016 #include <cassert>
0017 #include <iostream>
0018 
0019 LightCollectionModel::~LightCollectionModel()
0020 {
0021   delete data_grid_light_guide_efficiency;
0022   delete data_grid_fiber_trans;
0023 }
0024 
0025 void LightCollectionModel::load_data_from_CDB(
0026     const std::string &domain,
0027     const std::string &histogram_light_guide_model,
0028     const std::string &histogram_fiber_model)
0029 {
0030   recoConsts *rc = recoConsts::instance();
0031   std::string url = CDBInterface::instance()->getUrl(domain);
0032   if (url.empty())
0033   {
0034     std::cout << "No calibration for domain " << domain << " for timestamp " << rc->get_uint64Flag("TIMESTAMP") << std::endl;
0035     gSystem->Exit(1);
0036   }
0037   TFile *fin = TFile::Open(url.c_str());
0038   if (!fin)
0039   {
0040     std::cout << "could not open " << url << std::endl;
0041     gSystem->Exit(1);
0042   }
0043   delete data_grid_light_guide_efficiency;
0044   data_grid_light_guide_efficiency = dynamic_cast<TH2 *>(fin->Get(histogram_light_guide_model.c_str()));
0045   assert(data_grid_light_guide_efficiency);
0046   data_grid_light_guide_efficiency->SetDirectory(nullptr);
0047   delete data_grid_fiber_trans;
0048   data_grid_fiber_trans = dynamic_cast<TH1 *>(fin->Get(histogram_fiber_model.c_str()));
0049   assert(data_grid_fiber_trans);
0050   data_grid_fiber_trans->SetDirectory(nullptr);
0051   delete fin;
0052 }
0053 
0054 void LightCollectionModel::load_data_file(
0055     const std::string &input_file,
0056     const std::string &histogram_light_guide_model,
0057     const std::string &histogram_fiber_model)
0058 {
0059   TFile *fin = TFile::Open(input_file.c_str());
0060 
0061   assert(fin);
0062   assert(fin->IsOpen());
0063 
0064   delete data_grid_light_guide_efficiency;
0065   data_grid_light_guide_efficiency = dynamic_cast<TH2 *>(fin->Get(histogram_light_guide_model.c_str()));
0066   assert(data_grid_light_guide_efficiency);
0067   data_grid_light_guide_efficiency->SetDirectory(nullptr);
0068 
0069   delete data_grid_fiber_trans;
0070   data_grid_fiber_trans = dynamic_cast<TH1 *>(fin->Get(histogram_fiber_model.c_str()));
0071   assert(data_grid_fiber_trans);
0072   data_grid_fiber_trans->SetDirectory(nullptr);
0073 
0074   delete fin;
0075 }
0076 
0077 double LightCollectionModel::get_light_guide_efficiency(const double x_fraction, const double y_fraction)
0078 {
0079   assert(data_grid_light_guide_efficiency);
0080   assert(x_fraction >= 0);
0081   assert(x_fraction <= 1);
0082   assert(y_fraction >= 0);
0083   assert(y_fraction <= 1);
0084 
0085   const double eff = data_grid_light_guide_efficiency->Interpolate(x_fraction,
0086                                                                    y_fraction);
0087 
0088   if (!data_grid_light_guide_efficiency_verify)
0089   {
0090     data_grid_light_guide_efficiency_verify = new TH2F("data_grid_light_guide_efficiency_verify",
0091                                                        "light collection efficiency as used in LightCollectionModel;x positio fraction;y position fraction",  //
0092                                                        100, 0., 1., 100, 0., 1.);
0093     Fun4AllServer::instance()->registerHisto(data_grid_light_guide_efficiency_verify);
0094   }
0095 
0096   data_grid_light_guide_efficiency_verify->SetBinContent(                        //
0097       data_grid_light_guide_efficiency_verify->GetXaxis()->FindBin(x_fraction),  //
0098       data_grid_light_guide_efficiency_verify->GetYaxis()->FindBin(y_fraction),  //
0099       eff                                                                        //
0100   );
0101 
0102   return eff;
0103 }
0104 
0105 double LightCollectionModel::get_fiber_transmission(const double z_distance)
0106 {
0107   assert(data_grid_fiber_trans);
0108 
0109   const double eff = data_grid_fiber_trans->Interpolate(z_distance);
0110   if (!data_grid_fiber_trans_verify)
0111   {
0112     data_grid_fiber_trans_verify = new TH1F("data_grid_fiber_trans",
0113                                             "SCSF-78 Fiber Transmission as used in LightCollectionModel;position in fiber (cm);Effective transmission",
0114                                             100, -15, 15);
0115     Fun4AllServer::instance()->registerHisto(data_grid_fiber_trans_verify);
0116   }
0117 
0118   data_grid_fiber_trans_verify->SetBinContent(                        //
0119       data_grid_fiber_trans_verify->GetXaxis()->FindBin(z_distance),  //
0120       eff                                                             //
0121   );
0122 
0123   return eff;
0124 }