@@ -28,80 +28,133 @@ using namespace o2;
2828using namespace o2 ::framework;
2929using namespace o2 ::framework::expressions;
3030
31- struct TOFPIDQATask {
31+ #define TRACKSELECTION \
32+ UChar_t clustermap = i.itsClusterMap(); \
33+ bool issel = (i.tpcNClsFindable() > 70 ) && (i.flags() & 0x4 ) && (TESTBIT(clustermap, 0 ) || TESTBIT(clustermap, 1 )); \
34+ issel = issel && (i.flags() & 0x2000 ); \
35+ issel = issel && (i.flags() & 0x80000000 ); \
36+ if (!issel) \
37+ continue ;
38+
39+ // #define TRACKSELECTION 1;
40+
41+ struct TOFQATask {
42+ // Event quantities
43+ DOTH1F (hvtxz, " ;Vertex Z position;Events" , 300 , -15 , 15 );
44+ DOTH1F (hevtime, " ;Event time (ns);Tracks" , 100 , -2 , 2 );
3245 // Track quantities
33- DOTH1F (hp_NoCut, " ;#it{p} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
34- DOTH1F (hp_TrkCut, " ;#it{p} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
35- DOTH1F (hp_TOFCut, " ;#it{p} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
36- // TOF Quantities
37- DOTH1F (hlength_NoCut, " ;Track Length (cm);Tracks" , 100 , 0 , 1000 );
38- DOTH1F (htime_NoCut, " ;TOF Time (ns);Tracks" , 1000 , 0 , 600 );
39- DOTH1F (hevtime_NoCut, " ;Event time (ns);Tracks" , 100 , -2 , 2 );
40- DOTH2F (hp_pTOFexp_NoCut, " ;#it{p} (GeV/#it{c});#it{p}_{Exp TOF} (GeV/#it{c});Tracks" , 100 , 0 , 20 , 100 , 0 , 20 );
41- // T-Texp
42- DOTH2F (htimediffEl_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp e});Tracks" , 100 , 0 , 5 , 100 , -1000 , 1000 );
43- DOTH2F (htimediffMu_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp #mu});Tracks" , 100 , 0 , 5 , 100 , -1000 , 1000 );
44- DOTH2F (htimediffPi_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp #pi});Tracks" , 100 , 0 , 5 , 100 , -1000 , 1000 );
45- DOTH2F (htimediffKa_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp K});Tracks" , 100 , 0 , 5 , 100 , -1000 , 1000 );
46- DOTH2F (htimediffPr_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp p});Tracks" , 100 , 0 , 5 , 100 , -1000 , 1000 );
47- // NSigma
48- DOTH2F (hnsigmaEl_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp e})/N_{sigma e};Tracks" , 100 , 0 , 5 , 100 , -10 , 10 );
49- DOTH2F (hnsigmaMu_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp #mu})/N_{sigma #mu};Tracks" , 100 , 0 , 5 , 100 , -10 , 10 );
50- DOTH2F (hnsigmaPi_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp #pi})/N_{sigma #pi};Tracks" , 100 , 0 , 5 , 100 , -10 , 10 );
51- DOTH2F (hnsigmaKa_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp K})/N_{sigma K};Tracks" , 100 , 0 , 5 , 100 , -10 , 10 );
52- DOTH2F (hnsigmaPr_NoCut, " ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp p})/N_{sigma p};Tracks" , 100 , 0 , 5 , 100 , -10 , 10 );
46+ DOTH1F (heta, " ;#eta;Tracks" , 100 , -1 , 1 );
47+ DOTH1F (hp, " ;#it{p} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
48+ DOTH1F (hpt, " ;#it{p}_{T} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
49+ DOTH1F (hlength, " ;Track Length (cm);Tracks" , 100 , 0 , 1000 );
50+ DOTH1F (htime, " ;TOF Time (ns);Tracks" , 1000 , 0 , 600 );
5351 // Beta
5452 DOTH2F (hp_beta, " ;#it{p} (GeV/#it{c});TOF #beta;Tracks" , 100 , 0 , 20 , 100 , 0 , 2 );
5553
5654 void process (aod::Collision const & collision, soa::Join<aod::Tracks, aod::TracksExtra, aod::pidRespTOF, aod::pidRespTOFbeta> const & tracks)
5755 {
56+ hvtxz->Fill (collision.posZ ());
5857 for (auto i : tracks) {
59- hp_NoCut->Fill (i.p ());
6058 // Track selection
61- UChar_t clustermap = i.itsClusterMap ();
62- bool issel = (i.tpcNClsFindable () > 70 ) && (i.flags () & 0x4 ) && (TESTBIT (clustermap, 0 ) || TESTBIT (clustermap, 1 ));
63- if (issel)
64- hp_TrkCut->Fill (i.p ());
65- issel = issel && (i.flags () & 0x2000 ); // kTOFout
66- issel = issel && (i.flags () & 0x80000000 ); // kTIME
67- if (issel)
68- hp_TOFCut->Fill (i.p ());
69- hp_pTOFexp_NoCut->Fill (i.p (), i.tofExpMom () / (TMath::C () * 1 .0e2f * 1 .0e-12f ));
70- //
71- hlength_NoCut->Fill (i.length ());
72- htime_NoCut->Fill (i.tofSignal () / 1000 );
59+ TRACKSELECTION;
7360 //
74- hevtime_NoCut->Fill (collision.collisionTime () / 1000 );
75- // hevtime_NoCut->Fill(collision.collisionTime0() / 1000);
61+ hevtime->Fill (collision.collisionTime () / 1000 );
62+ // hevtime->Fill(collision.collisionTime0() / 1000);
63+ const float psq = sqrt (i.px () * i.px () + i.py () * i.py () + i.pz () * i.pz ());
64+ heta->Fill (i.eta ());
65+ hp->Fill (i.p ());
66+ hpt->Fill (i.pt ());
7667 //
77- htimediffEl_NoCut->Fill (i.p (), i.tofSignal () - collision.collisionTime () - i.tofExpSignalEl ());
78- htimediffMu_NoCut->Fill (i.p (), i.tofSignal () - collision.collisionTime () - i.tofExpSignalMu ());
79- htimediffPi_NoCut->Fill (i.p (), i.tofSignal () - collision.collisionTime () - i.tofExpSignalPi ());
80- htimediffKa_NoCut->Fill (i.p (), i.tofSignal () - collision.collisionTime () - i.tofExpSignalKa ());
81- htimediffPr_NoCut->Fill (i.p (), i.tofSignal () - collision.collisionTime () - i.tofExpSignalPr ());
82- //
83- hnsigmaEl_NoCut->Fill (i.p (), i.tofNSigmaEl ());
84- hnsigmaMu_NoCut->Fill (i.p (), i.tofNSigmaMu ());
85- hnsigmaPi_NoCut->Fill (i.p (), i.tofNSigmaPi ());
86- hnsigmaKa_NoCut->Fill (i.p (), i.tofNSigmaKa ());
87- hnsigmaPr_NoCut->Fill (i.p (), i.tofNSigmaPr ());
68+ hlength->Fill (i.length ());
69+ htime->Fill (i.tofSignal () / 1000 );
8870 // Beta
8971 hp_beta->Fill (i.p (), i.beta ());
9072 }
9173 }
9274};
9375
94- struct SpectraTask {
76+ struct TOFExpTimeQATask {
77+ // T-Texp
78+ #define TIT (part ) Form(" ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp %s});Tracks" , part)
79+ DOTH2F (htimediffEl, TIT(" e" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
80+ DOTH2F (htimediffMu, TIT(" #mu" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
81+ DOTH2F (htimediffPi, TIT(" #pi" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
82+ DOTH2F (htimediffKa, TIT(" K" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
83+ DOTH2F (htimediffPr, TIT(" p" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
84+ DOTH2F (htimediffDe, TIT(" d" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
85+ DOTH2F (htimediffTr, TIT(" t" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
86+ DOTH2F (htimediffHe, TIT(" ^{3}He" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
87+ DOTH2F (htimediffAl, TIT(" #alpha" ), 100 , 0 , 5 , 100 , -1000 , 1000 );
88+ #undef TIT
89+
90+ void process (aod::Collision const & collision, soa::Join<aod::Tracks, aod::TracksExtra, aod::pidRespTOF, aod::pidRespTOFbeta> const & tracks)
91+ {
92+ for (auto i : tracks) {
93+ // Track selection
94+ TRACKSELECTION;
95+ //
96+ const float tof = i.tofSignal () - collision.collisionTime ();
97+ htimediffEl->Fill (i.p (), tof - i.tofExpSignalEl ());
98+ htimediffMu->Fill (i.p (), tof - i.tofExpSignalMu ());
99+ htimediffPi->Fill (i.p (), tof - i.tofExpSignalPi ());
100+ htimediffKa->Fill (i.p (), tof - i.tofExpSignalKa ());
101+ htimediffPr->Fill (i.p (), tof - i.tofExpSignalPr ());
102+ htimediffDe->Fill (i.p (), tof - i.tofExpSignalDe ());
103+ htimediffTr->Fill (i.p (), tof - i.tofExpSignalTr ());
104+ htimediffHe->Fill (i.p (), tof - i.tofExpSignalHe ());
105+ htimediffAl->Fill (i.p (), tof - i.tofExpSignalAl ());
106+ }
107+ }
108+ };
109+
110+ struct TOFNSigmaQATask {
111+ // NSigma
112+ #define TIT (part ) Form(" ;#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp %s})/N_{sigma %s};Tracks" , part, part)
113+ DOTH2F (hnsigmaEl, TIT(" e" ), 100 , 0 , 5 , 100 , -10 , 10 );
114+ DOTH2F (hnsigmaMu, TIT(" #mu" ), 100 , 0 , 5 , 100 , -10 , 10 );
115+ DOTH2F (hnsigmaPi, TIT(" #pi" ), 100 , 0 , 5 , 100 , -10 , 10 );
116+ DOTH2F (hnsigmaKa, TIT(" K" ), 100 , 0 , 5 , 100 , -10 , 10 );
117+ DOTH2F (hnsigmaPr, TIT(" p" ), 100 , 0 , 5 , 100 , -10 , 10 );
118+ DOTH2F (hnsigmaDe, TIT(" d" ), 100 , 0 , 5 , 100 , -10 , 10 );
119+ DOTH2F (hnsigmaTr, TIT(" t" ), 100 , 0 , 5 , 100 , -10 , 10 );
120+ DOTH2F (hnsigmaHe, TIT(" ^{3}He" ), 100 , 0 , 5 , 100 , -10 , 10 );
121+ DOTH2F (hnsigmaAl, TIT(" #alpha" ), 100 , 0 , 5 , 100 , -10 , 10 );
122+ #undef TIT
123+
124+ void process (aod::Collision const & collision, soa::Join<aod::Tracks, aod::TracksExtra, aod::pidRespTOF, aod::pidRespTOFbeta> const & tracks)
125+ {
126+ for (auto i : tracks) {
127+ // Track selection
128+ TRACKSELECTION;
129+ //
130+ hnsigmaEl->Fill (i.p (), i.tofNSigmaEl ());
131+ hnsigmaMu->Fill (i.p (), i.tofNSigmaMu ());
132+ hnsigmaPi->Fill (i.p (), i.tofNSigmaPi ());
133+ hnsigmaKa->Fill (i.p (), i.tofNSigmaKa ());
134+ hnsigmaPr->Fill (i.p (), i.tofNSigmaPr ());
135+ hnsigmaDe->Fill (i.p (), i.tofNSigmaDe ());
136+ hnsigmaTr->Fill (i.p (), i.tofNSigmaTr ());
137+ hnsigmaHe->Fill (i.p (), i.tofNSigmaHe ());
138+ hnsigmaAl->Fill (i.p (), i.tofNSigmaAl ());
139+ }
140+ }
141+ };
142+
143+ struct TOFSpectraTask {
95144 // Pt
96- DOTH1F (hpt_El, " ;#it{p}_{T} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
97- DOTH1F (hpt_Pi, " ;#it{p}_{T} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
98- DOTH1F (hpt_Ka, " ;#it{p}_{T} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
99- DOTH1F (hpt_Pr, " ;#it{p}_{T} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
145+ #define TIT " ;#it{p}_{T} (GeV/#it{c});Tracks"
146+ DOTH1F (hpt_El, TIT, 100 , 0 , 20 );
147+ DOTH1F (hpt_Pi, TIT, 100 , 0 , 20 );
148+ DOTH1F (hpt_Ka, TIT, 100 , 0 , 20 );
149+ DOTH1F (hpt_Pr, TIT, 100 , 0 , 20 );
150+ #undef TIT
100151 // P
101- DOTH1F (hp_El, " ;#it{p} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
102- DOTH1F (hp_Pi, " ;#it{p} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
103- DOTH1F (hp_Ka, " ;#it{p} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
104- DOTH1F (hp_Pr, " ;#it{p} (GeV/#it{c});Tracks" , 100 , 0 , 20 );
152+ #define TIT " ;#it{p} (GeV/#it{c});Tracks"
153+ DOTH1F (hp_El, TIT, 100 , 0 , 20 );
154+ DOTH1F (hp_Pi, TIT, 100 , 0 , 20 );
155+ DOTH1F (hp_Ka, TIT, 100 , 0 , 20 );
156+ DOTH1F (hp_Pr, TIT, 100 , 0 , 20 );
157+ #undef TIT
105158 //
106159 DOTH1F (hlength_El, " ;Track Length (cm);Tracks" , 100 , 0 , 1000 );
107160 DOTH1F (htime_El, " ;TOF Time (ns);Tracks" , 1000 , 0 , 600 );
@@ -115,15 +168,12 @@ struct SpectraTask {
115168 void process (soa::Join<aod::Tracks, aod::TracksExtra, aod::pidRespTOF, aod::pidRespTOFbeta> const & tracks)
116169 {
117170 for (auto i : tracks) {
118- UChar_t clustermap = i.itsClusterMap ();
119- bool issel = (i.tpcNClsFindable () > 70 ) && (i.flags () & 0x4 ) && (TESTBIT (clustermap, 0 ) || TESTBIT (clustermap, 1 ));
120- issel = issel && (i.flags () & 0x2000 ); // kTOFout
121- issel = issel && (i.flags () & 0x80000000 ); // kTIME
122- if (!issel)
123- continue ;
171+ // Track selection
172+ TRACKSELECTION;
173+ //
124174 if (TMath::Abs (i.tofNSigmaPi ()) < 3 ) {
125- hp_El ->Fill (i.p ());
126- hpt_El ->Fill (i.pt ());
175+ hp_Pi ->Fill (i.p ());
176+ hpt_Pi ->Fill (i.pt ());
127177 } else if (TMath::Abs (i.tofNSigmaKa ()) < 3 ) {
128178 hp_Ka->Fill (i.p ());
129179 hpt_Ka->Fill (i.pt ());
@@ -148,6 +198,10 @@ struct SpectraTask {
148198WorkflowSpec defineDataProcessing (ConfigContext const &)
149199{
150200 return WorkflowSpec{
151- adaptAnalysisTask<TOFPIDQATask>(" tofpidqa-task" ),
152- adaptAnalysisTask<SpectraTask>(" filterEl-task" )};
201+ adaptAnalysisTask<TOFQATask>(" tofqa-task" ),
202+ adaptAnalysisTask<TOFExpTimeQATask>(" tofexptime-task" ),
203+ adaptAnalysisTask<TOFNSigmaQATask>(" tofnsigma-task" ),
204+ adaptAnalysisTask<TOFSpectraTask>(" tofspectra-task" )};
153205}
206+
207+ #undef TRACKSELECTION
0 commit comments