Changes in modules/FastJetFinder.cc [341014c:35807af] in git
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
modules/FastJetFinder.cc
r341014c r35807af 17 17 */ 18 18 19 19 20 /** \class FastJetFinder 20 21 * … … 31 32 #include "classes/DelphesFormula.h" 32 33 34 #include "ExRootAnalysis/ExRootResult.h" 35 #include "ExRootAnalysis/ExRootFilter.h" 33 36 #include "ExRootAnalysis/ExRootClassifier.h" 34 #include "ExRootAnalysis/ExRootFilter.h" 35 #include "ExRootAnalysis/ExRootResult.h" 36 37 38 #include "TMath.h" 39 #include "TString.h" 40 #include "TFormula.h" 41 #include "TRandom3.h" 42 #include "TObjArray.h" 37 43 #include "TDatabasePDG.h" 38 #include "TFormula.h"39 44 #include "TLorentzVector.h" 40 #include "TMath.h"41 #include "TObjArray.h"42 #include "TRandom3.h"43 #include "TString.h"44 45 45 46 #include <algorithm> 47 #include <stdexcept> 46 48 #include <iostream> 47 49 #include <sstream> 48 #include <stdexcept>49 50 #include <vector> 50 51 52 #include "fastjet/PseudoJet.hh" 53 #include "fastjet/JetDefinition.hh" 51 54 #include "fastjet/ClusterSequence.hh" 55 #include "fastjet/Selector.hh" 52 56 #include "fastjet/ClusterSequenceArea.hh" 53 #include "fastjet/JetDefinition.hh"54 #include "fastjet/PseudoJet.hh"55 #include "fastjet/Selector.hh"56 57 #include "fastjet/tools/JetMedianBackgroundEstimator.hh" 57 58 59 #include "fastjet/plugins/SISCone/fastjet/SISConePlugin.hh" 60 #include "fastjet/plugins/CDFCones/fastjet/CDFMidPointPlugin.hh" 58 61 #include "fastjet/plugins/CDFCones/fastjet/CDFJetCluPlugin.hh" 59 #include "fastjet/plugins/CDFCones/fastjet/CDFMidPointPlugin.hh" 60 #include "fastjet/plugins/SISCone/fastjet/SISConePlugin.hh" 61 62 #include "fastjet/contribs/Nsubjettiness/ExtraRecombiners.hh" 62 63 #include "fastjet/contribs/Nsubjettiness/Nsubjettiness.hh" 63 64 #include "fastjet/contribs/Nsubjettiness/Njettiness.hh" 64 65 #include "fastjet/contribs/Nsubjettiness/NjettinessPlugin.hh" 65 #include "fastjet/contribs/Nsubjettiness/ Nsubjettiness.hh"66 #include "fastjet/contribs/Nsubjettiness/ExtraRecombiners.hh" 66 67 67 68 #include "fastjet/contribs/ValenciaPlugin/ValenciaPlugin.hh" 68 69 69 #include "fastjet/contribs/RecursiveTools/SoftDrop.hh"70 70 #include "fastjet/tools/Filter.hh" 71 71 #include "fastjet/tools/Pruner.hh" 72 #include "fastjet/contribs/RecursiveTools/SoftDrop.hh" 72 73 73 74 using namespace std; 74 75 using namespace fastjet; 75 76 using namespace fastjet::contrib; 77 76 78 77 79 //------------------------------------------------------------------------------ … … 81 83 fDefinition(0), fAreaDefinition(0), fItInputArray(0) 82 84 { 85 83 86 } 84 87 … … 87 90 FastJetFinder::~FastJetFinder() 88 91 { 92 89 93 } 90 94 … … 116 120 fJetPTMin = GetDouble("JetPTMin", 10.0); 117 121 122 118 123 //-- N(sub)jettiness parameters -- 119 124 … … 122 127 fAxisMode = GetInt("AxisMode", 1); 123 128 fRcutOff = GetDouble("RcutOff", 0.8); // used only if Njettiness is used as jet clustering algo (case 8) 124 fN = GetInt("N", 2); // used only if Njettiness is used as jet clustering algo (case 8)129 fN = GetInt("N", 2); // used only if Njettiness is used as jet clustering algo (case 8) 125 130 126 131 //-- Exclusive clustering for e+e- collisions -- 127 128 fNJets = GetInt("NJets", 132 133 fNJets = GetInt("NJets",2); 129 134 fExclusiveClustering = GetBool("ExclusiveClustering", false); 130 135 131 136 //-- Valencia Linear Collider algorithm 132 133 137 fGamma = GetDouble("Gamma", 1.0); 134 138 //fBeta parameter see above 135 139 136 140 fMeasureDef = new NormalizedMeasure(fBeta, fParameterR); 137 141 138 142 switch(fAxisMode) 139 143 { 140 default:141 case 1:142 fAxesDef = new WTA_KT_Axes();143 break;144 case 2:145 fAxesDef = new OnePass_WTA_KT_Axes();146 break;147 case 3:148 fAxesDef = new KT_Axes();149 break;150 case 4:151 fAxesDef = new OnePass_KT_Axes();152 }144 default: 145 case 1: 146 fAxesDef = new WTA_KT_Axes(); 147 break; 148 case 2: 149 fAxesDef = new OnePass_WTA_KT_Axes(); 150 break; 151 case 3: 152 fAxesDef = new KT_Axes(); 153 break; 154 case 4: 155 fAxesDef = new OnePass_KT_Axes(); 156 } 153 157 154 158 //-- Trimming parameters -- 155 159 156 160 fComputeTrimming = GetBool("ComputeTrimming", false); 157 161 fRTrim = GetDouble("RTrim", 0.2); 158 162 fPtFracTrim = GetDouble("PtFracTrim", 0.05); 163 159 164 160 165 //-- Pruning parameters -- 161 166 162 167 fComputePruning = GetBool("ComputePruning", false); 163 168 fZcutPrun = GetDouble("ZcutPrun", 0.1); 164 169 fRcutPrun = GetDouble("RcutPrun", 0.5); 165 170 fRPrun = GetDouble("RPrun", 0.8); 166 171 167 172 //-- SoftDrop parameters -- 168 169 fComputeSoftDrop = GetBool("ComputeSoftDrop", false);170 fBetaSoftDrop = GetDouble("BetaSoftDrop", 0.0);173 174 fComputeSoftDrop = GetBool("ComputeSoftDrop", false); 175 fBetaSoftDrop = GetDouble("BetaSoftDrop", 0.0); 171 176 fSymmetryCutSoftDrop = GetDouble("SymmetryCutSoftDrop", 0.1); 172 fR0SoftDrop = GetDouble("R0SoftDrop=", 0.8); 177 fR0SoftDrop= GetDouble("R0SoftDrop=", 0.8); 178 173 179 174 180 // --- Jet Area Parameters --- 175 176 181 fAreaAlgorithm = GetInt("AreaAlgorithm", 0); 177 182 fComputeRho = GetBool("ComputeRho", false); … … 190 195 switch(fAreaAlgorithm) 191 196 { 192 default:193 case 0:194 fAreaDefinition = 0;195 break;196 case 1:197 fAreaDefinition = new AreaDefinition(active_area_explicit_ghosts, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));198 break;199 case 2:200 fAreaDefinition = new AreaDefinition(one_ghost_passive_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));201 break;202 case 3:203 fAreaDefinition = new AreaDefinition(passive_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));204 break;205 case 4:206 fAreaDefinition = new AreaDefinition(VoronoiAreaSpec(fEffectiveRfact));207 break;208 case 5:209 fAreaDefinition = new AreaDefinition(active_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));210 break;197 case 1: 198 fAreaDefinition = new AreaDefinition(active_area_explicit_ghosts, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt)); 199 break; 200 case 2: 201 fAreaDefinition = new AreaDefinition(one_ghost_passive_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt)); 202 break; 203 case 3: 204 fAreaDefinition = new AreaDefinition(passive_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt)); 205 break; 206 case 4: 207 fAreaDefinition = new AreaDefinition(VoronoiAreaSpec(fEffectiveRfact)); 208 break; 209 case 5: 210 fAreaDefinition = new AreaDefinition(active_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt)); 211 break; 212 default: 213 case 0: 214 fAreaDefinition = 0; 215 break; 211 216 } 212 217 213 218 switch(fJetAlgorithm) 214 219 { 215 case 1:216 plugin = new CDFJetCluPlugin(fSeedThreshold, fConeRadius, fAdjacencyCut, fMaxIterations, fIratch, fOverlapThreshold);217 fDefinition = new JetDefinition(plugin);218 break;219 case 2:220 plugin = new CDFMidPointPlugin(fSeedThreshold, fConeRadius, fConeAreaFraction, fMaxPairSize, fMaxIterations, fOverlapThreshold);221 fDefinition = new JetDefinition(plugin);222 break;223 case 3:224 plugin = new SISConePlugin(fConeRadius, fOverlapThreshold, fMaxIterations, fJetPTMin);225 fDefinition = new JetDefinition(plugin);226 break;227 case 4:228 fDefinition = new JetDefinition(kt_algorithm, fParameterR);229 break;230 case 5:231 fDefinition = new JetDefinition(cambridge_algorithm, fParameterR);232 break;233 default:234 case 6:235 fDefinition = new JetDefinition(antikt_algorithm, fParameterR);236 break;237 case 7:238 recomb = new WinnerTakeAllRecombiner();239 fDefinition = new JetDefinition(antikt_algorithm, fParameterR, recomb, Best);240 break;241 case 8:242 fNjettinessPlugin = new NjettinessPlugin(fN, Njettiness::wta_kt_axes, Njettiness::unnormalized_cutoff_measure, fBeta, fRcutOff);243 fDefinition = new JetDefinition(fNjettinessPlugin);244 break;220 case 1: 221 plugin = new CDFJetCluPlugin(fSeedThreshold, fConeRadius, fAdjacencyCut, fMaxIterations, fIratch, fOverlapThreshold); 222 fDefinition = new JetDefinition(plugin); 223 break; 224 case 2: 225 plugin = new CDFMidPointPlugin(fSeedThreshold, fConeRadius, fConeAreaFraction, fMaxPairSize, fMaxIterations, fOverlapThreshold); 226 fDefinition = new JetDefinition(plugin); 227 break; 228 case 3: 229 plugin = new SISConePlugin(fConeRadius, fOverlapThreshold, fMaxIterations, fJetPTMin); 230 fDefinition = new JetDefinition(plugin); 231 break; 232 case 4: 233 fDefinition = new JetDefinition(kt_algorithm, fParameterR); 234 break; 235 case 5: 236 fDefinition = new JetDefinition(cambridge_algorithm, fParameterR); 237 break; 238 default: 239 case 6: 240 fDefinition = new JetDefinition(antikt_algorithm, fParameterR); 241 break; 242 case 7: 243 recomb = new WinnerTakeAllRecombiner(); 244 fDefinition = new JetDefinition(antikt_algorithm, fParameterR, recomb, Best); 245 break; 246 case 8: 247 fNjettinessPlugin = new NjettinessPlugin(fN, Njettiness::wta_kt_axes, Njettiness::unnormalized_cutoff_measure, fBeta, fRcutOff); 248 fDefinition = new JetDefinition(fNjettinessPlugin); 249 break; 245 250 case 9: 246 fValenciaPlugin = new ValenciaPlugin(fParameterR, fBeta, fGamma); 247 fDefinition = new JetDefinition(fValenciaPlugin); 248 break; 249 } 251 fValenciaPlugin = new ValenciaPlugin(fParameterR, fBeta, fGamma); 252 fDefinition = new JetDefinition(fValenciaPlugin); 253 break; 254 255 } 256 257 250 258 251 259 fPlugin = plugin; … … 262 270 263 271 fEstimators.clear(); 264 for(i = 0; i < size /2; ++i)265 { 266 etaMin = param[i *2].GetDouble();267 etaMax = param[i *2 + 1].GetDouble();272 for(i = 0; i < size/2; ++i) 273 { 274 etaMin = param[i*2].GetDouble(); 275 etaMax = param[i*2 + 1].GetDouble(); 268 276 estimatorStruct.estimator = new JetMedianBackgroundEstimator(SelectorRapRange(etaMin, etaMax), *fDefinition, *fAreaDefinition); 269 277 estimatorStruct.etaMin = etaMin; … … 282 290 fOutputArray = ExportArray(GetString("OutputArray", "jets")); 283 291 fRhoOutputArray = ExportArray(GetString("RhoOutputArray", "rho")); 284 fConstituentsOutputArray = ExportArray(GetString("ConstituentsOutputArray", "constituents"));285 292 } 286 293 … … 289 296 void FastJetFinder::Finish() 290 297 { 291 vector< TEstimatorStruct>::iterator itEstimators;298 vector< TEstimatorStruct >::iterator itEstimators; 292 299 293 300 for(itEstimators = fEstimators.begin(); itEstimators != fEstimators.end(); ++itEstimators) … … 299 306 if(fDefinition) delete fDefinition; 300 307 if(fAreaDefinition) delete fAreaDefinition; 301 if(fPlugin) delete static_cast<JetDefinition::Plugin 302 if(fRecomb) delete static_cast<JetDefinition::Recombiner 303 if(fNjettinessPlugin) delete static_cast<JetDefinition::Plugin 308 if(fPlugin) delete static_cast<JetDefinition::Plugin*>(fPlugin); 309 if(fRecomb) delete static_cast<JetDefinition::Recombiner*>(fRecomb); 310 if(fNjettinessPlugin) delete static_cast<JetDefinition::Plugin*>(fNjettinessPlugin); 304 311 if(fAxesDef) delete fAxesDef; 305 312 if(fMeasureDef) delete fMeasureDef; 306 if(fValenciaPlugin) delete static_cast<JetDefinition::Plugin *>(fValenciaPlugin); 313 if(fValenciaPlugin) delete static_cast<JetDefinition::Plugin*>(fValenciaPlugin); 314 307 315 } 308 316 … … 317 325 Double_t time, timeWeight; 318 326 Int_t number, ncharged, nneutrals; 319 Int_t charge; 327 Int_t charge; 320 328 Double_t rho = 0.0; 321 329 PseudoJet jet, area; 322 330 ClusterSequence *sequence; 323 vector< PseudoJet> inputList, outputList, subjets;324 vector< PseudoJet>::iterator itInputList, itOutputList;325 vector< TEstimatorStruct>::iterator itEstimators;331 vector< PseudoJet > inputList, outputList, subjets; 332 vector< PseudoJet >::iterator itInputList, itOutputList; 333 vector< TEstimatorStruct >::iterator itEstimators; 326 334 Double_t excl_ymerge23 = 0.0; 327 335 Double_t excl_ymerge34 = 0.0; 328 336 Double_t excl_ymerge45 = 0.0; 329 337 Double_t excl_ymerge56 = 0.0; 330 338 331 339 DelphesFactory *factory = GetFactory(); 332 340 … … 336 344 fItInputArray->Reset(); 337 345 number = 0; 338 while((candidate = static_cast<Candidate 346 while((candidate = static_cast<Candidate*>(fItInputArray->Next()))) 339 347 { 340 348 momentum = candidate->Momentum; … … 373 381 outputList.clear(); 374 382 383 375 384 if(fExclusiveClustering) 376 { 377 try 378 { 379 outputList = sorted_by_pt(sequence->exclusive_jets(fNJets)); 380 } 381 catch(fastjet::Error) 382 { 383 outputList.clear(); 384 } 385 386 excl_ymerge23 = sequence->exclusive_ymerge(2); 387 excl_ymerge34 = sequence->exclusive_ymerge(3); 388 excl_ymerge45 = sequence->exclusive_ymerge(4); 389 excl_ymerge56 = sequence->exclusive_ymerge(5); 390 } 385 { 386 try{ 387 outputList = sorted_by_pt(sequence->exclusive_jets( fNJets )); 388 } 389 catch(fastjet::Error) 390 { 391 outputList.clear(); 392 } 393 394 excl_ymerge23 = sequence->exclusive_ymerge( 2 ); 395 excl_ymerge34 = sequence->exclusive_ymerge( 3 ); 396 excl_ymerge45 = sequence->exclusive_ymerge( 4 ); 397 excl_ymerge56 = sequence->exclusive_ymerge( 5 ); 398 } 391 399 else 392 {393 outputList = sorted_by_pt(sequence->inclusive_jets(fJetPTMin));394 }400 { 401 outputList = sorted_by_pt(sequence->inclusive_jets(fJetPTMin)); 402 } 395 403 396 404 // loop over all jets and export them 397 405 detaMax = 0.0; 398 406 dphiMax = 0.0; 399 407 400 408 for(itOutputList = outputList.begin(); itOutputList != outputList.end(); ++itOutputList) 401 409 { … … 408 416 if(fAreaDefinition) area = itOutputList->area_4vector(); 409 417 418 419 410 420 candidate = factory->NewCandidate(); 411 421 … … 424 434 { 425 435 if(itInputList->user_index() < 0) continue; 426 constituent = static_cast<Candidate 436 constituent = static_cast<Candidate*>(fInputArray->At(itInputList->user_index())); 427 437 428 438 deta = TMath::Abs(momentum.Eta() - constituent->Momentum.Eta()); … … 431 441 if(dphi > dphiMax) dphiMax = dphi; 432 442 433 if(constituent->Charge == 0) 434 nneutrals++; 435 else 436 ncharged++; 437 438 time += TMath::Sqrt(constituent->Momentum.E()) * (constituent->Position.T()); 443 if(constituent->Charge == 0) nneutrals++; 444 else ncharged++; 445 446 time += TMath::Sqrt(constituent->Momentum.E())*(constituent->Position.T()); 439 447 timeWeight += TMath::Sqrt(constituent->Momentum.E()); 440 448 441 449 charge += constituent->Charge; 442 450 443 fConstituentsOutputArray->Add(constituent);444 451 candidate->AddCandidate(constituent); 445 452 } 446 453 447 454 candidate->Momentum = momentum; 448 candidate->Position.SetT(time /timeWeight);455 candidate->Position.SetT(time/timeWeight); 449 456 candidate->Area.SetPxPyPzE(area.px(), area.py(), area.pz(), area.E()); 450 457 451 458 candidate->DeltaEta = detaMax; 452 459 candidate->DeltaPhi = dphiMax; 453 candidate->Charge = charge; 460 candidate->Charge = charge; 454 461 candidate->NNeutrals = nneutrals; 455 462 candidate->NCharged = ncharged; 463 456 464 457 465 //for exclusive clustering, access y_n,n+1 as exclusive_ymerge (fNJets); … … 460 468 candidate->ExclYmerge45 = excl_ymerge45; 461 469 candidate->ExclYmerge56 = excl_ymerge56; 462 470 463 471 //------------------------------------ 464 472 // Trimming … … 468 476 { 469 477 470 fastjet::Filter trimmer(fastjet::JetDefinition(fastjet::kt_algorithm, fRTrim),fastjet::SelectorPtFractionMin(fPtFracTrim));478 fastjet::Filter trimmer(fastjet::JetDefinition(fastjet::kt_algorithm,fRTrim),fastjet::SelectorPtFractionMin(fPtFracTrim)); 471 479 fastjet::PseudoJet trimmed_jet = trimmer(*itOutputList); 472 480 473 481 trimmed_jet = join(trimmed_jet.constituents()); 474 482 475 483 candidate->TrimmedP4[0].SetPtEtaPhiM(trimmed_jet.pt(), trimmed_jet.eta(), trimmed_jet.phi(), trimmed_jet.m()); 476 477 // four hardest subjets 484 485 // four hardest subjets 478 486 subjets.clear(); 479 487 subjets = trimmed_jet.pieces(); 480 488 subjets = sorted_by_pt(subjets); 481 489 482 490 candidate->NSubJetsTrimmed = subjets.size(); 483 491 484 for (size_t i = 0; i < subjets.size() and i < 4; i++)492 for (size_t i = 0; i < subjets.size() and i < 4; i++) 485 493 { 486 if(subjets.at(i).pt() < 0) continue; 487 candidate->TrimmedP4[i +1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());494 if(subjets.at(i).pt() < 0) continue ; 495 candidate->TrimmedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m()); 488 496 } 489 497 } 490 498 499 491 500 //------------------------------------ 492 501 // Pruning 493 502 //------------------------------------ 494 503 504 495 505 if(fComputePruning) 496 506 { 497 507 498 fastjet::Pruner pruner(fastjet::JetDefinition(fastjet::cambridge_algorithm, fRPrun), fZcutPrun,fRcutPrun);508 fastjet::Pruner pruner(fastjet::JetDefinition(fastjet::cambridge_algorithm,fRPrun),fZcutPrun,fRcutPrun); 499 509 fastjet::PseudoJet pruned_jet = pruner(*itOutputList); 500 510 501 511 candidate->PrunedP4[0].SetPtEtaPhiM(pruned_jet.pt(), pruned_jet.eta(), pruned_jet.phi(), pruned_jet.m()); 502 503 // four hardest subjet 512 513 // four hardest subjet 504 514 subjets.clear(); 505 515 subjets = pruned_jet.pieces(); 506 516 subjets = sorted_by_pt(subjets); 507 517 508 518 candidate->NSubJetsPruned = subjets.size(); 509 519 510 for (size_t i = 0; i < subjets.size() and i < 4; i++)520 for (size_t i = 0; i < subjets.size() and i < 4; i++) 511 521 { 512 if(subjets.at(i).pt() < 0) continue; 513 candidate->PrunedP4[i +1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());522 if(subjets.at(i).pt() < 0) continue ; 523 candidate->PrunedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m()); 514 524 } 515 } 516 525 526 } 527 517 528 //------------------------------------ 518 529 // SoftDrop 519 530 //------------------------------------ 520 531 521 532 if(fComputeSoftDrop) 522 533 { 523 524 contrib::SoftDrop softDrop(fBetaSoftDrop, fSymmetryCutSoftDrop,fR0SoftDrop);534 535 contrib::SoftDrop softDrop(fBetaSoftDrop,fSymmetryCutSoftDrop,fR0SoftDrop); 525 536 fastjet::PseudoJet softdrop_jet = softDrop(*itOutputList); 526 537 527 538 candidate->SoftDroppedP4[0].SetPtEtaPhiM(softdrop_jet.pt(), softdrop_jet.eta(), softdrop_jet.phi(), softdrop_jet.m()); 528 529 // four hardest subjet 530 539 540 // four hardest subjet 541 531 542 subjets.clear(); 532 subjets = softdrop_jet.pieces();533 subjets = sorted_by_pt(subjets);543 subjets = softdrop_jet.pieces(); 544 subjets = sorted_by_pt(subjets); 534 545 candidate->NSubJetsSoftDropped = softdrop_jet.pieces().size(); 535 546 536 547 candidate->SoftDroppedJet = candidate->SoftDroppedP4[0]; 537 548 538 for (size_t i = 0; i < subjets.size()and i < 4; i++)549 for (size_t i = 0; i < subjets.size() and i < 4; i++) 539 550 { 540 if(subjets.at(i).pt() < 0) continue; 541 candidate->SoftDroppedP4[i +1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());542 if(i == 0) candidate->SoftDroppedSubJet1 = candidate->SoftDroppedP4[i +1];543 if(i == 1) candidate->SoftDroppedSubJet2 = candidate->SoftDroppedP4[i +1];551 if(subjets.at(i).pt() < 0) continue ; 552 candidate->SoftDroppedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m()); 553 if(i==0) candidate->SoftDroppedSubJet1 = candidate->SoftDroppedP4[i+1]; 554 if(i==1) candidate->SoftDroppedSubJet2 = candidate->SoftDroppedP4[i+1]; 544 555 } 545 556 } 546 557 547 558 // --- compute N-subjettiness with N = 1,2,3,4,5 ---- 548 559 549 560 if(fComputeNsubjettiness) 550 561 { 551 562 552 563 Nsubjettiness nSub1(1, *fAxesDef, *fMeasureDef); 553 564 Nsubjettiness nSub2(2, *fAxesDef, *fMeasureDef); … … 555 566 Nsubjettiness nSub4(4, *fAxesDef, *fMeasureDef); 556 567 Nsubjettiness nSub5(5, *fAxesDef, *fMeasureDef); 557 568 558 569 candidate->Tau[0] = nSub1(*itOutputList); 559 570 candidate->Tau[1] = nSub2(*itOutputList); … … 561 572 candidate->Tau[3] = nSub4(*itOutputList); 562 573 candidate->Tau[4] = nSub5(*itOutputList); 574 563 575 } 564 576
Note:
See TracChangeset
for help on using the changeset viewer.