Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:28:00

0001 //
0002 //  Simple photon conversion seeding class (inc)
0003 //
0004 //  Author: E Song
0005 //
0006 //  Version: 1;     6 Aug 2012
0007 //
0008 
0009 #ifndef Conv4HitsReco2_h
0010 #define Conv4HitsReco2_h
0011 
0012 #include <iostream>
0013 #include <iomanip>
0014 #include <cmath>
0015 #include "DataFormats/Math/interface/Vector3D.h"
0016 #include "DataFormats/Math/interface/Point3D.h"
0017 
0018 class Conv4HitsReco2 {
0019 public:
0020   Conv4HitsReco2(math::XYZVector &, math::XYZVector &, math::XYZVector &, math::XYZVector &, math::XYZVector &);
0021   Conv4HitsReco2();
0022   ~Conv4HitsReco2();
0023 
0024   // Main publics
0025   int ConversionCandidate(math::XYZVector &, double &, double &);
0026   void Reconstruct();  // Not directly called when in use
0027   void Dump();
0028   void Refresh(
0029       math::XYZVector &vPhotVertex, math::XYZVector &h1, math::XYZVector &h2, math::XYZVector &h3, math::XYZVector &h4);
0030 
0031   math::XYZVector GetPlusCenter(double &);
0032   math::XYZVector GetMinusCenter(double &);
0033 
0034   // Optional publics
0035   void SetMaxNumberOfIterations(int val) { fMaxNumberOfIterations = val; };
0036   void SetRadiusECut(double val) { fRadiusECut = val; };
0037   void SetPhiECut(double val) { fPhiECut = val; };
0038   void SetRECut(double val) { fRECut = val; };
0039   void SetFixedNumberOfIterations(double val) { fFixedNumberOfIterations = val; };
0040   void SetBField(double val) { fBField = val; };
0041 
0042   double GetRecPhi() { return fRecPhi; };
0043   double GetRecR() { return fRecR; };
0044   double GetRecR1() { return fRecR1; };
0045   double GetRecR2() { return fRecR2; };
0046   int GetLoop() { return fLoop; };
0047 
0048   bool RegisterUnsolvable(int &num) {
0049     if (fSolved == 1)
0050       return true;
0051     else {
0052       num += 1;
0053       return false;
0054     }
0055   };
0056   bool RegisterUnsolvable() {
0057     if (fSolved == 1)
0058       return true;
0059     else
0060       return false;
0061   };
0062   bool RegisterBadSign(int &num) {
0063     if (fSignSatisfied == 1)
0064       return true;
0065     else {
0066       num += 1;
0067       return false;
0068     }
0069   };
0070   bool RegisterBadSign() {
0071     if (fSignSatisfied == 1)
0072       return true;
0073     else
0074       return false;
0075   };
0076   bool RegisterBadConverge(int &num) {
0077     if (fCutSatisfied == 1)
0078       return true;
0079     else {
0080       num += 1;
0081       return false;
0082     }
0083   };
0084   bool RegisterBadConverge() {
0085     if (fCutSatisfied == 1)
0086       return true;
0087     else
0088       return false;
0089   };
0090 
0091 private:
0092   void LocalTransformation(const math::XYZVector &v11,
0093                            const math::XYZVector &v12,
0094                            const math::XYZVector &v21,
0095                            const math::XYZVector &v22,
0096                            math::XYZVector &V11,
0097                            math::XYZVector &V12,
0098                            math::XYZVector &V21,
0099                            math::XYZVector &V22,
0100                            double Phi);
0101   math::XYZVector fHitv11, fHitv12, fHitv21, fHitv22;
0102   math::XYZVector fPV;
0103   math::XYZVector fRecV, fRecC1, fRecC2;
0104 
0105   double fRecPhi;
0106   double fRecR;
0107   double fRecR1;
0108   double fRecR2;  // original input coordinates in cm,
0109 
0110   int fCutSatisfied;   // Target cut met within iters?
0111   int fSignSatisfied;  // All values positive?
0112   int fSolved;         // No break due to /0 or no real root?
0113 
0114   int fMaxNumberOfIterations;
0115   int fLoop;                     // The number of loops actually performed
0116   int fFixedNumberOfIterations;  // Default 0: use cuts.  If > 0, employ fixed loop.
0117   double fRadiusECut;
0118   double fPhiECut;
0119   double fRECut;  // Note that these cuts are NOT independent.
0120 
0121   double fRadiusE;
0122   double fPhiE;
0123   double fRE;
0124   double fBField;  // tesla
0125 };
0126 
0127 #endif