23#include "FairRootManager.h"
190 FairRootManager* ioman = FairRootManager::Instance();
191 if (NULL == ioman) { Fatal(
"CbmAnaConversion::Init",
"RootManager not instantised!"); }
193 fRichPoints = (TClonesArray*) ioman->GetObject(
"RichPoint");
194 if (NULL ==
fRichPoints) { Fatal(
"CbmAnaConversion::Init",
"No RichPoint array!"); }
196 fMcTracks = (TClonesArray*) ioman->GetObject(
"MCTrack");
197 if (NULL ==
fMcTracks) { Fatal(
"CbmAnaConversion::Init",
"No MCTrack array!"); }
199 fStsTracks = (TClonesArray*) ioman->GetObject(
"StsTrack");
200 if (NULL ==
fStsTracks) { Fatal(
"CbmAnaConversion::Init",
"No StsTrack array!"); }
203 if (NULL ==
fStsTrackMatches) { Fatal(
"CbmAnaConversion::Init",
"No StsTrackMatch array!"); }
205 fGlobalTracks = (TClonesArray*) ioman->GetObject(
"GlobalTrack");
206 if (NULL ==
fGlobalTracks) { Fatal(
"CbmAnaConversion::Init",
"No GlobalTrack array!"); }
213 if (
nullptr ==
fPrimVertex) { LOG(fatal) <<
"No PrimaryVertex array!"; }
215 fRichRings = (TClonesArray*) ioman->GetObject(
"RichRing");
216 if (NULL ==
fRichRings) { Fatal(
"CbmAnaConversion::Init",
"No RichRing array!"); }
219 if (NULL ==
fRichRingMatches) { Fatal(
"CbmAnaConversion::Init",
"No RichRingMatch array!"); }
238 new TH1I(
"fPhotons_nofPerEvent",
"fPhotons_nofPerEvent; nof photons per event; #", 30, -0.5, 29.5);
240 fPhotons_pt =
new TH1D(
"fPhotons_pt",
"fPhotons_pt; pt; #", 50, -0.5, 4.5);
242 fPhotons_test =
new TH1I(
"fPhotons_test",
"fPhotons_test; test; #", 10, -0.5, 9.5);
245 fPhotons_nofMC =
new TH1I(
"fPhotons_nofMC",
"fPhotons_nofMC; test; #", 100, -0.5, 99.5);
247 fPhotons_energyMC =
new TH1D(
"fPhotons_energyMC",
"fPhotons_energyMC; energy; #", 500, -0.5, 49.5);
249 fPhotons_ptMC =
new TH1D(
"fPhotons_ptMC",
"fPhotons_ptMC; pt; #", 500, -0.5, 4.5);
251 fPhotons_ptRapMC =
new TH2D(
"fPhotons_ptRapMC",
"fPhotons_ptRapMC; pt; #", 500, -0.5, 4.5, 1000, -0.5, 9.5);
253 fPhotonsRest_energyMC =
new TH1D(
"fPhotonsRest_energyMC",
"fPhotonsRest_energyMC; energy; #", 500, -0.5, 49.5);
256 new TH1D(
"fPhotonsRest_pdgMotherMC",
"fPhotonsRest_pdgMotherMC; pdg code; #", 5000, -0.5, 4999.5);
258 fPhotonsRest_ptMC =
new TH1D(
"fPhotonsRest_ptMC",
"fPhotonsRest_ptMC; pt; #", 500, -0.5, 4.5);
261 fPhotonsRest_ptMC_pi0 =
new TH1D(
"fDirectPhotonsRest_ptMC_pi0",
"fDirectPhotonsRest_ptMC_pi0; pt; #", 500, -0.5, 4.5);
263 fPhotonsRest_ptMC_n =
new TH1D(
"fPhotonsRest_ptMC_n",
"fPhotonsRest_ptMC_n; pt; #", 500, -0.5, 4.5);
265 fPhotonsRest_ptMC_e =
new TH1D(
"fPhotonsRest_ptMC_e",
"fPhotonsRest_ptMC_e; pt; #", 500, -0.5, 4.5);
267 fPhotonsRest_ptMC_eta =
new TH1D(
"fPhotonsRest_ptMC_eta",
"fPhotonsRest_ptMC_eta; pt; #", 500, -0.5, 4.5);
275 "nof reconstructed DP");
278 fhEFG_angle_all =
new TH1D(
"fhEFG_angle_all",
"fhEFG_angle_all; opening angle [deg]; #", 2000, 0., 100.);
280 new TH1D(
"fhEFG_angle_combBack",
"fhEFG_angle_combBack; opening angle [deg]; #", 2000, 0., 100.);
281 fhEFG_angle_allSameG =
new TH1D(
"fhEFG_angle_allSameG",
"fhEFG_angle_allSameG; opening angle [deg]; #", 400, 0., 20.);
282 fhEFG_angle_direct =
new TH1D(
"fhEFG_angle_direct",
"fhEFG_angle_direct; opening angle [deg]; #", 400, 0., 20.);
283 fhEFG_angle_pi0 =
new TH1D(
"fhEFG_angle_pi0",
"fhEFG_angle_pi0; opening angle [deg]; #", 400, 0., 20.);
284 fhEFG_angle_eta =
new TH1D(
"fhEFG_angle_eta",
"fhEFG_angle_eta; opening angle [deg]; #", 400, 0., 20.);
291 fhEFG_invmass_all =
new TH1D(
"fhEFG_invmass_all",
"fhEFG_invmass_all; invmass [GeV/c^2]; #", 5000, 0., 0.5);
293 new TH1D(
"fhEFG_invmass_combBack",
"fhEFG_invmass_combBack; invmass [GeV/c^2]; #", 5000, 0., 0.5);
295 new TH1D(
"fhEFG_invmass_allSameG",
"fhEFG_invmass_allSameG; invmass [GeV/c^2]; #", 1000, 0., 0.1);
296 fhEFG_invmass_direct =
new TH1D(
"fhEFG_invmass_direct",
"fhEFG_invmass_direct; invmass [GeV/c^2]; #", 1000, 0., 0.1);
297 fhEFG_invmass_pi0 =
new TH1D(
"fhEFG_invmass_pi0",
"fhEFG_invmass_pi0; invmass [GeV/c^2]; #", 1000, 0., 0.1);
298 fhEFG_invmass_eta =
new TH1D(
"fhEFG_invmass_eta",
"fhEFG_invmass_eta; invmass [GeV/c^2]; #", 1000, 0., 0.1);
305 fhEFG_energy_all =
new TH1D(
"fhEFG_energy_all",
"fhEFG_energy_all; energy [GeV]; #", 1000, 0., 50);
306 fhEFG_energy_combBack =
new TH1D(
"fhEFG_energy_combBack",
"fhEFG_energy_combBack; energy [GeV]; #", 1000, 0., 50);
307 fhEFG_energy_allSameG =
new TH1D(
"fhEFG_energy_allSameG",
"fhEFG_energy_allSameG; energy [GeV]; #", 1000, 0., 50);
308 fhEFG_energy_direct =
new TH1D(
"fhEFG_energy_direct",
"fhEFG_energy_direct; energy [GeV]; #", 1000, 0., 50);
309 fhEFG_energy_pi0 =
new TH1D(
"fhEFG_energy_pi0",
"fhEFG_energy_pi0; energy [GeV]; #", 1000, 0., 50);
310 fhEFG_energy_eta =
new TH1D(
"fhEFG_energy_eta",
"fhEFG_energy_eta; energy [GeV]; #", 1000, 0., 50);
320 new TH1D(
"fhEFG_angleBelow1GeV_all",
"fhEFG_angleBelow1GeV_all; opening angle [deg]; #", 2000, 0., 100.);
322 new TH1D(
"fhEFG_angleBelow1GeV_combBack",
"fhEFG_angleBelow1GeV_combBack; opening angle [deg]; #", 2000, 0., 100.);
324 new TH1D(
"fhEFG_angleBelow1GeV_allSameG",
"fhEFG_angleBelow1GeV_allSameG; opening angle [deg]; #", 400, 0., 20.);
326 new TH1D(
"fhEFG_angleBelow1GeV_direct",
"fhEFG_angleBelow1GeV_direct; opening angle [deg]; #", 400, 0., 20.);
328 new TH1D(
"fhEFG_angleBelow1GeV_pi0",
"fhEFG_angleBelow1GeV_pi0; opening angle [deg]; #", 400, 0., 20.);
330 new TH1D(
"fhEFG_angleBelow1GeV_eta",
"fhEFG_angleBelow1GeV_eta; opening angle [deg]; #", 400, 0., 20.);
340 new TH1D(
"fhEFG_angleAbove1GeV_all",
"fhEFG_angleAbove1GeV_all; opening angle [deg]; #", 2000, 0., 100.);
342 new TH1D(
"fhEFG_angleAbove1GeV_combBack",
"fhEFG_angleAbove1GeV_combBack; opening angle [deg]; #", 2000, 0., 100.);
344 new TH1D(
"fhEFG_angleAbove1GeV_allSameG",
"fhEFG_angleAbove1GeV_allSameG; opening angle [deg]; #", 400, 0., 20.);
346 new TH1D(
"fhEFG_angleAbove1GeV_direct",
"fhEFG_angleAbove1GeV_direct; opening angle [deg]; #", 400, 0., 20.);
348 new TH1D(
"fhEFG_angleAbove1GeV_pi0",
"fhEFG_angleAbove1GeV_pi0; opening angle [deg]; #", 400, 0., 20.);
350 new TH1D(
"fhEFG_angleAbove1GeV_eta",
"fhEFG_angleAbove1GeV_eta; opening angle [deg]; #", 400, 0., 20.);
362 new TH2D(
"fhEFG_angleVSenergy_allSameG",
"fhEFG_angleVSenergy_allSameG;energy [GeV];opening angle [deg]", 5000, 0.,
365 new TH2D(
"fhEFG_angleVSenergy_direct",
"fhEFG_angleVSenergy_direct;energy [GeV];opening angle [deg]", 5000, 0., 50.,
368 "fhEFG_angleVSenergy_pi0",
"fhEFG_angleVSenergy_pi0;energy [GeV];opening angle [deg]", 5000, 0., 50., 400, 0., 20.);
370 "fhEFG_angleVSenergy_eta",
"fhEFG_angleVSenergy_eta;energy [GeV];opening angle [deg]", 5000, 0., 50., 400, 0., 20.);
380 new TH2D(
"fhEFG_angleVSpt_all",
"fhEFG_angleVSpt_all;pt [GeV/c];opening angle [deg]", 500, 0., 5., 400, 0., 20.);
382 "fhEFG_angleVSpt_combBack",
"fhEFG_angleVSpt_combBack;pt [GeV/c];opening angle [deg]", 500, 0., 5., 400, 0., 20.);
384 "fhEFG_angleVSpt_allSameG",
"fhEFG_angleVSpt_allSameG;pt [GeV/c];opening angle [deg]", 500, 0., 5., 400, 0., 20.);
385 fhEFG_angleVSpt_direct =
new TH2D(
"fhEFG_angleVSpt_direct",
"fhEFG_angleVSpt_direct;pt [GeV/c];opening angle [deg]",
386 500, 0., 5., 400, 0., 20.);
388 new TH2D(
"fhEFG_angleVSpt_pi0",
"fhEFG_angleVSpt_pi0;pt [GeV/c];opening angle [deg]", 500, 0., 5., 400, 0., 20.);
390 new TH2D(
"fhEFG_angleVSpt_eta",
"fhEFG_angleVSpt_eta;pt [GeV/c];opening angle [deg]", 500, 0., 5., 400, 0., 20.);
399 fhEFG_momentumPair_all =
new TH1D(
"fhEFG_momentumPair_all",
"fhEFG_momentumPair_all; energy [GeV]; #", 1000, 0., 50);
401 new TH1D(
"fhEFG_momentumPair_combBack",
"fhEFG_momentumPair_combBack; energy [GeV]; #", 1000, 0., 50);
403 new TH1D(
"fhEFG_momentumPair_allSameG",
"fhEFG_momentumPair_allSameG; energy [GeV]; #", 1000, 0., 50);
405 new TH1D(
"fhEFG_momentumPair_direct",
"fhEFG_momentumPair_direct; energy [GeV]; #", 1000, 0., 50);
406 fhEFG_momentumPair_pi0 =
new TH1D(
"fhEFG_momentumPair_pi0",
"fhEFG_momentumPair_pi0; energy [GeV]; #", 1000, 0., 50);
407 fhEFG_momentumPair_eta =
new TH1D(
"fhEFG_momentumPair_eta",
"fhEFG_momentumPair_eta; energy [GeV]; #", 1000, 0., 50);
418 new TH2D(
"fhEFG_startvertexVSangle_allSameG",
"fhEFG_startvertexVSangle_allSameG; startvertex [cm]; angle [deg]",
419 200, -0.02, 0.02, 400, 0., 20.);
421 new TH2D(
"fhEFG_startvertexVSangle_direct",
"fhEFG_startvertexVSangle_direct; startvertex [cm]; angle [deg]", 200,
422 -0.02, 0.02, 400, 0., 20.);
424 new TH2D(
"fhEFG_startvertexVSangle_pi0",
"fhEFG_startvertexVSangle_pi0; startvertex [cm]; angle [deg]", 200, -0.02,
427 new TH2D(
"fhEFG_startvertexVSangle_eta",
"fhEFG_startvertexVSangle_eta; startvertex [cm]; angle [deg]", 200, -0.02,
437 new TH1D(
"fhEFG_startvertex_allSameG",
"fhEFG_startvertex_allSameG; startvertex [cm];#", 200, -0.02, 0.02);
443 new TH1D(
"fhEFG_angle_all_reco",
"fhEFG_angle_all_reco; opening angle [deg]; #", 2001, -0.05, 200.05);
445 new TH1D(
"fhEFG_angle_combBack_reco",
"fhEFG_angle_combBack_reco; opening angle [deg]; #", 2001, -0.05, 200.05);
447 new TH1D(
"fhEFG_angle_allSameG_reco",
"fhEFG_angle_allSameG_reco; opening angle [deg]; #", 1001, -0.05, 100.05);
449 new TH1D(
"fhEFG_angle_direct_reco",
"fhEFG_angle_direct_reco; opening angle [deg]; #", 1001, -0.05, 100.05);
451 new TH1D(
"fhEFG_angle_pi0_reco",
"fhEFG_angle_pi0_reco; opening angle [deg]; #", 1001, -0.05, 100.05);
453 new TH1D(
"fhEFG_angle_eta_reco",
"fhEFG_angle_eta_reco; opening angle [deg]; #", 1001, -0.05, 100.05);
464 new TH1I(
"fhEFG_angle_reco_CUTcomparison",
"fhEFG_angle_reco_CUTcomparison; ; #", 12, 0., 12.);
482 new TH1D(
"fhEFG_angle_all_reco_cuts",
"fhEFG_angle_all_reco_cuts; opening angle [deg]; #", 101, -0.05, 10.05);
484 "fhEFG_angle_combBack_reco_cuts",
"fhEFG_angle_combBack_reco_cuts; opening angle [deg]; #", 101, -0.05, 10.05);
486 "fhEFG_angle_allSameG_reco_cuts",
"fhEFG_angle_allSameG_reco_cuts; opening angle [deg]; #", 101, -0.05, 10.05);
494 new TH1D(
"fhEFG_angleBelow1GeV_all_reco",
"fhEFG_angleBelow1GeV_all_reco; opening angle [deg]; #", 2000, 0., 100.);
496 "fhEFG_angleBelow1GeV_combBack_reco",
"fhEFG_angleBelow1GeV_combBack_reco; opening angle [deg]; #", 2000, 0., 100.);
498 "fhEFG_angleBelow1GeV_allSameG_reco",
"fhEFG_angleBelow1GeV_allSameG_reco; opening angle [deg]; #", 2000, 0., 100.);
500 "fhEFG_angleBelow1GeV_direct_reco",
"fhEFG_angleBelow1GeV_direct_reco; opening angle [deg]; #", 2000, 0., 100.);
502 new TH1D(
"fhEFG_angleBelow1GeV_pi0_reco",
"fhEFG_angleBelow1GeV_pi0_reco; opening angle [deg]; #", 2000, 0., 100.);
504 new TH1D(
"fhEFG_angleBelow1GeV_eta_reco",
"fhEFG_angleBelow1GeV_eta_reco; opening angle [deg]; #", 2000, 0., 100.);
513 new TH1D(
"fhEFG_invmass_all_reco",
"fhEFG_invmass_all_reco; invmass [GeV/c^2]; #", 5000, 0., 5.);
515 new TH1D(
"fhEFG_invmass_combBack_reco",
"fhEFG_invmass_combBack_reco; invmass [GeV/c^2]; #", 5000, 0., 5.);
517 new TH1D(
"fhEFG_invmass_allSameG_reco",
"fhEFG_invmass_allSameG_reco; invmass [GeV/c^2]; #", 5000, 0., 5);
519 new TH1D(
"fhEFG_invmass_direct_reco",
"fhEFG_invmass_direct_reco; invmass [GeV/c^2]; #", 5000, 0., 5);
521 new TH1D(
"fhEFG_invmass_pi0_reco",
"fhEFG_invmass_pi0_reco; invmass [GeV/c^2]; #", 5000, 0., 5);
523 new TH1D(
"fhEFG_invmass_eta_reco",
"fhEFG_invmass_eta_reco; invmass [GeV/c^2]; #", 5000, 0., 5);
532 new TH1D(
"fhEFG_invmass_all_reco_cut",
"fhEFG_invmass_all_reco_cut; invmass [GeV/c^2]; #", 5000, 0., 5.);
534 new TH1D(
"fhEFG_invmass_combBack_reco_cut",
"fhEFG_invmass_combBack_reco_cut; invmass [GeV/c^2]; #", 5000, 0., 5.);
536 new TH1D(
"fhEFG_invmass_allSameG_reco_cut",
"fhEFG_invmass_allSameG_reco_cut; invmass [GeV/c^2]; #", 5000, 0., 5);
538 new TH1D(
"fhEFG_invmass_direct_reco_cut",
"fhEFG_invmass_direct_reco_cut; invmass [GeV/c^2]; #", 5000, 0., 5);
540 new TH1D(
"fhEFG_invmass_pi0_reco_cut",
"fhEFG_invmass_pi0_reco_cut; invmass [GeV/c^2]; #", 5000, 0., 5);
542 new TH1D(
"fhEFG_invmass_eta_reco_cut",
"fhEFG_invmass_eta_reco_cut; invmass [GeV/c^2]; #", 5000, 0., 5);
553 "fhEFG_angleVSpt_all_reco",
"fhEFG_angleVSpt_all_reco;pt [GeV/c];opening angle [deg]", 500, 0., 5., 400, 0., 20.);
555 new TH2D(
"fhEFG_angleVSpt_combBack_reco",
"fhEFG_angleVSpt_combBack_reco;pt [GeV/c];opening angle [deg]", 500, 0.,
558 new TH2D(
"fhEFG_angleVSpt_allSameG_reco",
"fhEFG_angleVSpt_allSameG_reco;pt [GeV/c];opening angle [deg]", 500, 0.,
561 new TH2D(
"fhEFG_angleVSpt_direct_reco",
"fhEFG_angleVSpt_direct_reco;pt [GeV/c];opening angle [deg]", 500, 0., 5.,
564 "fhEFG_angleVSpt_pi0_reco",
"fhEFG_angleVSpt_pi0_reco;pt [GeV/c];opening angle [deg]", 500, 0., 5., 400, 0., 20.);
566 "fhEFG_angleVSpt_eta_reco",
"fhEFG_angleVSpt_eta_reco;pt [GeV/c];opening angle [deg]", 500, 0., 5., 400, 0., 20.);
577 "fhEFG_invmassVSpt_all_reco",
"fhEFG_invmassVSpt_all_reco;pt [GeV/c];invmass [GeV]", 500, 0., 5., 5000, 0., 5.);
579 new TH2D(
"fhEFG_invmassVSpt_combBack_reco",
"fhEFG_invmassVSpt_combBack_reco;pt [GeV/c];invmass [GeV]", 500, 0., 5.,
582 new TH2D(
"fhEFG_invmassVSpt_allSameG_reco",
"fhEFG_invmassVSpt_allSameG_reco;pt [GeV/c];invmass [GeV]", 500, 0., 5.,
585 new TH2D(
"fhEFG_invmassVSpt_direct_reco",
"fhEFG_invmassVSpt_direct_reco;pt [GeV/c];invmass [GeV]", 500, 0., 5.,
588 "fhEFG_invmassVSpt_pi0_reco",
"fhEFG_invmassVSpt_pi0_reco;pt [GeV/c];invmass [GeV]", 500, 0., 5., 5000, 0., 5.);
590 "fhEFG_invmassVSpt_eta_reco",
"fhEFG_invmassVSpt_eta_reco;pt [GeV/c];invmass [GeV]", 500, 0., 5., 5000, 0., 5.);
600 new TH2D(
"fhEFG_momentumResolutionPhoton_reco",
"fhEFG_momentumResolutionPhoton_reco;p [GeV/c]; dp/p [%]", 20, 0.,
603 new TH2D(
"fhEFG_momentumResolutionElectrons_reco",
"fhEFG_momentumResolutionElectrons_reco;p [GeV/c]; dp/p [%]", 20,
604 0., 20., 1600, 0., 400.);
609 fhEFPI0_angle_reco =
new TH1D(
"fhEFPI0_angle_reco",
"fhEFPI0_angle_reco; opening angle [deg]; #", 500, 0., 50.);
613 fhG_invmass =
new TH1D(
"fhG_invmass",
"fhG_invmass; invmass [GeV/c^2]; #", 10000, 0., 1.);
615 fhG_invmass_pi0 =
new TH1D(
"fhG_invmass_pi0",
"fhG_invmass_pi0; invmass [GeV/c^2]; #", 10000, 0., 1.);
623 gDirectory->mkdir(
"Photons");
624 gDirectory->cd(
"Photons");
626 gDirectory->mkdir(
"electrons from gamma");
627 gDirectory->cd(
"electrons from gamma");
629 gDirectory->mkdir(
"angle");
630 gDirectory->mkdir(
"invariant mass");
631 gDirectory->mkdir(
"energy");
633 gDirectory->cd(
"angle");
637 gDirectory->cd(
"..");
639 gDirectory->cd(
"invariant mass");
643 gDirectory->cd(
"..");
645 gDirectory->cd(
"energy");
649 gDirectory->cd(
"..");
655 gDirectory->cd(
"..");
660 gDirectory->cd(
"..");
663 cout <<
"CbmAnaConversionPhotons: Realtime - " <<
fTime << endl;
692 Fatal(
"CbmAnaConversion::Exec",
"No PrimaryVertex array!");
695 int nofDirectPhotons = 0;
710 for (
int i = 0; i < nofMcTracks; i++) {
712 if (mctrack == NULL)
continue;
718 nofDirectPhotons +=
CheckMC(mctrack);
730 for (
int iG = 0; iG < nofGlobalTracks; iG++) {
732 if (NULL == gTrack)
continue;
735 if (richInd < 0)
continue;
736 if (stsInd < 0)
continue;
739 if (stsTrack == NULL)
continue;
742 if (stsMatch == NULL)
continue;
744 if (stsMcTrackId < 0)
continue;
746 if (mcTrack1 == NULL)
continue;
749 if (richMatch == NULL)
continue;
751 if (richMcTrackId < 0)
continue;
753 if (mcTrack2 == NULL)
continue;
755 if (stsMcTrackId != richMcTrackId)
continue;
761 TVector3 refittedMomentum;
763 vector<CbmStsTrack> stsTracks;
765 stsTracks[0] = *stsTrack;
766 vector<CbmL1PFFitter::PFFieldRegion> vField;
767 vector<float> chiPrim;
771 const FairTrackParam* vtxTrack = stsTracks[0].GetParamFirst();
772 vtxTrack->Momentum(refittedMomentum);
777 vector<CbmStsTrack> stsTracks_electron;
778 stsTracks_electron.resize(1);
779 stsTracks_electron[0] = *stsTrack;
780 vector<CbmL1PFFitter::PFFieldRegion> vField_electron;
781 vector<float> chiPrim_electron;
782 vector<int> pidHypo_electron;
783 pidHypo_electron.push_back(11);
784 fPFFitter_electron.
Fit(stsTracks_electron, pidHypo_electron);
787 TVector3 refittedMomentum_electron;
788 const FairTrackParam* vtxTrack_electron = stsTracks_electron[0].GetParamFirst();
789 vtxTrack_electron->Momentum(refittedMomentum_electron);
790 refittedMomentum = refittedMomentum_electron;
797 if (motherID == -1)
continue;
799 int motherpdg = TMath::Abs(mothermcTrack1->
GetPdgCode());
800 if (motherpdg != 22)
continue;
802 if (grandmotherID != -1)
continue;
816 cout <<
"CbmAnaConversionPhotons: time spent (Exec) " <<
timer.RealTime() << endl;
823 Int_t nof_photons = 0;
826 for (
int iG = 0; iG < nofGlobalTracks; iG++) {
828 if (NULL == gTrack)
continue;
831 if (richInd < 0)
continue;
832 if (stsInd < 0)
continue;
835 if (stsTrack == NULL)
continue;
838 if (stsMatch == NULL)
continue;
840 if (stsMcTrackId < 0)
continue;
842 if (mcTrack1 == NULL)
continue;
845 if (richMatch == NULL)
continue;
847 if (richMcTrackId < 0)
continue;
849 if (mcTrack2 == NULL)
continue;
853 if (stsMcTrackId != richMcTrackId)
continue;
859 if (motherID == -1)
continue;
861 int motherpdg = TMath::Abs(mothermcTrack1->
GetPdgCode());
862 if (motherpdg != 22)
continue;
864 if (grandmotherID != -1)
continue;
884 cout <<
"CbmAnaConversionPhotons: filling tracklist, pdg " << mctrack->
GetPdgCode() <<
" - motherpdg " << motherpdg
885 <<
" - motherID " << motherID << endl;
892 TVector3 startvertex;
894 if (startvertex.Z() > 0.1)
return;
895 if (motherID == -1)
return;
907 TVector3 startvertex;
909 if (startvertex.Z() > 0.1)
return;
910 if (motherID == -1)
return;
923 TVector3 startvertex;
925 if (startvertex.Z() > 0.1)
return;
926 if (motherID == -1)
return;
930 if (motherpdg == 22) {
934 if (motherpdg == 111) {
944 TH1I* zwischenhisto =
new TH1I(
"zwischenhisto",
"zwischenhisto", 1000000, 0, 1000000);
945 for (
unsigned int i = 0; i <
fMCTracklist.size(); i++) {
949 if (zwischenhisto->GetMaximum() >= 2) {
950 cout <<
"CbmAnaConversionPhotons: photon found, mother ids " << zwischenhisto->GetMaximumBin() - 1 << endl;
952 cout <<
"CbmAnaConversionPhotons: additional data: pdg " << mcTrack1->
GetPdgCode() <<
" motherId "
955 zwischenhisto->Delete();
958 int photoncounter = 0;
959 std::multimap<int, int> electronMap;
960 for (
unsigned int i = 0; i <
fMCTracklist.size(); i++) {
961 electronMap.insert(std::pair<int, int>(
fMCTracklist[i]->GetMotherId(), i));
965 for (std::map<int, int>::iterator it = electronMap.begin(); it != electronMap.end(); ++it) {
966 if (it == electronMap.begin()) check = 1;
967 if (it != electronMap.begin()) {
968 std::map<int, int>::iterator zwischen = it;
971 int id_old = zwischen->first;
975 cout <<
"CbmAnaConversionPhotons: map - photon found " <<
id << endl;
992 int nofDirectPhotons = 0;
1002 Double_t pt = mctrack->
GetPt();
1005 if (pdg == 22 && motherId == -1) {
1012 if (pdg == 22 && motherId != -1) {
1030 return nofDirectPhotons;
1040 Double_t energyP = TMath::Sqrt(momP.Mag2() +
M2E);
1041 TLorentzVector lorVecP(momP, energyP);
1045 Double_t energyM = TMath::Sqrt(momM.Mag2() +
M2E);
1046 TLorentzVector lorVecM(momM, energyM);
1048 TVector3 momPair = momP + momM;
1049 Double_t energyPair = energyP + energyM;
1050 Double_t ptPair = momPair.Perp();
1051 Double_t pzPair = momPair.Pz();
1052 Double_t yPair = 0.5 * TMath::Log((energyPair + pzPair) / (energyPair - pzPair));
1053 Double_t anglePair = lorVecM.Angle(lorVecP.Vect());
1054 Double_t theta = 180. * anglePair / TMath::Pi();
1055 Double_t minv = 2. * TMath::Sin(anglePair / 2.) * TMath::Sqrt(momM.Mag() * momP.Mag());
1058 params.
fPt = ptPair;
1060 params.
fMinv = minv;
1071 Double_t energyP = TMath::Sqrt(electron1.Mag2() +
M2E);
1072 TLorentzVector lorVecP(electron1, energyP);
1074 Double_t energyM = TMath::Sqrt(electron2.Mag2() +
M2E);
1075 TLorentzVector lorVecM(electron2, energyM);
1077 TVector3 momPair = electron1 + electron2;
1078 Double_t energyPair = energyP + energyM;
1079 Double_t ptPair = momPair.Perp();
1080 Double_t pzPair = momPair.Pz();
1081 Double_t yPair = 0.5 * TMath::Log((energyPair + pzPair) / (energyPair - pzPair));
1082 Double_t anglePair = lorVecM.Angle(lorVecP.Vect());
1083 Double_t theta = 180. * anglePair / TMath::Pi();
1084 Double_t minv = 2. * TMath::Sin(anglePair / 2.) * TMath::Sqrt(electron1.Mag() * electron2.Mag());
1087 params.
fPt = ptPair;
1089 params.
fMinv = minv;
1098 cout <<
"CbmAnaConversionPhotons: array size in AnalyseElectronsFromGammaMC(): " << electronnumber << endl;
1099 for (
int i = 0; i < electronnumber - 1; i++) {
1100 for (
int j = i; j < electronnumber; j++) {
1112 int grandmotherID_i = mothermctrack_i->
GetMotherId();
1124 if (motherID_i != motherID_j) {
1133 TVector3 startvertex;
1151 if (grandmotherID_i == -1) {
1165 int grandmotherpdg_i = grandmothermctrack_i->
GetPdgCode();
1166 if (grandmotherpdg_i == 111) {
1177 if (grandmotherpdg_i == 221) {
1198 cout <<
"CbmAnaConversionPhotons::AnalyseElectronsFromGammaReco() - array "
1203 cout <<
"CbmAnaConversionPhotons: array size in "
1204 "AnalyseElectronsFromGammaReco(): "
1205 << electronnumber << endl;
1206 for (
int i = 0; i < electronnumber; i++) {
1207 for (
int j = i; j < electronnumber; j++) {
1223 if (paramSet.
fAngle < OpeningAngleCut) {
1231 if (motherID_i != motherID_j) {
1236 if (paramSet.
fAngle < OpeningAngleCut) {
1260 if (paramSet.
fAngle < OpeningAngleCut) {
1281 int grandmotherID_i = mothermctrack_i->
GetMotherId();
1296 if (grandmotherID_i == -1) {
1305 int grandmotherpdg_i = grandmothermctrack_i->
GetPdgCode();
1307 if (grandmotherpdg_i == 111) {
1314 if (grandmotherpdg_i == 221) {
1331 cout <<
"CbmAnaConversionPhotons::AnalyseElectronsFromGammaPi0() - array "
1336 cout <<
"CbmAnaConversionPhotons: array size in AnalyseElectronsFromPi0Reco(): " << electronnumber << endl;
1337 for (
int i = 0; i < electronnumber; i++) {
1338 for (
int j = i; j < electronnumber; j++) {
1350 if (motherID_i != motherID_j) {
continue; }
1360 cout <<
"CbmAnaConversionPhotons: array size in AnalyseGammas(): " << number << endl;
1361 for (
int i = 0; i < number - 1; i++) {
1362 for (
int j = i; j < number; j++) {
1367 Double_t energy1 = TMath::Sqrt(gamma1.Mag2());
1368 TLorentzVector lorVec1(gamma1, energy1);
1371 Double_t energy2 = TMath::Sqrt(gamma2.Mag2());
1372 TLorentzVector lorVec2(gamma2, energy2);
1374 sum = lorVec1 + lorVec2;
1382 cout <<
"CbmAnaConversionPhotons: array size in AnalyseGammas(): " << number_pi0 << endl;
1383 for (
int i = 0; i < number_pi0 - 1; i++) {
1384 for (
int j = i; j < number_pi0; j++) {
1389 Double_t energy1 = TMath::Sqrt(gamma1.Mag2());
1390 TLorentzVector lorVec1(gamma1, energy1);
1393 Double_t energy2 = TMath::Sqrt(gamma2.Mag2());
1394 TLorentzVector lorVec2(gamma2, energy2);
1396 sum = lorVec1 + lorVec2;
Helper functions for drawing 1D and 2D histograms and graphs.
Data class for STS tracks.
static Double_t CalcOpeningAngleCutAlt3(Double_t)
static Double_t CalcOpeningAngleCutAlt1(Double_t pt)
static Double_t CalcOpeningAngleCutAlt2(Double_t)
static Double_t CalcOpeningAngleCutAlt4(Double_t pt)
static Double_t CalcOpeningAngleCut(Double_t pt)
TH1D * fhEFG_startvertex_allSameG
TH2D * fhEFG_angleVSenergy_pi0
int CheckMC(CbmMCTrack *mctrack)
std::vector< TH1 * > fHistoList_EFG_angle
TH1D * fhEFG_invmass_pi0_reco_cut
TH1D * fhEFG_angle_combBack_reco_cuts
TH2D * fhEFG_angleVSpt_pi0
TH2D * fhEFG_invmassVSpt_allSameG_reco
TH1D * fPhotonsRest_pdgMotherMC
void FillMCTracklist(CbmMCTrack *mctrack)
TClonesArray * fRichRings
TH1D * fPhotonsRest_ptMC_pi0
TH2D * fhEFG_startvertexVSangle_pi0
TH1D * fhEFG_momentumPair_all
TH1D * fhEFG_angleAbove1GeV_eta
void AnalyseElectronsFromGammaReco()
TH2D * fhEFG_angleVSpt_eta
TH1D * fhEFG_angle_all_reco_cuts
TH1D * fhEFG_invmass_all_reco_cut
virtual ~CbmAnaConversionPhotons()
TH1D * fhEFG_momentumPair_allSameG
void FillMCTracklist_allGammas(CbmMCTrack *mctrack)
TClonesArray * fRichRingMatches
TH2D * fhEFG_angleVSenergy_eta
void FillRecoTracklist_allElectrons(CbmMCTrack *mctrack, TVector3 refittedMom)
TH1D * fhEFG_momentumPair_direct
TH1D * fhEFG_invmass_pi0_reco
TH1D * fhEFG_energy_direct
std::vector< CbmMCTrack * > fRecoTracklist_allElectronsFromGamma
TH2D * fhEFG_invmassVSpt_pi0_reco
TH2D * fhEFG_invmassVSpt_combBack_reco
void AnalyseElectronsFromPi0Reco()
TH1D * fhEFG_energy_allSameG
TH1D * fhEFG_invmass_combBack_reco
TH1D * fhEFG_angleAbove1GeV_direct
TH2D * fhEFG_angleVSpt_direct
Int_t global_nof_photonsReco
TH2D * fhEFG_startvertexVSangle_allSameG
TH1D * fhEFG_invmass_combBack
TH1D * fhEFG_angleBelow1GeV_all_reco
TH1D * fhEFG_angleAbove1GeV_all
Int_t global_nof_photonsMC
TH1D * fhEFG_invmass_all_reco
TH1D * fhEFG_angle_direct
TH1D * fhEFG_angleAbove1GeV_combBack
TH2D * fhEFG_angleVSpt_combBack
TH1D * fhEFG_angleBelow1GeV_combBack_reco
std::vector< CbmMCTrack * > fMCTracklist_allGammasFromPi0
TH1D * fhEFG_angleAbove1GeV_pi0
TH2D * fhEFG_momentumResolutionElectrons_reco
std::vector< CbmMCTrack * > fMCTracklist_allGammas
TH1D * fhEFG_momentumPair_eta
TH1D * fhEFG_angleBelow1GeV_direct
TH1I * fhEFG_angle_reco_CUTcomparison
TH2D * fhEFG_momentumResolutionPhoton_reco
TH2D * fhEFG_angleVSpt_all_reco
std::vector< TH1 * > fHistoList_EFG
void FillMCTracklist_allElectrons(CbmMCTrack *mctrack)
TH2D * fhEFG_angleVSenergy_direct
TH1I * fPhotons_nofPerEvent
TH1D * fhEFG_angleBelow1GeV_direct_reco
TH2D * fhEFG_angleVSpt_direct_reco
TClonesArray * fRichPoints
TH2D * fhEFG_angleVSpt_all
TH1D * fhEFG_angleAbove1GeV_allSameG
TH1D * fhEFG_angle_pi0_reco
TH1D * fhEFG_angle_direct_reco
std::vector< CbmMCTrack * > fRecoTracklist_allElectronsFromPi0
std::vector< CbmMCTrack * > fMCTracklist
TH1D * fhEFG_momentumPair_combBack
void AnalyseElectronsFromGammaMC()
TClonesArray * fStsTrackMatches
LmvmKinePar CalculateKinematicParams(const CbmMCTrack *mctrackP, const CbmMCTrack *mctrackM)
TH1D * fPhotonsRest_ptMC_eta
CbmAnaConversionPhotons()
std::vector< CbmMCTrack * > fMCTracklist_allElectronsFromGamma
TH1D * fhEFG_energy_combBack
TH1D * fhEFG_angle_eta_reco
TH1D * fhEFG_angleBelow1GeV_eta_reco
TH2D * fhEFG_invmassVSpt_eta_reco
TH1D * fhEFG_angle_allSameG_reco_cuts
TH1D * fhEFG_momentumPair_pi0
TH1D * fhGlobalNofDirectPhotons
TH1D * fhEFG_angleBelow1GeV_eta
TH1D * fhEFG_angle_combBack
TH1D * fPhotonsRest_ptMC_n
TH2D * fhEFG_angleVSpt_pi0_reco
TH2D * fhEFG_angleVSenergy_allSameG
TH1D * fhEFG_invmass_direct_reco
TH1D * fhEFG_angleBelow1GeV_pi0
TH2D * fhEFG_angleVSpt_combBack_reco
TH1D * fPhotonsRest_energyMC
TH1D * fhEFG_invmass_combBack_reco_cut
std::vector< TH1 * > fHistoList_photons
TH1D * fhEFG_invmass_direct_reco_cut
TH1D * fhEFG_angleBelow1GeV_combBack
TH1D * fhEFG_invmass_allSameG
std::vector< TVector3 > fRecoTracklist_allElectronsFromPi0Mom
TH2D * fhEFG_angleVSpt_allSameG_reco
std::vector< TH1 * > fHistoList_EFG_energy
TH1D * fhEFG_angleBelow1GeV_all
TH2D * fhEFG_angleVSpt_eta_reco
TH1D * fhEFG_angle_allSameG
TH1D * fhEFG_angle_all_reco
LmvmKinePar CalculateKinematicParamsReco(const TVector3 electron1, const TVector3 electron2)
TH1D * fhEFG_angle_combBack_reco
TH1D * fhEFG_invmass_eta_reco_cut
TH2D * fhEFG_startvertexVSangle_eta
TH2D * fhEFG_invmassVSpt_all_reco
TH1D * fhEFPI0_angle_reco
TH1D * fhEFG_angleBelow1GeV_allSameG
TH1D * fhEFG_angleBelow1GeV_allSameG_reco
std::vector< TH1 * > fHistoList_EFG_invmass
TH1D * fhEFG_invmass_direct
TH1D * fhEFG_invmass_allSameG_reco_cut
TClonesArray * fGlobalTracks
TH1D * fhEFG_invmass_eta_reco
TH1D * fhEFG_angleBelow1GeV_pi0_reco
TH2D * fhEFG_angleVSpt_allSameG
TH1D * fhEFG_angle_allSameG_reco
TH2D * fhEFG_startvertexVSangle_direct
TH1D * fhEFG_invmass_allSameG_reco
std::vector< TVector3 > fRecoTracklist_allElectronsFromGammaMom
TH2D * fhEFG_invmassVSpt_direct_reco
TH1D * fPhotonsRest_ptMC_e
TClonesArray * fStsTracks
int32_t GetStsTrackIndex() const
int32_t GetRichRingIndex() const
void GetChiToVertex(std::vector< CbmStsTrack > &Tracks, std::vector< PFFieldRegion > &field, std::vector< float > &chiToVtx, CbmKFVertex &primVtx, float chiPrim=-1)
void Fit(std::vector< CbmStsTrack > &Tracks, const std::vector< CbmMvdHit > &vMvdHits, const std::vector< CbmStsHit > &vStsHits, const std::vector< int > &pidHypo)
void GetMomentum(TVector3 &momentum) const
int32_t GetMotherId() const
int32_t GetPdgCode() const
double GetRapidity() const
void GetStartVertex(TVector3 &vertex) const
const CbmLink & GetMatchedLink() const