Changes in modules/VertexSorter.cc [4154bbd:77e9ae1] in git
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
modules/VertexSorter.cc
r4154bbd r77e9ae1 16 16 #include "classes/DelphesPileUpReader.h" 17 17 18 #include "ExRootAnalysis/ExRootClassifier.h" 19 #include "ExRootAnalysis/ExRootFilter.h" 18 20 #include "ExRootAnalysis/ExRootResult.h" 19 #include "ExRootAnalysis/ExRootFilter.h" 20 #include "ExRootAnalysis/ExRootClassifier.h" 21 21 22 #include "TDatabasePDG.h" 23 #include "TFormula.h" 24 #include "TLorentzVector.h" 22 25 #include "TMath.h" 26 #include "TMatrixT.h" 27 #include "TObjArray.h" 28 #include "TRandom3.h" 23 29 #include "TString.h" 24 #include "TFormula.h"25 #include "TRandom3.h"26 #include "TObjArray.h"27 #include "TDatabasePDG.h"28 #include "TLorentzVector.h"29 #include "TMatrixT.h"30 30 #include "TVector3.h" 31 31 32 #include <algorithm> 33 #include <iostream> 34 #include <map> 35 #include <stdexcept> 36 #include <string> 32 37 #include <utility> 33 #include <algorithm>34 #include <stdexcept>35 #include <iostream>36 38 #include <vector> 37 #include <map>38 #include <string>39 39 40 40 using namespace std; 41 41 42 static const Double_t mm 43 static const Double_t m = 1000. *mm;44 static const Double_t ns 45 static const Double_t s = 1.e+9 * ns;46 static const Double_t c_light = 2.99792458e+8 * m/s;42 static const Double_t mm = 1.; 43 static const Double_t m = 1000. * mm; 44 static const Double_t ns = 1.; 45 static const Double_t s = 1.e+9 * ns; 46 static const Double_t c_light = 2.99792458e+8 * m / s; 47 47 48 48 //------------------------------------------------------------------------------ … … 68 68 fItTrackInputArray = fTrackInputArray->MakeIterator(); 69 69 70 if (string(GetString("JetInputArray", "")) != "")71 72 73 74 70 if(string(GetString("JetInputArray", "")) != "") 71 { 72 fJetInputArray = ImportArray(GetString("JetInputArray", "")); 73 fItJetInputArray = fJetInputArray->MakeIterator(); 74 } 75 75 76 76 // import beamspot … … 82 82 { 83 83 fBeamSpotInputArray = 0; 84 } 85 84 } 85 86 86 fOutputArray = ExportArray(GetString("OutputArray", "clusters")); 87 87 … … 99 99 //------------------------------------------------------------------------------ 100 100 101 static Bool_t secondDescending 101 static Bool_t secondDescending(pair<UInt_t, Double_t> pair0, pair<UInt_t, Double_t> pair1) 102 102 { 103 103 return (pair0.second > pair1.second); 104 104 } 105 105 106 static Bool_t secondAscending 106 static Bool_t secondAscending(pair<UInt_t, Double_t> pair0, pair<UInt_t, Double_t> pair1) 107 107 { 108 108 return (pair0.second < pair1.second); … … 121 121 vector<pair<Int_t, Double_t> >::const_iterator itSortedClusterIDs; 122 122 123 for (Int_t iCluster = 0; iCluster < fInputArray->GetEntries(); iCluster++)124 125 const Candidate &cluster = *((Candidate *) fInputArray->At(iCluster));126 127 128 123 for(Int_t iCluster = 0; iCluster < fInputArray->GetEntries(); iCluster++) 124 { 125 const Candidate &cluster = *((Candidate *)fInputArray->At(iCluster)); 126 clusterIDToIndex[cluster.ClusterIndex] = iCluster; 127 clusterIDToSumPT2[cluster.ClusterIndex] = 0.0; 128 } 129 129 130 130 if(fMethod == "BTV") 131 132 if(!fJetInputArray)133 134 135 136 137 138 139 while((candidate = static_cast<Candidate*>(fItTrackInputArray->Next())))140 141 if (candidate->Momentum.Pt() < 1.0)142 143 if(candidate->ClusterIndex < 0)144 145 TLorentzVector p (candidate->Momentum.Px (), candidate->Momentum.Py (), candidate->Momentum.Pz (), candidate->Momentum.E());146 147 148 149 while((jetCandidate = static_cast<Candidate*>(fItJetInputArray->Next())))150 151 if (jetCandidate->Momentum.Pt() < 30.0)152 153 TLorentzVector q (jetCandidate->Momentum.Px (), jetCandidate->Momentum.Py (), jetCandidate->Momentum.Pz (), jetCandidate->Momentum.E());154 155 if (p.DeltaR(q) > 0.4)156 157 158 159 160 if(!isInJet)161 162 163 clusterIDToSumPT2.at (candidate->ClusterIndex) += candidate->Momentum.Pt () * candidate->Momentum.Pt();164 165 166 for(itClusterIDToSumPT2 = clusterIDToSumPT2.begin(); itClusterIDToSumPT2 != clusterIDToSumPT2.end(); ++itClusterIDToSumPT2)167 sortedClusterIDs.push_back (make_pair(itClusterIDToSumPT2->first, itClusterIDToSumPT2->second));168 sort (sortedClusterIDs.begin (), sortedClusterIDs.end(), secondDescending);169 170 else if 171 172 if(!fBeamSpotInputArray)173 174 175 176 177 if (!fBeamSpotInputArray->GetSize())178 179 180 181 182 183 beamSpotCandidate = (Candidate *) fBeamSpotInputArray->At(0);184 for (Int_t iCluster = 0; iCluster < fInputArray->GetEntries(); iCluster++)185 186 const Candidate &cluster = *((Candidate *) fInputArray->At(iCluster));187 sortedClusterIDs.push_back (make_pair (cluster.ClusterIndex, fabs (cluster.Position.Z () - beamSpotCandidate->Position.Z())));188 189 sort (sortedClusterIDs.begin (), sortedClusterIDs.end(), secondAscending);190 191 else if 192 193 194 while((candidate = static_cast<Candidate*>(fItTrackInputArray->Next())))195 196 if(candidate->IsPU)197 198 for(itClusterIDToIndex = clusterIDToIndex.begin(); itClusterIDToIndex != clusterIDToIndex.end(); ++itClusterIDToIndex)199 200 if(candidate->ClusterIndex != itClusterIDToIndex->first)201 202 clusterIDToSumPT2.at (itClusterIDToIndex->first) += candidate->Momentum.Pt () * candidate->Momentum.Pt();203 204 205 206 for(itClusterIDToSumPT2 = clusterIDToSumPT2.begin(); itClusterIDToSumPT2 != clusterIDToSumPT2.end(); ++itClusterIDToSumPT2)207 sortedClusterIDs.push_back (make_pair(itClusterIDToSumPT2->first, itClusterIDToSumPT2->second));208 sort (sortedClusterIDs.begin (), sortedClusterIDs.end(), secondDescending);209 131 { 132 if(!fJetInputArray) 133 { 134 cout << "BTV PV sorting selected, but no jet collection given!" << endl; 135 throw 0; 136 } 137 138 fItTrackInputArray->Reset(); 139 while((candidate = static_cast<Candidate *>(fItTrackInputArray->Next()))) 140 { 141 if(candidate->Momentum.Pt() < 1.0) 142 continue; 143 if(candidate->ClusterIndex < 0) 144 continue; 145 TLorentzVector p(candidate->Momentum.Px(), candidate->Momentum.Py(), candidate->Momentum.Pz(), candidate->Momentum.E()); 146 Bool_t isInJet = false; 147 148 fItJetInputArray->Reset(); 149 while((jetCandidate = static_cast<Candidate *>(fItJetInputArray->Next()))) 150 { 151 if(jetCandidate->Momentum.Pt() < 30.0) 152 continue; 153 TLorentzVector q(jetCandidate->Momentum.Px(), jetCandidate->Momentum.Py(), jetCandidate->Momentum.Pz(), jetCandidate->Momentum.E()); 154 155 if(p.DeltaR(q) > 0.4) 156 continue; 157 isInJet = true; 158 break; 159 } 160 if(!isInJet) 161 continue; 162 163 clusterIDToSumPT2.at(candidate->ClusterIndex) += candidate->Momentum.Pt() * candidate->Momentum.Pt(); 164 } 165 166 for(itClusterIDToSumPT2 = clusterIDToSumPT2.begin(); itClusterIDToSumPT2 != clusterIDToSumPT2.end(); ++itClusterIDToSumPT2) 167 sortedClusterIDs.push_back(make_pair(itClusterIDToSumPT2->first, itClusterIDToSumPT2->second)); 168 sort(sortedClusterIDs.begin(), sortedClusterIDs.end(), secondDescending); 169 } 170 else if(fMethod == "GenClosest") 171 { 172 if(!fBeamSpotInputArray) 173 { 174 cout << "GenClosest PV sorting selected, but no beamspot collection given!" << endl; 175 throw 0; 176 } 177 if(!fBeamSpotInputArray->GetSize()) 178 { 179 cout << "Beamspot collection is empty!" << endl; 180 throw 0; 181 } 182 183 beamSpotCandidate = (Candidate *)fBeamSpotInputArray->At(0); 184 for(Int_t iCluster = 0; iCluster < fInputArray->GetEntries(); iCluster++) 185 { 186 const Candidate &cluster = *((Candidate *)fInputArray->At(iCluster)); 187 sortedClusterIDs.push_back(make_pair(cluster.ClusterIndex, fabs(cluster.Position.Z() - beamSpotCandidate->Position.Z()))); 188 } 189 sort(sortedClusterIDs.begin(), sortedClusterIDs.end(), secondAscending); 190 } 191 else if(fMethod == "GenBest") 192 { 193 fItTrackInputArray->Reset(); 194 while((candidate = static_cast<Candidate *>(fItTrackInputArray->Next()))) 195 { 196 if(candidate->IsPU) 197 continue; 198 for(itClusterIDToIndex = clusterIDToIndex.begin(); itClusterIDToIndex != clusterIDToIndex.end(); ++itClusterIDToIndex) 199 { 200 if(candidate->ClusterIndex != itClusterIDToIndex->first) 201 continue; 202 clusterIDToSumPT2.at(itClusterIDToIndex->first) += candidate->Momentum.Pt() * candidate->Momentum.Pt(); 203 } 204 } 205 206 for(itClusterIDToSumPT2 = clusterIDToSumPT2.begin(); itClusterIDToSumPT2 != clusterIDToSumPT2.end(); ++itClusterIDToSumPT2) 207 sortedClusterIDs.push_back(make_pair(itClusterIDToSumPT2->first, itClusterIDToSumPT2->second)); 208 sort(sortedClusterIDs.begin(), sortedClusterIDs.end(), secondDescending); 209 } 210 210 else 211 212 213 214 215 216 217 218 219 for 220 221 Candidate *cluster = (Candidate *) fInputArray->At (clusterIDToIndex.at(itSortedClusterIDs->first));222 if(fMethod == "BTV")223 224 else if(fMethod == "GenClosest")225 226 else if(fMethod == "GenBest")227 228 fOutputArray->Add(cluster);229 230 } 231 232 //------------------------------------------------------------------------------ 211 { 212 cout << "\"" << fMethod << "\" is not a valid sorting method!" << endl; 213 cout << "Valid methods are:" << endl; 214 cout << " BTV" << endl; 215 cout << " GenClosest" << endl; 216 cout << " GenBest" << endl; 217 throw 0; 218 } 219 for(itSortedClusterIDs = sortedClusterIDs.begin(); itSortedClusterIDs != sortedClusterIDs.end(); ++itSortedClusterIDs) 220 { 221 Candidate *cluster = (Candidate *)fInputArray->At(clusterIDToIndex.at(itSortedClusterIDs->first)); 222 if(fMethod == "BTV") 223 cluster->BTVSumPT2 = itSortedClusterIDs->second; 224 else if(fMethod == "GenClosest") 225 cluster->GenDeltaZ = itSortedClusterIDs->second; 226 else if(fMethod == "GenBest") 227 cluster->GenSumPT2 = itSortedClusterIDs->second; 228 fOutputArray->Add(cluster); 229 } 230 } 231 232 //------------------------------------------------------------------------------
Note:
See TracChangeset
for help on using the changeset viewer.