16 template <
typename R,
typename T>
19 parent->fMeasCount += ((dat.second) > 0) && (*raw > 0);
27 std::vector<std::string>
Keys;
42 template <
typename Raw,
typename Datum>
88 template <
typename T,
typename R,
typename N>
94 dRand1 = (int)(1000 *
p->fRnd.Rndm()) / 1000.0;
95 dRand2 = (int)(1000 *
p->fRnd.Gaus()) / 1000.0;
99 (
static_cast<double>(datum.first) -
static_cast<double>(running[(
p->fRunningIndex)[
CalFuncN]])) /
101 p->fRunningSquared[
CalFuncN] += (
static_cast<double>(datum.first) *
static_cast<double>(datum.first) -
102 (
static_cast<double>(running[(
p->fRunningIndex)[
CalFuncN]])) *
103 (
static_cast<double>(running[(
p->fRunningIndex)[
CalFuncN]]))) /
109 running[(
p->fRunningIndex)[
CalFuncN]] =
static_cast<double>(datum.first);
128 if ((p->fMean[CalFuncN].first) && (p->fMean[CalFuncN].second)) {
129 dMean = p->fMean[CalFuncN].first - p->fMean[CalFuncN].second;
134 if ((p->fStdDev[CalFuncN].first) && (p->fStdDev[CalFuncN].second)) {
135 dStdDev = p->fStdDev[CalFuncN].first / p->fStdDev[CalFuncN].second;
140 int CalFuncNLast = std::tuple_size<
decltype(p->fDatum)>::value;
141 p->fCalFunc[CalFuncN]->SetParameter(CalFuncNLast, n);
142 datum.second = p->fCalFunc[CalFuncN]->Eval(dRand1, dRand2, dStdDev, dMean);
143 p->fEffFunc.SetParameter(CalFuncN, datum.second);
148template <
class... Ts>
153 template <
typename T>
156 if (
o->CalParN <
o->CalFuncN) {
157 p->fCalFunc[
o->CalFuncN]->SetParameter(
158 o->CalParN,
p->fCalFunc[
o->CalParN]->Eval(
o->dRand1,
o->dRand2,
o->dStdDev,
o->dMean));
159 p->fPollGate[
o->CalFuncN]->SetParameter(
o->CalParN,
p->fCalFunc[
o->CalParN]->Eval(
o->dRand1,
o->dRand2));
162 p->fCalFunc[
o->CalFuncN]->SetParameter(
o->CalParN, par.first);
163 p->fPollGate[
o->CalFuncN]->SetParameter(
o->CalParN, par.first);
170template <
class... Ts>
175 return (fMeasCount >= fAtleast) ? kTRUE : kFALSE;
179template <
class... Ts>
182 std::vector<std::string> branchvec;
183 std::stringstream
ss(branches);
186 while (
ss >> branch) {
187 if (branchmap.find(branch) == branchmap.end()) {
188 throw std::runtime_error(
"Branch " + branch +
" defined in " + fName +
" not in raw tree");
190 branchvec.push_back(branch);
198 if (branchvec.size() !=
sizeof...(Ts)) {
199 throw std::length_error(
"Number branches found (" + std::to_string(branchvec.size()) +
") in: [" + branches +
200 "] does not equal detector declaration size" +
"in detector ID " + std::to_string(fID));
203 std::cout << fType <<
"::" << fID <<
"::" << fName <<
" [" << branches <<
"]" << std::endl;
209template <
class... Ts>
213 std::stringstream
ss(funcstrs);
215 std::vector<std::string> functions;
217 functions.push_back(func);
221 if (functions.size() !=
sizeof...(Ts)) {
222 throw std::length_error(
"Number calibration functions (" + std::to_string(functions.size()) +
223 ") does not equal detector declaration size.");
227 for (
const auto &itFuncStr : functions) {
229 ss << fType << fID <<
"_" << fName <<
"_" << num;
230 fCalFunc.push_back(std::make_shared<TFormula>(
ss.str().c_str(), itFuncStr.c_str()));
236template <
class... Ts>
240 std::stringstream
ss(pollstrs);
242 std::vector<std::string> functions;
244 functions.push_back(func);
247 if (functions.empty()) {
248 for (UInt_t i = 0; i <
sizeof...(Ts); ++i) {
249 functions.push_back(
"0");
252 if (functions.size() !=
sizeof...(Ts)) {
253 throw std::length_error(
"Number poll gates (" + std::to_string(functions.size()) +
254 ") does not equal detector declaration size.");
258 for (
const auto &itFuncStr : functions) {
260 ss << fType << fID <<
"_" << fName <<
"_" << num;
261 fPollGate.push_back(std::make_shared<TFormula>(
ss.str().c_str(), itFuncStr.c_str()));
267template <
class... Ts>
270 std::stringstream
ss;
271 ss << fType << fID <<
"_" << fName <<
"_eff";
272 fEffFunc = TFormula(
ss.str().c_str(), function.c_str());
276template <
class... Ts>
void ss(std::vector< int > indexes, TCanvas *canvas, Option_t *option)
TDetDefn(std::string t="", int id=-1, std::string n="", int I=50000)
void SetEffFunc(std::string function)
void Calibrate(ULong64_t eventNum=0)
void SetPtrs(std::map< std::string, void * > &branchmap, std::string branches)
void SetCalFuncs(std::string funcstrs)
void SetPollGates(std::string pollstrs)
void for_each_in_tuple(std::tuple< Ts... > &t, F f)
Applies function on each element of tuple.
void for_both_in_tuple(T1 &t1, T2 &t2, F f)
Applies function taking both elements of tuple as arguments.
CalFunctorInner(TDetDefn *p, CalFunctor *outer)
void operator()(T &datum, R &running, N n)
void operator()(Raw r, Datum &d)
std::vector< std::string > Keys
InterpretPointers(TDetDefn *p, std::map< std::string, void * > &m, std::vector< std::string > &k)
std::map< std::string, void * > PointerMap
UpdateGoodness(TDetDefn *p)
void operator()(R raw, T &dat)