13 #include "art_root_io/TFileService.h" 
   14 #include "art/Framework/Services/Registry/ServiceHandle.h" 
   15 #include "art/Framework/Core/EDAnalyzer.h" 
   16 #include "art/Framework/Core/ModuleMacros.h" 
   17 #include "messagefacility/MessageLogger/MessageLogger.h" 
   18 #include "fhiclcpp/ParameterSet.h" 
   55     , fAltXAxis{pset.get<std::string>(
"alt_x_axis")}
 
   56     , 
fOpDet{pset.get<
int>(
"opdet")}
 
   60     std::cout<<
"Photon library analyzer constructor "<<std::endl;
 
   67     mf::LogInfo(
"PhotonLibraryAnalyzer")<<
"Analyzing photon library - begin"<< std::endl;
 
   70     art::ServiceHandle<art::TFileService const> 
tfs;
 
   71     art::ServiceHandle<PhotonVisibilityService const> pvs;
 
   72     art::ServiceHandle<geo::Geometry const> geom;
 
   74     int NOpDet = pvs->NOpChannels();
 
   80     mf::LogInfo(
"PhotonLibraryAnalyzer") << 
"UpperCorner: " << 
lar::dump::vector3D(UpperCorner) << 
"\n" 
   83     auto const [ XSteps, YSteps, ZSteps ] = TheVoxelDef.
GetSteps(); 
 
   87     tfs->make<TH3D>(
"FullVolume",
"FullVolume",
 
   88                     XSteps,LowerCorner.X(),UpperCorner.X(),
 
   89                     YSteps,LowerCorner.Y(),UpperCorner.Y(),
 
   90                     ZSteps,LowerCorner.Z(),UpperCorner.Z());
 
  107     mf::LogInfo(
"PhotonLibraryAnalyzer")<<
"Analyzing photon library - making historams"<< std::endl;
 
  110     if (
fAltXAxis == 
"Z") XProjection = tfs->make<TH2D>(
"XProjection",
"XProjection",ZSteps,0,ZSteps,YSteps,0,YSteps);
 
  111     else                  XProjection = tfs->make<TH2D>(
"XProjection",
"XProjection",YSteps,0,YSteps,ZSteps,0,ZSteps);
 
  112     TH2D* YProjection = tfs->make<TH2D>(
"YProjection",
"YProjection",XSteps,0,XSteps,ZSteps,0,ZSteps);
 
  113     TH2D* ZProjection = tfs->make<TH2D>(
"ZProjection",
"ZProjection",XSteps,0,XSteps,YSteps,0,YSteps);
 
  117     TH1D* VisByN = tfs->make<TH1D>(
"VisByN",
"VisByN", NOpDet, 0, NOpDet);
 
  120     if (
fAltXAxis == 
"Z") XInvisibles = tfs->make<TH2D>(
"XInvisibles",
"XInvisibles",ZSteps,0,ZSteps,YSteps,0,YSteps);
 
  121     else                  XInvisibles = tfs->make<TH2D>(
"XInvisibles",
"XInvisibles",YSteps,0,YSteps,ZSteps,0,ZSteps);
 
  122     TH2D* YInvisibles = tfs->make<TH2D>(
"YInvisibles",
"YInvisibles",XSteps,0,XSteps,ZSteps,0,ZSteps);
 
  123     TH2D* ZInvisibles = tfs->make<TH2D>(
"ZInvisibles",
"ZInvisibles",XSteps,0,XSteps,YSteps,0,YSteps);
 
  129     std::vector<TH2D*> TheXCrossSections;
 
  130     std::vector<TH2D*> TheYCrossSections;
 
  131     std::vector<TH2D*> TheZCrossSections;
 
  135       for(
unsigned int i=0; i!=XSteps; ++i)
 
  137         std::stringstream ss(
"");
 
  141           TheXCrossSections.push_back(tfs->make<TH2D>(ss.str().c_str(),ss.str().c_str(), ZSteps, 0,ZSteps, YSteps, 0,YSteps));
 
  143           TheXCrossSections.push_back(tfs->make<TH2D>(ss.str().c_str(),ss.str().c_str(), YSteps, 0,YSteps, ZSteps, 0,ZSteps));
 
  148       for(
unsigned int i=0; i!=YSteps; ++i)
 
  150         std::stringstream ss(
"");
 
  153         TheYCrossSections.push_back(tfs->make<TH2D>(ss.str().c_str(),ss.str().c_str(), XSteps, 0,XSteps, ZSteps, 0, ZSteps));
 
  157       for(
unsigned int i=0; i!=ZSteps; ++i)
 
  159         std::stringstream ss(
"");
 
  162         TheZCrossSections.push_back(tfs->make<TH2D>(ss.str().c_str(),ss.str().c_str(), XSteps, 0,XSteps, YSteps, 0,YSteps));
 
  168     std::vector<TH2D*> TheXProjections;
 
  169     std::vector<TH2D*> TheYProjections;
 
  170     std::vector<TH2D*> TheZProjections;
 
  174       mf::LogInfo(
"PhotonLibraryAnalyzer")<<
"Making projections for each of " << NOpDet << 
" photon detectors" << std::endl;
 
  176       for(
int i=0; i<NOpDet; ++i)
 
  180         sprintf(ss, 
"ProjXOpDet%d", i);
 
  182           TheXProjections.push_back(tfs->make<TH2D>(ss, ss, ZSteps, 0,ZSteps, YSteps, 0,YSteps));
 
  184           TheXProjections.push_back(tfs->make<TH2D>(ss, ss, YSteps, 0,YSteps, ZSteps, 0,ZSteps));
 
  186         sprintf(ss, 
"ProjYOpDet%d", i);
 
  187         TheYProjections.push_back(tfs->make<TH2D>(ss, ss, XSteps, 0,XSteps, ZSteps, 0, ZSteps));
 
  189         sprintf(ss, 
"ProjZOpDet%d", i);
 
  190         TheZProjections.push_back(tfs->make<TH2D>(ss, ss, XSteps, 0,XSteps, YSteps, 0,YSteps));
 
  195     mf::LogInfo(
"PhotonLibraryAnalyzer")<<
"Analyzing photon library - running through voxels "<< std::endl;
 
  198     for(
unsigned int i=0; i!=TheVoxelDef.
GetNVoxels(); ++i)
 
  200       if(i%reportnum==0) 
std::cout<<
"Photon library analyzer at voxel " << i<<std::endl;
 
  204       const float* Visibilities = pvs->GetLibraryEntries(i);
 
  205       size_t NOpChannels = pvs->NOpChannels();
 
  209         for(
size_t ichan=0; ichan!=NOpChannels; ++ichan)
 
  211           TotalVis+=Visibilities[ichan];
 
  215         TotalVis = Visibilities[
fOpDet];
 
  218       VisByN->Fill(NOpChannels);
 
  234         for(
size_t ichan=0; ichan!=NOpChannels; ++ichan) {
 
  235           TheXProjections.at(ichan)->Fill(
Coords[newX],
Coords[newY],Visibilities[ichan]);
 
  236           TheYProjections.at(ichan)->Fill(
Coords[0],
Coords[2],Visibilities[ichan]);
 
  237           TheZProjections.at(ichan)->Fill(
Coords[0],
Coords[1],Visibilities[ichan]);
 
  242       XProjection->Fill(
Coords[newX], 
Coords[newY], TotalVis);
 
  248     mf::LogInfo(
"PhotonLibraryAnalyzer")<<
"Analyzing photon library - end"<< std::endl;
 
auto vector3D(Vector3D const &v)
Returns a manipulator which will print the specified vector. 
void analyze(const art::Event &evt)
std::array< unsigned int, 3U > GetSteps() const 
Returns the number of voxels along each of the three dimensions. 
Representation of a region of space diced into voxels. 
PhotonLibraryAnalyzer(fhicl::ParameterSet const &pset)
unsigned int GetNVoxels() const 
Returns the total number of voxels in the volume. 
Definitions of voxel data structures. 
Utilities to dump objects into a stream. 
decltype(auto) GetRegionLowerCorner() const 
Returns the volume vertex (type Point) with the lowest coordinates. 
decltype(auto) GetRegionUpperCorner() const 
Returns the volume vertex (type Point) with the highest coordinates. 
std::array< int, 3U > GetVoxelCoords(int ID) const 
art::ServiceHandle< art::TFileService > tfs
art framework interface to geometry description 
BEGIN_PROLOG could also be cout