• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

/Users/jmonk/Physics/ForIA/src/AnalysisTools/ClusterSelection.cxx

Go to the documentation of this file.
00001 #include "ForIA/AnalysisTools/ClusterSelection.hh"
00002 #include "ForIA/Units.hh"
00003 #include "ForIA/Utils.hh"
00004 #include <cmath>
00005 #include <stdexcept>
00006 
00007 namespace ForIA {
00008 
00009   ClusterSelection::ClusterSelection(): 
00010     FourVectorSelection(), 
00011     m_haveSetetMin(false),
00012     m_haveSeteMin(false),
00013     m_haveSetetaMin(false),
00014     m_haveSetetaMax(false),
00015     m_haveSetEmFrac(false),
00016     m_haveSetEmFracSpike(false),
00017     m_smearE(false),
00018     m_scaleMCEType("NOMINAL"),
00019     m_useEMScale(true)
00020   {
00021     m_eScale.SetRandomSeed(4321);
00022   }
00023 
00024   const ClusterVector &ClusterSelection::acceptedClusters() const{
00025     if(m_freshEvent) fillVectors();
00026     return m_acceptedClusters;
00027   }
00028   const ClusterVector &ClusterSelection::rejectedClusters() const{
00029     if(m_freshEvent) fillVectors();
00030     return m_rejectedClusters;
00031   }
00032 
00033   bool ClusterSelection::setSelection(DefinedSelection selection){
00034     if(!m_canSetCuts) return false;
00035 
00036     m_haveSetscale = false;
00037     m_haveSetetMin = false;
00038     m_haveSeteMin  = false;
00039     m_haveSetetaMin= false;
00040     m_haveSetetaMax= false;
00041     m_haveSetEmFrac= false;
00042     m_haveSetEmFracSpike= false;
00043 
00044     switch (selection) {
00045     case LOOSE:
00046       setSelection(LOOSE);
00047       setEMin(500 * MeV);
00048       break;
00049       
00050     case MEDIUM:
00051       setSelection(MEDIUM);
00052       setEMin(1.0 * GeV);
00053       break;
00054 
00055     case TIGHT:
00056       setSelection(TIGHT);
00057       setEMin(5.0 * GeV);
00058       break;
00059 
00060     }
00061 
00062     return true;
00063   }
00064 
00065   void ClusterSelection::fillVectors() const{
00066     
00067     m_freshEvent = false;
00068     
00069     m_acceptedClusters.clear();
00070     m_passedFourVectors.clear();
00071     m_rejectedClusters.clear();
00072     m_rejectedFourVectors.clear();
00073 
00074     if(m_event == 0) return;
00075 
00076     ClusterVector input = m_event->clusters();
00077 
00078     for(ClusterVector::const_iterator cluster = input.begin();
00079         cluster != input.end(); ++cluster){
00080       
00081 
00082       (*cluster)->setUseEMScale(m_useEMScale);
00083 
00084 
00085       if (m_smearE) {
00086         double SF = 1.0;
00087         if ((*cluster)->E() > 0.0) m_eScale.getSmearingCorrection((*cluster)->eta(),(*cluster)->E()/1000. ,0,true,"2010");
00088         (*cluster)->scaleEnergy(SF);
00089       }
00090 
00091 
00092       if ((*cluster)->isMC() && m_scaleMCEType != "NONE" ) {
00093         double SF = UtilsScaleMC((*cluster)->eta(),m_scaleMCEType);
00094           //scaleFactor((*cluster)->eta());
00095                 (*cluster)->scaleEnergy(SF);
00096       }
00097       bool passedCuts = true;
00098 
00099       if (m_haveSetetMin && passedCuts){
00100         passedCuts = ((*cluster)->ET() >= m_etMin);
00101       
00102       }
00103 
00104       if(m_haveSeteMin   && passedCuts){          
00105         //      std::cout << "Energy cut value " << m_eMin << std::endl;
00106         if(m_haveSetscale)
00107           passedCuts = ((*cluster)->E(m_scale) > m_eMin); //if broken, switch m_scale to Cluster::EM
00108         else
00109           passedCuts = ((*cluster)->E() > m_eMin);
00110       }
00111       if(m_haveSetetaMin && passedCuts){ passedCuts = (fabs((*cluster)->eta()) >= m_etaMin);}
00112       //      else continue;
00113       if(m_haveSetetaMax && passedCuts){ passedCuts = (fabs((*cluster)->eta()) <= m_etaMax);}
00114       //      else continue;
00115       if (m_haveSetEmFrac && passedCuts){
00116         float emFraction = (*cluster)->E(Cluster::EM) / ((*cluster)->E(Cluster::EM) + (*cluster)->E(Cluster::HAD));
00117         passedCuts = (emFraction > m_emFrac);
00118        }
00119 
00120       if (m_haveSetEmFracSpike && passedCuts){
00121         float emFraction = (*cluster)->E(Cluster::EM) / ((*cluster)->E(Cluster::EM) + (*cluster)->E(Cluster::HAD));
00122         passedCuts = (emFraction > m_emFracSpike) || (fabs((*cluster)->eta()) < 1.3) || (fabs((*cluster)->eta()) > 1.32);
00123 
00124       }
00125 
00126 
00127       if(passedCuts){
00128         m_acceptedClusters.push_back( *cluster );
00129         m_passedFourVectors.push_back( *cluster ); 
00130       } else {
00131         m_rejectedClusters.push_back( *cluster );
00132         m_rejectedFourVectors.push_back( *cluster );
00133       }
00134     }
00135 
00136     return;
00137   }
00138 
00139   bool ClusterSelection::setScale(Cluster::Energy scale){
00140     if(!m_canSetCuts) return false;
00141     m_haveSetscale = true;
00142     m_scale = scale;
00143     return true;
00144   }
00145 
00146   bool ClusterSelection::setETMin(double etMin){
00147     if(!m_canSetCuts) return false;
00148     m_haveSetetMin = true;
00149     m_etMin = etMin;
00150     return true;
00151   }
00152 
00153   bool ClusterSelection::setEMin(double eMin){
00154     if(!m_canSetCuts){ std::cout << "Cuts not allowed!" << std::endl; return false; }
00155     m_haveSeteMin = true;
00156     m_eMin = eMin;
00157     //std::cout << "This happened? " << eMin << std::endl;
00158     return true;
00159   }
00160 
00161   bool ClusterSelection::setEtaMin(double etaMin){
00162     if(!m_canSetCuts) return false;
00163     m_haveSetetaMin = true;
00164     m_etaMin = etaMin;
00165     return true;
00166   }
00167 
00168   bool ClusterSelection::setEtaMax(double etaMax){
00169     if(!m_canSetCuts) return false;
00170     m_haveSetetaMax = true;
00171     m_etaMax = etaMax;
00172     return true;
00173   }
00174 
00175   bool ClusterSelection::setEmFrac(double emFrac){
00176     if(!m_canSetCuts) return false;
00177     m_haveSetEmFrac = true;
00178     m_emFrac = emFrac;
00179     return true;
00180   }
00181 
00182   bool ClusterSelection::setEmFracSpike(double emFracSpike){
00183     if(!m_canSetCuts) return false;
00184     m_haveSetEmFracSpike = true;
00185     m_emFracSpike = emFracSpike;
00186     return true;
00187   }
00188 
00189 void ClusterSelection::setSmearE(bool smear){
00190    m_smearE = smear;
00191    return;
00192   }
00193 
00194  void ClusterSelection::setUseEMScale(bool useEMScale){
00195    m_useEMScale = useEMScale;
00196    return;
00197   }
00198 
00199   void ClusterSelection::setScaleMCClusterEType(std::string type){
00200     m_scaleMCEType = type;
00201     return;
00202   }
00203 
00204 
00205 
00206 }//end

Generated on Mon Jul 30 2012 16:56:35 for ForIA by  doxygen 1.7.2