Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 37 additions & 3 deletions programs/MakeDSelector/MakeDSelector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ void Print_HeaderFile(string locSelectorBaseName, DTreeInterface* locTreeInterfa
locHeaderStream << " // EXAMPLES:" << endl;
locHeaderStream << " TH1I* dHist_MissingMassSquared;" << endl;
locHeaderStream << " TH1I* dHist_BeamEnergy;" << endl;
locHeaderStream << " TH1I* dHist_BeamEnergy_BestChiSq;" << endl;
locHeaderStream << endl;
locHeaderStream << " ClassDef(" << locSelectorName << ", 0);" << endl;
locHeaderStream << "};" << endl;
Expand Down Expand Up @@ -309,6 +310,7 @@ void Print_SourceFile(string locSelectorBaseName, DTreeInterface* locTreeInterfa
locSourceStream << " //EXAMPLE MANUAL HISTOGRAMS:" << endl;
locSourceStream << " dHist_MissingMassSquared = new TH1I(\"MissingMassSquared\", \";Missing Mass Squared (GeV/c^{2})^{2}\", 600, -0.06, 0.06);" << endl;
locSourceStream << " dHist_BeamEnergy = new TH1I(\"BeamEnergy\", \";Beam Energy (GeV)\", 600, 0.0, 12.0);" << endl;
locSourceStream << " dHist_BeamEnergy_BestChiSq = new TH1I(\"BeamEnergy_BestChiSq\", \";Beam Energy (GeV)\", 600, 0.0, 12.0);" << endl;
locSourceStream << endl;
locSourceStream << " /************************** EXAMPLE USER INITIALIZATION: CUSTOM OUTPUT BRANCHES - MAIN TREE *************************/" << endl;
locSourceStream << endl;
Expand Down Expand Up @@ -400,8 +402,11 @@ void Print_SourceFile(string locSelectorBaseName, DTreeInterface* locTreeInterfa
locSourceStream << " //So, for each quantity you histogram, keep track of what particles you used (for a given combo)" << endl;
locSourceStream << " //Then for each combo, just compare to what you used before, and make sure it\'s unique" << endl;
locSourceStream << endl;
locSourceStream << " //EXAMPLE 0: Event-specific info:" << endl;
locSourceStream << " Bool_t locUsedSoFar_Event = false; // Flag used to mark if the best chi-squared combo is filled in the histogram" << endl;
locSourceStream << endl;
locSourceStream << " //EXAMPLE 1: Particle-specific info:" << endl;
locSourceStream << " set<Int_t> locUsedSoFar_BeamEnergy; //Int_t: Unique ID for beam particles. set: easy to use, fast to search" << endl;
locSourceStream << " set<Int_t> locUsedSoFar_BeamEnergy; //Int_t: Unique ID for beam particles. set: easy to use, fast to search. This container is used for the \"hybrid\" method dealing with combinatorics." << endl;
locSourceStream << endl;
locSourceStream << " //EXAMPLE 2: Combo-specific info:" << endl;
locSourceStream << " //In general: Could have multiple particles with the same PID: Use a set of Int_t\'s" << endl;
Expand All @@ -426,9 +431,25 @@ void Print_SourceFile(string locSelectorBaseName, DTreeInterface* locTreeInterfa
locSourceStream << endl;
locSourceStream << " /************************************************* LOOP OVER COMBOS *************************************************/" << endl;
locSourceStream << endl;
locSourceStream << " //Loop over combos" << endl;
locSourceStream << " // Vector to store combo information" << endl;
locSourceStream << " std::vector<std::pair<UInt_t, Double_t>> loc_combos;" << endl;
locSourceStream << endl;
locSourceStream << " // Pre-loop to gather kinfit ComboIndex-chiSq pairing and sort by chiSq value ascendingly" << endl;
locSourceStream << " for(UInt_t loc_i = 0; loc_i < Get_NumCombos(); ++loc_i)" << endl;
locSourceStream << " {" << endl;
locSourceStream << " dComboWrapper->Set_ComboIndex(loc_i);" << endl;
locSourceStream << " Double_t locChiSq = dComboWrapper->Get_ChiSq_KinFit(\"\");" << endl;
locSourceStream << " loc_combos.push_back(std::make_pair(loc_i, locChiSq));" << endl;
locSourceStream << " }" << endl;
locSourceStream << " // Sort the combos by ChiSq" << endl;
locSourceStream << " std::sort(loc_combos.begin(), loc_combos.end(), [](const std::pair<UInt_t, Double_t>& a, const std::pair<UInt_t, Double_t>& b) {" << endl;
locSourceStream << " return a.second < b.second;" << endl;
locSourceStream << " });" << endl;
locSourceStream << endl;
locSourceStream << " //Loop over combos" << endl;
locSourceStream << " for(const auto& loc_combo : loc_combos)" << endl;
locSourceStream << " {" << endl;
locSourceStream << " UInt_t loc_i = loc_combo.first;" << endl;
locSourceStream << " //Set branch array indices for combo and all combo particles" << endl;
locSourceStream << " dComboWrapper->Set_ComboIndex(loc_i);" << endl;
locSourceStream << endl;
Expand Down Expand Up @@ -548,7 +569,7 @@ void Print_SourceFile(string locSelectorBaseName, DTreeInterface* locTreeInterfa
locSourceStream << " /********************************************* GET COMBO RF TIMING INFO *****************************************/" << endl;
locSourceStream << endl;
locSourceStream << " TLorentzVector locBeamX4_Measured = dComboBeamWrapper->Get_X4_Measured();" << endl;
locSourceStream << " //Double_t locBunchPeriod = dAnalysisUtilities.Get_BeamBunchPeriod(Get_RunNumber());" << endl;
locSourceStream << " // Double_t locBunchPeriod = dAnalysisUtilities.Get_BeamBunchPeriod(Get_RunNumber());" << endl;
locSourceStream << " // Double_t locDeltaT_RF = dAnalysisUtilities.Get_DeltaT_RF(Get_RunNumber(), locBeamX4_Measured, dComboWrapper);" << endl;
locSourceStream << " // Int_t locRelBeamBucket = dAnalysisUtilities.Get_RelativeBeamBucket(Get_RunNumber(), locBeamX4_Measured, dComboWrapper); // 0 for in-time events, non-zero integer for out-of-time photons" << endl;
locSourceStream << " // Int_t locNumOutOfTimeBunchesInTree = XXX; //YOU need to specify this number" << endl;
Expand Down Expand Up @@ -625,6 +646,19 @@ void Print_SourceFile(string locSelectorBaseName, DTreeInterface* locTreeInterfa
locSourceStream << " dTreeInterface->Fill_TObject<TLorentzVector>(\"my_p4_array\", locMyComboP4, loc_i);" << endl;
locSourceStream << " */" << endl;
locSourceStream << endl;
locSourceStream << " /**************************************** EXAMPLE: BEST chi2 METHOD *****************************************/" << endl;
locSourceStream << endl;
locSourceStream << " // Need to uncomment the section computing combo timing info before running this block of code" << endl;
locSourceStream << " //if(locUsedSoFar_Event == false)" << endl;
locSourceStream << " //{" << endl;
locSourceStream << " // Fill the histogram only when the beam bunch is in-time. " << endl;
locSourceStream << " //if(!locRelBeamBucket)" << endl;
locSourceStream << " //{" << endl;
locSourceStream << " // dHist_BeamEnergy_BestChiSq->Fill(locBeamP4.E());" << endl;
locSourceStream << " // locUsedSoFar_Event = true;" << endl;
locSourceStream << " //}" << endl;
locSourceStream << " //}" << endl;
locSourceStream << endl;
locSourceStream << " /**************************************** EXAMPLE: HISTOGRAM BEAM ENERGY *****************************************/" << endl;
locSourceStream << endl;
locSourceStream << " //Histogram beam energy (if haven\'t already)" << endl;
Expand Down