97 TOFEventTimeChecker(std::shared_ptr<DataRequest> dr, std::shared_ptr<o2::base::GRPGeomRequest> gr,
bool useMC) : mDataRequest(dr), mGGCCDBRequest(gr), mUseMC(useMC) {}
115 static bool initOnceDone =
false;
119 for (
auto bc : bcs) {
129 gsl::span<const o2::tof::Cluster> mTOFClustersArrayInp;
130 std::vector<MyTrack> mMyTracks;
143 TProfile* mPBetavsPExpPi;
144 TProfile* mPBetavsPExpKa;
145 TProfile* mPBetavsPExpPr;
147 TProfile* mPMassvsPExpPi;
148 TProfile* mPMassvsPExpKa;
149 TProfile* mPMassvsPExpPr;
150 TH2F* mHTimevsResEvtimePi;
151 TH2F* mHEventTimevsResEvtime;
177 float mTrktimeRes = 0;
178 RecoContainer mRecoData;
179 std::shared_ptr<DataRequest> mDataRequest;
180 std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
188 for (
auto& track : tracks) {
193 double localTime = track.mSignalDouble;
201 localTime = track.mTrktime;
210 auto evtime = o2::tof::evTimeMaker<std::vector<MyTrack>,
MyTrack,
MyFilter>(tracks);
212 if (evtime.mEventTime - o2::tof::Utils::mLHCPhase < -2000 || evtime.mEventTime - o2::tof::Utils::mLHCPhase > 2000) {
216 const float cinv = 33.35641;
219 for (
auto& track : tracks) {
220 mT0 = evtime.mEventTime;
221 mT0Res = evtime.mEventTimeError;
223 float sumw = 1. / (mT0Res * mT0Res);
225 mT0 -= evtime.mWeights[nt] * evtime.mTrackTimes[nt];
226 sumw -= evtime.mWeights[nt];
228 mT0Res = sqrt(1. / sumw);
237 mSource = track.mSource;
241 mTof = track.tofSignal();
242 mExpDe = track.tofExpSignalDe();
243 mExpPi = track.tofExpSignalPi();
244 mExpKa = track.tofExpSignalKa();
245 mExpPr = track.tofExpSignalPr();
246 mIsProb = track.mIsProb;
247 mTrktime = track.mTrktime;
248 mTrktimeRes = track.mTrktimeRes;
257 if (mTof - mT0 - mExpPi < -5000) {
262 float beta = mL / (mTof - mT0) * cinv;
264 float betaexpPi = mL / mExpPi * cinv;
265 float betaexpKa = mL / mExpKa * cinv;
266 float betaexpPr = mL / mExpPr * cinv;
269 float mass = mP / beta * TMath::Sqrt(std::abs(1 - beta * beta));
270 float massexpPi = mP / betaexpPi * TMath::Sqrt(std::abs(1 - betaexpPi * betaexpPi));
271 float massexpKa = mP / betaexpKa * TMath::Sqrt(std::abs(1 - betaexpKa * betaexpKa));
272 float massexpPr = mP / betaexpPr * TMath::Sqrt(std::abs(1 - betaexpPr * betaexpPr));
274 if (massexpPi < 0.13) {
279 mHTimePi->Fill(mTof - mT0 - mExpPi);
280 mHTimeKa->Fill(mTof - mT0 - mExpKa);
281 mHTimePr->Fill(mTof - mT0 - mExpPr);
283 mHMassExpPi->Fill(massexpPi);
284 mHMassExpKa->Fill(massexpKa);
285 mHMassExpPr->Fill(massexpPr);
286 mHBetavsP->Fill(mP, beta);
287 mPBetavsPExpPi->Fill(mP, betaexpPi);
288 mPBetavsPExpKa->Fill(mP, betaexpKa);
289 mPBetavsPExpPr->Fill(mP, betaexpPr);
290 mHTimePivsP->Fill(mP, mTof - mT0 - mExpPi);
291 mHTimeKvsP->Fill(mP, mTof - mT0 - mExpKa);
292 mHTimePrvsP->Fill(mP, mTof - mT0 - mExpPr);
293 mHMassvsP->Fill(mP, mass);
294 mPMassvsPExpPi->Fill(mP, massexpPi);
295 mPMassvsPExpKa->Fill(mP, massexpKa);
296 mPMassvsPExpPr->Fill(mP, massexpPr);
297 if (mP > 0.7 && mP < 1.1) {
298 mHTimevsResEvtimePi->Fill(mT0Res, mTof - mT0 - mExpPi);
300 mHEventTimevsResEvtime->Fill(mT0Res, mT0);
324 const auto& srctrk =
array[gTrackId.getIndex()];
325 trk.
mPt = srctrk.getPt() * srctrk.getCharge();
326 trk.
mPTPC = srctrk.getP();
327 trk.
mP = srctrk.getP();
328 trk.
mEta = srctrk.getEta();
329 trk.
mPhi = srctrk.getPhi();
333 }
else if (gid.getSource() ==
GID::TPC) {
337 const auto& srctrk =
array[gTrackId.getIndex()];
338 trk.
mPt = srctrk.getPt() * srctrk.getCharge();
339 trk.
mPTPC = srctrk.getP();
340 trk.
mP = srctrk.getP();
341 trk.
mEta = srctrk.getEta();
342 trk.
mPhi = srctrk.getPhi();
348 const auto& srctrk =
array[gTrackId.getIndex()];
349 trk.
mPt = srctrk.getPt() * srctrk.getCharge();
350 trk.
mPTPC = srctrk.getP();
351 trk.
mP = srctrk.getP();
352 trk.
mEta = srctrk.getEta();
353 trk.
mPhi = srctrk.getPhi();
355 trk.
mTrktime = srctrk.getTimeMUS().getTimeStamp() * 1E6;
356 trk.
mTrktimeRes = srctrk.getTimeMUS().getTimeStampError() * 1E6;
362 const auto& srctrk =
array[gTrackId.getIndex()];
363 trk.
mPt = srctrk.getPt() * srctrk.getCharge();
364 trk.
mPTPC = srctrk.getP();
365 trk.
mP = srctrk.getP();
366 trk.
mEta = srctrk.getEta();
367 trk.
mPhi = srctrk.getPhi();
369 trk.
mTrktime = srctrk.getTimeMUS().getTimeStamp() * 1E6;
370 trk.
mTrktimeRes = srctrk.getTimeMUS().getTimeStampError() * 1E6;
375 const auto& srctrk =
array[gTrackId.getIndex()];
376 trk.
mPt = srctrk.getPt() * srctrk.getCharge();
377 trk.
mPTPC = srctrk.getP();
378 trk.
mP = srctrk.getP();
379 trk.
mEta = srctrk.getEta();
380 trk.
mPhi = srctrk.getPhi();
387 const auto& srctrk =
array[gTrackId.getIndex()];
388 trk.
mPt = srctrk.getPt() * srctrk.getCharge();
389 trk.
mPTPC = srctrk.getP();
390 trk.
mP = srctrk.getP();
391 trk.
mEta = srctrk.getEta();
392 trk.
mPhi = srctrk.getPhi();
398 const auto& srctrk =
array[gTrackId.getIndex()];
399 trk.
mPt = srctrk.getPt() * srctrk.getCharge();
400 trk.
mPTPC = srctrk.getP();
401 trk.
mP = srctrk.getP();
402 trk.
mEta = srctrk.getEta();
403 trk.
mPhi = srctrk.getPhi();
410 const auto& srctrk =
array[gTrackId.getIndex()];
411 trk.
mPt = srctrk.getPt() * srctrk.getCharge();
412 trk.
mPTPC = srctrk.getP();
413 trk.
mP = srctrk.getP();
414 trk.
mEta = srctrk.getEta();
415 trk.
mPhi = srctrk.getPhi();
421 const char*
sources[5] = {
"TPC",
"ITS-TPC",
"TPC-TRD",
"ITS-TPC-TRD",
"NONE"};
427 if (info.getL() < 370) {
431 trk.
mExpDe = info.getTOF(5);
441 int tofcl =
match.getIdxTOFCl();
443 double tofsignal =
match.getSignal();
451 trk.
mCh = mTOFClustersArrayInp[tofcl].getMainContributingChannel();
459 float tot = mTOFClustersArrayInp[tofcl].getTot();
480 mMyTracks.push_back(trk);
489 std::string dir = gSystem->GetWorkingDirectory();
490 if (dir.find(
"orbit") < dir.size()) {
491 dir.erase(0, dir.find(
"orbit") + 5);
492 dir.erase(dir.find(
"_"), dir.size());
493 while (dir.size() && dir[0] ==
'0') {
496 sscanf(dir.c_str(),
"%d", &mOrbit);
499 TFile* fsleewing = TFile::Open(
"localTimeSlewing.root");
501 mSlewing = (
TimeSlewing*)fsleewing->Get(
"ccdb_object");
504 mFout =
new TFile(
"TOFperformance.root",
"recreate");
506 mHTimePi =
new TH1F(
"HTimePi",
";t_{TOF} - t_{exp}^{#pi} (ps)", 500, -5000, 5000);
507 mHTimeKa =
new TH1F(
"HTimeKa",
";t_{TOF} - t_{exp}^{K} (ps)", 500, -5000, 5000);
508 mHTimePr =
new TH1F(
"HTimePr",
";t_{TOF} - t_{exp}^{p} (ps)", 500, -5000, 5000);
509 mHMass =
new TH1F(
"HMass",
";M (GeV/#it{c}^{2})", 1000, 0, 2.);
510 mHMassExpPi =
new TH1F(
"HMassExpPi",
";M(#beta_{exp}^{#pi}) (GeV/#it{c}^{2})", 1000, 0, 2.);
511 mHMassExpKa =
new TH1F(
"HMassExpKa",
";M(#beta_{exp}^{K}) (GeV/#it{c}^{2})", 1000, 0, 2.);
512 mHMassExpPr =
new TH1F(
"HMassExpPr",
";M(#beta_{exp}^{p}) (GeV/#it{c}^{2})", 1000, 0, 2.);
513 mHBetavsP =
new TH2F(
"HBetavsP",
";#it{p} (GeV/#it{c});TOF #beta", 1000, 0., 5, 1000, 0., 1.5);
514 mPBetavsPExpPi =
new TProfile(
"PBetavsPExpPi",
";#it{p} (GeV/#it{c}); #beta_{exp}^{#pi}", 1000, 0., 5, 0., 1.5);
515 mPBetavsPExpKa =
new TProfile(
"PBetavsPExpKa",
";#it{p} (GeV/#it{c}); #beta_{exp}^{K}", 1000, 0., 5, 0., 1.5);
516 mPBetavsPExpPr =
new TProfile(
"PBetavsPExpPr",
";#it{p} (GeV/#it{c}); #beta_{exp}^{p}", 1000, 0., 5, 0., 1.5);
517 mHTimePivsP =
new TH2F(
"HTimePivsP",
";#it{p} (GeV/#it{c});t_{TOF} - t_{exp}^{#pi} (ps)", 500, 0., 5, 500, -5000, 5000);
518 mHTimeKvsP =
new TH2F(
"HTimeKavsP",
";#it{p} (GeV/#it{c});t_{TOF} - t_{exp}^{K} (ps)", 500, 0., 5, 500, -5000, 5000);
519 mHTimePrvsP =
new TH2F(
"HTimePrvsP",
";#it{p} (GeV/#it{c});t_{TOF} - t_{exp}^{p} (ps)", 500, 0., 5, 500, -5000, 5000);
520 mHMassvsP =
new TH2F(
"HMassvsP",
";#it{p} (GeV/#it{c}); M (GeV/#it{c}^{2})", 1000, 0., 5, 1000, 0., 2.);
521 mPMassvsPExpPi =
new TProfile(
"PMassvsPExpPi",
";#it{p} (GeV/#it{c}); M(#beta_{exp}^{#pi}) [GeV/#it{c}^{2}]", 1000, 0., 5, 0., 2.);
522 mPMassvsPExpKa =
new TProfile(
"PMassvsPExpKa",
";#it{p} (GeV/#it{c}); M(#beta_{exp}^{K}) [GeV/#it{c}^{2}]", 1000, 0., 5, 0., 2.);
523 mPMassvsPExpPr =
new TProfile(
"PMassvsPExpPr",
";#it{p} (GeV/#it{c}); M(#beta_{exp}^{p}) [GeV/#it{c}^{2}]", 1000, 0., 5, 0., 2.);
524 mHTimevsResEvtimePi =
new TH2F(
"HTimevsResEvtimePi",
"0.7 < p < 1.1 GeV/#it{c};TOF event time resolution (ps);t_{TOF} - t_{exp}^{#pi} (ps)", 200, 0., 200, 500, -5000, 5000);
525 mHEventTimevsResEvtime =
new TH2F(
"HEventTimevsResEvtime",
";TOF event time resolution (ps); TOF event time (ps)", 100, 0, 200, 5000, -20000, 20000);
528 mTree =
new TTree(
"tree",
"tree");
529 mTree->Branch(
"orbit", &mOrbit,
"orbit/I");
530 mTree->Branch(
"ch", &mCh,
"ch/I");
531 mTree->Branch(
"isProb", &mIsProb,
"isProb/I");
532 mTree->Branch(
"p", &mP,
"p/F");
533 mTree->Branch(
"pt", &mPt,
"pt/F");
534 mTree->Branch(
"pTPC", &mPTPC,
"pTPC/F");
535 mTree->Branch(
"source", &mSource,
"source/I");
536 mTree->Branch(
"eta", &mEta,
"eta/F");
537 mTree->Branch(
"phi", &mPhi,
"phi/F");
538 mTree->Branch(
"chi2", &mChi2,
"chi2/F");
539 mTree->Branch(
"l", &mL,
"l/F");
540 mTree->Branch(
"tof", &mTof,
"tof/F");
541 mTree->Branch(
"t0", &mT0,
"t0/F");
542 mTree->Branch(
"t0res", &mT0Res,
"t0res/F");
543 mTree->Branch(
"trkTime", &mTrktime,
"trkTime/F");
544 mTree->Branch(
"trkTimeRes", &mTrktimeRes,
"trkTimeRes/F");
545 mTree->Branch(
"dx", &mDx,
"dx/F");
546 mTree->Branch(
"dz", &mDz,
"dz/F");
547 mTree->Branch(
"expDe", &mExpDe,
"expDe/F");
548 mTree->Branch(
"expPi", &mExpPi,
"expPi/F");
549 mTree->Branch(
"expKa", &mExpKa,
"expKa/F");
550 mTree->Branch(
"expPr", &mExpPr,
"expPr/F");