25 namespace fhicl {
class ParameterSet; }
53 TFile* fout_full =
new TFile(
"full.root",
"RECREATE");
54 TFile* fout_fit =
new TFile(
"fit.root",
"RECREATE");
60 long totExceptions = 0;
63 for(
unsigned int opdetIdx =0; opdetIdx < geom->
NOpDets(); ++opdetIdx){
70 TTree* tr_full =
new TTree(
"tr",
"tr");
73 tr_full->Branch(
"vox", &vox);
74 tr_full->Branch(
"dist", &dist);
75 tr_full->Branch(
"vis", &vis);
76 tr_full->Branch(
"taken", &taken);
77 tr_full->Branch(
"psi", &psi);
78 tr_full->Branch(
"theta", &theta);
79 tr_full->Branch(
"xpos", &xpos);
82 auto const opdetCenter = opdet.
GetCenter();
86 Visibility(
int vx,
int t,
float d,
float v,
float p,
float th,
float xp) : vox(vx), taken(t),
dist(d), vis(v), psi(p),
theta(th),
xpos(xp) {}
95 TCanvas *
c1=
new TCanvas(
"c1",
"c1");
97 c1->SetWindowSize(600, 600);
102 std::vector<Visibility> viss;
105 for(
unsigned int voxIdx = 0U; voxIdx < voxdef.
GetNVoxels(); ++voxIdx){
108 const double xyzvox[] = {voxvec.X(), voxvec.Y(), voxvec.Z()};
109 const double fc_y = 600;
110 const double fc_z = 1394;
111 const double fc_x = 350;
122 if((voxvec.X() - opdetCenter.X())<0){
123 psi = atan((voxvec.Y() - opdetCenter.Y())/(-voxvec.X() +opdetCenter.X()));
126 if(voxvec.X()<fc_x && voxvec.X()>-fc_x && voxvec.Y()<fc_y && voxvec.Y()>-fc_y && voxvec.Z()> -9 && voxvec.Z()<fc_z){
127 g.SetPoint(g.GetN(),
dist, vis*dist*
dist);
129 psi = atan((voxvec.Y() - opdetCenter.Y())/(voxvec.X() - opdetCenter.X()))* 180.0/
PI ;
130 theta = acos((voxvec.Z() - opdetCenter.Z())/dist) * 180.0/
PI;
132 if((voxvec.X() - opdetCenter.X())<0){
133 psi = atan((voxvec.Y() - opdetCenter.Y())/(-voxvec.X() +opdetCenter.X()));
138 viss.emplace_back(voxIdx, taken, dist, vis, psi, theta, xpos);
148 g.GetXaxis()->SetTitle(
"Distance (cm)");
149 g.GetYaxis()->SetTitle(
"Visibility #times r^{2}");
151 TF1* fit = g.GetFunction(
"expo");
155 fitres[0] = fit->GetParameter(0);
156 fitres[1] = fit->GetParameter(1);
161 TH1F
h(
"",
"", 200, 0, 20);
164 TTree* tr_fit =
new TTree(
"tr",
"tr");
165 tr_fit->Branch(
"vox", &vox);
166 tr_fit->Branch(
"dist", &dist);
167 tr_fit->Branch(
"vis", &vis);
168 tr_fit->Branch(
"taken", &taken);
169 tr_fit->Branch(
"psi", &psi);
170 tr_fit->Branch(
"theta", &theta);
171 tr_fit->Branch(
"xpos", &xpos);
174 for(
const Visibility& v: viss){
178 const double obs = v.vis / 2
e-5;
179 const double pred = fit->Eval(v.dist) / (v.dist*v.dist) / 2
e-5;
189 double chisq = 2*(pred-obs);
190 if(obs) chisq += 2*obs*log(obs/pred);
207 g2.SetPoint(g2.GetN(), v.dist, v.vis*v.dist*v.dist);
220 g2.SetMarkerStyle(7);
221 g2.SetMarkerColor(kRed);
222 gStyle->SetLabelSize(.04,
"XY");
223 gStyle->SetTitleSize(.04,
"XY");
229 h.GetXaxis()->SetTitle(
"#chi^{2}");
230 h.GetYaxis()->SetTitle(
"Counts");
231 gStyle->SetLabelSize(.04,
"XY");
232 gStyle->SetTitleSize(.04,
"XY");
234 std::cout <<
"Integral(90,-1)/Integral(all) = "<< h.Integral(90, -1) / h.Integral(0, -1) <<
std::endl;
235 std::cout <<
"*****************************" <<
std::endl;
236 totExceptions += h.Integral(90, -1);
237 totPts += h.Integral(0, -1);
243 std::cout << totExceptions <<
" exceptions from " << totPts <<
" points = " << (100.*totExceptions)/totPts <<
"%" << std::endl;
def analyze(root, level, gtrees, gbranches, doprint)
OpDetGeo const & OpDetGeoFromOpDet(unsigned int OpDet) const
Returns the geo::OpDetGeo object for the given detector number.
static constexpr double g
Representation of a region of space diced into voxels.
void analyze(const art::Event &e) override
void GetCenter(double *xyz, double localz=0.0) const
art framework interface to geometry description
#define DEFINE_ART_MODULE(klass)
unsigned int NOpDets() const
Number of OpDets in the whole detector.
Encapsulate the geometry of an optical detector.
const sim::PhotonVoxelDef & GetVoxelDef() const
double DistanceToPoint(geo::Point_t const &point) const
Returns the distance of the specified point from detector center [cm].
General LArSoft Utilities.
constexpr double dist(const TReal *x, const TReal *y, const unsigned int dimension)
Point GetCenter() const
Returns the center of the voxel (type Point).
unsigned int GetNVoxels() const
Returns the total number of voxels in the volume.
float GetVisibility(Point const &p, unsigned int OpChannel, bool wantReflected=false) const
QTextStream & endl(QTextStream &s)
PhotonVoxel GetPhotonVoxel(int ID) const