Fork me on GitHub

Changes in / [7993cad:ec5e04b] in git


Ignore:
Files:
15 deleted
21 edited

Legend:

Unmodified
Added
Removed
  • Makefile

    r7993cad rec5e04b  
    319319        modules/EnergySmearing.h \
    320320        modules/MomentumSmearing.h \
    321         modules/TrackSmearing.h \
    322321        modules/ImpactParameterSmearing.h \
    323322        modules/TimeSmearing.h \
     
    343342        modules/StatusPidFilter.h \
    344343        modules/PdgCodeFilter.h \
    345         modules/BeamSpotFilter.h \
    346344        modules/Cloner.h \
    347345        modules/Weighter.h \
     
    349347        modules/JetFlavorAssociation.h \
    350348        modules/JetFakeParticle.h \
    351         modules/VertexSorter.h \
    352         modules/VertexFinder.h \
    353349        modules/ExampleModule.h
    354350tmp/modules/ModulesDict$(PcmSuf): \
     
    557553        classes/DelphesFactory.h \
    558554        classes/DelphesFormula.h
    559 tmp/modules/BeamSpotFilter.$(ObjSuf): \
    560         modules/BeamSpotFilter.$(SrcSuf) \
    561         modules/BeamSpotFilter.h \
    562         classes/DelphesClasses.h \
    563         classes/DelphesFactory.h \
    564         classes/DelphesFormula.h \
    565         external/ExRootAnalysis/ExRootResult.h \
    566         external/ExRootAnalysis/ExRootFilter.h \
    567         external/ExRootAnalysis/ExRootClassifier.h
    568555tmp/modules/Calorimeter.$(ObjSuf): \
    569556        modules/Calorimeter.$(SrcSuf) \
     
    865852        external/ExRootAnalysis/ExRootFilter.h \
    866853        external/ExRootAnalysis/ExRootClassifier.h
    867 tmp/modules/TrackSmearing.$(ObjSuf): \
    868         modules/TrackSmearing.$(SrcSuf) \
    869         modules/TrackSmearing.h \
    870         classes/DelphesClasses.h \
    871         classes/DelphesFactory.h \
    872         classes/DelphesFormula.h \
    873         external/ExRootAnalysis/ExRootResult.h \
    874         external/ExRootAnalysis/ExRootFilter.h \
    875         external/ExRootAnalysis/ExRootClassifier.h
    876854tmp/modules/TreeWriter.$(ObjSuf): \
    877855        modules/TreeWriter.$(SrcSuf) \
     
    890868        classes/DelphesFactory.h \
    891869        classes/DelphesFormula.h \
    892         external/ExRootAnalysis/ExRootResult.h \
    893         external/ExRootAnalysis/ExRootFilter.h \
    894         external/ExRootAnalysis/ExRootClassifier.h
    895 tmp/modules/VertexFinder.$(ObjSuf): \
    896         modules/VertexFinder.$(SrcSuf) \
    897         modules/VertexFinder.h \
    898         classes/DelphesClasses.h \
    899         classes/DelphesFactory.h \
    900         classes/DelphesFormula.h \
    901         classes/DelphesPileUpReader.h \
    902         external/ExRootAnalysis/ExRootResult.h \
    903         external/ExRootAnalysis/ExRootFilter.h \
    904         external/ExRootAnalysis/ExRootClassifier.h
    905 tmp/modules/VertexSorter.$(ObjSuf): \
    906         modules/VertexSorter.$(SrcSuf) \
    907         modules/VertexSorter.h \
    908         classes/DelphesClasses.h \
    909         classes/DelphesFactory.h \
    910         classes/DelphesFormula.h \
    911         classes/DelphesPileUpReader.h \
    912870        external/ExRootAnalysis/ExRootResult.h \
    913871        external/ExRootAnalysis/ExRootFilter.h \
     
    973931        tmp/modules/AngularSmearing.$(ObjSuf) \
    974932        tmp/modules/BTagging.$(ObjSuf) \
    975         tmp/modules/BeamSpotFilter.$(ObjSuf) \
    976933        tmp/modules/Calorimeter.$(ObjSuf) \
    977934        tmp/modules/Cloner.$(ObjSuf) \
     
    1006963        tmp/modules/TrackCountingTauTagging.$(ObjSuf) \
    1007964        tmp/modules/TrackPileUpSubtractor.$(ObjSuf) \
    1008         tmp/modules/TrackSmearing.$(ObjSuf) \
    1009965        tmp/modules/TreeWriter.$(ObjSuf) \
    1010966        tmp/modules/UniqueObjectFinder.$(ObjSuf) \
    1011         tmp/modules/VertexFinder.$(ObjSuf) \
    1012         tmp/modules/VertexSorter.$(ObjSuf) \
    1013967        tmp/modules/Weighter.$(ObjSuf)
    1014968
     
    16151569        tmp/external/tcl/tclVar.$(ObjSuf)
    16161570
    1617 modules/TrackSmearing.h: \
    1618         classes/DelphesModule.h
    1619         @touch $@
    1620 
    16211571external/fastjet/ClusterSequence.hh: \
    16221572        external/fastjet/PseudoJet.hh \
     
    18791829        @touch $@
    18801830
    1881 modules/VertexSorter.h: \
    1882         classes/DelphesModule.h \
    1883         classes/DelphesClasses.h
    1884         @touch $@
    1885 
    18861831modules/Delphes.h: \
    18871832        classes/DelphesModule.h
    1888         @touch $@
    1889 
    1890 modules/VertexFinder.h: \
    1891         classes/DelphesModule.h \
    1892         classes/DelphesClasses.h
    18931833        @touch $@
    18941834
     
    20612001
    20622002modules/FastJetFinder.h: \
    2063         classes/DelphesModule.h
    2064         @touch $@
    2065 
    2066 modules/BeamSpotFilter.h: \
    20672003        classes/DelphesModule.h
    20682004        @touch $@
  • cards/converter_card.tcl

    r7993cad rec5e04b  
    1313module TreeWriter TreeWriter {
    1414# add Branch InputArray BranchName BranchClass
    15   add Branch Delphes/stableParticles Particle GenParticle
     15  add Branch Delphes/allParticles Particle GenParticle
    1616}
    1717
  • cards/delphes_card_CMS.tcl

    r7993cad rec5e04b  
    3535 
    3636  FastJetFinder
    37   FastCaloJetFinder
    3837
    3938  JetEnergyScale
     
    211210  set HCalEnergyMin 1.0
    212211
    213   set ECalEnergySignificanceMin 2.0
    214   set HCalEnergySignificanceMin 2.0
     212  set ECalEnergySignificanceMin 1.0
     213  set HCalEnergySignificanceMin 1.0
    215214
    216215  set SmearTowerCenter true
     
    498497}
    499498
    500 ################
    501 # caloJet finder
    502 ################
    503 
    504 module FastJetFinder FastCaloJetFinder {
    505   set InputArray Calorimeter/towers
    506 
    507   set OutputArray jets
    508 
    509   # algorithm: 1 CDFJetClu, 2 MidPoint, 3 SIScone, 4 kt, 5 Cambridge/Aachen, 6 antikt
    510   set JetAlgorithm 6
    511   set ParameterR 0.5
    512 
    513   set JetPTMin 20.0
    514 }
    515 
    516499##################
    517500# Jet Energy Scale
     
    627610
    628611  add Branch UniqueObjectFinder/jets Jet Jet
    629   add Branch FastCaloJetFinder/jets CaloJet Jet
    630612  add Branch UniqueObjectFinder/electrons Electron Electron
    631613  add Branch UniqueObjectFinder/photons Photon Photon
  • classes/DelphesClasses.cc

    r7993cad rec5e04b  
    4141CompBase *Tower::fgCompare = CompE<Tower>::Instance();
    4242CompBase *HectorHit::fgCompare = CompE<HectorHit>::Instance();
    43 CompBase *Vertex::fgCompare = CompSumPT2<Vertex>::Instance();
    4443CompBase *Candidate::fgCompare = CompMomentumPt<Candidate>::Instance();
    4544
     
    122121  Charge(0), Mass(0.0),
    123122  IsPU(0), IsRecoPU(0), IsConstituent(0), IsFromConversion(0),
    124   ClusterIndex(-1), ClusterNDF(0), ClusterSigma(0), SumPT2(0), BTVSumPT2(0), GenDeltaZ(0), GenSumPT2(0),
    125123  Flavor(0), FlavorAlgo(0), FlavorPhys(0),
    126124  BTag(0), BTagAlgo(0), BTagPhys(0),
     
    129127  Momentum(0.0, 0.0, 0.0, 0.0),
    130128  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),
    133129  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),
    142131  TrackResolution(0),
    143132  NCharged(0),
     
    256245  object.IsConstituent = IsConstituent;
    257246  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;
    265247  object.Flavor = Flavor;
    266248  object.FlavorAlgo = FlavorAlgo;
     
    280262  object.Momentum = Momentum;
    281263  object.Position = Position;
    282   object.InitialPosition = InitialPosition;
    283   object.PositionError = PositionError;
    284264  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;
    299267  object.Xd = Xd;
    300268  object.Yd = Yd;
     
    314282  object.SumPtChargedPU = SumPtChargedPU;
    315283  object.SumPt = SumPt;
    316   object.ClusterIndex = ClusterIndex;
    317   object.ClusterNDF = ClusterNDF;
    318   object.ClusterSigma = ClusterSigma;
    319   object.SumPT2 = SumPT2;
    320  
     284
    321285  object.FracPt[0] = FracPt[0];
    322286  object.FracPt[1] = FracPt[1];
     
    399363  Momentum.SetXYZT(0.0, 0.0, 0.0, 0.0);
    400364  Position.SetXYZT(0.0, 0.0, 0.0, 0.0);
    401   InitialPosition.SetXYZT(0.0, 0.0, 0.0, 0.0);
    402365  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;
    417368  Xd = 0.0;
    418369  Yd = 0.0;
     
    436387  SumPt = -999;
    437388
    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  
    446389  FracPt[0] = 0.0;
    447390  FracPt[1] = 0.0;
  • classes/DelphesClasses.h

    r7993cad rec5e04b  
    147147  Float_t Pz; // particle momentum vector (z component) | hepevt.phep[number][2]
    148148
    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
    155150  Float_t Eta; // particle pseudorapidity
     151  Float_t Phi; // particle azimuthal angle
     152
    156153  Float_t Rapidity; // particle rapidity
    157154
     
    171168//---------------------------------------------------------------------------
    172169
    173 class Vertex: public SortableObject
     170class Vertex: public TObject
    174171{
    175172public:
     
    179176  Float_t Z; // vertex position (z component)
    180177
    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)
    200179};
    201180
     
    418397  Int_t Charge; // track charge
    419398
     399  Float_t PT; // track transverse momentum
     400
    420401  Float_t Eta; // track pseudorapidity
     402  Float_t Phi; // track azimuthal angle
    421403
    422404  Float_t EtaOuter; // track pseudorapidity at the tracker edge
     
    433415  Float_t TOuter; // track position (z component) at the tracker edge
    434416
    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
    456419  Float_t Xd;      // X coordinate of point of closest approach to vertex
    457420  Float_t Yd;      // Y coordinate of point of closest approach to vertex
     
    460423  TRef Particle; // reference to generated particle
    461424
    462   Int_t VertexIndex; // reference to vertex
    463 
    464425  static CompBase *fgCompare; //!
    465426  const CompBase *GetCompare() const { return fgCompare; }
     
    565526  Float_t DeltaPhi;
    566527
    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;
    584532  Float_t Xd;
    585533  Float_t Yd;
     
    587535
    588536  // tracking resolution
    589 
     537 
    590538  Float_t TrackResolution;
    591539
     
    614562  Float_t SumPt;
    615563
    616   // vertex variables
    617 
    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 
    626564  // N-subjettiness variables
    627565
     
    657595  void SetFactory(DelphesFactory *factory) { fFactory = factory; }
    658596
    659   ClassDef(Candidate, 5)
     597  ClassDef(Candidate, 4)
    660598};
    661599
  • classes/SortableObject.h

    r7993cad rec5e04b  
    156156      return -1;
    157157    else if(t1->ET < t2->ET)
    158       return 1;
    159     else
    160       return 0;
    161   }
    162 };
    163 
    164 //---------------------------------------------------------------------------
    165 
    166 template <typename T>
    167 class CompSumPT2: public CompBase
    168 {
    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) const
    178   {
    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)
    184158      return 1;
    185159    else
  • doc/genMakefile.tcl

    r7993cad rec5e04b  
    263263executableDeps {converters/*.cpp} {examples/*.cpp}
    264264
    265 executableDeps {readers/DelphesHepMC.cpp} {readers/DelphesLHEF.cpp} {readers/DelphesSTDHEP.cpp} {readers/DelphesROOT.cpp}
     265executableDeps {readers/DelphesHepMC.cpp} {readers/DelphesLHEF.cpp} {readers/DelphesSTDHEP.cpp}
    266266
    267267puts {ifeq ($(HAS_CMSSW),true)}
  • examples/Pythia8/configParticleGun.cmnd

    r7993cad rec5e04b  
    33! 1) Settings used in the main program.
    44
    5 Main:numberOfEvents = 100000         ! number of events to generate
     5Main:numberOfEvents = 10000         ! number of events to generate
    66Main:timesAllowErrors = 3          ! how many aborts before run stops
    77Main:spareFlag1 = on                ! true means particle gun
    8 Main:spareMode1 = ID               ! 1-5 - di-quark, 21 - di-gluon, 11 - single electron, 13 - single muon, 22 - single photon
     8Main:spareMode1 = 11               ! 1-5 - di-quark, 21 - di-gluon, 11 - single electron, 13 - single muon, 22 - single photon
    99Main:spareParm1 = 10000           ! max pt
    1010
  • modules/Calorimeter.cc

    r7993cad rec5e04b  
    5858  fItParticleInputArray(0), fItTrackInputArray(0)
    5959{
    60  
     60  Int_t i;
     61
    6162  fECalResolutionFormula = new DelphesFormula;
    6263  fHCalResolutionFormula = new DelphesFormula;
    6364
    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  }
    7073}
    7174
     
    7477Calorimeter::~Calorimeter()
    7578{
    76  
     79  Int_t i;
     80
    7781  if(fECalResolutionFormula) delete fECalResolutionFormula;
    7882  if(fHCalResolutionFormula) delete fHCalResolutionFormula;
    7983
    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  }
    8692}
    8793
     
    212218  Double_t ecalFraction, hcalFraction;
    213219  Double_t ecalEnergy, hcalEnergy;
     220  Double_t ecalSigma, hcalSigma;
    214221  Int_t pdgCode;
    215222
     
    361368      fHCalTowerEnergy = 0.0;
    362369
    363       fECalTrackEnergy = 0.0;
    364       fHCalTrackEnergy = 0.0;
    365      
    366       fECalTrackSigma = 0.0;
    367       fHCalTrackSigma = 0.0;
    368      
     370      fECalTrackEnergy[0] = 0.0;
     371      fECalTrackEnergy[1] = 0.0;
     372
     373      fHCalTrackEnergy[0] = 0.0;
     374      fHCalTrackEnergy[1] = 0.0;
     375
    369376      fTowerTrackHits = 0;
    370377      fTowerPhotonHits = 0;
    371378
    372       fECalTowerTrackArray->Clear();
    373       fHCalTowerTrackArray->Clear();
    374    
     379      fECalTowerTrackArray[0]->Clear();
     380      fECalTowerTrackArray[1]->Clear();
     381
     382      fHCalTowerTrackArray[0]->Clear();
     383      fHCalTowerTrackArray[1]->Clear();
    375384    }
    376385
     
    397406      if(fECalTrackFractions[number] > 1.0E-9 && fHCalTrackFractions[number] < 1.0E-9)
    398407      {
    399         fECalTrackEnergy += ecalEnergy;
    400         fECalTrackSigma += (track->TrackResolution)*momentum.E()*(track->TrackResolution)*momentum.E();
    401         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        }
    402419      }
    403      
    404420      else if(fECalTrackFractions[number] < 1.0E-9 && fHCalTrackFractions[number] > 1.0E-9)
    405421      {
    406         fHCalTrackEnergy += hcalEnergy;
    407         fHCalTrackSigma += (track->TrackResolution)*momentum.E()*(track->TrackResolution)*momentum.E();
    408         fHCalTowerTrackArray->Add(track);
     422        hcalSigma = fHCalResolutionFormula->Eval(0.0, fTowerEta, 0.0, momentum.E());
     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        }
    409433      }
    410      
    411434      else if(fECalTrackFractions[number] < 1.0E-9 && fHCalTrackFractions[number] < 1.0E-9)
    412435      {
     
    453476  Double_t energy, pt, eta, phi;
    454477  Double_t ecalEnergy, hcalEnergy;
    455   Double_t ecalNeutralEnergy, hcalNeutralEnergy;
    456  
    457478  Double_t ecalSigma, hcalSigma;
    458   Double_t ecalNeutralSigma, hcalNeutralSigma;
    459 
    460   Double_t weightTrack, weightCalo, bestEnergyEstimate, rescaleFactor;
    461  
     479
    462480  TLorentzVector momentum;
    463481  TFractionMap::iterator itFractionMap;
     
    466484
    467485  if(!fTower) return;
     486
    468487
    469488  ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, fECalTowerEnergy);
     
    535554    fTowerOutputArray->Add(fTower);
    536555  }
    537  
     556
    538557  // fill energy flow candidates
    539   fECalTrackSigma = TMath::Sqrt(fECalTrackSigma);
    540   fHCalTrackSigma = TMath::Sqrt(fHCalTrackSigma);
    541 
    542   //compute neutral excesses
    543   ecalNeutralEnergy = max( (ecalEnergy - fECalTrackEnergy) , 0.0);
    544   hcalNeutralEnergy = max( (hcalEnergy - fHCalTrackEnergy) , 0.0);
    545  
    546   ecalNeutralSigma = ecalNeutralEnergy / TMath::Sqrt(fECalTrackSigma*fECalTrackSigma + ecalSigma*ecalSigma);
    547   hcalNeutralSigma = hcalNeutralEnergy / TMath::Sqrt(fHCalTrackSigma*fHCalTrackSigma + hcalSigma*hcalSigma);
    548  
    549    // if ecal neutral excess is significant, simply create neutral EflowPhoton tower and clone each track into eflowtrack
    550   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)
    551618  {
    552619    // create new photon tower
    553620    tower = static_cast<Candidate*>(fTower->Clone());
    554     pt =  ecalNeutralEnergy / TMath::CosH(eta);
    555    
    556     tower->Momentum.SetPtEtaPhiE(pt, eta, phi, ecalNeutralEnergy);
    557     tower->Eem = ecalNeutralEnergy;
     621
     622    pt = ecalEnergy / TMath::CosH(eta);
     623
     624    tower->Momentum.SetPtEtaPhiE(pt, eta, phi, ecalEnergy);
     625    tower->Eem = ecalEnergy;
    558626    tower->Ehad = 0.0;
    559627    tower->PID = 22;
    560    
     628
    561629    fEFlowPhotonOutputArray->Add(tower);
    562    
    563     //clone tracks
    564     fItECalTowerTrackArray->Reset();
    565     while((track = static_cast<Candidate*>(fItECalTowerTrackArray->Next())))
    566     {
    567       mother = track;
    568       track = static_cast<Candidate*>(track->Clone());
    569       track->AddCandidate(mother);
    570 
    571       fEFlowTrackOutputArray->Add(track);
    572     }
    573  
    574   }
    575  
    576   // if neutral excess is not significant, rescale eflow tracks, such that the total charged equals the best measurement given by the calorimeter and tracking
    577   else if(fECalTrackEnergy > 0.0)
    578   {
    579     weightTrack = (fECalTrackSigma > 0.0) ? 1 / (fECalTrackSigma*fECalTrackSigma) : 0.0;
    580     weightCalo  = (ecalSigma > 0.0) ? 1 / (ecalSigma*ecalSigma) : 0.0;
    581  
    582     bestEnergyEstimate = (weightTrack*fECalTrackEnergy + weightCalo*ecalEnergy) / (weightTrack + weightCalo);
    583     rescaleFactor = bestEnergyEstimate/fECalTrackEnergy;
    584 
    585     //rescale tracks
    586     fItECalTowerTrackArray->Reset();
    587     while((track = static_cast<Candidate*>(fItECalTowerTrackArray->Next())))
    588     { 
    589       mother = track;
    590       track = static_cast<Candidate*>(track->Clone());
    591       track->AddCandidate(mother);
    592 
    593       track->Momentum *= rescaleFactor;
    594 
    595       fEFlowTrackOutputArray->Add(track);
    596     }
    597   }
    598 
    599 
    600   // if hcal neutral excess is significant, simply create neutral EflowNeutralHadron tower and clone each track into eflowtrack
    601   if(hcalNeutralEnergy > fHCalEnergyMin && hcalNeutralSigma > fHCalEnergySignificanceMin)
    602   {
    603     // create new photon tower
     630  }
     631  if(hcalEnergy > 0.0)
     632  {
     633    // create new neutral hadron tower
    604634    tower = static_cast<Candidate*>(fTower->Clone());
    605     pt =  hcalNeutralEnergy / TMath::CosH(eta);
    606    
    607     tower->Momentum.SetPtEtaPhiE(pt, eta, phi, hcalNeutralEnergy);
    608     tower->Ehad = hcalNeutralEnergy;
     635
     636    pt = hcalEnergy / TMath::CosH(eta);
     637
     638    tower->Momentum.SetPtEtaPhiE(pt, eta, phi, hcalEnergy);
    609639    tower->Eem = 0.0;
    610    
     640    tower->Ehad = hcalEnergy;
     641
    611642    fEFlowNeutralHadronOutputArray->Add(tower);
    612    
    613     //clone tracks
    614     fItHCalTowerTrackArray->Reset();
    615     while((track = static_cast<Candidate*>(fItHCalTowerTrackArray->Next())))
    616     {
    617       mother = track;
    618       track = static_cast<Candidate*>(track->Clone());
    619       track->AddCandidate(mother);
    620 
    621       fEFlowTrackOutputArray->Add(track);
    622     }
    623  
    624   }
    625  
    626   // if neutral excess is not significant, rescale eflow tracks, such that the total charged equals the best measurement given by the calorimeter and tracking
    627   else if(fHCalTrackEnergy > 0.0)
    628   {
    629     weightTrack = (fHCalTrackSigma > 0.0) ? 1 / (fHCalTrackSigma*fHCalTrackSigma) : 0.0;
    630     weightCalo  = (hcalSigma > 0.0) ? 1 / (hcalSigma*hcalSigma) : 0.0;
    631  
    632     bestEnergyEstimate = (weightTrack*fHCalTrackEnergy + weightCalo*hcalEnergy) / (weightTrack + weightCalo);
    633     rescaleFactor = bestEnergyEstimate / fHCalTrackEnergy;
    634 
    635     //rescale tracks
    636     fItHCalTowerTrackArray->Reset();
    637     while((track = static_cast<Candidate*>(fItHCalTowerTrackArray->Next())))
    638     { 
    639       mother = track;
    640       track = static_cast<Candidate*>(track->Clone());
    641       track->AddCandidate(mother);
    642 
    643       track->Momentum *= rescaleFactor;
    644 
    645       fEFlowTrackOutputArray->Add(track);
    646     }
    647   }
    648  
    649  
     643  }
    650644}
    651645
  • modules/Calorimeter.h

    r7993cad rec5e04b  
    5858  Double_t fTowerEta, fTowerPhi, fTowerEdges[4];
    5959  Double_t fECalTowerEnergy, fHCalTowerEnergy;
    60   Double_t fECalTrackEnergy, fHCalTrackEnergy;
     60  Double_t fECalTrackEnergy[2], fHCalTrackEnergy[2];
    6161
    6262  Double_t fTimingEnergyMin;
     
    7070  Double_t fECalEnergySignificanceMin;
    7171  Double_t fHCalEnergySignificanceMin;
    72 
    73   Double_t fECalTrackSigma;
    74   Double_t fHCalTrackSigma;
    7572
    7673  Bool_t fSmearTowerCenter;
     
    106103  TObjArray *fEFlowNeutralHadronOutputArray; //!
    107104
    108   TObjArray *fECalTowerTrackArray; //!
    109   TIterator *fItECalTowerTrackArray; //!
     105  TObjArray *fECalTowerTrackArray[2]; //!
     106  TIterator *fItECalTowerTrackArray[2]; //!
    110107
    111   TObjArray *fHCalTowerTrackArray; //!
    112   TIterator *fItHCalTowerTrackArray; //!
     108  TObjArray *fHCalTowerTrackArray[2]; //!
     109  TIterator *fItHCalTowerTrackArray[2]; //!
    113110
    114111  void FinalizeTower();
  • modules/ImpactParameterSmearing.cc

    r7993cad rec5e04b  
    9696{
    9797  Candidate *candidate, *particle, *mother;
    98   Double_t xd, yd, zd, d0, sx, sy, sz, dd0;
     98  Double_t xd, yd, zd, dxy, sx, sy, sz, ddxy;
    9999  Double_t pt, eta, px, py, phi, e;
    100100
     
    103103  {
    104104
    105     // take momentum before smearing (otherwise apply double smearing on d0)
     105    // take momentum before smearing (otherwise apply double smearing on dxy)
    106106    particle = static_cast<Candidate*>(candidate->GetCandidates()->At(0));
    107107
     
    131131
    132132    // calculate impact parameter (after-smearing)
    133     d0 = (xd*py - yd*px)/pt;
     133    dxy = (xd*py - yd*px)/pt;
    134134
    135     dd0 = gRandom->Gaus(0.0, fFormula->Eval(pt, eta, phi, e));
     135    ddxy = gRandom->Gaus(0.0, fFormula->Eval(pt, eta, phi, e));
    136136
    137137    // fill smeared values in candidate
     
    143143    candidate->Zd = zd;
    144144
    145     candidate->D0 = d0;
    146     candidate->ErrorD0 = dd0;
     145    candidate->Dxy = dxy;
     146    candidate->SDxy = ddxy;
    147147
    148148    candidate->AddCandidate(mother);
  • modules/ModulesLinkDef.h

    r7993cad rec5e04b  
    3535#include "modules/EnergySmearing.h"
    3636#include "modules/MomentumSmearing.h"
    37 #include "modules/TrackSmearing.h"
    3837#include "modules/ImpactParameterSmearing.h"
    3938#include "modules/TimeSmearing.h"
     
    5958#include "modules/StatusPidFilter.h"
    6059#include "modules/PdgCodeFilter.h"
    61 #include "modules/BeamSpotFilter.h"
    6260#include "modules/RecoPuFilter.h"
    6361#include "modules/Cloner.h"
     
    6664#include "modules/JetFlavorAssociation.h"
    6765#include "modules/JetFakeParticle.h"
    68 #include "modules/VertexSorter.h"
    69 #include "modules/VertexFinder.h"
    70 #include "modules/VertexFinderDA4D.h"
    7166#include "modules/ExampleModule.h"
    7267
     
    8681#pragma link C++ class EnergySmearing+;
    8782#pragma link C++ class MomentumSmearing+;
    88 #pragma link C++ class TrackSmearing+;
    8983#pragma link C++ class ImpactParameterSmearing+;
    9084#pragma link C++ class TimeSmearing+;
     
    110104#pragma link C++ class StatusPidFilter+;
    111105#pragma link C++ class PdgCodeFilter+;
    112 #pragma link C++ class BeamSpotFilter+;
    113106#pragma link C++ class RecoPuFilter+;
    114107#pragma link C++ class Cloner+;
     
    117110#pragma link C++ class JetFlavorAssociation+;
    118111#pragma link C++ class JetFakeParticle+;
    119 #pragma link C++ class VertexSorter+;
    120 #pragma link C++ class VertexFinder+;
    121 #pragma link C++ class VertexFinderDA4D+;
    122112#pragma link C++ class ExampleModule+;
    123113
  • modules/ParticlePropagator.cc

    r7993cad rec5e04b  
    6666{
    6767}
    68 
    6968
    7069//------------------------------------------------------------------------------
     
    9291  fItInputArray = fInputArray->MakeIterator();
    9392
    94   // import beamspot
    95   try
    96   {
    97     fBeamSpotInputArray = ImportArray(GetString("BeamSpotInputArray", "BeamSpotFilter/beamSpotParticle"));
    98   }
    99   catch(runtime_error &e)
    100   {
    101     fBeamSpotInputArray = 0;
    102   }
    10393  // create output arrays
    10494
     
    121111{
    122112  Candidate *candidate, *mother;
    123   TLorentzVector candidatePosition, candidateMomentum, beamSpotPosition;
     113  TLorentzVector candidatePosition, candidateMomentum;
    124114  Double_t px, py, pz, pt, pt2, e, q;
    125115  Double_t x, y, z, t, r, phi;
     
    130120  Double_t tmp, discr, discr2;
    131121  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;
    135123
    136124  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   else
    141   {
    142     Candidate &beamSpotCandidate = *((Candidate *) fBeamSpotInputArray->At(0));
    143     beamSpotPosition = beamSpotCandidate.Position;
    144   }
    145125
    146126  fItInputArray->Reset();
     
    152132    y = candidatePosition.Y()*1.0E-3;
    153133    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 
    159134    q = candidate->Charge;
    160135
     
    207182      z_t = z + pz*t;
    208183
    209       l = TMath::Sqrt( (x_t - x)*(x_t - x) + (y_t - y)*(y_t - y) + (z_t - z)*(z_t - z));
    210 
    211184      mother = candidate;
    212185      candidate = static_cast<Candidate*>(candidate->Clone());
    213186
    214       candidate->InitialPosition = candidatePosition;
    215187      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;
    217188
    218189      candidate->Momentum = candidateMomentum;
     
    268239      zd = z + (TMath::Sqrt(xd*xd + yd*yd) - TMath::Sqrt(x*x + y*y))*pz/pt;
    269240
    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;
    287243
    288244      // 3. time evaluation t = TMath::Min(t_r, t_z)
     
    331287      r_t = TMath::Hypot(x_t, y_t);
    332288
    333 
    334       // compute path length for an helix
    335 
    336       alpha = pz*1.0E9 / c_light / gammam;
    337       l = t * TMath::Sqrt(alpha*alpha + r*r*omega*omega);
    338 
    339289      if(r_t > 0.0)
    340290      {
    341 
    342         // store these variables before cloning
    343         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 
    350291        mother = candidate;
    351292        candidate = static_cast<Candidate*>(candidate->Clone());
    352293
    353         candidate->InitialPosition = candidatePosition;
    354294        candidate->Position.SetXYZT(x_t*1.0E3, y_t*1.0E3, z_t*1.0E3, candidatePosition.T() + t*c_light*1.0E3);
    355295
    356296        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;
    361299        candidate->Yd = yd*1.0E3;
    362300        candidate->Zd = zd*1.0E3;
  • modules/ParticlePropagator.h

    r7993cad rec5e04b  
    3535class TClonesArray;
    3636class TIterator;
    37 class TLorentzVector;
    3837
    3938class ParticlePropagator: public DelphesModule
     
    5655
    5756  const TObjArray *fInputArray; //!
    58   const TObjArray *fBeamSpotInputArray; //!
    5957
    6058  TObjArray *fOutputArray; //!
  • modules/PileUpMerger.cc

    r7993cad rec5e04b  
    115115  TDatabasePDG *pdg = TDatabasePDG::Instance();
    116116  TParticlePDG *pdgParticle;
    117   Int_t pid, nch, nvtx = -1;
     117  Int_t pid;
    118118  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;
    121121  Int_t numberOfEvents, event, numberOfParticles;
    122122  Long64_t allEntries, entry;
     
    132132  fFunction->GetRandom2(dz, dt);
    133133
    134   dz0 = -1.0e6;
    135   dt0 = -1.0e6;
    136 
    137134  dt *= c_light*1.0E3; // necessary in order to make t in mm/c
    138135  dz *= 1.0E3; // necessary in order to make z in mm
    139 
    140   //cout<<dz<<","<<dt<<endl;
    141 
    142136  vx = 0.0;
    143137  vy = 0.0;
    144 
    145138  numberOfParticles = fInputArray->GetEntriesFast();
    146   nch = 0;
    147   sumpt2 = 0.0;
    148 
    149   factory = GetFactory();
    150   vertex = factory->NewCandidate();
    151 
    152139  while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
    153140  {
     
    156143    z = candidate->Position.Z();
    157144    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);
    172147    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     }
    180148  }
    181149
    182150  if(numberOfParticles > 0)
    183151  {
    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();
    189159  vertex->Position.SetXYZT(vx, vy, dz, dt);
    190   vertex->ClusterIndex = nvtx;
    191   vertex->ClusterNDF = nch;
    192   vertex->SumPT2 = sumpt2;
    193   vertex->GenSumPT2 = sumpt2;
    194160  fVertexOutputArray->Add(vertex);
    195161
     
    204170      numberOfEvents = gRandom->Integer(2*fMeanPileUp + 1);
    205171      break;
    206     case 2:
    207       numberOfEvents = fMeanPileUp;
    208       break;
    209172    default:
    210173      numberOfEvents = gRandom->Poisson(fMeanPileUp);
     
    213176
    214177  allEntries = fReader->GetEntries();
    215 
    216178
    217179  for(event = 0; event < numberOfEvents; ++event)
     
    236198    vx = 0.0;
    237199    vy = 0.0;
    238 
    239200    numberOfParticles = 0;
    240     sumpt2 = 0.0;
    241 
    242     //factory = GetFactory();
    243     vertex = factory->NewCandidate();
    244 
    245201    while(fReader->ReadParticle(pid, x, y, z, t, px, py, pz, e))
    246202    {
     
    259215      candidate->Momentum.SetPxPyPzE(px, py, pz, e);
    260216      candidate->Momentum.RotateZ(dphi);
    261       pt = candidate->Momentum.Pt();
    262217
    263218      x -= fInputBeamSpotX;
     
    269224      vx += candidate->Position.X();
    270225      vy += candidate->Position.Y();
    271 
    272226      ++numberOfParticles;
    273       if(TMath::Abs(candidate->Charge) >  1.0E-9)
    274       {
    275         nch++;
    276         sumpt2 += pt*pt;
    277         vertex->AddCandidate(candidate);
    278       }
    279227
    280228      fParticleOutputArray->Add(candidate);
     
    287235    }
    288236
    289     nvtx++;
    290 
     237    vertex = factory->NewCandidate();
    291238    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 
    298239    vertex->IsPU = 1;
    299240
    300241    fVertexOutputArray->Add(vertex);
    301 
    302   }
    303 }
    304 
    305 //------------------------------------------------------------------------------
     242  }
     243}
     244
     245//------------------------------------------------------------------------------
  • modules/SimpleCalorimeter.cc

    r7993cad rec5e04b  
    5858  fItParticleInputArray(0), fItTrackInputArray(0)
    5959{
    60  
     60  Int_t i;
     61
    6162  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  }
    6569}
    6670
     
    6973SimpleCalorimeter::~SimpleCalorimeter()
    7074{
    71  
     75  Int_t i;
     76
    7277  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  }
    7684}
    7785
     
    190198  Double_t fraction;
    191199  Double_t energy;
     200  Double_t sigma;
    192201  Int_t pdgCode;
    193202
     
    331340      fTowerEnergy = 0.0;
    332341
    333       fTrackEnergy = 0.0;
    334       fTrackSigma = 0.0;
     342      fTrackEnergy[0] = 0.0;
     343      fTrackEnergy[1] = 0.0;
    335344
    336345      fTowerTime = 0.0;
     
    342351      fTowerPhotonHits = 0;
    343352
    344       fTowerTrackArray->Clear();
    345      }
     353      fTowerTrackArray[0]->Clear();
     354      fTowerTrackArray[1]->Clear();
     355    }
    346356
    347357    // check for track hits
     
    361371      if(fTrackFractions[number] > 1.0E-9)
    362372      {
    363              
    364        // compute total charged energy   
    365        fTrackEnergy += energy;
    366        fTrackSigma += ((track->TrackResolution)*momentum.E())*((track->TrackResolution)*momentum.E());
    367        
    368        fTowerTrackArray->Add(track);
    369      
     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        }
    370384      }
    371        
    372385      else
    373386      {
     
    390403    fTowerEnergy += energy;
    391404
    392     fTowerTime += energy*position.T();
    393     fTowerTimeWeight += energy;
     405    fTowerTime += TMath::Sqrt(energy)*position.T();
     406    fTowerTimeWeight += TMath::Sqrt(energy);
    394407
    395408    fTower->AddCandidate(particle);
     
    405418{
    406419  Candidate *tower, *track, *mother;
    407   Double_t energy,neutralEnergy, pt, eta, phi;
    408   Double_t sigma, neutralSigma;
     420  Double_t energy, pt, eta, phi;
     421  Double_t sigma;
    409422  Double_t time;
    410    
    411   Double_t weightTrack, weightCalo, bestEnergyEstimate, rescaleFactor;
    412423
    413424  TLorentzVector momentum;
     
    425436
    426437  if(energy < fEnergyMin || energy < fEnergySignificanceMin*sigma) energy = 0.0;
    427 
    428438
    429439  if(fSmearTowerCenter)
     
    454464  if(energy > 0.0) fTowerOutputArray->Add(fTower);
    455465
    456  
    457   // e-flow candidates
    458 
    459   //compute neutral excess
    460  
    461   fTrackSigma = TMath::Sqrt(fTrackSigma);
    462   neutralEnergy = max( (energy - fTrackEnergy) , 0.0);
    463  
    464   //compute sigma_trk total
    465   neutralSigma = neutralEnergy / TMath::Sqrt(fTrackSigma*fTrackSigma+ sigma*sigma);
    466    
    467   // if neutral excess is significant, simply create neutral Eflow tower and clone each track into eflowtrack
    468   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)
    469499  {
    470500    // create new photon tower
    471501    tower = static_cast<Candidate*>(fTower->Clone());
    472     pt = neutralEnergy / TMath::CosH(eta);
    473 
    474     tower->Eem = (!fIsEcal) ? 0 : neutralEnergy;
    475     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   
    476509    tower->PID = (fIsEcal) ? 22 : 0;
    477  
    478     tower->Momentum.SetPtEtaPhiE(pt, eta, phi, neutralEnergy);
     510   
    479511    fEFlowTowerOutputArray->Add(tower);
    480    
    481     fItTowerTrackArray->Reset();
    482     while((track = static_cast<Candidate*>(fItTowerTrackArray->Next())))
    483     {
    484       mother = track;
    485       track = static_cast<Candidate*>(track->Clone());
    486       track->AddCandidate(mother);
    487 
    488       fEFlowTrackOutputArray->Add(track);
    489     }
    490   }
    491    
    492   // if neutral excess is not significant, rescale eflow tracks, such that the total charged equals the best measurement given by the calorimeter and tracking
    493   else if (fTrackEnergy > 0.0)
    494   {
    495     weightTrack = (fTrackSigma > 0.0) ? 1 / (fTrackSigma*fTrackSigma) : 0.0;
    496     weightCalo  = (sigma > 0.0) ? 1 / (sigma*sigma) : 0.0;
    497  
    498     bestEnergyEstimate = (weightTrack*fTrackEnergy + weightCalo*energy) / (weightTrack + weightCalo);
    499     rescaleFactor = bestEnergyEstimate/fTrackEnergy;
    500    
    501     fItTowerTrackArray->Reset();
    502     while((track = static_cast<Candidate*>(fItTowerTrackArray->Next())))
    503     {
    504       mother = track;
    505       track = static_cast<Candidate*>(track->Clone());
    506       track->AddCandidate(mother);
    507 
    508       track->Momentum *= rescaleFactor;
    509 
    510       fEFlowTrackOutputArray->Add(track);
    511     }
    512   }
    513    
    514  }
     512  }
     513}
    515514
    516515//------------------------------------------------------------------------------
  • modules/SimpleCalorimeter.h

    r7993cad rec5e04b  
    5959  Double_t fTowerEta, fTowerPhi, fTowerEdges[4];
    6060  Double_t fTowerEnergy;
    61   Double_t fTrackEnergy;
     61  Double_t fTrackEnergy[2];
    6262
    6363  Double_t fTowerTime;
     
    7272
    7373  Double_t fEnergySignificanceMin;
    74 
    75   Double_t fTrackSigma;
    7674
    7775  Bool_t fSmearTowerCenter;
     
    104102  TObjArray *fEFlowTowerOutputArray; //!
    105103
    106   TObjArray *fTowerTrackArray; //!
    107   TIterator *fItTowerTrackArray; //!
     104  TObjArray *fTowerTrackArray[2]; //!
     105  TIterator *fItTowerTrackArray[2]; //!
    108106
    109107  void FinalizeTower();
  • modules/TimeSmearing.cc

    r7993cad rec5e04b  
    9393{
    9494  Candidate *candidate, *mother;
    95   Double_t ti, tf_smeared, tf;
     95  Double_t t;
    9696  const Double_t c_light = 2.99792458E8;
    9797
     
    9999  while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
    100100  {
    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;
    106103
    107104    // apply smearing formula
    108     tf_smeared = gRandom->Gaus(tf, fTimeResolution);
    109     ti = ti + tf_smeared - tf;
     105    t = gRandom->Gaus(t, fTimeResolution);
    110106
    111107    mother = candidate;
    112108    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);
    117110
    118111    candidate->AddCandidate(mother);
  • modules/TrackCountingBTagging.cc

    r7993cad rec5e04b  
    9696
    9797  Double_t jpx, jpy;
    98   Double_t dr, tpt;
    99   Double_t xd, yd, d0, dd0, ip, sip;
     98  Double_t dr, tpx, tpy, tpt;
     99  Double_t xd, yd, dxy, ddxy, ip, sip;
    100100
    101101  Int_t sign;
     
    117117    {
    118118      const TLorentzVector &trkMomentum = track->Momentum;
    119      
     119
    120120      dr = jetMomentum.DeltaR(trkMomentum);
     121
    121122      tpt = trkMomentum.Pt();
     123      tpx = trkMomentum.Px();
     124      tpy = trkMomentum.Py();
     125
    122126      xd = track->Xd;
    123127      yd = track->Yd;
    124       d0 = TMath::Hypot(xd, yd);
    125       dd0 = track->ErrorD0;
     128      dxy = TMath::Hypot(xd, yd);
     129      ddxy = track->SDxy;
    126130
    127131      if(tpt < fPtMin) continue;
    128132      if(dr > fDeltaR) continue;
    129       if(d0 > fIPmax) continue;
     133      if(dxy > fIPmax) continue;
    130134
    131135      sign = (jpx*xd + jpy*yd > 0.0) ? 1 : -1;
    132136
    133       ip = sign*d0;
    134       sip = ip / TMath::Abs(dd0);
     137      ip = sign*dxy;
     138      sip = ip / TMath::Abs(ddxy);
    135139
    136140      if(sip > fSigMin) count++;
  • modules/TreeWriter.cc

    r7993cad rec5e04b  
    215215    entry->Pz = momentum.Pz();
    216216
    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 
    224217    entry->Eta = eta;
    225218    entry->Phi = momentum.Phi();
     
    240233{
    241234  TIter iterator(array);
    242   Candidate *candidate = 0, *constituent = 0;
     235  Candidate *candidate = 0;
    243236  Vertex *entry = 0;
    244237
    245238  const Double_t c_light = 2.99792458E8;
    246239
    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 
    255240  // loop over all vertices
    256241  iterator.Reset();
    257242  while((candidate = static_cast<Candidate*>(iterator.Next())))
    258243  {
    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;
    277245
    278246    entry = static_cast<Vertex*>(branch->NewEntry());
    279247
    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}
    310254
    311255//------------------------------------------------------------------------------
     
    317261  Candidate *particle = 0;
    318262  Track *entry = 0;
    319   Double_t pt, signz, cosTheta, eta, rapidity, p, ctgTheta, phi;
     263  Double_t pt, signz, cosTheta, eta, rapidity;
    320264  const Double_t c_light = 2.99792458E8;
    321265
     
    348292    entry->TOuter = position.T()*1.0E-3/c_light;
    349293
    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 ;
    362296    entry->Xd = candidate->Xd;
    363297    entry->Yd = candidate->Yd;
     
    367301
    368302    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 
    373303    cosTheta = TMath::Abs(momentum.CosTheta());
    374304    signz = (momentum.Pz() >= 0.0) ? 1.0 : -1.0;
     
    376306    rapidity = (cosTheta == 1.0 ? signz*999.9 : momentum.Rapidity());
    377307
    378     entry->PT  = pt;
    379308    entry->Eta = eta;
    380     entry->Phi = phi;
    381     entry->CtgTheta = ctgTheta;
     309    entry->Phi = momentum.Phi();
     310    entry->PT = pt;
    382311
    383312    particle = static_cast<Candidate*>(candidate->GetCandidates()->At(0));
     
    390319
    391320    entry->Particle = particle;
    392 
    393     entry->VertexIndex = candidate->ClusterIndex;
    394 
    395321  }
    396322}
  • readers/DelphesCMSFWLite.cpp

    r7993cad rec5e04b  
    272272
    273273    branchEvent = treeWriter->NewBranch("Event", HepMCEvent::Class());
    274     branchRwgt = treeWriter->NewBranch("Weight", Weight::Class());
     274    branchRwgt = treeWriter->NewBranch("Rwgt", Weight::Class());
    275275
    276276    confReader = new ExRootConfReader;
Note: See TracChangeset for help on using the changeset viewer.