HighLAND
numuBkgInAntiNuModeCCMultiTrackFGD2Selection.cxx
1 #include "numuBkgInAntiNuModeCCMultiTrackFGD2Selection.hxx"
2 #include "antiNumuCCMultiTrackFGD2Selection.hxx"
3 #include "baseSelection.hxx"
4 #include "CutUtils.hxx"
5 #include "EventBoxUtils.hxx"
6 #include "Parameters.hxx"
7 #include "SubDetId.hxx"
8 #include "SystId.hxx"
9 #include "VersioningUtils.hxx"
10 #include "SystematicUtils.hxx"
11 
12 
13 //*******************************************************************************
14 numuBkgInAntiNuModeCCMultiTrackFGD2Selection::numuBkgInAntiNuModeCCMultiTrackFGD2Selection(bool forceBreak): SelectionBase(forceBreak,EventBoxId::kEventBoxTracker){
15 //*******************************************************************************
16 
17  // initialize selections being used
18  _numuCCMultiPiFGD2Selection.Initialize();
19  _numuBkgInAntiNuModeCCFGD2Selection.Initialize();
20  _numuBkgInAntiNuModeCCMultiTrackSelection.Initialize();
21 }
22 
23 //*******************************************************************************
25 //*******************************************************************************
26 
27  // Copy all steps from the numuBkgInAntiNuModeCCFGD2Selection
28  CopySteps(_numuBkgInAntiNuModeCCFGD2Selection);
29 
30  //Additional actions for the multi-pi selection.
31  AddStep(StepBase::kAction, "fill_summary numuBkgMultiTrackFGD2", new FillSummaryAction_numuBkgMultiTrackFGD2());
32 
33  //Add a split to the trunk with 2 branches.
34  AddSplit(2);
35 
36  //First branch is for CC1Track enhanced sample
37  AddStep(0, StepBase::kCut, "CC1Track", new AntiNuMuCCMultiTrackFGD2_CC1TrackCut());
38 
39  //Second branch is for CCNTracks enhanced sample
40  AddStep(1, StepBase::kCut, "CCNTracks", new AntiNuMuCCMultiTrackFGD2_CCNTracksCut());
41 
42  // Set the branch aliases to the three branches
43  SetBranchAlias(0,"CC1Track",0);
44  SetBranchAlias(1,"CCNTracks",1);
45 
46  // By default the preselection correspond to cuts 0-2
47  SetPreSelectionAccumLevel(2);
48 }
49 
50 //*******************************************************************************
52 //*******************************************************************************
53 
54  // The detector in which the selection is applied
55  SetDetectorFV(SubDetId::kFGD2);
56 
57  _numuCCMultiPiFGD2Selection.SetDetectorFV(SubDetId::kFGD2);
58  _numuBkgInAntiNuModeCCFGD2Selection.SetDetectorFV(SubDetId::kFGD2);
59  _numuBkgInAntiNuModeCCMultiTrackSelection.SetDetectorFV(SubDetId::kFGD2);
60 }
61 
62 //********************************************************************
63 bool numuBkgInAntiNuModeCCMultiTrackFGD2Selection::FillEventSummary(AnaEventC& event, Int_t allCutsPassed[]){
64 //********************************************************************
65 
66  //CC1Track
67  if(allCutsPassed[0]){
68  static_cast<AnaEventSummaryB*>(event.Summary)->EventSample = SampleId::kFGD2NuMuBkgInAntiNuModeCC1Track;
69  }
70  //CCNTracks
71  else if (allCutsPassed[1]){
72  static_cast<AnaEventSummaryB*>(event.Summary)->EventSample = SampleId::kFGD2NuMuBkgInAntiNuModeCCNTracks;
73  }
74  // otherwise kUnassigned is used from the EventSummary constructor
75  return (static_cast<AnaEventSummaryB*>(event.Summary)->EventSample != SampleId::kUnassigned);
76 }
77 
78 
79 //*********************************************************************
81 //*********************************************************************
82 
83  // Cast the ToyBox to the appropriate type
84  ToyBoxTracker& box = *static_cast<ToyBoxTracker*>(&boxB);
85 
86  if(!box.HMNtrack) return 1;
87 
88  static_cast<AnaEventSummaryB*>(event.Summary)->LeptonCandidate[SampleId::kFGD2NuMuBkgInAntiNuModeCC1Track] = box.HMNtrack;
89  static_cast<AnaEventSummaryB*>(event.Summary)->LeptonCandidate[SampleId::kFGD2NuMuBkgInAntiNuModeCCNTracks] = box.HMNtrack;
90 
91  for(int i = 0; i < 4; ++i){
92  static_cast<AnaEventSummaryB*>(event.Summary)->VertexPosition[SampleId::kFGD2NuMuBkgInAntiNuModeCC1Track][i] = box.HMNtrack->PositionStart[i];
93  static_cast<AnaEventSummaryB*>(event.Summary)->VertexPosition[SampleId::kFGD2NuMuBkgInAntiNuModeCCNTracks][i] = box.HMNtrack->PositionStart[i];
94  }
95  if(box.HMNtrack->GetTrueParticle()){
96  static_cast<AnaEventSummaryB*>(event.Summary)->TrueVertex[SampleId::kFGD2NuMuBkgInAntiNuModeCC1Track] = box.HMNtrack->GetTrueParticle()->TrueVertex;
97  static_cast<AnaEventSummaryB*>(event.Summary)->TrueVertex[SampleId::kFGD2NuMuBkgInAntiNuModeCCNTracks] = box.HMNtrack->GetTrueParticle()->TrueVertex;
98  }
99  return 1;
100 
101 }
102 
103 //**************************************************
105 //**************************************************
106 
107  return _numuCCMultiPiFGD2Selection.IsRelevantRecObjectForSystematic(event,track,systId,branch);
108 }
109 
110 //**************************************************
111 bool numuBkgInAntiNuModeCCMultiTrackFGD2Selection::IsRelevantTrueObjectForSystematic(const AnaEventC& event, AnaTrueObjectC* trueTrack, SystId_h systId, Int_t branch) const{
112 //**************************************************
113 
114  return _numuCCMultiPiFGD2Selection.IsRelevantTrueObjectForSystematic(event,trueTrack,systId,branch);
115 }
116 
117 //**************************************************
118 bool numuBkgInAntiNuModeCCMultiTrackFGD2Selection::IsRelevantSystematic(const AnaEventC& event, const ToyBoxB& box, SystId_h systId, Int_t branch) const{
119 //**************************************************
120 
121  return _numuBkgInAntiNuModeCCMultiTrackSelection.IsRelevantSystematic(event,box,systId,branch);
122 }
123 
124 //**************************************************
126 //**************************************************
127 
128  _numuCCMultiPiFGD2Selection.InitializeEvent(event);
129 }
130 
131 //********************************************************************
132 bool numuBkgInAntiNuModeCCMultiTrackFGD2Selection::CheckRedoSelection(const AnaEventC& event, const ToyBoxB& PreviousToyBox, Int_t& redoFromStep){
133 //********************************************************************
134 
135  return _numuCCMultiPiFGD2Selection.CheckRedoSelection(event, PreviousToyBox, redoFromStep);
136 }
void DefineDetectorFV()
Define the detector Fiducial Volume in which this selection is applied.
AnaTrueVertexB * TrueVertex
Pointer to the AnaTrueVertexB of the interaction that created this AnaTrueParticleB.
Float_t PositionStart[4]
The reconstructed start position of the particle.
void InitializeEvent(AnaEventC &event)
Fill the EventBox with the objects needed by this selection.
AnaTrackB * HMNtrack
For storing the highest momentum negative track.
bool IsRelevantRecObjectForSystematic(const AnaEventC &event, AnaRecObjectC *recObj, SystId_h systId, Int_t branch) const
Is this track relevant for a given systematic (prior to selection, call when initializing the event...
bool IsRelevantSystematic(const AnaEventC &event, const ToyBoxB &box, SystId_h systId, Int_t branch) const
Is this systematic relevant for this selection.
AnaEventSummaryC * Summary
A summary of the event with high level quantities.
bool IsRelevantTrueObjectForSystematic(const AnaEventC &event, AnaTrueObjectC *trueObj, SystId_h systId, Int_t branch) const
Is this true track relevant for a given systematic (prior to selection, call when initializing the ev...
AnaTrueParticleB * GetTrueParticle() const
Return a casted version of the AnaTrueObject associated.
bool CheckRedoSelection(const AnaEventC &event, const ToyBoxB &PreviousToyBox, Int_t &redoFromStep)
void Initialize()
Initialize this selection: defines the steps and the detectorFV.