55 int findParticlesMode,
114 "K+",
"K-",
"p+",
"p-",
"K0s",
"#Lambda",
115 "#Lambda_bar",
"#Xi+",
"#Xi-",
"#Omega+",
"#Omega-"};
116 int partPdg[
nHistoMotherPdg] = {-11, 11, -13, 13, 211, -211, 321, -321, 2212,
117 -2212, 310, 3122, -3122, 3312, -3312, 3334, -3334};
128 for (
int iPart = 0; iPart <
fParteff.nParticles; ++iPart) {
138 TString parName[
nFitQA / 2] = {
"X",
"Y",
"Z",
"Px",
"Py",
"Pz",
"E",
"M"};
140 float xMax[
nFitQA / 2] = {0.15, 0.15, 0.03, 0.01, 0.01, 0.06, 0.06, 0.01};
142 for (
int iH = 0; iH <
nFitQA / 2; iH++) {
143 hFitDaughtersQA[iPart][iH] =
new TH1F((res + parName[iH]).Data(), (res + parName[iH]).Data(),
144 nBins, -xMax[iH], xMax[iH]);
146 new TH1F((pull + parName[iH]).Data(), (pull + parName[iH]).Data(), nBins, -6, 6);
154 TString parName[
nFitQA / 2] = {
"X",
"Y",
"Z",
"Px",
"Py",
"Pz",
"E",
"M"};
156 float xMax[
nFitQA / 2] = {0.15, 0.15, 1.2, 0.02, 0.02, 0.15, 0.15, 0.006};
158 for (
int iH = 0; iH <
nFitQA / 2; iH++) {
159 hFitQA[iPart][iH] =
new TH1F((res + parName[iH]).Data(), (res + parName[iH]).Data(), nBins,
160 -xMax[iH], xMax[iH]);
162 new TH1F((pull + parName[iH]).Data(), (pull + parName[iH]).Data(), nBins, -6, 6);
171 "c#tau",
"chi2ndf",
"chi2ndfTopo",
"prob",
"#theta",
178 "Life time c#tau [cm]",
186 int nBins[
nHistoPartParam] = {1000, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100};
188 fParteff.partMHistoMin[iPart], 0., 0., 0., -5., 0., 0., 0., 0., -2., -2., -5., -1.};
190 fParteff.partMHistoMax[iPart], 10., 3., 6., 55., 30., 20., 20., 1., 2., 2., 55., 35.};
194 new TH1F(parName[iH].Data(), parName[iH].Data(), nBins[iH], xMin[iH], xMax[iH]);
195 hPartParam[iPart][iH]->GetXaxis()->SetTitle(parAxisName[iH].Data());
199 new TH2F(
"y-p_{t}",
"y-p_{t}", nBins[3], xMin[3], xMax[3], nBins[2], xMin[2], xMax[2]);
201 hPartParam2D[iPart][0]->GetYaxis()->SetTitle(
"p_{t} [GeV/c]");
208 new TH1F((parName[iH]).Data(), (parName[iH]).Data(), nBins[iH], xMin[iH], xMax[iH]);
213 new TH2F(
"y-p_{t}",
"y-p_{t}", nBins[3], xMin[3], xMax[3], nBins[2], xMin[2], xMax[2]);
224 new TH1F((res + parName[iH]).Data(), (res + parName[iH]).Data(), nBinsQA,
225 -xMaxQA[iH], xMaxQA[iH]);
227 new TH1F((pull + parName[iH]).Data(), (pull + parName[iH]).Data(), nBinsQA, -6, 6);
238 new TH1F((parName[iH]).Data(), (parName[iH]).Data(), nBins[iH], xMin[iH], xMax[iH]);
239 hPartParamBG[iPart][iH]->GetXaxis()->SetTitle(parAxisName[iH].Data());
243 new TH2F(
"y-p_{t}",
"y-p_{t}", nBins[3], xMin[3], xMax[3], nBins[2], xMin[2], xMax[2]);
271 new TH1F((parName[iH]).Data(), (parName[iH]).Data(), nBins[iH], xMin[iH], xMax[iH]);
272 hPartParamGhost[iPart][iH]->GetXaxis()->SetTitle(parAxisName[iH].Data());
276 new TH2F(
"y-p_{t}",
"y-p_{t}", nBins[3], xMin[3], xMax[3], nBins[2], xMin[2], xMax[2]);
297 } Table[
nHistosPV] = {{
"PVResX",
"x_{rec}-x_{mc}, cm", 100, -0.006f, 0.006f},
298 {
"PVResY",
"y_{rec}-y_{mc}, cm", 100, -0.006f, 0.006f},
299 {
"PVResZ",
"z_{rec}-z_{mc}, cm", 100, -0.06f, 0.06f},
300 {
"PVPullX",
"Pull X", 100, -6.f, 6.f},
301 {
"PVPullY",
"Pull Y", 100, -6.f, 6.f},
302 {
"PVPullZ",
"Pull Z", 100, -6.f, 6.f}};
303 for (
int iHPV = 0; iHPV <
nHistosPV; ++iHPV) {
304 hPVFitQa[iHPV] =
new TH1F(Table[iHPV].name.data(), Table[iHPV].title.data(), Table[iHPV].n, Table[iHPV].l,
313 hMotherPdg[iMP] =
new TH1F(partNames[iMP].Data(), partNames[iMP].Data(), 10000, -5000, 5000);
322 TString chi2NamePart =
"Chi2Prim";
324 chi2NamePart +=
fParteff.partName[iPart].Data();
564 const bool useLinks = 1;
568 for (
int iH = 0; iH <
flistStsHits->GetEntriesFast(); iH++) {
575 vector<int> stsPointIds;
576 vector<int> stsPointIds_hit;
578 FairLink link = stsHit->GetLink(iL);
580 int NLinks2 = stsCluster->GetNLinks();
581 for (
int iL2 = 0; iL2 < NLinks2; iL2++) {
582 FairLink link2 = stsCluster->GetLink(iL2);
584 const int NLinks3 = stsDigi->GetNLinks();
585 for (
int iL3 = 0; iL3 < NLinks3; iL3++) {
586 FairLink link3 = stsDigi->GetLink(iL3);
587 int stsPointId = link3.GetIndex();
588 stsPointIds.push_back(stsPointId);
593 link = stsHit->GetLink(iL);
595 NLinks2 = stsCluster->GetNLinks();
596 for (
int iL2 = 0; iL2 < NLinks2; iL2++) {
597 FairLink link2 = stsCluster->GetLink(iL2);
599 const int NLinks3 = stsDigi->GetNLinks();
600 for (
int iL3 = 0; iL3 < NLinks3; iL3++) {
601 FairLink link3 = stsDigi->GetLink(iL3);
602 int stsPointId = link3.GetIndex();
604 if (!find(&(stsPointIds[0]), &(stsPointIds[stsPointIds.size()]), stsPointId))
613 for (
unsigned int iP = 0; iP < stsPointIds_hit.size(); iP++)
616 stsPointIds_hit.push_back(stsPointId);
883 for (
unsigned int iP = 0; iP <
fPF->GetParticles().size(); iP++) {
884 int iParticle =
fParteff.GetParticleIndex(
fPF->GetParticles()[iP].GetPDG());
902 Pt = TempPart.
GetPt();
917 dL =
sqrt(TempPart.
X() * TempPart.
X() + TempPart.
Y() * TempPart.
Y() + TempPart.
Z() * TempPart.
Z());
934 hPartParam[iParticle][12]->Fill(l[0] / dl[0]);
1021 for (
int iPar = 0; iPar < 3; iPar++) {
1030 for (
int iPar = 3; iPar < 7; iPar++) {
1040 Double_t res[8] = {0}, pull[8] = {0},
1041 mcParam[8] = {decayVtx[0], decayVtx[1], decayVtx[2], mcTrack.
GetPx(),
1043 for (
int iPar = 0; iPar < 7; iPar++) {
1044 res[iPar] = recParam[iPar] - mcParam[iPar];
1045 if (
fabs(errParam[iPar]) > 1.e-20)
1046 pull[iPar] = res[iPar] / errParam[iPar];
1048 res[7] = M - mcParam[7];
1049 if (
fabs(ErrM) > 1.e-20)
1050 pull[7] = res[7] / ErrM;
1052 for (
int iPar = 0; iPar < 8; iPar++) {
1053 hFitQA[iParticle][iPar]->Fill(res[iPar]);
1054 hFitQA[iParticle][iPar + 8]->Fill(pull[iPar]);
1060 for (
int iD = 0; iD < mcPart.
NDaughters(); ++iD) {
1084 for (
int iPar = 0; iPar < 7; iPar++) {
1090 res[iPar] = Daughter.
GetParameter(iPar) - mcParam[iPar];
1091 if (
fabs(error) > 1.e-20)
1092 pull[iPar] = res[iPar] / error;
1094 res[7] = M - mcParam[7];
1095 if (
fabs(ErrM) > 1.e-20)
1096 pull[7] = res[7] / ErrM;
1098 for (
int iPar = 0; iPar < 8; iPar++) {
1105 float mcPVx[3] = {0.f};
1106 for (
int iMC = 0; iMC <
flistMCTracks->GetEntriesFast(); ++iMC) {
1119 for (
unsigned int iHPV = 0; iHPV < 3; ++iHPV)
1121 for (
unsigned int iHPV = 3; iHPV < 6; ++iHPV)
1122 hPVFitQa[iHPV]->Fill(dRPVp[iHPV - 3]);
1130 if (histoIndex != -1) {
1131 if (motherId > -1) {
1141 for (
unsigned int iP = 0; iP <
fPF->GetParticles().size(); iP++) {
1143 const unsigned int NRDaughters = rPart.
NDaughters();
1144 if (NRDaughters > 1)
1158 float chiPrim =
fPF->GetChiPrim()[iP];
void MatchParticles()
Procedure for match Reconstructed and MC Particles. Should be called before Performances.
CbmKFParticlesFinderQA(CbmKFParticlesFinder *pf=0, Int_t iVerbose=1, int findParticlesMode=1, int perf=3, const char *name="CbmKFParticlesFinderQA", const char *title="Cbm KF Particles Finder QA")
void GetDistanceToVertexLine(const KFParticleBaseSIMD &Vertex, fvec &l, fvec &dl, fvec *isParticleFromVertex=0) const