4#include "BmnNewFieldMap.h"
6#include <BmnGlobalTrack.h>
9#include <BmnKalmanFilter.h>
12#include <DstEventHeader.h>
131 sfIndices.second = input.sfIndices.second;
133 flParams.first = input.flParams.first;
134 flParams.second = input.flParams.second;
141 for (
auto it : input.usedStats)
144 for (
auto it : input.hits)
148 input.usedStats.clear();
150 if (input.eContainers)
151 input.eContainers =
nullptr;
168 map<Int_t, vector<pair<Double_t, Double_t>>>
gPairMap;
169 map<Int_t, vector<pair<Double_t, Double_t>>>
sPairMap;
273 pair<Double_t, Double_t> y = make_pair(0., 45.);
275 Double_t xLow = -80.;
278 for (Int_t iQp = 0; iQp < nQp; iQp++) {
279 TString Qp = (iQp == QpValue::pos) ?
"Q_{p} > 0" :
"Q_{p} < 0";
281 hEffGem[iQp] = new TEfficiency(Form(
"Detector# %s, Station# %d, %s", det.Data(), stat, Qp.Data()),
282 Form(
"Stat %d, %s; X [cm]; Y [cm]", stat, Qp.Data()), nBinsX, xLow, xUp,
283 nBinsY, y.first, y.second);
290 hEffGem1d = new TEfficiency**[nQp];
292 const Int_t nYRanges = pairs.find(stat)->second.size();
294 for (Int_t iQp = 0; iQp < nQp; iQp++) {
295 hEffGem1d[iQp] = new TEfficiency*[nYRanges];
297 TString Qp = (iQp == QpValue::pos) ?
"Q_{p} > 0" :
"Q_{p} < 0";
299 for (Int_t iRange = 0; iRange < nYRanges; iRange++) {
300 Double_t y0 = pairs.find(stat)->second.at(iRange).first;
301 Double_t y1 = pairs.find(stat)->second.at(iRange).second;
303 hEffGem1d[iQp][iRange] = new TEfficiency(
304 Form(
"Detector# %s, Station# %d, (%G < y < %G [cm]), %s", det.Data(), stat, y0, y1,
306 Form(
"Stat %d, (%G < y < %G [cm]), %s; X [cm]; #varepsilon", stat, y0, y1, Qp.Data()),
327 for (
Int_t iQp = 0; iQp < nQp; iQp++) {
328 TString Qp = (iQp == QpValue::pos) ?
"Q_{p} > 0" :
"Q_{p} < 0";
329 hEffSil[iQp] =
new TEfficiency(
Form(
"Detector# %s, Station# %d, %s", det.Data(), stat, Qp.
Data()),
330 Form(
"Stat %d, %s; X [cm]; Y [cm]", stat, Qp.
Data()), nBinsX,
331 getRanges(sil, stat)[0], getRanges(sil, stat)[1], nBinsY,
332 getRanges(sil, stat)[2], getRanges(sil, stat)[3]);
338 Form(
"Stat %d, %s; X [cm]; P [GeV/c]", stat, Qp.
Data()), nBinsX,
339 getRanges(sil, stat)[0], getRanges(sil, stat)[1], nBinsY, 0., 5.5);
348 const Int_t nYRanges = pairs.find(stat)->second.size();
350 for (
Int_t iQp = 0; iQp < nQp; iQp++) {
353 TString Qp = (iQp == QpValue::pos) ?
"Q_{p} > 0" :
"Q_{p} < 0";
355 for (
Int_t iRange = 0; iRange < nYRanges; iRange++) {
356 Double_t y0 = pairs.find(stat)->second.at(iRange).first;
357 Double_t y1 = pairs.find(stat)->second.at(iRange).second;
360 Form(
"Detector# %s, Station# %d, (%G < y < %G [cm]), %s", det.Data(), stat, y0, y1,
362 Form(
"Stat %d, (%G < y < %G [cm]), %s; X [cm]; #varepsilon", stat, y0, y1, Qp.
Data()),
363 nBinsX, getRanges(sil, stat)[0], getRanges(sil, stat)[1]);
377 else if (det.Contains(
"SILICON") && !hType.IsNull())
387 if (det.Contains(
"GEM") &&
hEffGem1d[qpBin][range])
389 else if (det.Contains(
"SIL") &&
hEffSil1d[qpBin][range])
413 vector<Double_t> tmp;
418 if (silEle->
station() == stat) {
419 tmp.push_back(silEle->
x().first);
420 tmp.push_back(silEle->
x().second);
421 tmp.push_back(silEle->
y().first);
422 tmp.push_back(silEle->
y().second);
464 vector<Double_t>
GetX() {
return x; }
466 vector<Double_t>
GetY() {
return y; }
494 map<
Int_t, vector<pair<Double_t, Double_t>>>,
495 map<
Int_t, vector<pair<Double_t, Double_t>>>);
550 if (z >
gem->GetStation(0)->GetZPosition() - 5.)
562 pair<FairTrackParam, FairTrackParam>,
563 pair<Double_t, Double_t>&);
569 for (
size_t iRange = 0; iRange < pairMap.find(stat)->second.size(); iRange++) {
570 Double_t min = pairMap.find(stat)->second.at(iRange).first;
571 Double_t max = pairMap.find(stat)->second.at(iRange).second;
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
#define ClassDef(name, id)
char * Form(const char *fmt,...)
void fillEfficiency(inputForEfficiency &&in)
void SetMinNHitsPerGlobTrack(Int_t nHits)
BmnKalmanFilter * fKalman
BmnNewFieldMap * fMagField
TClonesArray * fInnerHits
void Efficiency(TClonesArray *, TClonesArray *effSilicon, map< Int_t, vector< pair< Double_t, Double_t > > >, map< Int_t, vector< pair< Double_t, Double_t > > >)
BmnGemStripStationSet * gem
TClonesArray * fSiliconTracks
map< pair< Int_t, Int_t >, Double_t > fStatZ
BmnEfficiency & operator=(const BmnEfficiency &eff)
TString GetDetector(BmnHit *hit)
BmnSiliconStationSet * silicon
TClonesArray * fGemTracks
Double_t FindZ(Int_t stat)
Int_t FindBin(Double_t y, Int_t stat, map< Int_t, vector< pair< Double_t, Double_t > > > pairMap)
TClonesArray * fSiliconHits
void FillAcceptanceMaps(TClonesArray *, TClonesArray *SILs=nullptr)
void SetMinNHitsPerGemTrack(Int_t nHits)
map< pair< Int_t, Int_t >, vector< Double_t > > fStatAcceptance
TString GetGemZone(BmnHit *)
void SetMinNHitsPerSiliconTrack(Int_t nHits)
Bool_t isVirtualHitInAcceptance(Int_t, vector< BmnHit * >, pair< FairTrackParam, FairTrackParam >, pair< Double_t, Double_t > &)
TClonesArray * fGlobTracks
Field Map does not have any symmetries w.r.t coordinate axises.
TEfficiency *** hEffSil1d
EffStore2D(TString det, Int_t stat, map< Int_t, vector< pair< Double_t, Double_t > > > pairs)
TEfficiency * efficiency(Int_t qpBin=0, TString hType="", TString det="GEM")
vector< Double_t > getRanges(TClonesArray *sil, Int_t stat)
TEfficiency *** hEffGem1d
TEfficiency * efficiency4range(Int_t range, Int_t qpBin=0, TString det="GEM")
vector< TLorentzVector > CoordinatesAndEffs()
void IncreaseDenominatorByUnity()
EffStore(TString det, Int_t stat, TString z="")
void AddHitCoordinates(BmnHit *hit, Double_t eff=1.)
vector< TLorentzVector > hitPositionsAndEff
void IncreaseNominatorByUnity()
EffStore(TString det, Int_t stat, Int_t mod, TString z="")
InnerTrackerParams(Int_t stat, Double_t xMin, Double_t xMax, Double_t yMin, Double_t yMax)
pair< Double_t, Double_t > y()
pair< Double_t, Double_t > x()
InnerTrackerParams(Int_t stat, Int_t mod, Double_t x, Double_t y, Double_t z)
virtual ~InnerTrackerParams()
InnerTrackerParams(Int_t stat, Int_t mod, Double_t xMin, Double_t xMax, Double_t yMin, Double_t yMax)
vector< Double_t > GetY()
void SetXY(Double_t xR, Double_t yR)
vector< Double_t > GetX()
Residuals(TString det, Int_t stat, Int_t mod)
Int_t GetEntriesFast() const
TObject * UncheckedAt(Int_t i) const
friend friend class TClonesArray
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const