21 #include <TClonesArray.h> 22 #include <TDatabasePDG.h> 23 #include <TParticlePDG.h> 25 #include <THnSparse.h> 26 #include <TParticle.h> 28 #include <THashList.h> 32 #include <TObjArray.h> 36 #include "AliEMCALGeometry.h" 37 #include "AliAnalysisManager.h" 38 #include "AliVEventHandler.h" 39 #include "AliAnalysisDataSlot.h" 40 #include "AliAnalysisDataContainer.h" 80 fIncludeInclusive(kFALSE),
83 fPromptReject(kFALSE),
84 fAlienConnect(kFALSE),
89 fAcceptedDecay(kDecayD0toKpi),
96 fFastJetWrapper_Truth(0),
97 fShapesVar_Splittings_DeltaR(0),
98 fShapesVar_Splittings_DeltaR_Truth(0),
99 fShapesVar_Splittings_Zg(0),
100 fShapesVar_Splittings_Zg_Truth(0),
101 fShapesVar_Splittings_LeadingSubJetpT(0),
102 fShapesVar_Splittings_LeadingSubJetpT_Truth(0),
103 fShapesVar_Splittings_HardestSubJetD0(0),
104 fShapesVar_Splittings_HardestSubJetD0_Truth(0),
105 fShapesVar_Splittings_RadiatorE(0),
106 fShapesVar_Splittings_RadiatorE_Truth(0),
107 fShapesVar_Splittings_RadiatorpT(0),
108 fShapesVar_Splittings_RadiatorpT_Truth(0),
110 fTreeResponseMatrixAxis(0),
115 for(
Int_t i=0;i<nVar;i++){
118 SetMakeGeneralHistograms(kTRUE);
119 DefineOutput(1, TList::Class());
120 DefineOutput(2, TTree::Class());
121 DefineOutput(3, TTree::Class());
127 fJetShapeType(
kData),
129 fIncludeInclusive(kFALSE),
132 fPromptReject(kFALSE),
133 fAlienConnect(kFALSE),
138 fAcceptedDecay(kDecayD0toKpi),
145 fFastJetWrapper_Truth(0),
146 fShapesVar_Splittings_DeltaR(0),
147 fShapesVar_Splittings_DeltaR_Truth(0),
148 fShapesVar_Splittings_Zg(0),
149 fShapesVar_Splittings_Zg_Truth(0),
150 fShapesVar_Splittings_LeadingSubJetpT(0),
151 fShapesVar_Splittings_LeadingSubJetpT_Truth(0),
152 fShapesVar_Splittings_HardestSubJetD0(0),
153 fShapesVar_Splittings_HardestSubJetD0_Truth(0),
154 fShapesVar_Splittings_RadiatorE(0),
155 fShapesVar_Splittings_RadiatorE_Truth(0),
156 fShapesVar_Splittings_RadiatorpT(0),
157 fShapesVar_Splittings_RadiatorpT_Truth(0),
159 fTreeResponseMatrixAxis(0),
168 DefineOutput(1, TList::Class());
169 DefineOutput(2, TTree::Class());
170 DefineOutput(3, TTree::Class());
186 Bool_t oldStatus = TH1::AddDirectoryStatus();
187 TH1::AddDirectory(kFALSE);
188 TH1::AddDirectory(oldStatus);
193 const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
196 fShapesVarNames[0] =
"pT_Jet";
197 fShapesVarNames[1] =
"pT_Jet_Truth";
198 fShapesVarNames[2] =
"pT_D";
199 fShapesVarNames[3] =
"pT_D_Truth";
200 fShapesVarNames[4] =
"Inv_M_D";
201 fShapesVarNames[5] =
"Inv_M_D_Truth";
202 fShapesVarNames[6] =
"Flag_D";
203 fShapesVarNames[7] =
"Flag_D_Truth";
204 fShapesVarNames[8] =
"Prompt_PDG";
205 fShapesVarNames[9] =
"Prompt_PDG_Truth";
208 cout<<
"looping over variables"<<endl;
212 const char* nameoutput_Splittings = GetOutputSlot(3)->GetContainer()->GetName();
215 fShapesVarNames_Splittings[0] =
"DeltaR";
216 fShapesVarNames_Splittings[1] =
"DeltaR_Truth";
217 fShapesVarNames_Splittings[2] =
"Zg";
218 fShapesVarNames_Splittings[3] =
"Zg_Truth";
219 fShapesVarNames_Splittings[4] =
"LeadingSubJetpT";
220 fShapesVarNames_Splittings[5] =
"LeadingSubJetpT_Truth";
221 fShapesVarNames_Splittings[6] =
"HardestSubJetD0";
222 fShapesVarNames_Splittings[7] =
"HardestSubJetD0_Truth";
223 fShapesVarNames_Splittings[8] =
"RadiatorE";
224 fShapesVarNames_Splittings[9] =
"RadiatorE_Truth";
225 fShapesVarNames_Splittings[10] =
"RadiatorpT";
226 fShapesVarNames_Splittings[11] =
"RadiatorpT_Truth";
240 fhEvent=
new TH1D(
"fhEvent",
"fhEvent",40,-0.5,39.5);
262 if (Matching_AOD_deltaAODlevel <= 0)
return kTRUE;
295 std::vector<AliAODRecoDecayHF2Prong*> D_Candidates_Vector;
296 D_Candidates_Vector.clear();
302 if (!Track_Container)
return kTRUE;
306 if (!D_Candidate)
continue;
310 Int_t N_Mass_Hypotheses=1;
311 if (Mass_Hypo_Type <= 0 || Mass_Hypo_Type>3)
continue;
312 else if (Mass_Hypo_Type ==3) N_Mass_Hypotheses=2;
314 Int_t Matched_Truth_Particle_PDG=0;
315 Int_t Is_Prompt_Correct_Quark_PDG=-1;
319 const Int_t D_Candidtae_N_Daughters=2;
320 Int_t D_Candidtae_Daughters_PDG[D_Candidtae_N_Daughters] = {211,321};
321 Int_t D_Candidate_MatchedTruth_Label = D_Candidate->MatchToMC(
fCandidatePDG, Particle_Container->GetArray(), D_Candidtae_N_Daughters, D_Candidtae_Daughters_PDG);
322 Bool_t Is_Prompt_Correct_Quark=kFALSE;
323 if (D_Candidate_MatchedTruth_Label >= 0) {
324 AliAODMCParticle* Matched_Truth_Particle =
static_cast<AliAODMCParticle*
>(Particle_Container->GetArray()->At(D_Candidate_MatchedTruth_Label));
325 if (Matched_Truth_Particle) {
328 Int_t Matched_Truth_Particle_Mother_Label=Matched_Truth_Particle->GetMother();
329 while (Matched_Truth_Particle_Mother_Label >= 0) {
330 AliAODMCParticle* Matched_Truth_Particle_Mother =
static_cast<AliAODMCParticle*
>(Particle_Container->GetArray()->At(Matched_Truth_Particle_Mother_Label));
331 if (Matched_Truth_Particle_Mother){
332 Int_t Original_Quark_PDG=4;
334 if (TMath::Abs(Matched_Truth_Particle_Mother->GetPdgCode())==Original_Quark_PDG) Is_Prompt_Correct_Quark=kTRUE;
335 if (TMath::Abs(Matched_Truth_Particle_Mother->GetPdgCode()) == 4){
336 Is_Prompt_Correct_Quark_PDG=4;
339 if (TMath::Abs(Matched_Truth_Particle_Mother->GetPdgCode()) == 5){
340 Is_Prompt_Correct_Quark_PDG=5;
343 if (Matched_Truth_Particle_Mother_Label==Matched_Truth_Particle_Mother->GetMother())
break;
344 Matched_Truth_Particle_Mother_Label=Matched_Truth_Particle_Mother->GetMother();
349 Matched_Truth_Particle_PDG = Matched_Truth_Particle->PdgCode();
362 if (Mass_Hypo_Type==1){
373 if (Mass_Hypo_Type==2){
386 for (
Int_t i_Mass_Hypotheses=0; i_Mass_Hypotheses<N_Mass_Hypotheses; i_Mass_Hypotheses++){
389 if (Mass_Hypo_Type==3){
390 if(i_Mass_Hypotheses==0){
400 if(i_Mass_Hypotheses==1){
414 D_Candidate_LorentzVector.SetPtEtaPhiM(D_Candidate->Pt(), D_Candidate->Eta(), D_Candidate->Phi(), Inv_Mass_D);
415 fFastJetWrapper->
AddInputVector(D_Candidate_LorentzVector.Px(), D_Candidate_LorentzVector.Py(), D_Candidate_LorentzVector.Pz(), D_Candidate_LorentzVector.E(), 0);
417 AliAODTrack *
Track = NULL;
418 for (
Int_t i_Track=0; i_Track<Track_Container->
GetNTracks(); i_Track++){
427 for (
UInt_t i_Jet=0; i_Jet < Inclusive_Jets.size(); i_Jet++){
429 if (Inclusive_Jets[i_Jet].perp()<
fJetMinPt)
continue;
430 if (TMath::Abs(Inclusive_Jets[i_Jet].pseudorapidity()) > 0.9-
fJetRadius)
continue;
432 for (
UInt_t i_Constituents = 0; i_Constituents < Constituents.size(); i_Constituents++) {
433 if (Constituents[i_Constituents].user_index() == 0) {
437 if (!Is_D_Jet)
continue;
439 std::vector<Double_t> Splittings_Zg;
440 std::vector<Double_t> Splittings_DeltaR;
441 std::vector<Double_t> Splittings_LeadingSubJetpT;
442 std::vector<Double_t> Splittings_HardestSubJetD0;
443 std::vector<Double_t> Splittings_RadiatorE;
444 std::vector<Double_t> Splittings_RadiatorpT;
446 Bool_t Is_D_SubJet=kFALSE;
447 fastjet::JetDefinition Jet_Definition(fastjet::cambridge_algorithm,
fJetRadius*2.5,static_cast<fastjet::RecombinationScheme>(0), fastjet::Best);
450 fastjet::ClusterSequence Cluster_Sequence_CA(Reclustered_Particles, Jet_Definition);
451 std::vector<fastjet::PseudoJet> Reclustered_Jet = Cluster_Sequence_CA.inclusive_jets(0.0);
452 Reclustered_Jet = sorted_by_pt(Reclustered_Jet);
455 fastjet::PseudoJet Daughter_Jet = Reclustered_Jet[0];
456 fastjet::PseudoJet Parent_SubJet_1;
457 fastjet::PseudoJet Parent_SubJet_2;
459 while(Daughter_Jet.has_parents(Parent_SubJet_1,Parent_SubJet_2)){
460 if(Parent_SubJet_1.perp() < Parent_SubJet_2.perp())
std::swap(Parent_SubJet_1,Parent_SubJet_2);
461 Splittings_LeadingSubJetpT.push_back(Parent_SubJet_1.perp());
462 vector < fastjet::PseudoJet > Hard_SubJet_Constituents = sorted_by_pt(Parent_SubJet_1.constituents());
464 for(
UInt_t j=0;j<Hard_SubJet_Constituents.size();j++){
465 if(Hard_SubJet_Constituents[j].user_index()==0) Is_D_SubJet=kTRUE;
468 if (!Is_D_SubJet) Splittings_HardestSubJetD0.push_back(1.0);
469 else Splittings_HardestSubJetD0.push_back(2.0);
472 Splittings_DeltaR.push_back(Parent_SubJet_1.delta_R(Parent_SubJet_2));
473 Splittings_Zg.push_back(Parent_SubJet_2.perp()/(Parent_SubJet_1.perp()+Parent_SubJet_2.perp()));
474 Splittings_RadiatorE.push_back(Daughter_Jet.E());
475 Splittings_RadiatorpT.push_back(Daughter_Jet.perp());
476 Daughter_Jet=Parent_SubJet_1;
480 }
catch (fastjet::Error) { }
487 D_Candidates_Vector.push_back(D_Candidate);
488 if (i_Mass_Hypotheses==0)
fhEvent->Fill(15);
492 if (Mass_Hypo_Type ==1) Flag_D=1.0;
493 else if (Mass_Hypo_Type ==2) Flag_D=2.0;
494 else if (Mass_Hypo_Type ==3 && i_Mass_Hypotheses==0) Flag_D=3.0;
495 else if (Mass_Hypo_Type ==3 && i_Mass_Hypotheses==1) Flag_D=4.0;
529 if(N_DMesons==0)
fhEvent->Fill(16);
530 if(N_DMesons==1)
fhEvent->Fill(17);
531 if(N_DMesons==2)
fhEvent->Fill(18);
532 if(N_DMesons==3)
fhEvent->Fill(19);
533 if(N_DMesons==4)
fhEvent->Fill(20);
534 if(N_DMesons==5)
fhEvent->Fill(21);
535 if(N_DMesons==6)
fhEvent->Fill(22);
540 for (
UInt_t i_D_Found=0; i_D_Found<D_Candidates_Vector.size(); i_D_Found++){
541 fFastJetWrapper->
AddInputVector(D_Candidates_Vector[i_D_Found]->Px(), D_Candidates_Vector[i_D_Found]->Py(), D_Candidates_Vector[i_D_Found]->Pz(), D_Candidates_Vector[i_D_Found]->AliAODRecoDecay::E(
fCandidatePDG), i_D_Found);
545 AliAODTrack *
Track = NULL;
546 Bool_t DMeson_Daughter_Track=kFALSE;
547 for (
Int_t i_Track=0; i_Track<Track_Container->
GetNTracks(); i_Track++){
548 for (
UInt_t i_D_Found=0; i_D_Found<D_Candidates_Vector.size(); i_D_Found++){
551 if(!Track) DMeson_Daughter_Track=kTRUE;
553 if (DMeson_Daughter_Track)
continue;
560 for (
UInt_t i_Jet=0; i_Jet < Inclusive_Jets.size(); i_Jet++){
561 if (Inclusive_Jets[i_Jet].perp()<
fJetMinPt)
continue;
562 if (TMath::Abs(Inclusive_Jets[i_Jet].pseudorapidity()) > 0.9-
fJetRadius)
continue;
565 for (
UInt_t i_Constituents = 0; i_Constituents < Constituents.size(); i_Constituents++) {
566 for (
UInt_t i_D_Found=0; i_D_Found<D_Candidates_Vector.size(); i_D_Found++){
567 if (Constituents[i_Constituents].user_index() == i_D_Found) {
572 if (Is_D_Jet)
continue;
574 std::vector<Double_t> Splittings_Zg;
575 std::vector<Double_t> Splittings_DeltaR;
576 std::vector<Double_t> Splittings_LeadingSubJetpT;
577 std::vector<Double_t> Splittings_HardestSubJetD0;
578 std::vector<Double_t> Splittings_RadiatorE;
579 std::vector<Double_t> Splittings_RadiatorpT;
582 fastjet::JetDefinition Jet_Definition(fastjet::cambridge_algorithm,
fJetRadius*2.5,static_cast<fastjet::RecombinationScheme>(0), fastjet::Best);
586 fastjet::ClusterSequence Cluster_Sequence_CA(Reclustered_Particles, Jet_Definition);
587 std::vector<fastjet::PseudoJet> Reclustered_Jet = Cluster_Sequence_CA.inclusive_jets(0.0);
588 Reclustered_Jet = sorted_by_pt(Reclustered_Jet);
591 fastjet::PseudoJet Daughter_Jet = Reclustered_Jet[0];
592 fastjet::PseudoJet Parent_SubJet_1;
593 fastjet::PseudoJet Parent_SubJet_2;
595 while(Daughter_Jet.has_parents(Parent_SubJet_1,Parent_SubJet_2)){
596 if(Parent_SubJet_1.perp() < Parent_SubJet_2.perp())
std::swap(Parent_SubJet_1,Parent_SubJet_2);
597 Splittings_LeadingSubJetpT.push_back(Parent_SubJet_1.perp());
598 Splittings_HardestSubJetD0.push_back(0.0);
599 Splittings_DeltaR.push_back(Parent_SubJet_1.delta_R(Parent_SubJet_2));
600 Splittings_Zg.push_back(Parent_SubJet_2.perp()/(Parent_SubJet_1.perp()+Parent_SubJet_2.perp()));
601 Splittings_RadiatorE.push_back(Daughter_Jet.E());
602 Splittings_RadiatorpT.push_back(Daughter_Jet.perp());
603 Daughter_Jet=Parent_SubJet_1;
607 }
catch (fastjet::Error) { }
657 std::vector<fastjet::PseudoJet> Inclusive_Jets_Truth;
658 std::vector<std::pair<Int_t, Int_t>> Inclusive_Jets_Truth_Labels;
659 std::vector<Int_t> Unmatched_Truth_Level_D;
660 Int_t NMatched_DMeson_Jets=0;
673 AliAODMCParticle* Truth_Particle=NULL;
675 for (
Int_t i_Particle=0; i_Particle<Particle_Container->
GetNParticles(); i_Particle++){
676 Truth_Particle =
static_cast<AliAODMCParticle*
>(Particle_Container->
GetAcceptParticle(i_Particle));
677 if (!Truth_Particle)
continue;
679 std::pair<Int_t, Int_t> Inclusive_Jet_Truth_Labels;
680 Inclusive_Jet_Truth_Labels.first=Truth_Particle->GetLabel();
681 Inclusive_Jet_Truth_Labels.second=NTruthD;
682 Inclusive_Jets_Truth_Labels.push_back(Inclusive_Jet_Truth_Labels);
683 Unmatched_Truth_Level_D.push_back(NTruthD);
692 if (NTruthD==0)
fhEvent->Fill(3);
693 if (NTruthD==1)
fhEvent->Fill(4);
694 if (NTruthD==2)
fhEvent->Fill(5);
695 if (NTruthD==3)
fhEvent->Fill(6);
696 if (NTruthD==4)
fhEvent->Fill(7);
697 if (NTruthD==5)
fhEvent->Fill(8);
698 if (NTruthD==6)
fhEvent->Fill(9);
707 if (!Track_Container)
return kTRUE;
712 if (!D_Candidate)
continue;
716 if (Mass_Hypo_Type <= 0 || Mass_Hypo_Type>3)
continue;
719 Int_t Matched_Truth_Particle_PDG=0;
722 const Int_t D_Candidtae_N_Daughters=2;
723 Int_t D_Candidtae_Daughters_PDG[D_Candidtae_N_Daughters] = {211,321};
724 Int_t D_Candidate_MatchedTruth_Label = D_Candidate->MatchToMC(
fCandidatePDG, Particle_Container->GetArray(), D_Candidtae_N_Daughters, D_Candidtae_Daughters_PDG);
725 Bool_t Is_Prompt_Correct_Quark=kFALSE;
726 Int_t Is_Prompt_Correct_Quark_PDG=-1;
727 AliAODMCParticle* Matched_Truth_Particle;
728 if (D_Candidate_MatchedTruth_Label >= 0) {
729 Matched_Truth_Particle =
static_cast<AliAODMCParticle*
>(Particle_Container->GetArray()->At(D_Candidate_MatchedTruth_Label));
730 if (Matched_Truth_Particle) {
733 Int_t Matched_Truth_Particle_Mother_Label=Matched_Truth_Particle->GetMother();
734 while (Matched_Truth_Particle_Mother_Label >= 0) {
735 AliAODMCParticle* Matched_Truth_Particle_Mother =
static_cast<AliAODMCParticle*
>(Particle_Container->GetArray()->At(Matched_Truth_Particle_Mother_Label));
736 if (Matched_Truth_Particle_Mother){
737 Int_t Original_Quark_PDG=4;
739 if (TMath::Abs(Matched_Truth_Particle_Mother->GetPdgCode()) == 4){
741 Is_Prompt_Correct_Quark_PDG=4;
743 if (TMath::Abs(Matched_Truth_Particle_Mother->GetPdgCode()) == 5){
745 Is_Prompt_Correct_Quark_PDG=5;
747 if (TMath::Abs(Matched_Truth_Particle_Mother->GetPdgCode())==Original_Quark_PDG) Is_Prompt_Correct_Quark=kTRUE;
748 if (Matched_Truth_Particle_Mother_Label==Matched_Truth_Particle_Mother->GetMother())
break;
749 Matched_Truth_Particle_Mother_Label=Matched_Truth_Particle_Mother->GetMother();
754 Matched_Truth_Particle_PDG = Matched_Truth_Particle->PdgCode();
761 if (Mass_Hypo_Type==1 && Matched_Truth_Particle_PDG!=
fCandidatePDG){
766 if (Mass_Hypo_Type==2 && Matched_Truth_Particle_PDG!=-
fCandidatePDG){
771 if (Mass_Hypo_Type==3 && TMath::Abs(Matched_Truth_Particle_PDG)!=
fCandidatePDG){
785 if (Mass_Hypo_Type==1 || (Mass_Hypo_Type==3 && Matched_Truth_Particle_PDG==
fCandidatePDG)){
788 Inv_Mass_D_Truth=0.0;
790 if (Mass_Hypo_Type==2 || (Mass_Hypo_Type==3 && Matched_Truth_Particle_PDG==-
fCandidatePDG)){
793 Inv_Mass_D_Truth=0.0;
801 D_Candidate_LorentzVector.SetPtEtaPhiM(D_Candidate->Pt(), D_Candidate->Eta(), D_Candidate->Phi(), Inv_Mass_D);
802 fFastJetWrapper->
AddInputVector(D_Candidate_LorentzVector.Px(), D_Candidate_LorentzVector.Py(), D_Candidate_LorentzVector.Pz(), D_Candidate_LorentzVector.E(), 0);
805 if (!Track_Container)
continue;
807 AliAODTrack *
Track = NULL;
808 for (
Int_t i_Track=0; i_Track<Track_Container->
GetNTracks(); i_Track++){
818 for (
UInt_t i_Jet=0; i_Jet < Inclusive_Jets.size(); i_Jet++){
820 if (Inclusive_Jets[i_Jet].perp()<
fJetMinPt)
continue;
821 if (TMath::Abs(Inclusive_Jets[i_Jet].pseudorapidity()) > 0.9-
fJetRadius)
continue;
823 for (
UInt_t i_Constituents = 0; i_Constituents < Constituents.size(); i_Constituents++) {
824 if (Constituents[i_Constituents].user_index() == 0) {
830 if (!Is_D_Jet)
continue;
834 Int_t i_Matched_D_Jet_Truth=-1;
835 for (
UInt_t k=0; k< Inclusive_Jets_Truth_Labels.size(); k++){
836 if(Inclusive_Jets_Truth_Labels[k].first==D_Candidate_MatchedTruth_Label) i_Matched_D_Jet_Truth=Inclusive_Jets_Truth_Labels[k].second;
839 for (
UInt_t i_Jet_Truth=0; i_Jet_Truth < Inclusive_Jets_Truth.size(); i_Jet_Truth++){
840 Bool_t Is_Jet_Truth_Matched=kFALSE;
841 if (TMath::Abs(Inclusive_Jets_Truth[i_Jet_Truth].pseudorapidity()) > 0.9-
fJetRadius)
continue;
843 for (
UInt_t i_Constituents_Truth = 0; i_Constituents_Truth < Constituents_Truth.size(); i_Constituents_Truth++) {
844 if (Constituents_Truth[i_Constituents_Truth].user_index() == i_Matched_D_Jet_Truth) {
845 Is_Jet_Truth_Matched=kTRUE;
846 for (
UInt_t i_Unmacthed_D=0; i_Unmacthed_D<Unmatched_Truth_Level_D.size(); i_Unmacthed_D++){
847 if (Unmatched_Truth_Level_D[i_Unmacthed_D]==i_Matched_D_Jet_Truth) Unmatched_Truth_Level_D.erase(Unmatched_Truth_Level_D.begin()+i_Unmacthed_D);
851 if (!Is_Jet_Truth_Matched)
continue;
853 NMatched_DMeson_Jets++;
858 std::vector<Double_t> Splittings_Zg;
859 std::vector<Double_t> Splittings_DeltaR;
860 std::vector<Double_t> Splittings_LeadingSubJetpT;
861 std::vector<Double_t> Splittings_HardestSubJetD0;
862 std::vector<Double_t> Splittings_RadiatorE;
863 std::vector<Double_t> Splittings_RadiatorpT;
865 Bool_t Is_D_SubJet=kFALSE;
866 fastjet::JetDefinition Jet_Definition(fastjet::cambridge_algorithm,
fJetRadius*2.5,static_cast<fastjet::RecombinationScheme>(0), fastjet::Best);
870 fastjet::ClusterSequence Cluster_Sequence_CA(Reclustered_Particles, Jet_Definition);
871 std::vector<fastjet::PseudoJet> Reclustered_Jet = Cluster_Sequence_CA.inclusive_jets(0.0);
872 Reclustered_Jet = sorted_by_pt(Reclustered_Jet);
875 fastjet::PseudoJet Daughter_Jet = Reclustered_Jet[0];
876 fastjet::PseudoJet Parent_SubJet_1;
877 fastjet::PseudoJet Parent_SubJet_2;
879 while(Daughter_Jet.has_parents(Parent_SubJet_1,Parent_SubJet_2)){
880 if(Parent_SubJet_1.perp() < Parent_SubJet_2.perp())
std::swap(Parent_SubJet_1,Parent_SubJet_2);
881 Splittings_LeadingSubJetpT.push_back(Parent_SubJet_1.perp());
882 vector < fastjet::PseudoJet > Hard_SubJet_Constituents = sorted_by_pt(Parent_SubJet_1.constituents());
884 for(
UInt_t j=0;j<Hard_SubJet_Constituents.size();j++){
885 if(Hard_SubJet_Constituents[j].user_index()==0) Is_D_SubJet=kTRUE;
889 if (!Is_D_SubJet) Splittings_HardestSubJetD0.push_back(1.0);
890 else Splittings_HardestSubJetD0.push_back(2.0);
893 Splittings_DeltaR.push_back(Parent_SubJet_1.delta_R(Parent_SubJet_2));
894 Splittings_Zg.push_back(Parent_SubJet_2.perp()/(Parent_SubJet_1.perp()+Parent_SubJet_2.perp()));
895 Splittings_RadiatorE.push_back(Daughter_Jet.E());
896 Splittings_RadiatorpT.push_back(Daughter_Jet.perp());
897 Daughter_Jet=Parent_SubJet_1;
901 }
catch (fastjet::Error) { }
904 std::vector<Double_t> Splittings_Zg_Truth;
905 std::vector<Double_t> Splittings_DeltaR_Truth;
906 std::vector<Double_t> Splittings_LeadingSubJetpT_Truth;
907 std::vector<Double_t> Splittings_HardestSubJetD0_Truth;
908 std::vector<Double_t> Splittings_RadiatorE_Truth;
909 std::vector<Double_t> Splittings_RadiatorpT_Truth;
912 Bool_t Is_D_SubJet_Truth=kFALSE;
913 fastjet::JetDefinition Jet_Definition_Truth(fastjet::cambridge_algorithm,
fJetRadius*2.5,static_cast<fastjet::RecombinationScheme>(0), fastjet::Best);
917 fastjet::ClusterSequence Cluster_Sequence_CA_Truth(Reclustered_Particles_Truth, Jet_Definition_Truth);
918 std::vector<fastjet::PseudoJet> Reclustered_Jet_Truth = Cluster_Sequence_CA_Truth.inclusive_jets(0.0);
919 Reclustered_Jet_Truth = sorted_by_pt(Reclustered_Jet_Truth);
922 fastjet::PseudoJet Daughter_Jet_Truth = Reclustered_Jet_Truth[0];
923 fastjet::PseudoJet Parent_SubJet_1_Truth;
924 fastjet::PseudoJet Parent_SubJet_2_Truth;
926 while(Daughter_Jet_Truth.has_parents(Parent_SubJet_1_Truth,Parent_SubJet_2_Truth)){
927 if(Parent_SubJet_1_Truth.perp() < Parent_SubJet_2_Truth.perp())
std::swap(Parent_SubJet_1_Truth,Parent_SubJet_2_Truth);
928 Splittings_LeadingSubJetpT_Truth.push_back(Parent_SubJet_1_Truth.perp());
929 vector < fastjet::PseudoJet > Hard_SubJet_Constituents_Truth = sorted_by_pt(Parent_SubJet_1_Truth.constituents());
930 Is_D_SubJet_Truth=kFALSE;
931 for(
UInt_t j=0;j<Hard_SubJet_Constituents_Truth.size();j++){
932 if(Hard_SubJet_Constituents_Truth[j].user_index()==i_Matched_D_Jet_Truth) Is_D_SubJet_Truth=kTRUE;
936 if (!Is_D_SubJet_Truth) Splittings_HardestSubJetD0_Truth.push_back(1.0);
937 else Splittings_HardestSubJetD0_Truth.push_back(2.0);
940 Splittings_DeltaR_Truth.push_back(Parent_SubJet_1_Truth.delta_R(Parent_SubJet_2_Truth));
941 Splittings_Zg_Truth.push_back(Parent_SubJet_2_Truth.perp()/(Parent_SubJet_1_Truth.perp()+Parent_SubJet_2_Truth.perp()));
942 Splittings_RadiatorE_Truth.push_back(Daughter_Jet_Truth.E());
943 Splittings_RadiatorpT_Truth.push_back(Daughter_Jet_Truth.perp());
944 Daughter_Jet_Truth=Parent_SubJet_1_Truth;
948 }
catch (fastjet::Error) { }
955 if (Mass_Hypo_Type ==1) Flag_D=1.0;
956 else if (Mass_Hypo_Type ==2) Flag_D=2.0;
957 else if (Mass_Hypo_Type ==3 && Matched_Truth_Particle->GetPdgCode()==
fCandidatePDG) Flag_D=3.0;
958 else if (Mass_Hypo_Type ==3 && Matched_Truth_Particle->GetPdgCode()==-
fCandidatePDG) Flag_D=4.0;
961 if (Matched_Truth_Particle->GetPdgCode()==
fCandidatePDG) Flag_D_Truth=1.0;
962 if (Matched_Truth_Particle->GetPdgCode()==-
fCandidatePDG) Flag_D_Truth=2.0;
966 fShapesVar[1] = Inclusive_Jets_Truth[i_Jet_Truth].perp();
1001 if(NMatched_DMeson_Jets==0)
fhEvent->Fill(24);
1002 if(NMatched_DMeson_Jets==1)
fhEvent->Fill(25);
1003 if(NMatched_DMeson_Jets==2)
fhEvent->Fill(26);
1004 if(NMatched_DMeson_Jets==3)
fhEvent->Fill(27);
1005 if(NMatched_DMeson_Jets==4)
fhEvent->Fill(28);
1006 if(NMatched_DMeson_Jets==5)
fhEvent->Fill(29);
1007 if(NMatched_DMeson_Jets==6)
fhEvent->Fill(30);
1011 if(Unmatched_Truth_Level_D.size()==0)
fhEvent->Fill(31);
1012 if(Unmatched_Truth_Level_D.size()==1)
fhEvent->Fill(32);
1013 if(Unmatched_Truth_Level_D.size()==2)
fhEvent->Fill(33);
1014 if(Unmatched_Truth_Level_D.size()==3)
fhEvent->Fill(34);
1015 if(Unmatched_Truth_Level_D.size()==4)
fhEvent->Fill(35);
1016 if(Unmatched_Truth_Level_D.size()==5)
fhEvent->Fill(36);
1017 if(Unmatched_Truth_Level_D.size()==6)
fhEvent->Fill(37);
1019 for (
UInt_t i_Jet_Truth=0; i_Jet_Truth < Inclusive_Jets_Truth.size(); i_Jet_Truth++){
1020 AliAODMCParticle* Truth_D_Particle = NULL;
1021 Bool_t Is_Unmatched_D=kFALSE;
1022 Int_t D_Meson_Matched_Index=-1;
1023 if (TMath::Abs(Inclusive_Jets_Truth[i_Jet_Truth].pseudorapidity()) > 0.9-
fJetRadius)
continue;
1025 for (
UInt_t i_Constituents_Truth = 0; i_Constituents_Truth < Constituents_Truth.size(); i_Constituents_Truth++) {
1026 for (
UInt_t i_Unmacthed_D=0; i_Unmacthed_D<Unmatched_Truth_Level_D.size(); i_Unmacthed_D++){
1027 if(Constituents_Truth[i_Constituents_Truth].user_index() == Unmatched_Truth_Level_D[i_Unmacthed_D]){
1028 Is_Unmatched_D=kTRUE;
1029 D_Meson_Matched_Index=Constituents_Truth[i_Constituents_Truth].user_index();
1030 for(
UInt_t i_MC_Label=0; i_MC_Label<Inclusive_Jets_Truth_Labels.size(); i_MC_Label++){
1031 if (Inclusive_Jets_Truth_Labels[i_MC_Label].second==Constituents_Truth[i_Constituents_Truth].user_index()){
1032 Truth_D_Particle=
static_cast<AliAODMCParticle*
>(Particle_Container->GetArray()->At(Inclusive_Jets_Truth_Labels[i_MC_Label].first));
1038 if (!Is_Unmatched_D)
continue;
1042 Bool_t Is_Prompt_Correct_Quark=kFALSE;
1043 Int_t Is_Prompt_Correct_Quark_PDG=-1;
1044 Int_t Truth_D_Particle_Mother_Label=Truth_D_Particle->GetMother();
1045 while (Truth_D_Particle_Mother_Label >= 0) {
1046 AliAODMCParticle* Truth_D_Particle_Mother =
static_cast<AliAODMCParticle*
>(Particle_Container->GetArray()->At(Truth_D_Particle_Mother_Label));
1047 if (Truth_D_Particle_Mother){
1048 Int_t Original_Quark_PDG=4;
1050 if (TMath::Abs(Truth_D_Particle_Mother->GetPdgCode()) == 4){
1052 Is_Prompt_Correct_Quark_PDG=4;
1054 if (TMath::Abs(Truth_D_Particle_Mother->GetPdgCode()) == 5){
1056 Is_Prompt_Correct_Quark_PDG=5;
1058 if (TMath::Abs(Truth_D_Particle_Mother->GetPdgCode())==Original_Quark_PDG) Is_Prompt_Correct_Quark=kTRUE;
1059 if (Truth_D_Particle_Mother_Label==Truth_D_Particle_Mother->GetMother())
break;
1060 Truth_D_Particle_Mother_Label=Truth_D_Particle_Mother->GetMother();
1069 Bool_t Is_D_SubJet_Truth=kFALSE;
1070 fastjet::JetDefinition Jet_Definition_Truth(fastjet::cambridge_algorithm,
fJetRadius*2.5,static_cast<fastjet::RecombinationScheme>(0), fastjet::Best);
1072 std::vector<Double_t> Splittings_Zg_Truth;
1073 std::vector<Double_t> Splittings_DeltaR_Truth;
1074 std::vector<Double_t> Splittings_LeadingSubJetpT_Truth;
1075 std::vector<Double_t> Splittings_HardestSubJetD0_Truth;
1076 std::vector<Double_t> Splittings_RadiatorE_Truth;
1077 std::vector<Double_t> Splittings_RadiatorpT_Truth;
1082 fastjet::ClusterSequence Cluster_Sequence_CA_Truth(Reclustered_Particles_Truth, Jet_Definition_Truth);
1083 std::vector<fastjet::PseudoJet> Reclustered_Jet_Truth = Cluster_Sequence_CA_Truth.inclusive_jets(0.0);
1084 Reclustered_Jet_Truth = sorted_by_pt(Reclustered_Jet_Truth);
1087 fastjet::PseudoJet Daughter_Jet_Truth = Reclustered_Jet_Truth[0];
1088 fastjet::PseudoJet Parent_SubJet_1_Truth;
1089 fastjet::PseudoJet Parent_SubJet_2_Truth;
1091 while(Daughter_Jet_Truth.has_parents(Parent_SubJet_1_Truth,Parent_SubJet_2_Truth)){
1092 if(Parent_SubJet_1_Truth.perp() < Parent_SubJet_2_Truth.perp())
std::swap(Parent_SubJet_1_Truth,Parent_SubJet_2_Truth);
1093 Splittings_LeadingSubJetpT_Truth.push_back(Parent_SubJet_1_Truth.perp());
1094 vector < fastjet::PseudoJet > Hard_SubJet_Constituents_Truth = sorted_by_pt(Parent_SubJet_1_Truth.constituents());
1095 Is_D_SubJet_Truth=kFALSE;
1096 for(
UInt_t j=0;j<Hard_SubJet_Constituents_Truth.size();j++){
1097 if(Hard_SubJet_Constituents_Truth[j].user_index()==D_Meson_Matched_Index) Is_D_SubJet_Truth=kTRUE;
1101 if (!Is_D_SubJet_Truth) Splittings_HardestSubJetD0_Truth.push_back(1.0);
1102 else Splittings_HardestSubJetD0_Truth.push_back(2.0);
1105 Splittings_DeltaR_Truth.push_back(Parent_SubJet_1_Truth.delta_R(Parent_SubJet_2_Truth));
1106 Splittings_Zg_Truth.push_back(Parent_SubJet_2_Truth.perp()/(Parent_SubJet_1_Truth.perp()+Parent_SubJet_2_Truth.perp()));
1107 Splittings_RadiatorE_Truth.push_back(Daughter_Jet_Truth.E());
1108 Splittings_RadiatorpT_Truth.push_back(Daughter_Jet_Truth.perp());
1109 Daughter_Jet_Truth=Parent_SubJet_1_Truth;
1113 }
catch (fastjet::Error) { }
1119 Inv_Mass_D_Truth=0.0;
1124 Inv_Mass_D_Truth=0.0;
1130 fShapesVar[1] = Inclusive_Jets_Truth[i_Jet_Truth].perp();
1176 std::vector<fastjet::PseudoJet> Inclusive_Jets_Truth;
1177 std::vector<std::pair<Int_t, Int_t>> Inclusive_Jets_Truth_Labels;
1189 AliAODMCParticle* Truth_Particle=NULL;
1191 for (
Int_t i_Particle=0; i_Particle<Particle_Container->
GetNParticles(); i_Particle++){
1192 Truth_Particle =
static_cast<AliAODMCParticle*
>(Particle_Container->
GetAcceptParticle(i_Particle));
1193 if (!Truth_Particle)
continue;
1194 if (TMath::Abs(Truth_Particle->GetPdgCode())==
fCandidatePDG){
1196 std::pair<Int_t, Int_t> Inclusive_Jet_Truth_Labels;
1197 Inclusive_Jet_Truth_Labels.first=Truth_Particle->GetLabel();
1198 Inclusive_Jet_Truth_Labels.second=NTruthD;
1199 Inclusive_Jets_Truth_Labels.push_back(Inclusive_Jet_Truth_Labels);
1209 for (
UInt_t i_Jet_Truth=0; i_Jet_Truth < Inclusive_Jets_Truth.size(); i_Jet_Truth++){
1210 AliAODMCParticle* Truth_D_Particle = NULL;
1211 Bool_t Is_DJet_Truth=kFALSE;
1212 Int_t D_Meson_Matched_Index=-1;
1213 if (TMath::Abs(Inclusive_Jets_Truth[i_Jet_Truth].pseudorapidity()) > 0.9-
fJetRadius)
continue;
1215 for (
UInt_t i_Constituents_Truth = 0; i_Constituents_Truth < Constituents_Truth.size(); i_Constituents_Truth++) {
1217 if(Constituents_Truth[i_Constituents_Truth].user_index() >=0 && Constituents_Truth[i_Constituents_Truth].user_index() < NTruthD){
1218 D_Meson_Matched_Index=Constituents_Truth[i_Constituents_Truth].user_index();
1219 Is_DJet_Truth=kTRUE;
1220 for(
UInt_t i_MC_Label=0; i_MC_Label<Inclusive_Jets_Truth_Labels.size(); i_MC_Label++){
1221 if (Inclusive_Jets_Truth_Labels[i_MC_Label].second==Constituents_Truth[i_Constituents_Truth].user_index()){
1222 Truth_D_Particle=
static_cast<AliAODMCParticle*
>(Particle_Container->GetArray()->At(Inclusive_Jets_Truth_Labels[i_MC_Label].first));
1229 if (!Is_DJet_Truth)
fhEvent->Fill(4);
1230 if (Is_DJet_Truth)
fhEvent->Fill(5);
1234 Bool_t Is_Prompt_Correct_Quark=kFALSE;
1235 Int_t Is_Prompt_Correct_Quark_PDG=-1;
1236 Int_t Truth_D_Particle_Mother_Label=Truth_D_Particle->GetMother();
1237 while (Truth_D_Particle_Mother_Label >= 0) {
1238 AliAODMCParticle* Truth_D_Particle_Mother =
static_cast<AliAODMCParticle*
>(Particle_Container->GetArray()->At(Truth_D_Particle_Mother_Label));
1239 if (Truth_D_Particle_Mother){
1240 Int_t Original_Quark_PDG=4;
1242 if (TMath::Abs(Truth_D_Particle_Mother->GetPdgCode()) ==Original_Quark_PDG) Is_Prompt_Correct_Quark=kTRUE;
1243 if (TMath::Abs(Truth_D_Particle_Mother->GetPdgCode()) ==4){
1245 Is_Prompt_Correct_Quark_PDG=4;
1247 if (TMath::Abs(Truth_D_Particle_Mother->GetPdgCode()) ==5){
1249 Is_Prompt_Correct_Quark_PDG=5;
1251 if (Truth_D_Particle_Mother_Label==Truth_D_Particle_Mother->GetMother())
break;
1252 Truth_D_Particle_Mother_Label=Truth_D_Particle_Mother->GetMother();
1261 Bool_t Is_D_SubJet_Truth=kFALSE;
1262 fastjet::JetDefinition Jet_Definition_Truth(fastjet::cambridge_algorithm,
fJetRadius*2.5,static_cast<fastjet::RecombinationScheme>(0), fastjet::Best);
1264 std::vector<Double_t> Splittings_Zg_Truth;
1265 std::vector<Double_t> Splittings_DeltaR_Truth;
1266 std::vector<Double_t> Splittings_LeadingSubJetpT_Truth;
1267 std::vector<Double_t> Splittings_HardestSubJetD0_Truth;
1268 std::vector<Double_t> Splittings_RadiatorE_Truth;
1269 std::vector<Double_t> Splittings_RadiatorpT_Truth;
1273 fastjet::ClusterSequence Cluster_Sequence_CA_Truth(Reclustered_Particles_Truth, Jet_Definition_Truth);
1274 std::vector<fastjet::PseudoJet> Reclustered_Jet_Truth = Cluster_Sequence_CA_Truth.inclusive_jets(0.0);
1275 Reclustered_Jet_Truth = sorted_by_pt(Reclustered_Jet_Truth);
1278 fastjet::PseudoJet Daughter_Jet_Truth = Reclustered_Jet_Truth[0];
1279 fastjet::PseudoJet Parent_SubJet_1_Truth;
1280 fastjet::PseudoJet Parent_SubJet_2_Truth;
1282 while(Daughter_Jet_Truth.has_parents(Parent_SubJet_1_Truth,Parent_SubJet_2_Truth)){
1283 if(Parent_SubJet_1_Truth.perp() < Parent_SubJet_2_Truth.perp())
std::swap(Parent_SubJet_1_Truth,Parent_SubJet_2_Truth);
1284 Splittings_LeadingSubJetpT_Truth.push_back(Parent_SubJet_1_Truth.perp());
1285 vector < fastjet::PseudoJet > Hard_SubJet_Constituents_Truth = sorted_by_pt(Parent_SubJet_1_Truth.constituents());
1286 Is_D_SubJet_Truth=kFALSE;
1287 for(
UInt_t j=0;j<Hard_SubJet_Constituents_Truth.size();j++){
1288 if(Hard_SubJet_Constituents_Truth[j].user_index()==D_Meson_Matched_Index) Is_D_SubJet_Truth=kTRUE;
1291 if (
fIncludeInclusive && !Is_DJet_Truth) Splittings_HardestSubJetD0_Truth.push_back(0.0);
1292 else if (Is_DJet_Truth && !Is_D_SubJet_Truth) Splittings_HardestSubJetD0_Truth.push_back(1.0);
1293 else if (Is_DJet_Truth && Is_D_SubJet_Truth)Splittings_HardestSubJetD0_Truth.push_back(2.0);
1296 Splittings_DeltaR_Truth.push_back(Parent_SubJet_1_Truth.delta_R(Parent_SubJet_2_Truth));
1297 Splittings_Zg_Truth.push_back(Parent_SubJet_2_Truth.perp()/(Parent_SubJet_1_Truth.perp()+Parent_SubJet_2_Truth.perp()));
1298 Splittings_RadiatorE_Truth.push_back(Daughter_Jet_Truth.E());
1299 Splittings_RadiatorpT_Truth.push_back(Daughter_Jet_Truth.perp());
1300 Daughter_Jet_Truth=Parent_SubJet_1_Truth;
1304 }
catch (fastjet::Error) { }
1312 else if (Is_DJet_Truth){
1315 Inv_Mass_D_Truth=0.0;
1317 D_Pt=Truth_D_Particle->Pt();
1322 Inv_Mass_D_Truth=0.0;
1324 D_Pt=Truth_D_Particle->Pt();
1331 fShapesVar[1] = Inclusive_Jets_Truth[i_Jet_Truth].perp();
1363 if (NTruthD==0)
fhEvent->Fill(11);
1364 if (NTruthD==1)
fhEvent->Fill(12);
1365 if (NTruthD==2)
fhEvent->Fill(13);
1366 if (NTruthD==3)
fhEvent->Fill(14);
1367 if (NTruthD==4)
fhEvent->Fill(15);
1368 if (NTruthD==5)
fhEvent->Fill(16);
1369 if (NTruthD==6)
fhEvent->Fill(17);
std::vector< std::vector< Double_t > > fShapesVar_Splittings_HardestSubJetD0_Truth
TTree * fTreeResponseMatrixAxis
void SetDMesonCandidate(AliAODRecoDecay *c)
std::vector< std::vector< Double_t > > fShapesVar_Splittings_RadiatorE_Truth
Base task in the EMCAL framework.
std::vector< std::vector< Double_t > > fShapesVar_Splittings_HardestSubJetD0
Int_t GetNParticles() const
static Int_t CheckMatchingAODdeltaAODevents()
std::vector< std::vector< Double_t > > fShapesVar_Splittings_LeadingSubJetpT
std::vector< std::vector< Double_t > > fShapesVar_Splittings_RadiatorpT_Truth
std::vector< std::vector< Double_t > > fShapesVar_Splittings_Zg
Bool_t FillHistograms()
Function filling histograms.
Double_t InvMassD0() const
void SetRecombScheme(const fastjet::RecombinationScheme &scheme)
std::vector< std::vector< Double_t > > fShapesVar_Splittings_DeltaR_Truth
TString kData
Declare data MC or deltaAOD.
Select tracks based on specific prescriptions of HF analysis.
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
AliFJWrapper * fFastJetWrapper
!
const std::vector< fastjet::PseudoJet > & GetInclusiveJets() const
virtual AliVParticle * GetAcceptParticle(Int_t i=-1) const
virtual AliVParticle * GetAcceptParticle(Int_t i=-1) const
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
void Terminate(Option_t *option)
void SetAlgorithm(const fastjet::JetAlgorithm &algor)
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
AliAnalysisTaskHFSubstructure()
Double_t InvMassD0bar() const
virtual void Clear(const Option_t *="")
void SetRejectedOriginMap(UInt_t m)
virtual Bool_t RetrieveEventObjects()
Retrieve common objects from event.
void SetAcceptedDecayMap(UInt_t m)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Select MC particles based on specific prescriptions of HF analysis.
std::vector< std::vector< Double_t > > fShapesVar_Splittings_Zg_Truth
JetShapeType fJetShapeType
void SetGhostArea(Double_t gharea)
std::vector< fastjet::PseudoJet > GetJetConstituents(UInt_t idx) const
AliFJWrapper * fFastJetWrapper_Truth
!
Bool_t IsEventSelected(AliVEvent *event)
AliEmcalList * fOutput
!output list
Double_t fShapesVar[nVar]
virtual ~AliAnalysisTaskHFSubstructure()
Bool_t IsSpecialPDGFound() const
AliTrackContainer * GetTrackContainer(Int_t i=0) const
void SetMakeGeneralHistograms(Bool_t g)
Bool_t IsSelected(TObject *obj)
void UserCreateOutputObjects()
std::vector< std::vector< Double_t > > fShapesVar_Splittings_DeltaR
virtual void AddInputVector(Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index=-99999)
void UserCreateOutputObjects()
Main initialization function on the worker.
void SetSpecialPDG(Int_t pdg)
void SetAreaType(const fastjet::AreaType &atype)
virtual Bool_t IsInFiducialAcceptance(Double_t, Double_t) const
std::vector< std::vector< Double_t > > fShapesVar_Splittings_LeadingSubJetpT_Truth
TClonesArray * fCandidateArray
void SetRejectISR(Bool_t b)
std::vector< std::vector< Double_t > > fShapesVar_Splittings_RadiatorpT
std::vector< std::vector< Double_t > > fShapesVar_Splittings_RadiatorE