Fork me on GitHub

Changeset a98c7ef in git


Ignore:
Timestamp:
Oct 1, 2015, 3:21:57 PM (9 years ago)
Author:
Michele Selvaggi <michele.selvaggi@…>
Branches:
ImprovedOutputFile, Timing, dual_readout, llp, master
Children:
fa7f333
Parents:
d77b51d
Message:

fixed eflow at high pt

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • classes/DelphesClasses.cc

    rd77b51d ra98c7ef  
    129129  Area(0.0, 0.0, 0.0, 0.0),
    130130  Dxy(0), SDxy(0), Xd(0), Yd(0), Zd(0),
     131  TrackResolution(0),
    131132  NCharged(0),
    132133  NNeutrals(0),
     
    267268  object.Yd = Yd;
    268269  object.Zd = Zd;
    269 
     270  object.TrackResolution = TrackResolution;
    270271  object.NCharged = NCharged;
    271272  object.NNeutrals = NNeutrals;
     
    368369  Yd = 0.0;
    369370  Zd = 0.0;
     371  TrackResolution = 0.0;
    370372  NCharged = 0;
    371373  NNeutrals = 0;
  • classes/DelphesClasses.h

    rd77b51d ra98c7ef  
    534534  Float_t Zd;
    535535
     536  // tracking resolution
     537 
     538  Float_t TrackResolution;
     539
    536540  // PileUpJetID variables
    537541
     
    591595  void SetFactory(DelphesFactory *factory) { fFactory = factory; }
    592596
    593   ClassDef(Candidate, 3)
     597  ClassDef(Candidate, 4)
    594598};
    595599
  • modules/Calorimeter.cc

    rd77b51d ra98c7ef  
    426426  Double_t ecalEnergy, hcalEnergy;
    427427  Double_t ecalSigma, hcalSigma;
     428  Double_t ecalTrkSigma, hcalTrkSigma;
     429  Double_t ecalFraction, hcalFraction;
     430 
     431  Int_t pdgCode;
     432  TLorentzVector momentum;
     433  TFractionMap::iterator itFractionMap;
     434 
    428435  Float_t weight, sumWeightedTime, sumWeight;
    429436
    430437  if(!fTower) return;
    431438
     439 
    432440  ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, fTowerECalEnergy);
    433441  hcalSigma = fHCalResolutionFormula->Eval(0.0, fTowerEta, 0.0, fTowerHCalEnergy);
     
    501509  // fill energy flow candidates
    502510
    503   // save all the tracks as energy flow tracks
    504   fItTowerTrackArray->Reset();
    505   while((track = static_cast<Candidate*>(fItTowerTrackArray->Next())))
    506   {
    507     fEFlowTrackOutputArray->Add(track);
    508   }
    509 
    510   ecalEnergy -= fTrackECalEnergy;
    511   hcalEnergy -= fTrackHCalEnergy;
     511  // save as eflowtracks only tracks that have better resolution than calo
     512 
     513   fItTowerTrackArray->Reset();
     514   while((track = static_cast<Candidate*>(fItTowerTrackArray->Next())))
     515   {
     516     momentum = track->Momentum;
     517   
     518     pdgCode = TMath::Abs(track->PID);
     519
     520     itFractionMap = fFractionMap.find(pdgCode);
     521     if(itFractionMap == fFractionMap.end())
     522     {
     523       itFractionMap = fFractionMap.find(0);
     524     }
     525
     526     ecalFraction = itFractionMap->second.first;
     527     hcalFraction = itFractionMap->second.second;
     528
     529     // charged particle has to deposit either in ECAL or HCAL
     530 
     531     if(ecalFraction < 1.0E-9 && hcalFraction < 1.0E-9) continue; 
     532     if(ecalFraction > 1.0E-9 && hcalFraction > 1.0E-9) continue; 
     533 
     534     if(ecalFraction > 1.0E-9)
     535     {
     536       if(track->TrackResolution < ecalTrkSigma/momentum.E())
     537       {
     538         ecalTrkSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E()); 
     539         ecalEnergy -= momentum.E();
     540         fEFlowTrackOutputArray->Add(track);       
     541       }
     542   
     543     }
     544   
     545     if(hcalFraction > 1.0E-9)
     546     {
     547       if(track->TrackResolution < hcalTrkSigma/momentum.E())
     548       {
     549         hcalTrkSigma = fHCalResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E()); 
     550         hcalEnergy -= momentum.E();
     551         fEFlowTrackOutputArray->Add(track);       
     552       }
     553     }
     554  }
    512555
    513556  ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, ecalEnergy);
  • modules/EnergySmearing.cc

    rd77b51d ra98c7ef  
    119119    phi = candidateMomentum.Phi();
    120120    candidate->Momentum.SetPtEtaPhiE(energy/TMath::CosH(eta), eta, phi, energy);
     121    candidate->TrackResolution = fFormula->Eval(pt, eta, phi, energy)/energy;
    121122    candidate->AddCandidate(mother);
    122123 
  • modules/MomentumSmearing.cc

    rd77b51d ra98c7ef  
    118118    phi = candidateMomentum.Phi();
    119119    candidate->Momentum.SetPtEtaPhiE(pt, eta, phi, pt*TMath::CosH(eta));
     120    candidate->TrackResolution = fFormula->Eval(pt, eta, phi, e);
    120121    candidate->AddCandidate(mother);
    121122       
  • modules/SimpleCalorimeter.cc

    rd77b51d ra98c7ef  
    168168  // create output arrays
    169169  fTowerOutputArray = ExportArray(GetString("TowerOutputArray", "towers"));
     170 
     171  fEFlowTrackOutputArray = ExportArray(GetString("EFlowTrackOutputArray", "eflowTracks"));
    170172  fEFlowTowerOutputArray = ExportArray(GetString("EFlowTowerOutputArray", "eflowTowers"));
    171173}
     
    395397void SimpleCalorimeter::FinalizeTower()
    396398{
    397   Candidate *tower;
     399  Candidate *tower, *track;
    398400  Double_t energy, pt, eta, phi;
    399401  Double_t sigma;
    400402  Double_t time;
    401403
     404  Double_t trkSigma, fraction;
     405 
     406  Int_t pdgCode;
     407  TLorentzVector momentum;
     408  TFractionMap::iterator itFractionMap;
     409 
    402410  if(!fTower) return;
    403411
     
    439447  if(energy > 0.0) fTowerOutputArray->Add(fTower);
    440448
    441   // fill energy flow candidates
    442   energy -= fTrackEnergy;
     449
     450
     451  // fill e-flow candidates
     452  fItTowerTrackArray->Reset();
     453  while((track = static_cast<Candidate*>(fItTowerTrackArray->Next())))
     454  {
     455     momentum = track->Momentum;
     456   
     457     pdgCode = TMath::Abs(track->PID);
     458
     459     itFractionMap = fFractionMap.find(pdgCode);
     460     if(itFractionMap == fFractionMap.end())
     461     {
     462       itFractionMap = fFractionMap.find(0);
     463     }
     464
     465     fraction = itFractionMap->second;
     466   
     467     // charged particle has to deposit either in ECAL or HCAL
     468     if(fraction < 1.0E-9) continue; 
     469   
     470     trkSigma = fResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E());       
     471 
     472     if(track->TrackResolution < trkSigma/momentum.E())
     473     {
     474        energy -= momentum.E();
     475        fEFlowTrackOutputArray->Add(track);
     476     }
     477
     478  }
     479
    443480
    444481  sigma = fResolutionFormula->Eval(0.0, fTowerEta, 0.0, energy);
    445 
    446482  if(energy < fEnergyMin || energy < fEnergySignificanceMin*sigma) energy = 0.0;
    447483
  • modules/SimpleCalorimeter.h

    rd77b51d ra98c7ef  
    9999  TObjArray *fTowerOutputArray; //!
    100100
     101  TObjArray *fEFlowTrackOutputArray; //!
    101102  TObjArray *fEFlowTowerOutputArray; //!
    102 
     103 
    103104  TObjArray *fTowerTrackArray; //!
    104105  TIterator *fItTowerTrackArray; //!
Note: See TracChangeset for help on using the changeset viewer.