@@ -41,6 +41,7 @@ using namespace o2::constants::physics;
4141using namespace o2 ::framework;
4242using namespace o2 ::framework::expressions;
4343
44+
4445enum SourceType {
4546 NotElec = 0 , // not electron
4647 DirectCharm = 1 , // electrons from prompt charm hadrons
@@ -82,22 +83,22 @@ struct HfTaskSingleElectron {
8283 Configurable<float > ptTrackMax{" ptTrackMax" , 10 ., " max pt cut" };
8384 Configurable<float > ptTrackMin{" ptTrackMin" , 0.5 , " min pt cut" };
8485 Configurable<float > etaTrackMax{" etaTrackMax" , 0.8 , " eta cut" };
85- Configurable<int > tpcNCrossedRowMin{ " tpcNCrossedRowMin " , 70 , " max of TPC n cluster crossed rows" };
86- Configurable<float > tpcNClsFoundOverFindableMin{ " tpcNClsFoundOverFindableMin " , 0.8 , " min # of TPC found/findable clusters" };
87- Configurable<float > tpcChi2perNClMax{ " tpcChi2perNClMax " , 4 ., " min # of tpc chi2 per clusters" };
88- Configurable<int > itsIBClsMin{ " itsIBClsMin " , 3 , " min # of its clusters in IB" };
89- Configurable<float > itsChi2perNClMax{ " itsChi2perNClMax " , 6 ., " min # of tpc chi2 per clusters" };
86+ Configurable<int > nCrossedRowTPCMin{ " nCrossedRowTPCMin " , 70 , " max of TPC n cluster crossed rows" };
87+ Configurable<float > nClsFoundOverFindableTpcMin{ " nClsFoundOverFindableTpcMin " , 0.8 , " min # of TPC found/findable clusters" };
88+ Configurable<float > Chi2pernClTpcMax{ " Chi2pernClTpcMax " , 4 ., " min # of tpc chi2 per clusters" };
89+ Configurable<int > ClsIBItsMin{ " ClsIBItsMin " , 3 , " min # of its clusters in IB" };
90+ Configurable<float > Chi2pernClItsMax{ " Chi2pernClItsMax " , 6 ., " min # of tpc chi2 per clusters" };
9091 Configurable<float > dcaxyMax{" dcaxyMax" , 1 ., " max of track dca in xy" };
9192 Configurable<float > dcazMax{" dcazMax" , 2 ., " max of track dca in z" };
92- Configurable<float > tofNSigmaMax{ " tofNSigmaMax " , 3 ., " max of tof nsigma" };
93- Configurable<float > tpcNSigmaMin{ " tpcNSigmaMin " , -1 ., " min of tpc nsigma" };
94- Configurable<float > tpcNSigmaMax{ " tpcNSigmaMax " , 3 ., " max of tpc nsigma" };
93+ Configurable<float > nSigmaTofMax{ " nSigmaTofMax " , 3 ., " max of tof nsigma" };
94+ Configurable<float > nSigmaTpcMin{ " nSigmaTpcMin " , -1 ., " min of tpc nsigma" };
95+ Configurable<float > nSigmaTPCMax{ " nSigmaTPCMax " , 3 ., " max of tpc nsigma" };
9596
9697 Configurable<int > nBinsP{" nBinsP" , 1500 , " number of bins of particle momentum" };
9798 Configurable<int > nBinsPt{" nBinsPt" , 100 , " N bins in pT histo" };
9899
99- Configurable<int > tpcNSigmaHadronMax{ " tpcNSigmaHadronMax " , -3 , " max of tpc hadron nsigma" };
100- Configurable<int > tpcNSigmaHadronMin{ " tpcNSigmaHadronMin " , -5 , " min of tpc hadron nsigma" };
100+ Configurable<int > nSigmaTpcHadronMax{ " nSigmaTpcHadronMax " , -3 , " max of tpc hadron nsigma" };
101+ Configurable<int > nSigmaTpcHadronMin{ " nSigmaTpcHadronMin " , -5 , " min of tpc hadron nsigma" };
101102
102103 // SliceCache
103104 SliceCache cache;
@@ -119,7 +120,7 @@ struct HfTaskSingleElectron {
119120 HistogramRegistry histos{" histos" };
120121
121122 void init (InitContext const &)
122- {
123+ {
123124 // AxisSpec
124125 const AxisSpec axisEvt{4 , 0 ., 4 ., " nEvents" };
125126 const AxisSpec axisNCont{100 , 0 ., 100 ., " nCont" };
@@ -131,36 +132,36 @@ struct HfTaskSingleElectron {
131132 const AxisSpec axisTrackIp{4000 , -0.2 , 0.2 , " dca" };
132133
133134 // create histograms
134- histos.add (" nEvents " , " Number of events" , kTH1D , {{1 , 0 ., 1 .}});
135- histos.add (" VtxZ " , " VtxZ ; cm; entries" , kTH1D , {axisPosZ});
136- histos.add (" etaTrack " , " etaTrack ; #eta; entries" , kTH1D , {axisEta});
137- histos.add (" ptTrack " , " #it{p}_{T} distribution of selected tracks; #it{p}_{T} (GeV/#it{c}); entries" , kTH1D , {axisPt});
135+ histos.add (" hNEvents " , " Number of events" , kTH1D , {{1 , 0 ., 1 .}});
136+ histos.add (" hVtxZ " , " hVtxZ ; cm; entries" , kTH1D , {axisPosZ});
137+ histos.add (" hEtaTrack " , " hEtaTrack ; #eta; entries" , kTH1D , {axisEta});
138+ histos.add (" hPtTrack " , " #it{p}_{T} distribution of selected tracks; #it{p}_{T} (GeV/#it{c}); entries" , kTH1D , {axisPt});
138139
139140 // QA plots for trigger track selection
140- histos.add (" tpcNClsTrack " , " tpcNClsTrack " , kTH1D , {{200 , 0 , 200 }});
141- histos.add (" tpcFoundFindableTrack " , " " , kTH1D , {{10 , 0 , 1 }});
142- histos.add (" tpcChi2Track " , " " , kTH1D , {{100 , 0 , 10 }});
143- histos.add (" itsIBClsTrack " , " " , kTH1D , {{10 , 0 , 10 }});
144- histos.add (" itsChi2Track " , " " , kTH1D , {{50 , 0 , 50 }});
145- histos.add (" dcaXYTrack " , " " , kTH1D , {{600 , -3 , 3 }});
146- histos.add (" dcaZTrack " , " " , kTH1D , {{600 , -3 , 3 }});
141+ histos.add (" hNClsTpcTrack " , " hNClsTpcTrack " , kTH1D , {{200 , 0 , 200 }});
142+ histos.add (" hNClsFoundFindableTpcTrack " , " " , kTH1D , {{10 , 0 , 1 }});
143+ histos.add (" hChi2TpcTrack " , " " , kTH1D , {{100 , 0 , 10 }});
144+ histos.add (" hibClsItsTrack " , " " , kTH1D , {{10 , 0 , 10 }});
145+ histos.add (" hChi2ItsTrack " , " " , kTH1D , {{50 , 0 , 50 }});
146+ histos.add (" hDcaXYTrack " , " " , kTH1D , {{600 , -3 , 3 }});
147+ histos.add (" hDcaZTrack " , " " , kTH1D , {{600 , -3 , 3 }});
147148
148149 // pid
149- histos.add (" tofNSigPt " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
150- histos.add (" tofNSigPtQA " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
151- histos.add (" tpcNSigP " , " " , kTH2D , {{axisP}, {axisNsig}});
152- histos.add (" tpcNSigPt " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
153- histos.add (" tpcNSigPAfterTofCut " , " " , kTH2D , {{axisP}, {axisNsig}});
154- histos.add (" tpcNSigPtAfterTofCut " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
155- histos.add (" tpcNSigPtQA " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
150+ histos.add (" hTofNSigPt " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
151+ histos.add (" hTofNSigPtQA " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
152+ histos.add (" hTPCNSigP " , " " , kTH2D , {{axisP}, {axisNsig}});
153+ histos.add (" hTPCNSigPt " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
154+ histos.add (" hTPCNSigPAfterTofCut " , " " , kTH2D , {{axisP}, {axisNsig}});
155+ histos.add (" hTPCNSigPtAfterTofCut " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
156+ histos.add (" hTPCNSigPtQA " , " " , kTH2D , {{axisPtEl}, {axisNsig}});
156157
157158 // track impact parameter
158- histos.add (" dcaTrack " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
159- histos.add (" dcaBeauty " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
160- histos.add (" dcaCharm " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
161- histos.add (" dcaDalitz " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
162- histos.add (" dcaConv " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
163- histos.add (" dcaHadron " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
159+ histos.add (" hDcaTrack " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
160+ histos.add (" hDcaBeauty " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
161+ histos.add (" hDcaChram " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
162+ histos.add (" hDcaDalitz " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
163+ histos.add (" hDcaConv " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
164+ histos.add (" hDcaHadron " , " " , kTH2D , {{axisPtEl}, {axisTrackIp}});
164165
165166 // QA plots for MC
166167 histos.add (" hPdgC" , " " , kTH1D , {{10001 , -0.5 , 10000.5 }});
@@ -179,23 +180,23 @@ struct HfTaskSingleElectron {
179180 return false ;
180181 }
181182
182- if (track.tpcNClsCrossedRows () < tpcNCrossedRowMin ) {
183+ if (track.tpcNClsCrossedRows () < nCrossedRowTPCMin ) {
183184 return false ;
184185 }
185186
186- if (track.tpcCrossedRowsOverFindableCls () < tpcNClsFoundOverFindableMin ) {
187+ if (track.tpcCrossedRowsOverFindableCls () < nClsFoundOverFindableTpcMin ) {
187188 return false ;
188189 }
189190
190- if (track.tpcChi2NCl () > tpcChi2perNClMax ) {
191+ if (track.tpcChi2NCl () > Chi2pernClTpcMax ) {
191192 return false ;
192193 }
193194
194- if (!(track.itsNClsInnerBarrel () == itsIBClsMin )) {
195+ if (!(track.itsNClsInnerBarrel () == ClsIBItsMin )) {
195196 return false ;
196197 }
197198
198- if (track.itsChi2NCl () > itsChi2perNClMax ) {
199+ if (track.itsChi2NCl () > Chi2pernClItsMax ) {
199200 return false ;
200201 }
201202
@@ -432,8 +433,8 @@ struct HfTaskSingleElectron {
432433 return ;
433434 }
434435
435- histos.fill (HIST (" VtxZ " ), collision.posZ ());
436- histos.fill (HIST (" nEvents " ), flagAnalysedEvt);
436+ histos.fill (HIST (" hVtxZ " ), collision.posZ ());
437+ histos.fill (HIST (" hNEvents " ), flagAnalysedEvt);
437438
438439 for (const auto & track : tracks) {
439440
@@ -445,40 +446,42 @@ struct HfTaskSingleElectron {
445446 continue ;
446447 }
447448
448- histos.fill (HIST (" etaTrack " ), track.eta ());
449- histos.fill (HIST (" ptTrack " ), track.pt ());
449+ histos.fill (HIST (" hEtaTrack " ), track.eta ());
450+ histos.fill (HIST (" hPtTrack " ), track.pt ());
450451
451- histos.fill (HIST (" tpcNClsTrack " ), track.tpcNClsCrossedRows ());
452- histos.fill (HIST (" tpcFoundFindableTrack " ), track.tpcCrossedRowsOverFindableCls ());
453- histos.fill (HIST (" tpcChi2Track " ), track.tpcChi2NCl ());
454- histos.fill (HIST (" itsIBClsTrack " ), track.itsNClsInnerBarrel ());
455- histos.fill (HIST (" itsChi2Track " ), track.itsChi2NCl ());
456- histos.fill (HIST (" dcaXYTrack " ), track.dcaXY ());
457- histos.fill (HIST (" dcaZTrack " ), track.dcaZ ());
452+ histos.fill (HIST (" hNClsTpcTrack " ), track.tpcNClsCrossedRows ());
453+ histos.fill (HIST (" hNClsFoundFindableTpcTrack " ), track.tpcCrossedRowsOverFindableCls ());
454+ histos.fill (HIST (" hChi2TpcTrack " ), track.tpcChi2NCl ());
455+ histos.fill (HIST (" hibClsItsTrack " ), track.itsNClsInnerBarrel ());
456+ histos.fill (HIST (" hChi2ItsTrack " ), track.itsChi2NCl ());
457+ histos.fill (HIST (" hDcaXYTrack " ), track.dcaXY ());
458+ histos.fill (HIST (" hDcaZTrack " ), track.dcaZ ());
458459
459- histos.fill (HIST (" tofNSigPt " ), track.pt (), track.tofNSigmaEl ());
460- histos.fill (HIST (" tpcNSigP " ), track.p (), track.tpcNSigmaEl ());
461- histos.fill (HIST (" tpcNSigPt " ), track.pt (), track.tpcNSigmaEl ());
460+ histos.fill (HIST (" hTofNSigPt " ), track.pt (), track.tofNSigmaEl ());
461+ histos.fill (HIST (" hTPCNSigP " ), track.p (), track.tpcNSigmaEl ());
462+ histos.fill (HIST (" hTPCNSigPt " ), track.pt (), track.tpcNSigmaEl ());
462463
463- if (std::abs (track.tofNSigmaEl ()) > tofNSigmaMax ) {
464+ if (std::abs (track.tofNSigmaEl ()) > nSigmaTofMax ) {
464465 continue ;
465466 }
466- histos.fill (HIST (" tofNSigPtQA " ), track.pt (), track.tofNSigmaEl ());
467- histos.fill (HIST (" tpcNSigPAfterTofCut " ), track.p (), track.tpcNSigmaEl ());
468- histos.fill (HIST (" tpcNSigPtAfterTofCut " ), track.pt (), track.tpcNSigmaEl ());
467+ histos.fill (HIST (" hTofNSigPtQA " ), track.pt (), track.tofNSigmaEl ());
468+ histos.fill (HIST (" hTPCNSigPAfterTofCut " ), track.p (), track.tpcNSigmaEl ());
469+ histos.fill (HIST (" hTPCNSigPtAfterTofCut " ), track.pt (), track.tpcNSigmaEl ());
469470
470- if (track.tpcNSigmaEl () < tpcNSigmaMin || track.tpcNSigmaEl () > tpcNSigmaMax ) {
471+ if (track.tpcNSigmaEl () < nSigmaTpcMin || track.tpcNSigmaEl () > nSigmaTPCMax ) {
471472 continue ;
472473 }
474+
475+
476+ if (track.tpcNSigmaEl () < nSigmaTpcHadronMax && track.tpcNSigmaEl () > nSigmaTpcHadronMin){
477+
478+ histos.fill (HIST (" hDcaHadron" ), track.pt (), track.dcaXY ());
473479
474- if (track.tpcNSigmaEl () < tpcNSigmaHadronMax && track.tpcNSigmaEl () > tpcNSigmaHadronMin) {
475-
476- histos.fill (HIST (" dcaHadron" ), track.pt (), track.dcaXY ());
477- }
480+ }
478481
479- histos.fill (HIST (" tpcNSigPtQA " ), track.pt (), track.tpcNSigmaEl ());
482+ histos.fill (HIST (" hTPCNSigPtQA " ), track.pt (), track.tpcNSigmaEl ());
480483
481- histos.fill (HIST (" dcaTrack " ), track.pt (), track.dcaXY ());
484+ histos.fill (HIST (" hDcaTrack " ), track.pt (), track.dcaXY ());
482485 }
483486 }
484487 PROCESS_SWITCH (HfTaskSingleElectron, processData, " For real data" , true );
@@ -497,67 +500,71 @@ struct HfTaskSingleElectron {
497500 return ;
498501 }
499502
500- histos.fill (HIST (" VtxZ " ), collision.posZ ());
501- histos.fill (HIST (" nEvents " ), flagAnalysedEvt);
503+ histos.fill (HIST (" hVtxZ " ), collision.posZ ());
504+ histos.fill (HIST (" hNEvents " ), flagAnalysedEvt);
502505
503506 for (const auto & track : tracks) {
504507
505508 if (!trackSel (track)) {
506509 continue ;
507510 }
508511
509- histos.fill (HIST (" etaTrack " ), track.eta ());
510- histos.fill (HIST (" ptTrack " ), track.pt ());
512+ histos.fill (HIST (" hEtaTrack " ), track.eta ());
513+ histos.fill (HIST (" hPtTrack " ), track.pt ());
511514
512- histos.fill (HIST (" tpcNClsTrack " ), track.tpcNClsCrossedRows ());
513- histos.fill (HIST (" tpcFoundFindableTrack " ), track.tpcCrossedRowsOverFindableCls ());
514- histos.fill (HIST (" tpcChi2Track " ), track.tpcChi2NCl ());
515- histos.fill (HIST (" itsIBClsTrack " ), track.itsNClsInnerBarrel ());
516- histos.fill (HIST (" dcaXYTrack " ), track.dcaXY ());
517- histos.fill (HIST (" dcaZTrack " ), track.dcaZ ());
515+ histos.fill (HIST (" hNClsTpcTrack " ), track.tpcNClsCrossedRows ());
516+ histos.fill (HIST (" hNClsFoundFindableTpcTrack " ), track.tpcCrossedRowsOverFindableCls ());
517+ histos.fill (HIST (" hChi2TpcTrack " ), track.tpcChi2NCl ());
518+ histos.fill (HIST (" hibClsItsTrack " ), track.itsNClsInnerBarrel ());
519+ histos.fill (HIST (" hDcaXYTrack " ), track.dcaXY ());
520+ histos.fill (HIST (" hDcaZTrack " ), track.dcaZ ());
518521
519- histos.fill (HIST (" tofNSigPt " ), track.pt (), track.tofNSigmaEl ());
520- histos.fill (HIST (" tpcNSigPt " ), track.pt (), track.tpcNSigmaEl ());
522+ histos.fill (HIST (" hTofNSigPt " ), track.pt (), track.tofNSigmaEl ());
523+ histos.fill (HIST (" hTPCNSigPt " ), track.pt (), track.tpcNSigmaEl ());
521524
522525 int mpdg; // electron source pdg code
523526 double mpt; // electron source pt
524527 int const source = getElecSource (track, mpt, mpdg);
525528
526529 if (source == DirectBeauty || source == BeautyCharm) {
527530 histos.fill (HIST (" hPdgB" ), mpdg);
528- histos.fill (HIST (" dcaBeauty " ), track.pt (), track.dcaXY ());
531+ histos.fill (HIST (" hDcaBeauty " ), track.pt (), track.dcaXY ());
529532 }
530533
531534 if (source == DirectCharm) {
532535 histos.fill (HIST (" hPdgC" ), mpdg);
533- histos.fill (HIST (" dcaCharm " ), track.pt (), track.dcaXY ());
536+ histos.fill (HIST (" hDcaChram " ), track.pt (), track.dcaXY ());
534537 }
535538
536539 if (source >= GammaPi0 && source <= GammaSigma) {
537540 histos.fill (HIST (" hPdgCo" ), mpdg);
538- histos.fill (HIST (" dcaConv " ), track.pt (), track.dcaXY ());
541+ histos.fill (HIST (" hDcaConv " ), track.pt (), track.dcaXY ());
539542 }
540543
541544 if (source >= Pi0 && source <= Sigma) {
542545 histos.fill (HIST (" hPdgDa" ), mpdg);
543- histos.fill (HIST (" dcaDalitz " ), track.pt (), track.dcaXY ());
546+ histos.fill (HIST (" hDcaDalitz " ), track.pt (), track.dcaXY ());
544547 }
545548
546- if (track.tpcNSigmaEl () < tpcNSigmaHadronMax && track.tpcNSigmaEl () > tpcNSigmaHadronMin)
547- histos.fill (HIST (" dcaHadron" ), track.pt (), track.dcaXY ());
548549
549- if (std::abs (track.tofNSigmaEl ()) > tofNSigmaMax) {
550+ if (track.tpcNSigmaEl () < nSigmaTpcHadronMax && track.tpcNSigmaEl () > nSigmaTpcHadronMin)
551+ histos.fill (HIST (" hDcaHadron" ), track.pt (), track.dcaXY ());
552+
553+
554+ if (std::abs (track.tofNSigmaEl ()) > nSigmaTofMax) {
550555 continue ;
551556 }
552- histos.fill (HIST (" tofNSigPtQA " ), track.pt (), track.tofNSigmaEl ());
553- histos.fill (HIST (" tpcNSigPtAfterTofCut " ), track.pt (), track.tpcNSigmaEl ());
557+ histos.fill (HIST (" hTofNSigPtQA " ), track.pt (), track.tofNSigmaEl ());
558+ histos.fill (HIST (" hTPCNSigPtAfterTofCut " ), track.pt (), track.tpcNSigmaEl ());
554559
555- if (track.tpcNSigmaEl () < tpcNSigmaMin || track.tpcNSigmaEl () > tpcNSigmaMax ) {
560+ if (track.tpcNSigmaEl () < nSigmaTpcMin || track.tpcNSigmaEl () > nSigmaTPCMax ) {
556561 continue ;
557562 }
558- histos.fill (HIST (" tpcNSigPtQA" ), track.pt (), track.tpcNSigmaEl ());
563+ histos.fill (HIST (" hTPCNSigPtQA" ), track.pt (), track.tpcNSigmaEl ());
564+
565+ histos.fill (HIST (" hDcaTrack" ), track.pt (), track.dcaXY ());
566+
559567
560- histos.fill (HIST (" dcaTrack" ), track.pt (), track.dcaXY ());
561568 }
562569 }
563570 PROCESS_SWITCH (HfTaskSingleElectron, processMc, " For real data" , false );
0 commit comments