Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
physics_benchmarks
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
EIC
benchmarks
physics_benchmarks
Commits
dae9dbbc
Commit
dae9dbbc
authored
Mar 2, 2021
by
Marshall Scott
Committed by
Sylvester Joosten
May 14, 2021
Browse files
Options
Downloads
Patches
Plain Diff
Updated functions and changed the ebeam sign
parent
0dcb7572
Branches
Branches containing commit
No related tags found
1 merge request
!37
Ongoing dis_electron Q2 analysis. An issue with Q2 being basically zero for the electrons.
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
benchmarks/dis/analysis/dis_electrons.cxx
+46
-110
46 additions, 110 deletions
benchmarks/dis/analysis/dis_electrons.cxx
with
46 additions
and
110 deletions
benchmarks/dis/analysis/dis_electrons.cxx
+
46
−
110
View file @
dae9dbbc
...
@@ -21,6 +21,9 @@
...
@@ -21,6 +21,9 @@
#include
<utility>
#include
<utility>
#include
<vector>
#include
<vector>
// Electron Beam energy
double
eBeamEnergy
;
// Get a vector of 4-momenta from the reconstructed data.
// Get a vector of 4-momenta from the reconstructed data.
inline
auto
momenta_from_reconstruction
(
const
std
::
vector
<
eic
::
ReconstructedParticleData
>&
parts
)
inline
auto
momenta_from_reconstruction
(
const
std
::
vector
<
eic
::
ReconstructedParticleData
>&
parts
)
{
{
...
@@ -32,101 +35,44 @@ inline auto momenta_from_reconstruction(const std::vector<eic::ReconstructedPart
...
@@ -32,101 +35,44 @@ inline auto momenta_from_reconstruction(const std::vector<eic::ReconstructedPart
return
momenta
;
return
momenta
;
}
}
// Convert PxPyPzMVector to PxPyPzEVector
// Finds particle with highest momentum within the event and returns the 4 Vector
inline
auto
convertMtoE
(
const
std
::
vector
<
ROOT
::
Math
::
PxPyPzMVector
>&
mom
)
inline
auto
find_scat_recon
(
const
std
::
vector
<
ROOT
::
Math
::
PxPyPzEVector
>&
mom
)
{
std
::
vector
<
ROOT
::
Math
::
PxPyPzEVector
>
momenta
{
mom
.
size
()};
std
::
transform
(
mom
.
begin
(),
mom
.
end
(),
momenta
.
begin
(),
[](
const
auto
&
part
)
{
return
ROOT
::
Math
::
PxPyPzEVector
{
part
.
Px
(),
part
.
Py
(),
part
.
Pz
(),
part
.
energy
()};
});
return
momenta
;
}
// Momentum sorting bool
bool
sort_mom_bool
(
ROOT
::
Math
::
PxPyPzEVector
&
mom1
,
ROOT
::
Math
::
PxPyPzEVector
&
mom2
)
{
return
mom1
.
energy
()
>
mom2
.
energy
();
}
// Momentunm sorting function
inline
auto
sort_momenta
(
const
std
::
vector
<
ROOT
::
Math
::
PxPyPzEVector
>&
mom
)
{
{
std
::
vector
<
ROOT
::
Math
::
PxPyPzEVector
>
sort_mom
=
mom
;
ROOT
::
Math
::
PxPyPzEVector
elec_cand
=
{
0
,
0
,
0
,
0
};
sort
(
sort_mom
.
begin
(),
sort_mom
.
end
(),
sort_mom_bool
);
for
(
auto
mom_cand
:
mom
)
{
return
sort_mom
;
if
(
mom_cand
.
E
()
>
elec_cand
.
E
())
{
elec_cand
=
mom_cand
;
}
}
// Q2 calculation from 4 Vector
inline
auto
Q2
(
const
std
::
vector
<
ROOT
::
Math
::
PxPyPzEVector
>&
mom
)
{
std
::
vector
<
double
>
Q2Vec
(
mom
.
size
());
ROOT
::
Math
::
PxPyPzEVector
beamMom
=
{
0
,
0
,
18
,
18
};
std
::
transform
(
mom
.
begin
(),
mom
.
end
(),
Q2Vec
.
begin
(),
[
beamMom
](
const
auto
&
part
)
{
return
-
(
part
-
beamMom
).
M2
();
});
return
Q2Vec
;
}
}
return
elec_cand
;
// Difference between two 4 Vectors
inline
auto
sub
(
const
std
::
vector
<
ROOT
::
Math
::
PxPyPzEVector
>&
mom1
,
const
std
::
vector
<
ROOT
::
Math
::
PxPyPzEVector
>&
mom2
)
{
std
::
vector
<
ROOT
::
Math
::
PxPyPzEVector
>
sub
(
mom1
.
size
());
for
(
int
i
=
0
;
i
<
sub
.
size
();
i
++
)
{
sub
[
i
]
=
mom1
[
i
]
-
mom2
[
i
];
}
return
sub
;
}
}
//
Multiplies a double by a gaussian distributed numbe
r
//
Finds particle with highest momentum within the event and returns the 4 Vecto
r
inline
auto
randomize
(
const
std
::
vector
<
double
>&
doubleVec
)
inline
auto
find_scat_sim
(
const
std
::
vector
<
ROOT
::
Math
::
PxPyPzMVector
>&
mom
)
{
{
std
::
vector
<
double
>
outVec
(
doubleVec
.
size
());
ROOT
::
Math
::
PxPyPzMVector
elec_cand
=
{
0
,
0
,
0
,
0
};
TRandom3
rand
;
for
(
auto
mom_cand
:
mom
)
{
std
::
transform
(
doubleVec
.
begin
(),
doubleVec
.
end
(),
outVec
.
begin
(),
if
(
mom_cand
.
energy
()
>
elec_cand
.
energy
())
{
[
&
rand
](
const
auto
&
indouble
)
{
return
indouble
*
rand
.
Gaus
(
1.0
,
0.2
);
});
elec_cand
=
mom_cand
;
return
outVec
;
}
}
// Simulation functions
/*
bool mom_sort_sim(dd4pod::Geant4ParticleData& part1, dd4pod::Geant4ParticleData& part2)
{
return (part1.psx*part1.psx + part1.psy*part1.psy + part1.psz*part1.psz >
part2.psx*part2.psx + part2.psy*part2.psy + part2.psz*part2.psz);
}
}
return
ROOT
::
Math
::
PxPyPzEVector
{
elec_cand
.
Px
(),
elec_cand
.
Py
(),
elec_cand
.
Pz
(),
inline auto momenta_from_sim(const std::vector<dd4pod::Geant4ParticleData>& parts)
elec_cand
.
energy
()};
{
std::vector<dd4pod::Geant4ParticleData> sort_parts = parts;
sort(sort_parts.begin(), sort_parts.end(), mom_sort_sim);
return sort_parts;
}
}
inline auto Q2_from_sim(const std::vector<dd4pod::Geant4ParticleData>& parts)
// Q2 calculation from 4 Vector
inline
auto
Q2
(
ROOT
::
Math
::
PxPyPzEVector
&
mom
)
{
{
std::vector<double> Q2Vec(parts.size());
ROOT
::
Math
::
PxPyPzEVector
beamMom
=
{
0
,
0
,
-
eBeamEnergy
,
eBeamEnergy
};
double beamEnergy = 18;
return
-
(
mom
-
beamMom
).
M2
();
std::transform(parts.begin(), parts.end(), Q2Vec.begin(), [beamEnergy](const auto& part) {
double energy = sqrt(part.psx * part.psx + part.psy * part.psy + part.psz * part.psz +
part.mass * part.mass);
double q2 = pow(beamEnergy - energy, 2.0) - part.psx * part.psx - part.psy * part.psy -
pow(part.psz - beamEnergy, 2.0);
return -q2;
});
return Q2Vec;
}
}
inline auto elec_PID_sim(const std::vector<dd4pod::Geant4ParticleData>& parts)
// Multiplies a double by a gaussian distributed number
inline
auto
randomize
(
double
&
inDouble
)
{
{
std::vector<dd4pod::Geant4ParticleData> electrons;
TRandom3
rand
;
for (auto part : parts) {
return
rand
.
Gaus
(
1.0
,
0.2
)
*
inDouble
;
if (part.pdgID == 11) {
electrons.push_back(part);
}
}
return electrons;
}
}
*/
int
dis_electrons
(
const
std
::
string
&
config_name
)
int
dis_electrons
(
const
std
::
string
&
config_name
)
{
{
...
@@ -139,6 +85,7 @@ int dis_electrons(const std::string& config_name)
...
@@ -139,6 +85,7 @@ int dis_electrons(const std::string& config_name)
const
std
::
string
detector
=
config
[
"detector"
];
const
std
::
string
detector
=
config
[
"detector"
];
std
::
string
output_prefix
=
config
[
"output_prefix"
];
std
::
string
output_prefix
=
config
[
"output_prefix"
];
const
std
::
string
test_tag
=
config
[
"test_tag"
];
const
std
::
string
test_tag
=
config
[
"test_tag"
];
eBeamEnergy
=
config
[
"ebeam"
];
fmt
::
print
(
fmt
::
emphasis
::
bold
|
fg
(
fmt
::
color
::
forest_green
),
fmt
::
print
(
fmt
::
emphasis
::
bold
|
fg
(
fmt
::
color
::
forest_green
),
"Running DIS electron analysis...
\n
"
);
"Running DIS electron analysis...
\n
"
);
...
@@ -200,44 +147,33 @@ int dis_electrons(const std::string& config_name)
...
@@ -200,44 +147,33 @@ int dis_electrons(const std::string& config_name)
*/
*/
auto
d0
=
d
.
Define
(
"p_recon"
,
momenta_from_reconstruction
,
{
"DummyReconstructedParticles"
})
auto
d0
=
d
.
Define
(
"p_recon"
,
momenta_from_reconstruction
,
{
"DummyReconstructedParticles"
})
.
Define
(
"p_recon_sort"
,
sort_momenta
,
{
"p_recon"
})
.
Define
(
"elec_recon"
,
find_scat_recon
,
{
"p_recon"
})
.
Define
(
"Q2_recon"
,
Q2
,
{
"p_recon_sort"
})
.
Define
(
"elec_recon_Q2"
,
Q2
,
{
"elec_recon"
})
.
Define
(
"Q2_recon_rand"
,
randomize
,
{
"Q2_recon"
})
.
Define
(
"elec_recon_Q2_rand"
,
randomize
,
{
"elec_recon_Q2"
})
.
Define
(
"elec_Q2_recon_rand"
,
"Q2_recon_rand[0]"
)
.
Define
(
"p_sim_M"
,
util
::
momenta_from_simulation
,
{
"mcparticles2"
})
.
Define
(
"p_sim_M"
,
util
::
momenta_from_simulation
,
{
"mcparticles2"
})
.
Define
(
"p_sim"
,
convertMtoE
,
{
"p_sim_M"
})
.
Define
(
"elec_sim"
,
find_scat_sim
,
{
"p_sim_M"
})
.
Define
(
"p_sim_sort"
,
sort_momenta
,
{
"p_sim"
})
.
Define
(
"elec_sim_Q2"
,
Q2
,
{
"elec_sim"
})
.
Define
(
"Q2_sim"
,
Q2
,
{
"p_sim_sort"
})
.
Define
(
"Q2_diff"
,
"(elec_recon_Q2_rand - elec_sim_Q2)/elec_sim_Q2"
);
.
Define
(
"elec_Q2_sim"
,
"Q2_sim[0]"
)
.
Define
(
"Q2_diff"
,
"(elec_Q2_recon_rand - elec_Q2_sim)/elec_Q2_sim"
)
.
Define
(
"p_diff"
,
sub
,
{
"p_recon"
,
"p_sim"
});
/*
.Define("electrons_sim", elec_PID_sim, {"sorted_sim"})
.Define("Q2_sim_elec_pid", Q2_from_sim, {"electrons_sim"})
.Define("elec_Q2_sim_pid", "Q2_sim_elec_pid[0]");
*/
// Testing script
// Testing script
/*
/*
auto dis = d0.Display({"
p_diff
"});
auto dis = d0.Display({"
elec_sim_Q2", "elec_recon_Q2
"});
//
dis -> Print();
dis -> Print();
cout << *d0.Max<double>("elec_
Q2_
recon_rand") << " " <<
cout << *d0.Max<double>("elec_recon_
Q2_
rand") << " " <<
*d0.Min<double>("elec_recon_Q2_rand") <<
*d0.M
in
<double>("elec_
Q2_recon_rand") << endl; cout
<< *d0.M
ax
<double>("elec_
Q2_
sim") <<
" "
endl; cout <<
*d0.M
ax
<double>("elec_
sim_Q2") << " "
<< *d0.M
in
<double>("elec_sim
_Q2
") <<
endl;
<< *d0.M
in
<double>("
elec_Q2_sim
") << endl;
cout
<< *d0.M
ax
<double>("
Q2_diff") << " " << *d0.Min<double>("Q2_diff
") << endl;
/**/
/**/
// cout << *d0.Count() << endl;
// cout << *d0.Count() << endl;
// Momentum
// Momentum
// auto h_mom_sim = d0.Histo1D({"h_mom_sim", "; GeV; counts", 100, 0, 50}, "mom_sim");
// auto h_mom_sim = d0.Histo1D({"h_mom_sim", "; GeV; counts", 100, 0, 50}, "mom_sim");
// auto h_mom_rec = d0.Histo1D({"h_mom_rec", "; GeV; counts", 100, 0, 50}, "mom_rec");
// auto h_mom_rec = d0.Histo1D({"h_mom_rec", "; GeV; counts", 100, 0, 50}, "mom_rec");
// Q2
// Q2
auto
h_Q2_sim
=
d0
.
Histo1D
({
"h_Q2_sim"
,
"; GeV; counts"
,
100
,
-
5
,
25
},
"elec_Q2_sim"
);
auto
h_Q2_sim
=
d0
.
Histo1D
({
"h_Q2_sim"
,
"; GeV; counts"
,
100
,
18000
,
25000
},
"elec_sim_Q2"
);
auto
h_Q2_rec
=
d0
.
Histo1D
({
"h_Q2_rec"
,
"; GeV; counts"
,
100
,
-
5
,
25
},
"elec_Q2_recon_rand"
);
auto
h_Q2_rec
=
d0
.
Histo1D
({
"h_Q2_rec"
,
"; GeV; counts"
,
100
,
18000
,
25000
},
"elec_recon_Q2_rand"
);
auto
h_Q2_res
=
d0
.
Histo1D
({
"h_Q2_res"
,
"; ; counts"
,
100
,
-
10
,
10
},
"Q2_diff"
);
auto
h_Q2_res
=
d0
.
Histo1D
({
"h_Q2_res"
,
"; ; counts"
,
100
,
-
10
,
10
},
"Q2_diff"
);
/*
TH1D *h_Q2_res = (TH1D *)h_Q2_sim -> Clone();
TH1D *h_Q2_rec_copy = (TH1D *)h_Q2_rec -> Clone();
h_Q2_res -> Scale(1.0 / h_Q2_res -> Integral() );
h_Q2_res -> Add(h_Q2_rec_copy, -1.0 / h_Q2_rec_copy -> Integral() );
*/
TFitResultPtr
f1
=
h_Q2_res
->
Fit
(
"gaus"
,
"S"
);
TFitResultPtr
f1
=
h_Q2_res
->
Fit
(
"gaus"
,
"S"
);
f1
->
Print
(
"V"
);
f1
->
Print
(
"V"
);
/*
/*
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
sign in
to comment