Changes in / [21eab4f:ec5e04b] in git
- Files:
-
- 14 deleted
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
r21eab4f rec5e04b 137 137 tmp/examples/Example1.$(ObjSuf): \ 138 138 examples/Example1.cpp \ 139 classes/DelphesClasses.h \140 external/ExRootAnalysis/ExRootTreeReader.h \141 external/ExRootAnalysis/ExRootTreeWriter.h \142 external/ExRootAnalysis/ExRootTreeBranch.h \143 external/ExRootAnalysis/ExRootResult.h \144 external/ExRootAnalysis/ExRootUtilities.h145 Validation$(ExeSuf): \146 tmp/examples/Validation.$(ObjSuf)147 148 tmp/examples/Validation.$(ObjSuf): \149 examples/Validation.cpp \150 139 classes/DelphesClasses.h \ 151 140 external/ExRootAnalysis/ExRootTreeReader.h \ … … 161 150 root2pileup$(ExeSuf) \ 162 151 stdhep2pileup$(ExeSuf) \ 163 Example1$(ExeSuf) \ 164 Validation$(ExeSuf) 152 Example1$(ExeSuf) 165 153 166 154 EXECUTABLE_OBJ += \ … … 171 159 tmp/converters/root2pileup.$(ObjSuf) \ 172 160 tmp/converters/stdhep2pileup.$(ObjSuf) \ 173 tmp/examples/Example1.$(ObjSuf) \ 174 tmp/examples/Validation.$(ObjSuf) 161 tmp/examples/Example1.$(ObjSuf) 175 162 176 163 DelphesHepMC$(ExeSuf): \ … … 196 183 classes/DelphesLHEFReader.h \ 197 184 external/ExRootAnalysis/ExRootTreeWriter.h \ 198 external/ExRootAnalysis/ExRootTreeBranch.h \199 external/ExRootAnalysis/ExRootProgressBar.h200 DelphesROOT$(ExeSuf): \201 tmp/readers/DelphesROOT.$(ObjSuf)202 203 tmp/readers/DelphesROOT.$(ObjSuf): \204 readers/DelphesROOT.cpp \205 modules/Delphes.h \206 classes/DelphesStream.h \207 classes/DelphesClasses.h \208 classes/DelphesFactory.h \209 external/ExRootAnalysis/ExRootTreeWriter.h \210 external/ExRootAnalysis/ExRootTreeReader.h \211 185 external/ExRootAnalysis/ExRootTreeBranch.h \ 212 186 external/ExRootAnalysis/ExRootProgressBar.h … … 226 200 DelphesHepMC$(ExeSuf) \ 227 201 DelphesLHEF$(ExeSuf) \ 228 DelphesROOT$(ExeSuf) \229 202 DelphesSTDHEP$(ExeSuf) 230 203 … … 232 205 tmp/readers/DelphesHepMC.$(ObjSuf) \ 233 206 tmp/readers/DelphesLHEF.$(ObjSuf) \ 234 tmp/readers/DelphesROOT.$(ObjSuf) \235 207 tmp/readers/DelphesSTDHEP.$(ObjSuf) 236 208 … … 347 319 modules/EnergySmearing.h \ 348 320 modules/MomentumSmearing.h \ 349 modules/TrackSmearing.h \350 321 modules/ImpactParameterSmearing.h \ 351 322 modules/TimeSmearing.h \ … … 371 342 modules/StatusPidFilter.h \ 372 343 modules/PdgCodeFilter.h \ 373 modules/BeamSpotFilter.h \374 modules/RecoPuFilter.h \375 344 modules/Cloner.h \ 376 345 modules/Weighter.h \ … … 378 347 modules/JetFlavorAssociation.h \ 379 348 modules/JetFakeParticle.h \ 380 modules/VertexSorter.h \381 modules/VertexFinder.h \382 modules/VertexFinderDA4D.h \383 349 modules/ExampleModule.h 384 350 tmp/modules/ModulesDict$(PcmSuf): \ … … 587 553 classes/DelphesFactory.h \ 588 554 classes/DelphesFormula.h 589 tmp/modules/BeamSpotFilter.$(ObjSuf): \590 modules/BeamSpotFilter.$(SrcSuf) \591 modules/BeamSpotFilter.h \592 classes/DelphesClasses.h \593 classes/DelphesFactory.h \594 classes/DelphesFormula.h \595 external/ExRootAnalysis/ExRootResult.h \596 external/ExRootAnalysis/ExRootFilter.h \597 external/ExRootAnalysis/ExRootClassifier.h598 555 tmp/modules/Calorimeter.$(ObjSuf): \ 599 556 modules/Calorimeter.$(SrcSuf) \ … … 828 785 external/ExRootAnalysis/ExRootFilter.h \ 829 786 external/ExRootAnalysis/ExRootClassifier.h 830 tmp/modules/RecoPuFilter.$(ObjSuf): \831 modules/RecoPuFilter.$(SrcSuf) \832 modules/RecoPuFilter.h \833 classes/DelphesClasses.h \834 classes/DelphesFactory.h \835 classes/DelphesFormula.h \836 external/ExRootAnalysis/ExRootResult.h \837 external/ExRootAnalysis/ExRootFilter.h \838 external/ExRootAnalysis/ExRootClassifier.h839 787 tmp/modules/SimpleCalorimeter.$(ObjSuf): \ 840 788 modules/SimpleCalorimeter.$(SrcSuf) \ … … 898 846 modules/TrackPileUpSubtractor.$(SrcSuf) \ 899 847 modules/TrackPileUpSubtractor.h \ 900 classes/DelphesClasses.h \901 classes/DelphesFactory.h \902 classes/DelphesFormula.h \903 external/ExRootAnalysis/ExRootResult.h \904 external/ExRootAnalysis/ExRootFilter.h \905 external/ExRootAnalysis/ExRootClassifier.h906 tmp/modules/TrackSmearing.$(ObjSuf): \907 modules/TrackSmearing.$(SrcSuf) \908 modules/TrackSmearing.h \909 848 classes/DelphesClasses.h \ 910 849 classes/DelphesFactory.h \ … … 929 868 classes/DelphesFactory.h \ 930 869 classes/DelphesFormula.h \ 931 external/ExRootAnalysis/ExRootResult.h \932 external/ExRootAnalysis/ExRootFilter.h \933 external/ExRootAnalysis/ExRootClassifier.h934 tmp/modules/VertexFinder.$(ObjSuf): \935 modules/VertexFinder.$(SrcSuf) \936 modules/VertexFinder.h \937 classes/DelphesClasses.h \938 classes/DelphesFactory.h \939 classes/DelphesFormula.h \940 classes/DelphesPileUpReader.h \941 external/ExRootAnalysis/ExRootResult.h \942 external/ExRootAnalysis/ExRootFilter.h \943 external/ExRootAnalysis/ExRootClassifier.h944 tmp/modules/VertexFinderDA4D.$(ObjSuf): \945 modules/VertexFinderDA4D.$(SrcSuf) \946 modules/VertexFinderDA4D.h \947 classes/DelphesClasses.h \948 classes/DelphesFactory.h \949 classes/DelphesFormula.h \950 classes/DelphesPileUpReader.h \951 external/ExRootAnalysis/ExRootResult.h \952 external/ExRootAnalysis/ExRootFilter.h \953 external/ExRootAnalysis/ExRootClassifier.h954 tmp/modules/VertexSorter.$(ObjSuf): \955 modules/VertexSorter.$(SrcSuf) \956 modules/VertexSorter.h \957 classes/DelphesClasses.h \958 classes/DelphesFactory.h \959 classes/DelphesFormula.h \960 classes/DelphesPileUpReader.h \961 870 external/ExRootAnalysis/ExRootResult.h \ 962 871 external/ExRootAnalysis/ExRootFilter.h \ … … 1022 931 tmp/modules/AngularSmearing.$(ObjSuf) \ 1023 932 tmp/modules/BTagging.$(ObjSuf) \ 1024 tmp/modules/BeamSpotFilter.$(ObjSuf) \1025 933 tmp/modules/Calorimeter.$(ObjSuf) \ 1026 934 tmp/modules/Cloner.$(ObjSuf) \ … … 1047 955 tmp/modules/PileUpJetID.$(ObjSuf) \ 1048 956 tmp/modules/PileUpMerger.$(ObjSuf) \ 1049 tmp/modules/RecoPuFilter.$(ObjSuf) \1050 957 tmp/modules/SimpleCalorimeter.$(ObjSuf) \ 1051 958 tmp/modules/StatusPidFilter.$(ObjSuf) \ … … 1056 963 tmp/modules/TrackCountingTauTagging.$(ObjSuf) \ 1057 964 tmp/modules/TrackPileUpSubtractor.$(ObjSuf) \ 1058 tmp/modules/TrackSmearing.$(ObjSuf) \1059 965 tmp/modules/TreeWriter.$(ObjSuf) \ 1060 966 tmp/modules/UniqueObjectFinder.$(ObjSuf) \ 1061 tmp/modules/VertexFinder.$(ObjSuf) \1062 tmp/modules/VertexFinderDA4D.$(ObjSuf) \1063 tmp/modules/VertexSorter.$(ObjSuf) \1064 967 tmp/modules/Weighter.$(ObjSuf) 1065 968 … … 1666 1569 tmp/external/tcl/tclVar.$(ObjSuf) 1667 1570 1668 modules/VertexFinderDA4D.h: \1669 classes/DelphesModule.h \1670 classes/DelphesClasses.h1671 @touch $@1672 1673 modules/TrackSmearing.h: \1674 classes/DelphesModule.h1675 @touch $@1676 1677 1571 external/fastjet/ClusterSequence.hh: \ 1678 1572 external/fastjet/PseudoJet.hh \ … … 1935 1829 @touch $@ 1936 1830 1937 modules/VertexSorter.h: \1938 classes/DelphesModule.h \1939 classes/DelphesClasses.h1940 @touch $@1941 1942 1831 modules/Delphes.h: \ 1943 1832 classes/DelphesModule.h 1944 @touch $@1945 1946 modules/VertexFinder.h: \1947 classes/DelphesModule.h \1948 classes/DelphesClasses.h1949 1833 @touch $@ 1950 1834 … … 2018 1902 @touch $@ 2019 1903 2020 modules/RecoPuFilter.h: \2021 classes/DelphesModule.h2022 @touch $@2023 2024 1904 modules/Hector.h: \ 2025 1905 classes/DelphesModule.h … … 2121 2001 2122 2002 modules/FastJetFinder.h: \ 2123 classes/DelphesModule.h2124 @touch $@2125 2126 modules/BeamSpotFilter.h: \2127 2003 classes/DelphesModule.h 2128 2004 @touch $@ -
cards/converter_card.tcl
r21eab4f rec5e04b 13 13 module TreeWriter TreeWriter { 14 14 # add Branch InputArray BranchName BranchClass 15 add Branch Delphes/ stableParticles Particle GenParticle15 add Branch Delphes/allParticles Particle GenParticle 16 16 } 17 17 -
cards/delphes_card_ATLAS.tcl
r21eab4f rec5e04b 141 141 142 142 # resolution formula for charged hadrons 143 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.0 6^2 + pt^2*1.3e-3^2) +144 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0. 10^2 + pt^2*1.7e-3^2) +145 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0. 25^2 + pt^2*3.1e-3^2)}143 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.5e-4^2) + 144 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*2.5e-4^2) + 145 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*5.5e-4^2)} 146 146 } 147 147 -
cards/delphes_card_ATLAS_PileUp.tcl
r21eab4f rec5e04b 177 177 # resolution formula for charged hadrons 178 178 # based on arXiv:1405.6569 179 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.0 6^2 + pt^2*1.3e-3^2) +180 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0. 10^2 + pt^2*1.7e-3^2) +181 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0. 25^2 + pt^2*3.1e-3^2)}179 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.5e-4^2) + 180 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*2.5e-4^2) + 181 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*5.5e-4^2)} 182 182 } 183 183 -
cards/delphes_card_CMS.tcl
r21eab4f rec5e04b 15 15 16 16 TrackMerger 17 18 ECal19 HCal20 21 17 Calorimeter 22 18 EFlowMerger … … 128 124 set EfficiencyFormula { (pt <= 0.1) * (0.00) + 129 125 (abs(eta) <= 1.5) * (pt > 0.1 && pt <= 1.0) * (0.75) + 130 (abs(eta) <= 1.5) * (pt > 1.0 && pt <= 1.0e3) * (0.99) + 131 (abs(eta) <= 1.5) * (pt > 1.0e3 ) * (0.99 * exp(0.5 - pt*5.0e-4)) + 132 126 (abs(eta) <= 1.5) * (pt > 1.0) * (0.99) + 133 127 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1 && pt <= 1.0) * (0.70) + 134 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0 && pt <= 1.0e3) * (0.98) + 135 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0e3) * (0.98 * exp(0.5 - pt*5.0e-4)) + 128 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 1.0) * (0.98) + 136 129 (abs(eta) > 2.5) * (0.00)} 137 130 } … … 149 142 # resolution formula for charged hadrons 150 143 # based on arXiv:1405.6569 151 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.0 6^2 + pt^2*1.3e-3^2) +152 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0. 10^2 + pt^2*1.7e-3^2) +153 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0. 25^2 + pt^2*3.1e-3^2)}144 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.5e-4^2) + 145 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*2.5e-4^2) + 146 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*5.5e-4^2)} 154 147 } 155 148 … … 199 192 } 200 193 201 202 203 194 ############# 204 # ECAL195 # Calorimeter 205 196 ############# 206 197 207 module SimpleCalorimeter ECal{198 module Calorimeter Calorimeter { 208 199 set ParticleInputArray ParticlePropagator/stableParticles 209 200 set TrackInputArray TrackMerger/tracks 210 201 211 set TowerOutputArray ecalTowers 202 set TowerOutputArray towers 203 set PhotonOutputArray photons 204 212 205 set EFlowTrackOutputArray eflowTracks 213 set EFlowTowerOutputArray eflowPhotons 214 215 set IsEcal true 216 217 set EnergyMin 0.5 218 set EnergySignificanceMin 2.0 219 220 set SmearTowerCenter true 221 222 set pi [expr {acos(-1)}] 223 224 # lists of the edges of each tower in eta and phi 225 # each list starts with the lower edge of the first tower 226 # the list ends with the higher edged of the last tower 227 228 # assume 0.02 x 0.02 resolution in eta,phi in the barrel |eta| < 1.5 229 230 set PhiBins {} 231 for {set i -180} {$i <= 180} {incr i} { 232 add PhiBins [expr {$i * $pi/180.0}] 233 } 234 235 # 0.02 unit in eta up to eta = 1.5 (barrel) 236 for {set i -85} {$i <= 86} {incr i} { 237 set eta [expr {$i * 0.0174}] 238 add EtaPhiBins $eta $PhiBins 239 } 240 241 # assume 0.02 x 0.02 resolution in eta,phi in the endcaps 1.5 < |eta| < 3.0 (HGCAL- ECAL) 242 243 set PhiBins {} 244 for {set i -180} {$i <= 180} {incr i} { 245 add PhiBins [expr {$i * $pi/180.0}] 246 } 247 248 # 0.02 unit in eta up to eta = 3 249 for {set i 1} {$i <= 84} {incr i} { 250 set eta [expr { -2.958 + $i * 0.0174}] 251 add EtaPhiBins $eta $PhiBins 252 } 253 254 for {set i 1} {$i <= 84} {incr i} { 255 set eta [expr { 1.4964 + $i * 0.0174}] 256 add EtaPhiBins $eta $PhiBins 257 } 258 259 # take present CMS granularity for HF 260 261 # 0.175 x (0.175 - 0.35) resolution in eta,phi in the HF 3.0 < |eta| < 5.0 262 set PhiBins {} 263 for {set i -18} {$i <= 18} {incr i} { 264 add PhiBins [expr {$i * $pi/18.0}] 265 } 266 267 foreach eta {-5 -4.7 -4.525 -4.35 -4.175 -4 -3.825 -3.65 -3.475 -3.3 -3.125 -2.958 3.125 3.3 3.475 3.65 3.825 4 4.175 4.35 4.525 4.7 5} { 268 add EtaPhiBins $eta $PhiBins 269 } 270 271 272 add EnergyFraction {0} {0.0} 273 # energy fractions for e, gamma and pi0 274 add EnergyFraction {11} {1.0} 275 add EnergyFraction {22} {1.0} 276 add EnergyFraction {111} {1.0} 277 # energy fractions for muon, neutrinos and neutralinos 278 add EnergyFraction {12} {0.0} 279 add EnergyFraction {13} {0.0} 280 add EnergyFraction {14} {0.0} 281 add EnergyFraction {16} {0.0} 282 add EnergyFraction {1000022} {0.0} 283 add EnergyFraction {1000023} {0.0} 284 add EnergyFraction {1000025} {0.0} 285 add EnergyFraction {1000035} {0.0} 286 add EnergyFraction {1000045} {0.0} 287 # energy fractions for K0short and Lambda 288 add EnergyFraction {310} {0.3} 289 add EnergyFraction {3122} {0.3} 290 291 # set ResolutionFormula {resolution formula as a function of eta and energy} 292 293 # for the ECAL barrel (|eta| < 1.5), see hep-ex/1306.2016 and 1502.02701 294 295 # set ECalResolutionFormula {resolution formula as a function of eta and energy} 296 # Eta shape from arXiv:1306.2016, Energy shape from arXiv:1502.02701 297 set ResolutionFormula { (abs(eta) <= 1.5) * (1+0.64*eta^2) * sqrt(energy^2*0.008^2 + energy*0.11^2 + 0.40^2) + 298 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (2.16 + 5.6*(abs(eta)-2)^2) * sqrt(energy^2*0.008^2 + energy*0.11^2 + 0.40^2) + 299 (abs(eta) > 2.5 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)} 300 301 } 302 303 304 ############# 305 # HCAL 306 ############# 307 308 module SimpleCalorimeter HCal { 309 set ParticleInputArray ParticlePropagator/stableParticles 310 set TrackInputArray ECal/eflowTracks 311 312 set TowerOutputArray hcalTowers 313 set EFlowTrackOutputArray eflowTracks 314 set EFlowTowerOutputArray eflowNeutralHadrons 315 316 set IsEcal false 317 318 set EnergyMin 1.0 319 set EnergySignificanceMin 2.0 206 set EFlowPhotonOutputArray eflowPhotons 207 set EFlowNeutralHadronOutputArray eflowNeutralHadrons 208 209 set ECalEnergyMin 0.5 210 set HCalEnergyMin 1.0 211 212 set ECalEnergySignificanceMin 1.0 213 set HCalEnergySignificanceMin 1.0 320 214 321 215 set SmearTowerCenter true … … 355 249 356 250 # default energy fractions {abs(PDG code)} {Fecal Fhcal} 357 add EnergyFraction {0} { 1.0}251 add EnergyFraction {0} {0.0 1.0} 358 252 # energy fractions for e, gamma and pi0 359 add EnergyFraction {11} { 0.0}360 add EnergyFraction {22} { 0.0}361 add EnergyFraction {111} { 0.0}253 add EnergyFraction {11} {1.0 0.0} 254 add EnergyFraction {22} {1.0 0.0} 255 add EnergyFraction {111} {1.0 0.0} 362 256 # energy fractions for muon, neutrinos and neutralinos 363 add EnergyFraction {12} {0.0 }364 add EnergyFraction {13} {0.0 }365 add EnergyFraction {14} {0.0 }366 add EnergyFraction {16} {0.0 }367 add EnergyFraction {1000022} {0.0 }368 add EnergyFraction {1000023} {0.0 }369 add EnergyFraction {1000025} {0.0 }370 add EnergyFraction {1000035} {0.0 }371 add EnergyFraction {1000045} {0.0 }257 add EnergyFraction {12} {0.0 0.0} 258 add EnergyFraction {13} {0.0 0.0} 259 add EnergyFraction {14} {0.0 0.0} 260 add EnergyFraction {16} {0.0 0.0} 261 add EnergyFraction {1000022} {0.0 0.0} 262 add EnergyFraction {1000023} {0.0 0.0} 263 add EnergyFraction {1000025} {0.0 0.0} 264 add EnergyFraction {1000035} {0.0 0.0} 265 add EnergyFraction {1000045} {0.0 0.0} 372 266 # energy fractions for K0short and Lambda 373 add EnergyFraction {310} {0.7} 374 add EnergyFraction {3122} {0.7} 267 add EnergyFraction {310} {0.3 0.7} 268 add EnergyFraction {3122} {0.3 0.7} 269 270 # set ECalResolutionFormula {resolution formula as a function of eta and energy} 271 # Eta shape from arXiv:1306.2016, Energy shape from arXiv:1502.02701 272 set ECalResolutionFormula { (abs(eta) <= 1.5) * (1+0.64*eta^2) * sqrt(energy^2*0.008^2 + energy*0.11^2 + 0.40^2) + 273 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (2.16 + 5.6*(abs(eta)-2)^2) * sqrt(energy^2*0.008^2 + energy*0.11^2 + 0.40^2) + 274 (abs(eta) > 2.5 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)} 375 275 376 276 # set HCalResolutionFormula {resolution formula as a function of eta and energy} 377 set ResolutionFormula {(abs(eta) <= 3.0) * sqrt(energy^2*0.050^2 + energy*1.50^2) +277 set HCalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.050^2 + energy*1.50^2) + 378 278 (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.130^2 + energy*2.70^2)} 379 380 } 381 382 383 ################# 384 # Electron filter 385 ################# 386 387 module PdgCodeFilter ElectronFilter { 388 set InputArray HCal/eflowTracks 389 set OutputArray electrons 390 set Invert true 391 add PdgCode {11} 392 add PdgCode {-11} 393 } 394 395 ################################################### 396 # Tower Merger (in case not using e-flow algorithm) 397 ################################################### 398 399 module Merger Calorimeter { 400 # add InputArray InputArray 401 add InputArray ECal/ecalTowers 402 add InputArray HCal/hcalTowers 403 set OutputArray towers 404 } 405 406 279 } 407 280 408 281 #################### … … 412 285 module Merger EFlowMerger { 413 286 # add InputArray InputArray 414 add InputArray HCal/eflowTracks415 add InputArray ECal/eflowPhotons416 add InputArray HCal/eflowNeutralHadrons287 add InputArray Calorimeter/eflowTracks 288 add InputArray Calorimeter/eflowPhotons 289 add InputArray Calorimeter/eflowNeutralHadrons 417 290 set OutputArray eflow 418 291 } … … 423 296 424 297 module Efficiency PhotonEfficiency { 425 set InputArray ECal/eflowPhotons298 set InputArray Calorimeter/eflowPhotons 426 299 set OutputArray photons 427 300 … … 452 325 } 453 326 327 ################# 328 # Electron filter 329 ################# 330 331 module PdgCodeFilter ElectronFilter { 332 set InputArray Calorimeter/eflowTracks 333 set OutputArray electrons 334 set Invert true 335 add PdgCode {11} 336 add PdgCode {-11} 337 } 454 338 455 339 ##################### … … 498 382 499 383 # efficiency formula for muons 500 set EfficiencyFormula { (pt <= 10.0) * (0.00) + 501 (abs(eta) <= 1.5) * (pt > 10.0) * (0.95) + 502 (abs(eta) > 1.5 && abs(eta) <= 2.4) * (pt > 10.0) * (0.95) + 384 set EfficiencyFormula { (pt <= 10.0) * (0.00) + 385 (abs(eta) <= 1.5) * (pt > 10.0 && pt <= 1.0e3) * (0.95) + 386 (abs(eta) <= 1.5) * (pt > 1.0e3) * (0.95 * exp(0.5 - pt*5.0e-4)) + 387 (abs(eta) > 1.5 && abs(eta) <= 2.4) * (pt > 10.0 && pt <= 1.0e3) * (0.95) + 388 (abs(eta) > 1.5 && abs(eta) <= 2.4) * (pt > 1.0e3) * (0.95 * exp(0.5 - pt*5.0e-4)) + 503 389 (abs(eta) > 2.4) * (0.00)} 504 390 } … … 716 602 add Branch Calorimeter/towers Tower Tower 717 603 718 add Branch HCal/eflowTracks EFlowTrack Track719 add Branch ECal/eflowPhotons EFlowPhoton Tower720 add Branch HCal/eflowNeutralHadrons EFlowNeutralHadron Tower604 add Branch Calorimeter/eflowTracks EFlowTrack Track 605 add Branch Calorimeter/eflowPhotons EFlowPhoton Tower 606 add Branch Calorimeter/eflowNeutralHadrons EFlowNeutralHadron Tower 721 607 722 608 add Branch GenJetFinder/jets GenJet Jet 723 609 add Branch GenMissingET/momentum GenMissingET MissingET 724 610 725 611 add Branch UniqueObjectFinder/jets Jet Jet 726 612 add Branch UniqueObjectFinder/electrons Electron Electron -
cards/delphes_card_CMS_NoFastJet.tcl
r21eab4f rec5e04b 128 128 # resolution formula for electrons 129 129 # based on arXiv:1405.6569 130 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.0 3^2 + pt^2*1.3e-3^2) +131 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0. 05^2 + pt^2*1.7e-3^2) +132 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0. 15^2 + pt^2*3.1e-3^2)}130 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.06^2 + pt^2*1.3e-3^2) + 131 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.10^2 + pt^2*1.7e-3^2) + 132 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.25^2 + pt^2*3.1e-3^2)} 133 133 } 134 134 … … 144 144 145 145 # resolution formula for muons 146 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.0e-4^2) + 147 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*1.5e-4^2) + 148 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*3.5e-4^2)} 149 } 150 146 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*2.0e-4^2) + 147 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.02^2 + pt^2*3.0e-4^2) + 148 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.05^2 + pt^2*6.0e-4^2)} 149 } 151 150 152 151 ############## -
cards/delphes_card_CMS_PileUp.tcl
r21eab4f rec5e04b 178 178 # resolution formula for charged hadrons 179 179 # based on arXiv:1405.6569 180 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.0 6^2 + pt^2*1.3e-3^2) +181 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0. 10^2 + pt^2*1.7e-3^2) +182 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0. 25^2 + pt^2*3.1e-3^2)}180 set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.5e-4^2) + 181 (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*2.5e-4^2) + 182 (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*5.5e-4^2)} 183 183 } 184 184 -
classes/DelphesClasses.cc
r21eab4f rec5e04b 41 41 CompBase *Tower::fgCompare = CompE<Tower>::Instance(); 42 42 CompBase *HectorHit::fgCompare = CompE<HectorHit>::Instance(); 43 CompBase *Vertex::fgCompare = CompSumPT2<Vertex>::Instance();44 43 CompBase *Candidate::fgCompare = CompMomentumPt<Candidate>::Instance(); 45 44 … … 122 121 Charge(0), Mass(0.0), 123 122 IsPU(0), IsRecoPU(0), IsConstituent(0), IsFromConversion(0), 124 ClusterIndex(-1), ClusterNDF(0), ClusterSigma(0), SumPT2(0), BTVSumPT2(0), GenDeltaZ(0), GenSumPT2(0),125 123 Flavor(0), FlavorAlgo(0), FlavorPhys(0), 126 124 BTag(0), BTagAlgo(0), BTagPhys(0), … … 129 127 Momentum(0.0, 0.0, 0.0, 0.0), 130 128 Position(0.0, 0.0, 0.0, 0.0), 131 PositionError(0.0, 0.0, 0.0, 0.0),132 InitialPosition(0.0, 0.0, 0.0, 0.0),133 129 Area(0.0, 0.0, 0.0, 0.0), 134 L(0), 135 D0(0), ErrorD0(0), 136 DZ(0), ErrorDZ(0), 137 P(0), ErrorP(0), 138 PT(0), ErrorPT(0), 139 CtgTheta(0), ErrorCtgTheta(0), 140 Phi(0), ErrorPhi(0), 141 Xd(0), Yd(0), Zd(0), 130 Dxy(0), SDxy(0), Xd(0), Yd(0), Zd(0), 142 131 TrackResolution(0), 143 132 NCharged(0), … … 256 245 object.IsConstituent = IsConstituent; 257 246 object.IsFromConversion = IsFromConversion; 258 object.ClusterIndex = ClusterIndex;259 object.ClusterNDF = ClusterNDF;260 object.ClusterSigma = ClusterSigma;261 object.SumPT2 = SumPT2;262 object.BTVSumPT2 = BTVSumPT2;263 object.GenDeltaZ = GenDeltaZ;264 object.GenSumPT2 = GenSumPT2;265 247 object.Flavor = Flavor; 266 248 object.FlavorAlgo = FlavorAlgo; … … 280 262 object.Momentum = Momentum; 281 263 object.Position = Position; 282 object.InitialPosition = InitialPosition;283 object.PositionError = PositionError;284 264 object.Area = Area; 285 object.L = L; 286 object.ErrorT = ErrorT; 287 object.D0 = D0; 288 object.ErrorD0 = ErrorD0; 289 object.DZ = DZ; 290 object.ErrorDZ = ErrorDZ; 291 object.P = P; 292 object.ErrorP = ErrorP; 293 object.PT = PT; 294 object.ErrorPT = ErrorPT; 295 object.CtgTheta = CtgTheta ; 296 object.ErrorCtgTheta = ErrorCtgTheta; 297 object.Phi = Phi; 298 object.ErrorPhi = ErrorPhi; 265 object.Dxy = Dxy; 266 object.SDxy = SDxy; 299 267 object.Xd = Xd; 300 268 object.Yd = Yd; … … 314 282 object.SumPtChargedPU = SumPtChargedPU; 315 283 object.SumPt = SumPt; 316 object.ClusterIndex = ClusterIndex; 317 object.ClusterNDF = ClusterNDF; 318 object.ClusterSigma = ClusterSigma; 319 object.SumPT2 = SumPT2; 320 284 321 285 object.FracPt[0] = FracPt[0]; 322 286 object.FracPt[1] = FracPt[1]; … … 399 363 Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0); 400 364 Position.SetXYZT(0.0, 0.0, 0.0, 0.0); 401 InitialPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);402 365 Area.SetXYZT(0.0, 0.0, 0.0, 0.0); 403 L = 0.0; 404 ErrorT = 0.0; 405 D0 = 0.0; 406 ErrorD0 = 0.0; 407 DZ = 0.0; 408 ErrorDZ = 0.0; 409 P =0.0; 410 ErrorP =0.0; 411 PT = 0.0; 412 ErrorPT = 0.0; 413 CtgTheta = 0.0; 414 ErrorCtgTheta = 0.0; 415 Phi = 0.0; 416 ErrorPhi = 0.0; 366 Dxy = 0.0; 367 SDxy = 0.0; 417 368 Xd = 0.0; 418 369 Yd = 0.0; … … 436 387 SumPt = -999; 437 388 438 ClusterIndex = -1;439 ClusterNDF = -99;440 ClusterSigma = 0.0;441 SumPT2 = 0.0;442 BTVSumPT2 = 0.0;443 GenDeltaZ = 0.0;444 GenSumPT2 = 0.0;445 446 389 FracPt[0] = 0.0; 447 390 FracPt[1] = 0.0; -
classes/DelphesClasses.h
r21eab4f rec5e04b 147 147 Float_t Pz; // particle momentum vector (z component) | hepevt.phep[number][2] 148 148 149 Float_t D0; 150 Float_t DZ; 151 Float_t P; 152 Float_t PT; 153 Float_t CtgTheta; 154 Float_t Phi; 149 Float_t PT; // particle transverse momentum 155 150 Float_t Eta; // particle pseudorapidity 151 Float_t Phi; // particle azimuthal angle 152 156 153 Float_t Rapidity; // particle rapidity 157 154 … … 171 168 //--------------------------------------------------------------------------- 172 169 173 class Vertex: public SortableObject170 class Vertex: public TObject 174 171 { 175 172 public: … … 179 176 Float_t Z; // vertex position (z component) 180 177 181 Double_t ErrorX; 182 Double_t ErrorY; 183 Double_t ErrorZ; 184 Double_t ErrorT; 185 186 Int_t Index; 187 Int_t NDF; 188 Double_t Sigma; 189 Double_t SumPT2; 190 Double_t BTVSumPT2; 191 Double_t GenDeltaZ; 192 Double_t GenSumPT2; 193 194 TRefArray Constituents; // references to constituents 195 196 static CompBase *fgCompare; //! 197 const CompBase *GetCompare() const { return fgCompare; } 198 199 ClassDef(Vertex, 3) 178 ClassDef(Vertex, 1) 200 179 }; 201 180 … … 418 397 Int_t Charge; // track charge 419 398 399 Float_t PT; // track transverse momentum 400 420 401 Float_t Eta; // track pseudorapidity 402 Float_t Phi; // track azimuthal angle 421 403 422 404 Float_t EtaOuter; // track pseudorapidity at the tracker edge … … 433 415 Float_t TOuter; // track position (z component) at the tracker edge 434 416 435 Float_t L; // track path length 436 Float_t ErrorT; // error on the time measurement 437 438 Float_t D0; // track signed transverse impact parameter 439 Float_t ErrorD0; // signed error on the track signed transverse impact parameter 440 441 Float_t DZ; // track transverse momentum 442 Float_t ErrorDZ; // track transverse momentum error 443 444 Float_t P; // track transverse momentum 445 Float_t ErrorP; // track transverse momentum error 446 447 Float_t PT; // track transverse momentum 448 Float_t ErrorPT; // track transverse momentum error 449 450 Float_t CtgTheta; // track transverse momentum 451 Float_t ErrorCtgTheta; // track transverse momentum error 452 453 Float_t Phi; // track azimuthal angle 454 Float_t ErrorPhi; // track azimuthal angle 455 417 Float_t Dxy; // track signed transverse impact parameter 418 Float_t SDxy; // signed error on the track signed transverse impact parameter 456 419 Float_t Xd; // X coordinate of point of closest approach to vertex 457 420 Float_t Yd; // Y coordinate of point of closest approach to vertex … … 460 423 TRef Particle; // reference to generated particle 461 424 462 Int_t VertexIndex; // reference to vertex463 464 425 static CompBase *fgCompare; //! 465 426 const CompBase *GetCompare() const { return fgCompare; } … … 565 526 Float_t DeltaPhi; 566 527 567 TLorentzVector Momentum, Position, InitialPosition, PositionError, Area; 568 569 Float_t L; // path length 570 Float_t ErrorT; // path length 571 Float_t D0; 572 Float_t ErrorD0; 573 Float_t DZ; 574 Float_t ErrorDZ; 575 Float_t P; 576 Float_t ErrorP; 577 Float_t PT; 578 Float_t ErrorPT; 579 Float_t CtgTheta; 580 Float_t ErrorCtgTheta; 581 Float_t Phi; 582 Float_t ErrorPhi; 583 528 TLorentzVector Momentum, Position, Area; 529 530 Float_t Dxy; 531 Float_t SDxy; 584 532 Float_t Xd; 585 533 Float_t Yd; … … 587 535 588 536 // tracking resolution 589 537 590 538 Float_t TrackResolution; 591 539 … … 614 562 Float_t SumPt; 615 563 616 // vertex variables617 618 Int_t ClusterIndex;619 Int_t ClusterNDF;620 Double_t ClusterSigma;621 Double_t SumPT2;622 Double_t BTVSumPT2;623 Double_t GenDeltaZ;624 Double_t GenSumPT2;625 626 564 // N-subjettiness variables 627 565 … … 657 595 void SetFactory(DelphesFactory *factory) { fFactory = factory; } 658 596 659 ClassDef(Candidate, 5)597 ClassDef(Candidate, 4) 660 598 }; 661 599 -
classes/SortableObject.h
r21eab4f rec5e04b 156 156 return -1; 157 157 else if(t1->ET < t2->ET) 158 return 1;159 else160 return 0;161 }162 };163 164 //---------------------------------------------------------------------------165 166 template <typename T>167 class CompSumPT2: public CompBase168 {169 CompSumPT2() {}170 public:171 static CompSumPT2 *Instance()172 {173 static CompSumPT2 single;174 return &single;175 }176 177 Int_t Compare(const TObject *obj1, const TObject *obj2) const178 {179 const T *t1 = static_cast<const T*>(obj1);180 const T *t2 = static_cast<const T*>(obj2);181 if(t1->SumPT2 > t2->SumPT2)182 return -1;183 else if(t1->SumPT2 < t2->SumPT2)184 158 return 1; 185 159 else -
doc/genMakefile.tcl
r21eab4f rec5e04b 263 263 executableDeps {converters/*.cpp} {examples/*.cpp} 264 264 265 executableDeps {readers/DelphesHepMC.cpp} {readers/DelphesLHEF.cpp} {readers/DelphesSTDHEP.cpp} {readers/DelphesROOT.cpp}265 executableDeps {readers/DelphesHepMC.cpp} {readers/DelphesLHEF.cpp} {readers/DelphesSTDHEP.cpp} 266 266 267 267 puts {ifeq ($(HAS_CMSSW),true)} -
examples/Pythia8/configParticleGun.cmnd
r21eab4f rec5e04b 3 3 ! 1) Settings used in the main program. 4 4 5 Main:numberOfEvents = 10000 ! number of events to generate5 Main:numberOfEvents = 10000 ! number of events to generate 6 6 Main:timesAllowErrors = 3 ! how many aborts before run stops 7 Main:spareFlag1 = on ! true means particle gun 8 Main:spareMode1 = 11 ! 1-5 - di-quark, 21 - di-gluon, 11 - single electron, 13 - single muon, 15 - single tau, 22 - single photon 9 Main:spareParm1 = 10000 ! max pt 10 Main:spareParm2 = 2.5 ! max eta 7 Main:spareFlag1 = on ! true means particle gun 8 Main:spareMode1 = 11 ! 1-5 - di-quark, 21 - di-gluon, 11 - single electron, 13 - single muon, 22 - single photon 9 Main:spareParm1 = 10000 ! max pt 11 10 12 11 ! 2) Settings related to output in init(), next() and stat(). -
modules/Calorimeter.cc
r21eab4f rec5e04b 58 58 fItParticleInputArray(0), fItTrackInputArray(0) 59 59 { 60 60 Int_t i; 61 61 62 fECalResolutionFormula = new DelphesFormula; 62 63 fHCalResolutionFormula = new DelphesFormula; 63 64 64 fECalTowerTrackArray = new TObjArray; 65 fItECalTowerTrackArray = fECalTowerTrackArray->MakeIterator(); 66 67 fHCalTowerTrackArray = new TObjArray; 68 fItHCalTowerTrackArray = fHCalTowerTrackArray->MakeIterator(); 69 65 for(i = 0; i < 2; ++i) 66 { 67 fECalTowerTrackArray[i] = new TObjArray; 68 fItECalTowerTrackArray[i] = fECalTowerTrackArray[i]->MakeIterator(); 69 70 fHCalTowerTrackArray[i] = new TObjArray; 71 fItHCalTowerTrackArray[i] = fHCalTowerTrackArray[i]->MakeIterator(); 72 } 70 73 } 71 74 … … 74 77 Calorimeter::~Calorimeter() 75 78 { 76 79 Int_t i; 80 77 81 if(fECalResolutionFormula) delete fECalResolutionFormula; 78 82 if(fHCalResolutionFormula) delete fHCalResolutionFormula; 79 83 80 if(fECalTowerTrackArray) delete fECalTowerTrackArray; 81 if(fItECalTowerTrackArray) delete fItECalTowerTrackArray; 82 83 if(fHCalTowerTrackArray) delete fHCalTowerTrackArray; 84 if(fItHCalTowerTrackArray) delete fItHCalTowerTrackArray; 85 84 for(i = 0; i < 2; ++i) 85 { 86 if(fECalTowerTrackArray[i]) delete fECalTowerTrackArray[i]; 87 if(fItECalTowerTrackArray[i]) delete fItECalTowerTrackArray[i]; 88 89 if(fHCalTowerTrackArray[i]) delete fHCalTowerTrackArray[i]; 90 if(fItHCalTowerTrackArray[i]) delete fItHCalTowerTrackArray[i]; 91 } 86 92 } 87 93 … … 213 219 Double_t ecalEnergy, hcalEnergy; 214 220 Double_t ecalSigma, hcalSigma; 215 Double_t energyGuess;216 221 Int_t pdgCode; 217 222 … … 363 368 fHCalTowerEnergy = 0.0; 364 369 365 fECalTrackEnergy = 0.0;366 f HCalTrackEnergy= 0.0;367 368 f ECalTrackSigma= 0.0;369 fHCalTrack Sigma= 0.0;370 370 fECalTrackEnergy[0] = 0.0; 371 fECalTrackEnergy[1] = 0.0; 372 373 fHCalTrackEnergy[0] = 0.0; 374 fHCalTrackEnergy[1] = 0.0; 375 371 376 fTowerTrackHits = 0; 372 377 fTowerPhotonHits = 0; 373 378 374 fECalTowerTrackArray->Clear(); 375 fHCalTowerTrackArray->Clear(); 376 379 fECalTowerTrackArray[0]->Clear(); 380 fECalTowerTrackArray[1]->Clear(); 381 382 fHCalTowerTrackArray[0]->Clear(); 383 fHCalTowerTrackArray[1]->Clear(); 377 384 } 378 385 … … 399 406 if(fECalTrackFractions[number] > 1.0E-9 && fHCalTrackFractions[number] < 1.0E-9) 400 407 { 401 fECalTrackEnergy += ecalEnergy; 402 ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E()); 403 if(ecalSigma/momentum.E() < track->TrackResolution) energyGuess = ecalEnergy; 404 else energyGuess = momentum.E(); 405 406 fECalTrackSigma += (track->TrackResolution)*energyGuess*(track->TrackResolution)*energyGuess; 407 fECalTowerTrackArray->Add(track); 408 ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E()); 409 if(ecalSigma/momentum.E() < track->TrackResolution) 410 { 411 fECalTrackEnergy[0] += ecalEnergy; 412 fECalTowerTrackArray[0]->Add(track); 413 } 414 else 415 { 416 fECalTrackEnergy[1] += ecalEnergy; 417 fECalTowerTrackArray[1]->Add(track); 418 } 408 419 } 409 410 420 else if(fECalTrackFractions[number] < 1.0E-9 && fHCalTrackFractions[number] > 1.0E-9) 411 421 { 412 fHCalTrackEnergy += hcalEnergy;413 422 hcalSigma = fHCalResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E()); 414 if(hcalSigma/momentum.E() < track->TrackResolution) energyGuess = hcalEnergy; 415 else energyGuess = momentum.E(); 416 417 fHCalTrackSigma += (track->TrackResolution)*energyGuess*(track->TrackResolution)*energyGuess; 418 fHCalTowerTrackArray->Add(track); 423 if(hcalSigma/momentum.E() < track->TrackResolution) 424 { 425 fHCalTrackEnergy[0] += hcalEnergy; 426 fHCalTowerTrackArray[0]->Add(track); 427 } 428 else 429 { 430 fHCalTrackEnergy[1] += hcalEnergy; 431 fHCalTowerTrackArray[1]->Add(track); 432 } 419 433 } 420 421 434 else if(fECalTrackFractions[number] < 1.0E-9 && fHCalTrackFractions[number] < 1.0E-9) 422 435 { … … 463 476 Double_t energy, pt, eta, phi; 464 477 Double_t ecalEnergy, hcalEnergy; 465 Double_t ecalNeutralEnergy, hcalNeutralEnergy;466 467 478 Double_t ecalSigma, hcalSigma; 468 Double_t ecalNeutralSigma, hcalNeutralSigma; 469 470 Double_t weightTrack, weightCalo, bestEnergyEstimate, rescaleFactor; 471 479 472 480 TLorentzVector momentum; 473 481 TFractionMap::iterator itFractionMap; … … 476 484 477 485 if(!fTower) return; 486 478 487 479 488 ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, fECalTowerEnergy); … … 545 554 fTowerOutputArray->Add(fTower); 546 555 } 547 556 548 557 // fill energy flow candidates 549 fECalTrackSigma = TMath::Sqrt(fECalTrackSigma); 550 fHCalTrackSigma = TMath::Sqrt(fHCalTrackSigma); 551 552 //compute neutral excesses 553 ecalNeutralEnergy = max( (ecalEnergy - fECalTrackEnergy) , 0.0); 554 hcalNeutralEnergy = max( (hcalEnergy - fHCalTrackEnergy) , 0.0); 555 556 ecalNeutralSigma = ecalNeutralEnergy / TMath::Sqrt(fECalTrackSigma*fECalTrackSigma + ecalSigma*ecalSigma); 557 hcalNeutralSigma = hcalNeutralEnergy / TMath::Sqrt(fHCalTrackSigma*fHCalTrackSigma + hcalSigma*hcalSigma); 558 559 // if ecal neutral excess is significant, simply create neutral EflowPhoton tower and clone each track into eflowtrack 560 if(ecalNeutralEnergy > fECalEnergyMin && ecalNeutralSigma > fECalEnergySignificanceMin) 558 559 ecalEnergy -= fECalTrackEnergy[1]; 560 hcalEnergy -= fHCalTrackEnergy[1]; 561 562 fItECalTowerTrackArray[0]->Reset(); 563 while((track = static_cast<Candidate*>(fItECalTowerTrackArray[0]->Next()))) 564 { 565 mother = track; 566 track = static_cast<Candidate*>(track->Clone()); 567 track->AddCandidate(mother); 568 569 track->Momentum *= ecalEnergy/fECalTrackEnergy[0]; 570 571 fEFlowTrackOutputArray->Add(track); 572 } 573 574 fItECalTowerTrackArray[1]->Reset(); 575 while((track = static_cast<Candidate*>(fItECalTowerTrackArray[1]->Next()))) 576 { 577 mother = track; 578 track = static_cast<Candidate*>(track->Clone()); 579 track->AddCandidate(mother); 580 581 fEFlowTrackOutputArray->Add(track); 582 } 583 584 fItHCalTowerTrackArray[0]->Reset(); 585 while((track = static_cast<Candidate*>(fItHCalTowerTrackArray[0]->Next()))) 586 { 587 mother = track; 588 track = static_cast<Candidate*>(track->Clone()); 589 track->AddCandidate(mother); 590 591 track->Momentum *= hcalEnergy/fHCalTrackEnergy[0]; 592 593 fEFlowTrackOutputArray->Add(track); 594 } 595 596 fItHCalTowerTrackArray[1]->Reset(); 597 while((track = static_cast<Candidate*>(fItHCalTowerTrackArray[1]->Next()))) 598 { 599 mother = track; 600 track = static_cast<Candidate*>(track->Clone()); 601 track->AddCandidate(mother); 602 603 fEFlowTrackOutputArray->Add(track); 604 } 605 606 if(fECalTowerTrackArray[0]->GetEntriesFast() > 0) ecalEnergy = 0.0; 607 if(fHCalTowerTrackArray[0]->GetEntriesFast() > 0) hcalEnergy = 0.0; 608 609 ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, ecalEnergy); 610 hcalSigma = fHCalResolutionFormula->Eval(0.0, fTowerEta, 0.0, hcalEnergy); 611 612 if(ecalEnergy < fECalEnergyMin || ecalEnergy < fECalEnergySignificanceMin*ecalSigma) ecalEnergy = 0.0; 613 if(hcalEnergy < fHCalEnergyMin || hcalEnergy < fHCalEnergySignificanceMin*hcalSigma) hcalEnergy = 0.0; 614 615 energy = ecalEnergy + hcalEnergy; 616 617 if(ecalEnergy > 0.0) 561 618 { 562 619 // create new photon tower 563 620 tower = static_cast<Candidate*>(fTower->Clone()); 564 pt = ecalNeutralEnergy / TMath::CosH(eta); 565 566 tower->Momentum.SetPtEtaPhiE(pt, eta, phi, ecalNeutralEnergy); 567 tower->Eem = ecalNeutralEnergy; 621 622 pt = ecalEnergy / TMath::CosH(eta); 623 624 tower->Momentum.SetPtEtaPhiE(pt, eta, phi, ecalEnergy); 625 tower->Eem = ecalEnergy; 568 626 tower->Ehad = 0.0; 569 627 tower->PID = 22; 570 628 571 629 fEFlowPhotonOutputArray->Add(tower); 572 573 //clone tracks 574 fItECalTowerTrackArray->Reset(); 575 while((track = static_cast<Candidate*>(fItECalTowerTrackArray->Next()))) 576 { 577 mother = track; 578 track = static_cast<Candidate*>(track->Clone()); 579 track->AddCandidate(mother); 580 581 fEFlowTrackOutputArray->Add(track); 582 } 583 584 } 585 586 // if neutral excess is not significant, rescale eflow tracks, such that the total charged equals the best measurement given by the calorimeter and tracking 587 else if(fECalTrackEnergy > 0.0) 588 { 589 weightTrack = (fECalTrackSigma > 0.0) ? 1 / (fECalTrackSigma*fECalTrackSigma) : 0.0; 590 weightCalo = (ecalSigma > 0.0) ? 1 / (ecalSigma*ecalSigma) : 0.0; 591 592 bestEnergyEstimate = (weightTrack*fECalTrackEnergy + weightCalo*ecalEnergy) / (weightTrack + weightCalo); 593 rescaleFactor = bestEnergyEstimate/fECalTrackEnergy; 594 595 //rescale tracks 596 fItECalTowerTrackArray->Reset(); 597 while((track = static_cast<Candidate*>(fItECalTowerTrackArray->Next()))) 598 { 599 mother = track; 600 track = static_cast<Candidate*>(track->Clone()); 601 track->AddCandidate(mother); 602 603 track->Momentum *= rescaleFactor; 604 605 fEFlowTrackOutputArray->Add(track); 606 } 607 } 608 609 610 // if hcal neutral excess is significant, simply create neutral EflowNeutralHadron tower and clone each track into eflowtrack 611 if(hcalNeutralEnergy > fHCalEnergyMin && hcalNeutralSigma > fHCalEnergySignificanceMin) 612 { 613 // create new photon tower 630 } 631 if(hcalEnergy > 0.0) 632 { 633 // create new neutral hadron tower 614 634 tower = static_cast<Candidate*>(fTower->Clone()); 615 pt = hcalNeutralEnergy / TMath::CosH(eta); 616 617 tower->Momentum.SetPtEtaPhiE(pt, eta, phi, hcalNeutralEnergy); 618 tower-> Ehad = hcalNeutralEnergy;635 636 pt = hcalEnergy / TMath::CosH(eta); 637 638 tower->Momentum.SetPtEtaPhiE(pt, eta, phi, hcalEnergy); 619 639 tower->Eem = 0.0; 620 640 tower->Ehad = hcalEnergy; 641 621 642 fEFlowNeutralHadronOutputArray->Add(tower); 622 623 //clone tracks 624 fItHCalTowerTrackArray->Reset(); 625 while((track = static_cast<Candidate*>(fItHCalTowerTrackArray->Next()))) 626 { 627 mother = track; 628 track = static_cast<Candidate*>(track->Clone()); 629 track->AddCandidate(mother); 630 631 fEFlowTrackOutputArray->Add(track); 632 } 633 634 } 635 636 // if neutral excess is not significant, rescale eflow tracks, such that the total charged equals the best measurement given by the calorimeter and tracking 637 else if(fHCalTrackEnergy > 0.0) 638 { 639 weightTrack = (fHCalTrackSigma > 0.0) ? 1 / (fHCalTrackSigma*fHCalTrackSigma) : 0.0; 640 weightCalo = (hcalSigma > 0.0) ? 1 / (hcalSigma*hcalSigma) : 0.0; 641 642 bestEnergyEstimate = (weightTrack*fHCalTrackEnergy + weightCalo*hcalEnergy) / (weightTrack + weightCalo); 643 rescaleFactor = bestEnergyEstimate / fHCalTrackEnergy; 644 645 //rescale tracks 646 fItHCalTowerTrackArray->Reset(); 647 while((track = static_cast<Candidate*>(fItHCalTowerTrackArray->Next()))) 648 { 649 mother = track; 650 track = static_cast<Candidate*>(track->Clone()); 651 track->AddCandidate(mother); 652 653 track->Momentum *= rescaleFactor; 654 655 fEFlowTrackOutputArray->Add(track); 656 } 657 } 658 659 643 } 660 644 } 661 645 -
modules/Calorimeter.h
r21eab4f rec5e04b 58 58 Double_t fTowerEta, fTowerPhi, fTowerEdges[4]; 59 59 Double_t fECalTowerEnergy, fHCalTowerEnergy; 60 Double_t fECalTrackEnergy , fHCalTrackEnergy;60 Double_t fECalTrackEnergy[2], fHCalTrackEnergy[2]; 61 61 62 62 Double_t fTimingEnergyMin; … … 70 70 Double_t fECalEnergySignificanceMin; 71 71 Double_t fHCalEnergySignificanceMin; 72 73 Double_t fECalTrackSigma;74 Double_t fHCalTrackSigma;75 72 76 73 Bool_t fSmearTowerCenter; … … 106 103 TObjArray *fEFlowNeutralHadronOutputArray; //! 107 104 108 TObjArray *fECalTowerTrackArray ; //!109 TIterator *fItECalTowerTrackArray ; //!105 TObjArray *fECalTowerTrackArray[2]; //! 106 TIterator *fItECalTowerTrackArray[2]; //! 110 107 111 TObjArray *fHCalTowerTrackArray ; //!112 TIterator *fItHCalTowerTrackArray ; //!108 TObjArray *fHCalTowerTrackArray[2]; //! 109 TIterator *fItHCalTowerTrackArray[2]; //! 113 110 114 111 void FinalizeTower(); -
modules/ImpactParameterSmearing.cc
r21eab4f rec5e04b 96 96 { 97 97 Candidate *candidate, *particle, *mother; 98 Double_t xd, yd, zd, d 0, sx, sy, sz, dd0;98 Double_t xd, yd, zd, dxy, sx, sy, sz, ddxy; 99 99 Double_t pt, eta, px, py, phi, e; 100 100 … … 103 103 { 104 104 105 // take momentum before smearing (otherwise apply double smearing on d 0)105 // take momentum before smearing (otherwise apply double smearing on dxy) 106 106 particle = static_cast<Candidate*>(candidate->GetCandidates()->At(0)); 107 107 … … 131 131 132 132 // calculate impact parameter (after-smearing) 133 d 0= (xd*py - yd*px)/pt;133 dxy = (xd*py - yd*px)/pt; 134 134 135 dd 0= gRandom->Gaus(0.0, fFormula->Eval(pt, eta, phi, e));135 ddxy = gRandom->Gaus(0.0, fFormula->Eval(pt, eta, phi, e)); 136 136 137 137 // fill smeared values in candidate … … 143 143 candidate->Zd = zd; 144 144 145 candidate->D 0 = d0;146 candidate-> ErrorD0 = dd0;145 candidate->Dxy = dxy; 146 candidate->SDxy = ddxy; 147 147 148 148 candidate->AddCandidate(mother); -
modules/ModulesLinkDef.h
r21eab4f rec5e04b 35 35 #include "modules/EnergySmearing.h" 36 36 #include "modules/MomentumSmearing.h" 37 #include "modules/TrackSmearing.h"38 37 #include "modules/ImpactParameterSmearing.h" 39 38 #include "modules/TimeSmearing.h" … … 59 58 #include "modules/StatusPidFilter.h" 60 59 #include "modules/PdgCodeFilter.h" 61 #include "modules/BeamSpotFilter.h"62 60 #include "modules/RecoPuFilter.h" 63 61 #include "modules/Cloner.h" … … 66 64 #include "modules/JetFlavorAssociation.h" 67 65 #include "modules/JetFakeParticle.h" 68 #include "modules/VertexSorter.h"69 #include "modules/VertexFinder.h"70 #include "modules/VertexFinderDA4D.h"71 66 #include "modules/ExampleModule.h" 72 67 … … 86 81 #pragma link C++ class EnergySmearing+; 87 82 #pragma link C++ class MomentumSmearing+; 88 #pragma link C++ class TrackSmearing+;89 83 #pragma link C++ class ImpactParameterSmearing+; 90 84 #pragma link C++ class TimeSmearing+; … … 110 104 #pragma link C++ class StatusPidFilter+; 111 105 #pragma link C++ class PdgCodeFilter+; 112 #pragma link C++ class BeamSpotFilter+;113 106 #pragma link C++ class RecoPuFilter+; 114 107 #pragma link C++ class Cloner+; … … 117 110 #pragma link C++ class JetFlavorAssociation+; 118 111 #pragma link C++ class JetFakeParticle+; 119 #pragma link C++ class VertexSorter+;120 #pragma link C++ class VertexFinder+;121 #pragma link C++ class VertexFinderDA4D+;122 112 #pragma link C++ class ExampleModule+; 123 113 -
modules/MomentumSmearing.cc
r21eab4f rec5e04b 96 96 { 97 97 Candidate *candidate, *mother; 98 Double_t pt, eta, phi, e , res;98 Double_t pt, eta, phi, e; 99 99 100 100 fItInputArray->Reset(); … … 107 107 pt = candidateMomentum.Pt(); 108 108 e = candidateMomentum.E(); 109 res = fFormula->Eval(pt, eta, phi, e); 110 109 111 110 // apply smearing formula 112 //pt = gRandom->Gaus(pt, fFormula->Eval(pt, eta, phi, e) * pt);111 pt = gRandom->Gaus(pt, fFormula->Eval(pt, eta, phi, e) * pt); 113 112 114 res = ( res > 1.0 ) ? 1.0 : res; 115 116 pt = LogNormal(pt, res * pt ); 117 118 //if(pt <= 0.0) continue; 113 if(pt <= 0.0) continue; 119 114 120 115 mother = candidate; … … 123 118 phi = candidateMomentum.Phi(); 124 119 candidate->Momentum.SetPtEtaPhiE(pt, eta, phi, pt*TMath::CosH(eta)); 125 //candidate->TrackResolution = fFormula->Eval(pt, eta, phi, e); 126 candidate->TrackResolution = res; 120 candidate->TrackResolution = fFormula->Eval(pt, eta, phi, e); 127 121 candidate->AddCandidate(mother); 128 122 … … 130 124 } 131 125 } 132 //----------------------------------------------------------------133 134 Double_t MomentumSmearing::LogNormal(Double_t mean, Double_t sigma)135 {136 Double_t a, b;137 138 if(mean > 0.0)139 {140 b = TMath::Sqrt(TMath::Log((1.0 + (sigma*sigma)/(mean*mean))));141 a = TMath::Log(mean) - 0.5*b*b;142 143 return TMath::Exp(a + b*gRandom->Gaus(0.0, 1.0));144 }145 else146 {147 return 0.0;148 }149 }150 151 126 152 127 //------------------------------------------------------------------------------ -
modules/MomentumSmearing.h
r21eab4f rec5e04b 47 47 private: 48 48 49 Double_t LogNormal(Double_t mean, Double_t sigma);50 51 49 DelphesFormula *fFormula; //! 52 50 -
modules/ParticlePropagator.cc
r21eab4f rec5e04b 66 66 { 67 67 } 68 69 68 70 69 //------------------------------------------------------------------------------ … … 92 91 fItInputArray = fInputArray->MakeIterator(); 93 92 94 // import beamspot95 try96 {97 fBeamSpotInputArray = ImportArray(GetString("BeamSpotInputArray", "BeamSpotFilter/beamSpotParticle"));98 }99 catch(runtime_error &e)100 {101 fBeamSpotInputArray = 0;102 }103 93 // create output arrays 104 94 … … 121 111 { 122 112 Candidate *candidate, *mother; 123 TLorentzVector candidatePosition, candidateMomentum , beamSpotPosition;113 TLorentzVector candidatePosition, candidateMomentum; 124 114 Double_t px, py, pz, pt, pt2, e, q; 125 115 Double_t x, y, z, t, r, phi; … … 130 120 Double_t tmp, discr, discr2; 131 121 Double_t delta, gammam, omega, asinrho; 132 Double_t rcu, rc2, xd, yd, zd; 133 Double_t l, d0, dz, p, ctgTheta, phip, etap, alpha; 134 Double_t bsx, bsy, bsz; 122 Double_t rcu, rc2, dxy, xd, yd, zd; 135 123 136 124 const Double_t c_light = 2.99792458E8; 137 138 if (!fBeamSpotInputArray || fBeamSpotInputArray->GetSize () == 0)139 beamSpotPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);140 else141 {142 Candidate &beamSpotCandidate = *((Candidate *) fBeamSpotInputArray->At(0));143 beamSpotPosition = beamSpotCandidate.Position;144 }145 125 146 126 fItInputArray->Reset(); … … 152 132 y = candidatePosition.Y()*1.0E-3; 153 133 z = candidatePosition.Z()*1.0E-3; 154 155 bsx = beamSpotPosition.X()*1.0E-3;156 bsy = beamSpotPosition.Y()*1.0E-3;157 bsz = beamSpotPosition.Z()*1.0E-3;158 159 134 q = candidate->Charge; 160 135 … … 207 182 z_t = z + pz*t; 208 183 209 l = TMath::Sqrt( (x_t - x)*(x_t - x) + (y_t - y)*(y_t - y) + (z_t - z)*(z_t - z));210 211 184 mother = candidate; 212 185 candidate = static_cast<Candidate*>(candidate->Clone()); 213 186 214 candidate->InitialPosition = candidatePosition;215 187 candidate->Position.SetXYZT(x_t*1.0E3, y_t*1.0E3, z_t*1.0E3, candidatePosition.T() + t*e*1.0E3); 216 candidate->L = l*1.0E3;217 188 218 189 candidate->Momentum = candidateMomentum; … … 268 239 zd = z + (TMath::Sqrt(xd*xd + yd*yd) - TMath::Sqrt(x*x + y*y))*pz/pt; 269 240 270 // use perigee momentum rather than original particle 271 // momentum, since the orignal particle momentum isn't known 272 273 px = TMath::Sign(1.0,r) * pt * (-y_c / r_c); 274 py = TMath::Sign(1.0,r) * pt * (x_c / r_c); 275 etap = candidateMomentum.Eta(); 276 phip = TMath::ATan2(py, px); 277 278 candidateMomentum.SetPtEtaPhiE(pt, etap, phip, candidateMomentum.E()); 279 280 // calculate additional track parameters (correct for beamspot position) 281 282 d0 = ( (x - bsx) * py - (y - bsy) * px) / pt; 283 dz = z - ((x - bsx) * px + (y - bsy) * py) / pt * (pz / pt); 284 p = candidateMomentum.P(); 285 ctgTheta = 1.0 / TMath::Tan (candidateMomentum.Theta ()); 286 241 // calculate impact paramater 242 dxy = (xd*py - yd*px)/pt; 287 243 288 244 // 3. time evaluation t = TMath::Min(t_r, t_z) … … 331 287 r_t = TMath::Hypot(x_t, y_t); 332 288 333 334 // compute path length for an helix335 336 alpha = pz*1.0E9 / c_light / gammam;337 l = t * TMath::Sqrt(alpha*alpha + r*r*omega*omega);338 339 289 if(r_t > 0.0) 340 290 { 341 342 // store these variables before cloning343 candidate->D0 = d0*1.0E3;344 candidate->DZ = dz*1.0E3;345 candidate->P = p;346 candidate->PT = pt;347 candidate->CtgTheta = ctgTheta;348 candidate->Phi = phip;349 350 291 mother = candidate; 351 292 candidate = static_cast<Candidate*>(candidate->Clone()); 352 293 353 candidate->InitialPosition = candidatePosition;354 294 candidate->Position.SetXYZT(x_t*1.0E3, y_t*1.0E3, z_t*1.0E3, candidatePosition.T() + t*c_light*1.0E3); 355 295 356 296 candidate->Momentum = candidateMomentum; 357 358 candidate->L = l*1.0E3; 359 360 candidate->Xd = xd*1.0E3; 297 candidate->Dxy = dxy*1.0E3; 298 candidate->Xd = xd*1.0E3; 361 299 candidate->Yd = yd*1.0E3; 362 300 candidate->Zd = zd*1.0E3; -
modules/ParticlePropagator.h
r21eab4f rec5e04b 35 35 class TClonesArray; 36 36 class TIterator; 37 class TLorentzVector;38 37 39 38 class ParticlePropagator: public DelphesModule … … 56 55 57 56 const TObjArray *fInputArray; //! 58 const TObjArray *fBeamSpotInputArray; //!59 57 60 58 TObjArray *fOutputArray; //! -
modules/PileUpMerger.cc
r21eab4f rec5e04b 115 115 TDatabasePDG *pdg = TDatabasePDG::Instance(); 116 116 TParticlePDG *pdgParticle; 117 Int_t pid , nch, nvtx = -1;117 Int_t pid; 118 118 Float_t x, y, z, t, vx, vy; 119 Float_t px, py, pz, e , pt;120 Double_t dz, dphi, dt , sumpt2, dz0, dt0;119 Float_t px, py, pz, e; 120 Double_t dz, dphi, dt; 121 121 Int_t numberOfEvents, event, numberOfParticles; 122 122 Long64_t allEntries, entry; … … 132 132 fFunction->GetRandom2(dz, dt); 133 133 134 dz0 = -1.0e6;135 dt0 = -1.0e6;136 137 134 dt *= c_light*1.0E3; // necessary in order to make t in mm/c 138 135 dz *= 1.0E3; // necessary in order to make z in mm 139 140 //cout<<dz<<","<<dt<<endl;141 142 136 vx = 0.0; 143 137 vy = 0.0; 144 145 138 numberOfParticles = fInputArray->GetEntriesFast(); 146 nch = 0;147 sumpt2 = 0.0;148 149 factory = GetFactory();150 vertex = factory->NewCandidate();151 152 139 while((candidate = static_cast<Candidate*>(fItInputArray->Next()))) 153 140 { … … 156 143 z = candidate->Position.Z(); 157 144 t = candidate->Position.T(); 158 pt = candidate->Momentum.Pt(); 159 160 // take postion and time from first stable particle 161 if (dz0 < -999999.0) 162 dz0 = z; 163 if (dt0 < -999999.0) 164 dt0 = t; 165 166 // cancel any possible offset in position and time the input file 167 candidate->Position.SetZ(z - dz0 + dz); 168 candidate->Position.SetT(t - dt0 + dt); 169 170 candidate->IsPU = 0; 171 145 candidate->Position.SetZ(z + dz); 146 candidate->Position.SetT(t + dt); 172 147 fParticleOutputArray->Add(candidate); 173 174 if(TMath::Abs(candidate->Charge) > 1.0E-9)175 {176 nch++;177 sumpt2 += pt*pt;178 vertex->AddCandidate(candidate);179 }180 148 } 181 149 182 150 if(numberOfParticles > 0) 183 151 { 184 vx /= sumpt2; 185 vy /= sumpt2; 186 } 187 188 nvtx++; 152 vx /= numberOfParticles; 153 vy /= numberOfParticles; 154 } 155 156 factory = GetFactory(); 157 158 vertex = factory->NewCandidate(); 189 159 vertex->Position.SetXYZT(vx, vy, dz, dt); 190 vertex->ClusterIndex = nvtx;191 vertex->ClusterNDF = nch;192 vertex->SumPT2 = sumpt2;193 vertex->GenSumPT2 = sumpt2;194 160 fVertexOutputArray->Add(vertex); 195 161 … … 204 170 numberOfEvents = gRandom->Integer(2*fMeanPileUp + 1); 205 171 break; 206 case 2:207 numberOfEvents = fMeanPileUp;208 break;209 172 default: 210 173 numberOfEvents = gRandom->Poisson(fMeanPileUp); … … 213 176 214 177 allEntries = fReader->GetEntries(); 215 216 178 217 179 for(event = 0; event < numberOfEvents; ++event) … … 236 198 vx = 0.0; 237 199 vy = 0.0; 238 239 200 numberOfParticles = 0; 240 sumpt2 = 0.0;241 242 //factory = GetFactory();243 vertex = factory->NewCandidate();244 245 201 while(fReader->ReadParticle(pid, x, y, z, t, px, py, pz, e)) 246 202 { … … 259 215 candidate->Momentum.SetPxPyPzE(px, py, pz, e); 260 216 candidate->Momentum.RotateZ(dphi); 261 pt = candidate->Momentum.Pt();262 217 263 218 x -= fInputBeamSpotX; … … 269 224 vx += candidate->Position.X(); 270 225 vy += candidate->Position.Y(); 271 272 226 ++numberOfParticles; 273 if(TMath::Abs(candidate->Charge) > 1.0E-9)274 {275 nch++;276 sumpt2 += pt*pt;277 vertex->AddCandidate(candidate);278 }279 227 280 228 fParticleOutputArray->Add(candidate); … … 287 235 } 288 236 289 nvtx++; 290 237 vertex = factory->NewCandidate(); 291 238 vertex->Position.SetXYZT(vx, vy, dz, dt); 292 293 vertex->ClusterIndex = nvtx;294 vertex->ClusterNDF = nch;295 vertex->SumPT2 = sumpt2;296 vertex->GenSumPT2 = sumpt2;297 298 239 vertex->IsPU = 1; 299 240 300 241 fVertexOutputArray->Add(vertex); 301 302 } 303 } 304 305 //------------------------------------------------------------------------------ 242 } 243 } 244 245 //------------------------------------------------------------------------------ -
modules/SimpleCalorimeter.cc
r21eab4f rec5e04b 58 58 fItParticleInputArray(0), fItTrackInputArray(0) 59 59 { 60 60 Int_t i; 61 61 62 fResolutionFormula = new DelphesFormula; 62 fTowerTrackArray = new TObjArray; 63 fItTowerTrackArray = fTowerTrackArray->MakeIterator(); 64 63 64 for(i = 0; i < 2; ++i) 65 { 66 fTowerTrackArray[i] = new TObjArray; 67 fItTowerTrackArray[i] = fTowerTrackArray[i]->MakeIterator(); 68 } 65 69 } 66 70 … … 69 73 SimpleCalorimeter::~SimpleCalorimeter() 70 74 { 71 75 Int_t i; 76 72 77 if(fResolutionFormula) delete fResolutionFormula; 73 if(fTowerTrackArray) delete fTowerTrackArray; 74 if(fItTowerTrackArray) delete fItTowerTrackArray; 75 78 79 for(i = 0; i < 2; ++i) 80 { 81 if(fTowerTrackArray[i]) delete fTowerTrackArray[i]; 82 if(fItTowerTrackArray[i]) delete fItTowerTrackArray[i]; 83 } 76 84 } 77 85 … … 191 199 Double_t energy; 192 200 Double_t sigma; 193 Double_t energyGuess;194 195 201 Int_t pdgCode; 196 202 … … 334 340 fTowerEnergy = 0.0; 335 341 336 fTrackEnergy = 0.0;337 fTrack Sigma= 0.0;342 fTrackEnergy[0] = 0.0; 343 fTrackEnergy[1] = 0.0; 338 344 339 345 fTowerTime = 0.0; … … 345 351 fTowerPhotonHits = 0; 346 352 347 fTowerTrackArray->Clear(); 348 } 353 fTowerTrackArray[0]->Clear(); 354 fTowerTrackArray[1]->Clear(); 355 } 349 356 350 357 // check for track hits … … 364 371 if(fTrackFractions[number] > 1.0E-9) 365 372 { 366 367 // compute total charged energy 368 fTrackEnergy += energy; 369 sigma = fResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E()); 370 if(sigma/momentum.E() < track->TrackResolution) energyGuess = energy; 371 else energyGuess = momentum.E(); 372 373 fTrackSigma += ((track->TrackResolution)*energyGuess)*((track->TrackResolution)*energyGuess); 374 fTowerTrackArray->Add(track); 373 sigma = fResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E()); 374 if(sigma/momentum.E() < track->TrackResolution) 375 { 376 fTrackEnergy[0] += energy; 377 fTowerTrackArray[0]->Add(track); 378 } 379 else 380 { 381 fTrackEnergy[1] += energy; 382 fTowerTrackArray[1]->Add(track); 383 } 375 384 } 376 377 385 else 378 386 { … … 395 403 fTowerEnergy += energy; 396 404 397 fTowerTime += energy*position.T();398 fTowerTimeWeight += energy;405 fTowerTime += TMath::Sqrt(energy)*position.T(); 406 fTowerTimeWeight += TMath::Sqrt(energy); 399 407 400 408 fTower->AddCandidate(particle); … … 410 418 { 411 419 Candidate *tower, *track, *mother; 412 Double_t energy, neutralEnergy,pt, eta, phi;413 Double_t sigma , neutralSigma;420 Double_t energy, pt, eta, phi; 421 Double_t sigma; 414 422 Double_t time; 415 416 Double_t weightTrack, weightCalo, bestEnergyEstimate, rescaleFactor;417 423 418 424 TLorentzVector momentum; … … 430 436 431 437 if(energy < fEnergyMin || energy < fEnergySignificanceMin*sigma) energy = 0.0; 432 433 438 434 439 if(fSmearTowerCenter) … … 459 464 if(energy > 0.0) fTowerOutputArray->Add(fTower); 460 465 461 462 // e-flow candidates 463 464 //compute neutral excess 465 466 fTrackSigma = TMath::Sqrt(fTrackSigma); 467 neutralEnergy = max( (energy - fTrackEnergy) , 0.0); 468 469 //compute sigma_trk total 470 neutralSigma = neutralEnergy / TMath::Sqrt(fTrackSigma*fTrackSigma+ sigma*sigma); 471 472 // if neutral excess is significant, simply create neutral Eflow tower and clone each track into eflowtrack 473 if(neutralEnergy > fEnergyMin && neutralSigma > fEnergySignificanceMin) 466 // fill e-flow candidates 467 468 energy -= fTrackEnergy[1]; 469 470 fItTowerTrackArray[0]->Reset(); 471 while((track = static_cast<Candidate*>(fItTowerTrackArray[0]->Next()))) 472 { 473 mother = track; 474 track = static_cast<Candidate*>(track->Clone()); 475 track->AddCandidate(mother); 476 477 track->Momentum *= energy/fTrackEnergy[0]; 478 479 fEFlowTrackOutputArray->Add(track); 480 } 481 482 fItTowerTrackArray[1]->Reset(); 483 while((track = static_cast<Candidate*>(fItTowerTrackArray[1]->Next()))) 484 { 485 mother = track; 486 track = static_cast<Candidate*>(track->Clone()); 487 track->AddCandidate(mother); 488 489 fEFlowTrackOutputArray->Add(track); 490 } 491 492 if(fTowerTrackArray[0]->GetEntriesFast() > 0) energy = 0.0; 493 494 sigma = fResolutionFormula->Eval(0.0, fTowerEta, 0.0, energy); 495 if(energy < fEnergyMin || energy < fEnergySignificanceMin*sigma) energy = 0.0; 496 497 // save energy excess as an energy flow tower 498 if(energy > 0.0) 474 499 { 475 500 // create new photon tower 476 501 tower = static_cast<Candidate*>(fTower->Clone()); 477 pt = neutralEnergy / TMath::CosH(eta); 478 479 tower->Eem = (!fIsEcal) ? 0 : neutralEnergy; 480 tower->Ehad = (fIsEcal) ? 0 : neutralEnergy; 502 pt = energy / TMath::CosH(eta); 503 504 tower->Eem = (!fIsEcal) ? 0 : energy; 505 tower->Ehad = (fIsEcal) ? 0 : energy; 506 507 tower->Momentum.SetPtEtaPhiE(pt, eta, phi, energy); 508 481 509 tower->PID = (fIsEcal) ? 22 : 0; 482 483 tower->Momentum.SetPtEtaPhiE(pt, eta, phi, neutralEnergy); 510 484 511 fEFlowTowerOutputArray->Add(tower); 485 486 fItTowerTrackArray->Reset(); 487 while((track = static_cast<Candidate*>(fItTowerTrackArray->Next()))) 488 { 489 mother = track; 490 track = static_cast<Candidate*>(track->Clone()); 491 track->AddCandidate(mother); 492 493 fEFlowTrackOutputArray->Add(track); 494 } 495 } 496 497 // if neutral excess is not significant, rescale eflow tracks, such that the total charged equals the best measurement given by the calorimeter and tracking 498 else if (fTrackEnergy > 0.0) 499 { 500 weightTrack = (fTrackSigma > 0.0) ? 1 / (fTrackSigma*fTrackSigma) : 0.0; 501 weightCalo = (sigma > 0.0) ? 1 / (sigma*sigma) : 0.0; 502 503 bestEnergyEstimate = (weightTrack*fTrackEnergy + weightCalo*energy) / (weightTrack + weightCalo); 504 rescaleFactor = bestEnergyEstimate/fTrackEnergy; 505 506 fItTowerTrackArray->Reset(); 507 while((track = static_cast<Candidate*>(fItTowerTrackArray->Next()))) 508 { 509 mother = track; 510 track = static_cast<Candidate*>(track->Clone()); 511 track->AddCandidate(mother); 512 513 track->Momentum *= rescaleFactor; 514 515 fEFlowTrackOutputArray->Add(track); 516 } 517 } 518 519 } 512 } 513 } 520 514 521 515 //------------------------------------------------------------------------------ -
modules/SimpleCalorimeter.h
r21eab4f rec5e04b 59 59 Double_t fTowerEta, fTowerPhi, fTowerEdges[4]; 60 60 Double_t fTowerEnergy; 61 Double_t fTrackEnergy ;61 Double_t fTrackEnergy[2]; 62 62 63 63 Double_t fTowerTime; … … 72 72 73 73 Double_t fEnergySignificanceMin; 74 75 Double_t fTrackSigma;76 74 77 75 Bool_t fSmearTowerCenter; … … 104 102 TObjArray *fEFlowTowerOutputArray; //! 105 103 106 TObjArray *fTowerTrackArray ; //!107 TIterator *fItTowerTrackArray ; //!104 TObjArray *fTowerTrackArray[2]; //! 105 TIterator *fItTowerTrackArray[2]; //! 108 106 109 107 void FinalizeTower(); -
modules/TimeSmearing.cc
r21eab4f rec5e04b 93 93 { 94 94 Candidate *candidate, *mother; 95 Double_t t i, tf_smeared, tf;95 Double_t t; 96 96 const Double_t c_light = 2.99792458E8; 97 97 … … 99 99 while((candidate = static_cast<Candidate*>(fItInputArray->Next()))) 100 100 { 101 const TLorentzVector &candidateInitialPosition = candidate->InitialPosition; 102 const TLorentzVector &candidateFinalPosition = candidate->Position; 103 104 ti = candidateInitialPosition.T()*1.0E-3/c_light; 105 tf = candidateFinalPosition.T()*1.0E-3/c_light; 101 const TLorentzVector &candidatePosition = candidate->Position; 102 t = candidatePosition.T()*1.0E-3/c_light; 106 103 107 104 // apply smearing formula 108 tf_smeared = gRandom->Gaus(tf, fTimeResolution); 109 ti = ti + tf_smeared - tf; 105 t = gRandom->Gaus(t, fTimeResolution); 110 106 111 107 mother = candidate; 112 108 candidate = static_cast<Candidate*>(candidate->Clone()); 113 candidate->InitialPosition.SetT(ti*1.0E3*c_light); 114 candidate->Position.SetT(tf*1.0E3*c_light); 115 116 candidate->ErrorT = fTimeResolution*1.0E3*c_light; 109 candidate->Position.SetT(t*1.0E3*c_light); 117 110 118 111 candidate->AddCandidate(mother); -
modules/TrackCountingBTagging.cc
r21eab4f rec5e04b 96 96 97 97 Double_t jpx, jpy; 98 Double_t dr, tp t;99 Double_t xd, yd, d 0, dd0, ip, sip;98 Double_t dr, tpx, tpy, tpt; 99 Double_t xd, yd, dxy, ddxy, ip, sip; 100 100 101 101 Int_t sign; … … 117 117 { 118 118 const TLorentzVector &trkMomentum = track->Momentum; 119 119 120 120 dr = jetMomentum.DeltaR(trkMomentum); 121 121 122 tpt = trkMomentum.Pt(); 123 tpx = trkMomentum.Px(); 124 tpy = trkMomentum.Py(); 125 122 126 xd = track->Xd; 123 127 yd = track->Yd; 124 d 0= TMath::Hypot(xd, yd);125 dd 0 = track->ErrorD0;128 dxy = TMath::Hypot(xd, yd); 129 ddxy = track->SDxy; 126 130 127 131 if(tpt < fPtMin) continue; 128 132 if(dr > fDeltaR) continue; 129 if(d 0> fIPmax) continue;133 if(dxy > fIPmax) continue; 130 134 131 135 sign = (jpx*xd + jpy*yd > 0.0) ? 1 : -1; 132 136 133 ip = sign*d 0;134 sip = ip / TMath::Abs(dd 0);137 ip = sign*dxy; 138 sip = ip / TMath::Abs(ddxy); 135 139 136 140 if(sip > fSigMin) count++; -
modules/TreeWriter.cc
r21eab4f rec5e04b 215 215 entry->Pz = momentum.Pz(); 216 216 217 entry->D0 = candidate->D0;218 entry->DZ = candidate->DZ;219 entry->P = candidate->P;220 entry->PT = candidate->PT;221 entry->CtgTheta = candidate->CtgTheta;222 entry->Phi = candidate->Phi;223 224 217 entry->Eta = eta; 225 218 entry->Phi = momentum.Phi(); … … 240 233 { 241 234 TIter iterator(array); 242 Candidate *candidate = 0 , *constituent = 0;235 Candidate *candidate = 0; 243 236 Vertex *entry = 0; 244 237 245 238 const Double_t c_light = 2.99792458E8; 246 239 247 Double_t x, y, z, t, xError, yError, zError, tError, sigma, sumPT2, btvSumPT2, genDeltaZ, genSumPT2;248 UInt_t index, ndf;249 250 CompBase *compare = Candidate::fgCompare;251 Candidate::fgCompare = CompSumPT2<Candidate>::Instance();252 array->Sort();253 Candidate::fgCompare = compare;254 255 240 // loop over all vertices 256 241 iterator.Reset(); 257 242 while((candidate = static_cast<Candidate*>(iterator.Next()))) 258 243 { 259 260 index = candidate->ClusterIndex; 261 ndf = candidate->ClusterNDF; 262 sigma = candidate->ClusterSigma; 263 sumPT2 = candidate->SumPT2; 264 btvSumPT2 = candidate->BTVSumPT2; 265 genDeltaZ = candidate->GenDeltaZ; 266 genSumPT2 = candidate->GenSumPT2; 267 268 x = candidate->Position.X(); 269 y = candidate->Position.Y(); 270 z = candidate->Position.Z(); 271 t = candidate->Position.T()*1.0E-3/c_light; 272 273 xError = candidate->PositionError.X (); 274 yError = candidate->PositionError.Y (); 275 zError = candidate->PositionError.Z (); 276 tError = candidate->PositionError.T ()*1.0E-3/c_light; 244 const TLorentzVector &position = candidate->Position; 277 245 278 246 entry = static_cast<Vertex*>(branch->NewEntry()); 279 247 280 entry->Index = index; 281 entry->NDF = ndf; 282 entry->Sigma = sigma; 283 entry->SumPT2 = sumPT2; 284 entry->BTVSumPT2 = btvSumPT2; 285 entry->GenDeltaZ = genDeltaZ; 286 entry->GenSumPT2 = genSumPT2; 287 288 entry->X = x; 289 entry->Y = y; 290 entry->Z = z; 291 entry->T = t; 292 293 entry->ErrorX = xError; 294 entry->ErrorY = yError; 295 entry->ErrorZ = zError; 296 entry->ErrorT = tError; 297 298 299 TIter itConstituents(candidate->GetCandidates()); 300 itConstituents.Reset(); 301 entry->Constituents.Clear(); 302 while((constituent = static_cast<Candidate*>(itConstituents.Next()))) 303 { 304 entry->Constituents.Add(constituent); 305 } 306 307 } 308 } 309 248 entry->X = position.X(); 249 entry->Y = position.Y(); 250 entry->Z = position.Z(); 251 entry->T = position.T()*1.0E-3/c_light; 252 } 253 } 310 254 311 255 //------------------------------------------------------------------------------ … … 317 261 Candidate *particle = 0; 318 262 Track *entry = 0; 319 Double_t pt, signz, cosTheta, eta, rapidity , p, ctgTheta, phi;263 Double_t pt, signz, cosTheta, eta, rapidity; 320 264 const Double_t c_light = 2.99792458E8; 321 265 … … 348 292 entry->TOuter = position.T()*1.0E-3/c_light; 349 293 350 entry->L = candidate->L; 351 352 entry->D0 = candidate->D0; 353 entry->ErrorD0 = candidate->ErrorD0; 354 entry->DZ = candidate->DZ; 355 entry->ErrorDZ = candidate->ErrorDZ; 356 357 entry->ErrorP = candidate->ErrorP; 358 entry->ErrorPT = candidate->ErrorPT; 359 entry->ErrorCtgTheta = candidate->ErrorCtgTheta; 360 entry->ErrorPhi = candidate->ErrorPhi; 361 294 entry->Dxy = candidate->Dxy; 295 entry->SDxy = candidate->SDxy ; 362 296 entry->Xd = candidate->Xd; 363 297 entry->Yd = candidate->Yd; … … 367 301 368 302 pt = momentum.Pt(); 369 p = momentum.P();370 phi = momentum.Phi();371 ctgTheta = (TMath::Tan(momentum.Theta()) != 0) ? 1/TMath::Tan(momentum.Theta()) : 1e10;372 373 303 cosTheta = TMath::Abs(momentum.CosTheta()); 374 304 signz = (momentum.Pz() >= 0.0) ? 1.0 : -1.0; … … 376 306 rapidity = (cosTheta == 1.0 ? signz*999.9 : momentum.Rapidity()); 377 307 378 entry->PT = pt;379 308 entry->Eta = eta; 380 entry->Phi = phi;381 entry-> CtgTheta = ctgTheta;309 entry->Phi = momentum.Phi(); 310 entry->PT = pt; 382 311 383 312 particle = static_cast<Candidate*>(candidate->GetCandidates()->At(0)); … … 390 319 391 320 entry->Particle = particle; 392 393 entry->VertexIndex = candidate->ClusterIndex;394 395 321 } 396 322 } -
readers/DelphesCMSFWLite.cpp
r21eab4f rec5e04b 272 272 273 273 branchEvent = treeWriter->NewBranch("Event", HepMCEvent::Class()); 274 branchRwgt = treeWriter->NewBranch(" Weight", Weight::Class());274 branchRwgt = treeWriter->NewBranch("Rwgt", Weight::Class()); 275 275 276 276 confReader = new ExRootConfReader; -
readers/DelphesPythia8.cpp
r21eab4f rec5e04b 153 153 // from pythia8 example 21 154 154 155 void fillParticle(int id, double pt_max, double eta_max,156 Pythia8::Event &event, Pythia8::ParticleData &pdt, Pythia8::Rndm &rndm)157 { 155 void fillParticle(int id, double ee_max, double thetaIn, double phiIn, 156 Pythia8::Event& event, Pythia8::ParticleData& pdt, Pythia8::Rndm& rndm, bool atRest = false) { 157 158 158 // Reset event record to allow for new event. 159 159 event.reset(); 160 160 161 // Generate uniform pt and eta.162 double pt, eta, phi, pp, ee, mm;163 pt = pow(10, 1.0 + (log10(pt_max) - 1.0) * rndm.flat());164 eta = (2.0 * rndm.flat() - 1.0) * eta_max;165 phi = 2. 0* M_PI * rndm.flat();166 pp = pt * cosh(eta);167 mm = pdt.mSel(id);168 ee = Pythia8::sqrtpos(pp*pp +mm*mm);161 // Angles uniform in solid angle. 162 double cThe, sThe, phi, ee; 163 cThe = 2. * rndm.flat() - 1.; 164 sThe = Pythia8::sqrtpos(1. - cThe * cThe); 165 phi = 2. * M_PI * rndm.flat(); 166 ee = pow(10,1+(log10(ee_max)-1)*rndm.flat()); 167 double mm = pdt.mSel(id); 168 double pp = Pythia8::sqrtpos(ee*ee - mm*mm); 169 169 170 170 // Store the particle in the event record. 171 event.append(id, 1, 0, 0, pt * cos(phi), pt * sin(phi), pt * sinh(eta), ee, mm); 171 event.append( id, 1, 0, 0, pp * sThe * cos(phi), pp * sThe * sin(phi), pp * cThe, ee, mm); 172 172 173 } 173 174 174 void fillPartons(int id, double pt_max, double eta_max, 175 Pythia8::Event &event, Pythia8::ParticleData &pdt, Pythia8::Rndm &rndm) 176 { 175 void fillPartons(int type, double ee_max, Pythia8::Event& event, Pythia8::ParticleData& pdt, 176 Pythia8::Rndm& rndm) { 177 177 178 178 // Reset event record to allow for new event. 179 179 event.reset(); 180 180 181 // Angles uniform in solid angle. 182 double cThe, sThe, phi, ee; 183 181 184 // Information on a q qbar system, to be hadronized. 182 185 183 // Generate uniform pt and eta. 184 double pt, eta, phi, pp, ee, mm; 185 pt = pow(10, 1.0 + (log10(pt_max) - 1.0) * rndm.flat()); 186 eta = (2.0 * rndm.flat() - 1.0) * eta_max; 187 phi = 2.0 * M_PI * rndm.flat(); 188 pp = pt * cosh(eta); 189 mm = pdt.m0(id); 190 ee = Pythia8::sqrtpos(pp*pp + mm*mm); 191 192 if(id == 21) 193 { 194 event.append(21, 23, 101, 102, pt * cos(phi), pt * sin(phi), pt * sinh(eta), ee); 195 event.append(21, 23, 102, 101, -pt * cos(phi), -pt * sin(phi), -pt * sinh(eta), ee); 186 cThe = 2. * rndm.flat() - 1.; 187 sThe = Pythia8::sqrtpos(1. - cThe * cThe); 188 phi = 2. * M_PI * rndm.flat(); 189 ee = pow(10,1+(log10(ee_max)-1)*rndm.flat()); 190 double mm = pdt.m0(type); 191 double pp = Pythia8::sqrtpos(ee*ee - mm*mm); 192 if (type == 21) 193 { 194 event.append( 21, 23, 101, 102, pp * sThe * cos(phi), pp * sThe * sin(phi), pp * cThe, ee); 195 event.append( 21, 23, 102, 101, -pp * sThe * cos(phi), -pp * sThe * sin(phi), -pp * cThe, ee); 196 196 } 197 197 else 198 198 { 199 event.append( id, 23, 101, 0, pt * cos(phi), pt * sin(phi), pt * sinh(eta), ee, mm);200 event.append( -id, 23, 0, 101, -pt * cos(phi), -pt * sin(phi), -pt * sinh(eta), ee, mm);199 event.append( type, 23, 101, 0, pp * sThe * cos(phi), pp * sThe * sin(phi), pp * cThe, ee, mm); 200 event.append( -type, 23, 0, 101, -pp * sThe * cos(phi), -pp * sThe * sin(phi), -pp * cThe, ee, mm); 201 201 } 202 202 } … … 338 338 if (pythia->flag("Main:spareFlag1")) 339 339 { 340 if (pythia->mode("Main:spareMode1") == 11 || pythia->mode("Main:spareMode1") == 13 || pythia->mode("Main:spareMode1") == 15 || pythia->mode("Main:spareMode1") ==22)340 if (pythia->mode("Main:spareMode1") == 11 || pythia->mode("Main:spareMode1") == 13 || pythia->mode("Main:spareMode1") == 22) 341 341 { 342 fillParticle( pythia->mode("Main:spareMode1"), pythia->parm("Main:spareParm1"), pythia->parm("Main:spareParm2"), pythia->event, pythia->particleData, pythia->rndm);342 fillParticle( pythia->mode("Main:spareMode1"), pythia->parm("Main:spareParm1"), -1., 0.,pythia->event, pythia->particleData, pythia->rndm, 0); 343 343 } 344 else 345 { 346 fillPartons(pythia->mode("Main:spareMode1"), pythia->parm("Main:spareParm1"), pythia->parm("Main:spareParm2"), pythia->event, pythia->particleData, pythia->rndm); 347 } 344 else fillPartons( pythia->mode("Main:spareMode1"), pythia->parm("Main:spareParm1"), pythia->event, pythia->particleData, pythia->rndm); 348 345 } 349 346
Note:
See TracChangeset
for help on using the changeset viewer.