169 if (
fPath.Contains(
"eos"))
190 for (
size_t iBeam = 0; iBeam <
fBeams.size(); iBeam++)
191 for (
size_t iTarget = 0; iTarget <
fTargets.size(); iTarget++)
192 for (
size_t iTrigger = 0; iTrigger <
fTriggers.size(); iTrigger++)
193 nTotalGlobTrack[iBeam][iTarget][iTrigger] = 0;
195 if (!anal1 && !anal2 && !anal3)
211 pair<Bool_t, Int_t> isBeamInAnal = make_pair(
kFALSE, -1);
212 pair<Bool_t, Int_t> isTargetInAnal = make_pair(
kFALSE, -1);
213 pair<Bool_t, Int_t> isTriggerInAnal = make_pair(
kFALSE, -1);
221 for (
size_t iEle = 0; iEle <
fBeams.size(); iEle++) {
222 if (
fBeams[iEle] == beam) {
223 isBeamInAnal.first =
kTRUE;
224 isBeamInAnal.second = iEle;
229 for (
size_t iEle = 0; iEle <
fTargets.size(); iEle++) {
231 isTargetInAnal.first =
kTRUE;
232 isTargetInAnal.second = iEle;
237 for (
size_t iEle = 0; iEle <
fTriggers.size(); iEle++) {
239 isTriggerInAnal.first =
kTRUE;
240 isTriggerInAnal.second = iEle;
245 if (!isBeamInAnal.first || !isTargetInAnal.first || !isTriggerInAnal.first)
254 TString command =
"xrdcp -DIRedirCntTimeout 30 " +
fEosHost + path +
" .";
261 dst->
Add(path.Data());
292 UInt_t nEventsWithMoreThanOneTrack = 0;
299 if (iEvent % 10000 == 0)
300 cout <<
"Processing file# " << iDst <<
" Event# " << iEvent << endl;
304 nEventsWithMoreThanOneTrack++;
308 nEventsWithMoreThanOneTrack / 1e6);
316 if (iEvent % 10000 == 0)
317 cout <<
"Processing file# " << iDst <<
" Event# " << iEvent << endl;
320 h[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][0]->
Fill(vertex->
GetZ());
323 h[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][1]->
Fill(totMult);
326 nEventsWithMoreThanOneTrack++;
340 h[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][4]->
Fill(track->
GetP());
344 h[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][2]->
Fill(nPos);
347 h[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][3]->
Fill(nNeg);
352 TH2F* H0 = h4[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][0];
353 TH2F* H1 = h4[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][1];
354 TH2F* H2 = h4[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][2];
357 TH2F* beta400 = h4[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][3];
358 TH2F* beta700 = h4[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second][4];
361 TH1F** residuals = h5[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second];
367 if (iEvent % 10000 == 0)
368 cout <<
"Processing file# " << iDst <<
" Event# " << iEvent << endl;
371 nTotalGlobTrack[isBeamInAnal.second][isTargetInAnal.second][isTriggerInAnal.second] +=
394 BmnHit* tof400Hit =
nullptr;
395 BmnHit* tof700Hit =
nullptr;
420 if (mDch1 != -1 || mDch2 != -1 || mDch != -1) {
427 if (mTof1 != -1 && mTof2 != -1) {
434 if (mTof1 != -1 && mCsc != -1) {
441 if (mTof1 != -1 && (mDch != -1 || mDch1 != -1 || mDch2 != -1)) {
448 if (mTof2 != -1 && mCsc != -1) {
455 if (mTof2 != -1 && (mDch != -1 || mDch1 != -1 || mDch2 != -1)) {
462 if (mCsc != -1 && (mDch != -1 || mDch1 != -1 || mDch2 != -1)) {
469 if (mTof1 != -1 && mTof2 != -1 && mCsc != -1) {
476 if (mTof1 != -1 && mTof2 != -1 && (mDch != -1 || mDch1 != -1 || mDch2 != -1)) {
483 if (mTof2 != -1 && mCsc != -1 && (mDch != -1 || mDch1 != -1 || mDch2 != -1)) {
490 if (mTof1 != -1 && mCsc != -1 && (mDch != -1 || mDch1 != -1 || mDch2 != -1)) {
498 if (mTof1 != -1 && mTof2 != -1 && mCsc != -1 && (mDch != -1 || mDch1 != -1 || mDch2 != -1)) {
500 FindBinXY(
"tof400+tof700+csc+dch").second);
502 FindBinXY(
"tof400+tof700+csc+dch").second, alreadyFilled + 1.);
506 vector<BmnHit*> outerTrackerHits{tof400Hit, tof700Hit, cscHit, dchHit};
507 map<Int_t, pair<Double_t, Double_t>> detIdxResXY =
GetResiduals(track, outerTrackerHits);
511 pair<Double_t, Double_t> resid =
detector.second;
513 residuals[2 * idx]->
Fill(resid.first);
514 residuals[2 * idx + 1]->
Fill(resid.second);
532 for (
size_t iBeam = 0; iBeam <
fBeams.size(); iBeam++)
533 for (
size_t iTarget = 0; iTarget <
fTargets.size(); iTarget++)
534 for (
size_t iTrigger = 0; iTrigger <
fTriggers.size(); iTrigger++) {
535 if (nTotalGlobTrack[iBeam][iTarget][iTrigger] == 0)
538 TH2F* H0 = h4[iBeam][iTarget][iTrigger][0];
539 TH2F* H1 = h4[iBeam][iTarget][iTrigger][1];
540 TH2F* H2 = h4[iBeam][iTarget][iTrigger][2];
542 vector<TH2F*> H{H0, H1, H2};
544 for (
TH2F* histo : H) {
545 for (
Int_t iBinX = 1; iBinX < histo->GetNbinsX() + 1; iBinX++)
546 for (
Int_t iBinY = 1; iBinY < histo->GetNbinsY() + 1; iBinY++) {
547 Double_t contentBefore = histo->GetBinContent(iBinX, iBinY);
549 Double_t contentAfter = contentBefore / nTotalGlobTrack[iBeam][iTarget][iTrigger];
550 histo->SetBinContent(iBinX, iBinY, 100. * contentAfter);
560 map<Int_t, pair<Double_t, Double_t>> detResidXY;
561 pair<Double_t, Double_t> residXY = make_pair(-1000., -1000.);
563 for (
size_t iDet = 0; iDet < hits.size(); iDet++)
564 detResidXY[iDet] = residXY;
570 for (
size_t iDet = 0; iDet < hits.size(); iDet++) {
576 if (
fKalman->TGeoTrackPropagate(&par, hit->GetZ(), (Qp > 0) ? 2212 : -211,
nullptr,
nullptr,
fIsField)
580 Double_t xRes = par.GetX() - hit->GetX();
581 Double_t yRes = par.GetY() - hit->GetY();
583 residXY = make_pair(xRes, yRes);
585 detResidXY[iDet] = residXY;