Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:23:26

0001 //-------------------------------------------------------
0002 // Description:  Razor Megajet calculator
0003 // Authors:      Maurizio Pierini, CERN
0004 // Authors:      Christopher Rogan, Javier Duarte, Caltech
0005 // Authors:      Emanuele Di Marco, CERN
0006 //-------------------------------------------------------
0007 
0008 ///  The Megajet class implements the
0009 ///  algorithm to combine jets in hemispheres
0010 ///  as defined in CMS SUSY  searches
0011 
0012 #ifndef Megajet_h
0013 #define Megajet_h
0014 
0015 #include <vector>
0016 #include <iostream>
0017 #include <TLorentzVector.h>
0018 
0019 namespace heppy {
0020 
0021   class Megajet {
0022   public:
0023     // There are 2 constructors:
0024     // 1. Constructor taking as argument vectors of Px, Py, Pz and E of the objects in the event and the hemisphere
0025     // association method,
0026     // 2. Constructor taking as argument vectors of Px, Py, Pz and E of the objects in the event.
0027     // The hemisphere association method should then be defined by SetMethod(association_method).
0028     //
0029     // Hemisphere association method:
0030     //   1: minimum sum of the invariant masses of the two hemispheres
0031     //   2: minimum difference of HT for the two hemispheres
0032     //   3: minimum m1^2/E1 + m2^2/E2
0033     //   4: Georgi distance: maximum (E1-Beta*m1^2/E1 + E2-Beta*m1^2/E2)
0034 
0035     Megajet(){};
0036 
0037     Megajet(std::vector<float> Px_vector,
0038             std::vector<float> Py_vector,
0039             std::vector<float> Pz_vector,
0040             std::vector<float> E_vector,
0041             int megajet_association_method);
0042 
0043     Megajet(std::vector<float> Px_vector,
0044             std::vector<float> Py_vector,
0045             std::vector<float> Pz_vector,
0046             std::vector<float> E_vector);
0047 
0048     /// Destructor
0049     ~Megajet(){};
0050 
0051     // return Nx, Ny, Nz, P, E of the axis of group 1
0052     std::vector<float> getAxis1();
0053     // return Nx, Ny, Nz, P, E of the axis of group 2
0054     std::vector<float> getAxis2();
0055 
0056     // where Nx, Ny, Nz are the direction cosines e.g. Nx = Px/P,
0057     // P is the momentum, E is the energy
0058 
0059     // set or overwrite the seed and association methods
0060     void SetMethod(int megajet_association_method) {
0061       megajet_meth = megajet_association_method;
0062       status = 0;
0063     }
0064 
0065   private:
0066     /// Combining the jets in two hemispheres minimizing the
0067     /// sum of the invariant masses of the two hemispheres
0068     void CombineMinMass();
0069 
0070     /// Combining the jets in two hemispheres minimizing the
0071     /// difference of HT for the two hemispheres
0072     void CombineMinHT();
0073 
0074     /// Combining the jets in two hemispheres by minimizing m1^2/E1 + m2^2/E2
0075     void CombineMinEnergyMass();
0076 
0077     /// Combining the jets in two hemispheres by maximizing (E1-Beta*m1^2/E1 + E2-Beta*m1^2/E2)
0078     void CombineGeorgi();
0079 
0080     /// Combine the jets in all the possible pairs of hemispheres
0081     void Combine();
0082 
0083     std::vector<float> Object_Px;
0084     std::vector<float> Object_Py;
0085     std::vector<float> Object_Pz;
0086     std::vector<float> Object_E;
0087 
0088     std::vector<float> Axis1;
0089     std::vector<float> Axis2;
0090 
0091     int megajet_meth;
0092     int status;
0093 
0094     std::vector<TLorentzVector> jIN;
0095     std::vector<TLorentzVector> jOUT;
0096     std::vector<TLorentzVector> j1;
0097     std::vector<TLorentzVector> j2;
0098   };
0099 }  // namespace heppy
0100 
0101 #endif