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

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

Go to the documentation of this file.
00001 #include "ForIA/AnalysisTools/VertexCuts.hh"
00002 
00003 #include "ForIA/Event.hh"
00004 
00005 #include "ForIA/MessageBox.hh"
00006 
00007 #include <sstream>
00008 
00009 namespace ForIA {
00010   
00011   VertexCuts::VertexCuts(): m_canSetCuts(true), m_haveSetPileUpCut(false), 
00012   m_haveSetRequirePrimary(false), m_haveSetNTracksForPrimary(false), m_haveSetNTracksForPileUp(false){
00013     
00014   }
00015   
00016   bool VertexCuts::setEvent(const Event &evt){
00017     
00018     m_canSetCuts = false;
00019     m_gotPrimary = false;
00020     m_gotPasses = false;
00021     m_goodVertices.clear();
00022     
00023     VertexVector vertices = evt.vertices();
00024     for(VertexVector::const_iterator vertex = vertices.begin();
00025         vertex != vertices.end(); ++vertex){
00026       
00027       if((*vertex)->type() == Vertex::PRIMARY){
00028         
00029         if(m_gotPrimary){
00031           std::cout<<"ERROR:  Two vertices labelled as the primary vertex are found!!"<<std::endl;
00032           std::cout<<"ERROR:  Not completing vertex cuts!!"<<std::endl;
00033           return false;
00034         }
00035         
00036         m_gotPrimary = (!m_haveSetNTracksForPrimary || (*vertex)->nTracks() >= m_nTracksForPrimary)? true: false;
00037         if(m_gotPrimary) m_goodVertices.push_back(*vertex);
00038       }
00039       
00040       if((*vertex)->type() == Vertex::PILE_UP){
00041         if(!m_haveSetNTracksForPileUp || (*vertex)->nTracks() >= m_nTracksForPileUp){
00042           m_goodVertices.push_back(*vertex);
00043         }
00044       }
00045       
00046     }
00047     return true;
00048   }
00049   
00050   const VertexVector &VertexCuts::goodVertices()const{
00051     return m_goodVertices;
00052   }
00053   
00054   bool VertexCuts::passesCuts()const{
00055     if(!m_gotPasses){
00056       m_passes = (m_haveSetRequirePrimary)? m_gotPrimary: true;
00057       if(m_haveSetPileUpCut) m_passes = m_passes && (m_goodVertices.size() < 2);
00058     }
00059         
00060     return m_passes;
00061   }
00062   
00063   bool VertexCuts::doPileUpCut(bool pileUpCut){
00064     if(!m_canSetCuts) return false;
00065     m_pileUpCut = pileUpCut;
00066     m_haveSetPileUpCut = true;
00067     return true;
00068   }
00069   
00070   bool VertexCuts::setNTracksForPrimaryVertex(int nTracks){
00071     if(!m_canSetCuts) return false;
00072     m_nTracksForPrimary = nTracks;
00073     m_haveSetNTracksForPrimary = true;
00074     return true;
00075   }
00076   
00077   bool VertexCuts::setNTracksForPileUpVertex(int nTracks){
00078     if(!m_canSetCuts) return false;
00079     m_nTracksForPileUp = nTracks;
00080     m_haveSetNTracksForPileUp = true;
00081     return true;
00082   }
00083 
00084   bool VertexCuts::setRequirePrimary(bool require){
00085     if(!m_canSetCuts) return false;
00086     m_requirePrimary = require;
00087     m_haveSetRequirePrimary = true;
00088     return true;
00089   }
00090   
00091   MessageBox &operator << (MessageBox &box, const VertexCuts &cuts){
00092     box.setTitle("Vertex Cuts");
00093     box.addEntry("Require primary vertex", (cuts.m_haveSetRequirePrimary && cuts.m_requirePrimary)? "true": "false");
00094     
00095     vector<string> vtxType;
00096     vtxType.push_back("vertex type = PriVtx");
00097     if(cuts.m_haveSetNTracksForPrimary){
00098       std::stringstream ss;
00099       ss<<"Number of tracks >= "<<cuts.m_nTracksForPrimary;
00100       vtxType.push_back(ss.str());
00101     }else{
00102       vtxType.push_back("No cut on number of tracks");
00103     }
00104     box.addEntry("Primary Vertex definition", vtxType);
00105     box.addEntry("Reject pile up", (cuts.m_haveSetPileUpCut && cuts.m_pileUpCut)? "true": "false");
00106     if(cuts.m_haveSetNTracksForPileUp){
00107       std::stringstream ss;
00108       ss<<cuts.m_nTracksForPileUp;
00109       box.addEntry("Number of tracks for pile up vertex", ss.str());
00110     }
00111     
00112     return box;
00113   }
00114   
00115   std::ostream &operator << (std::ostream &out, const VertexCuts &cuts){
00116     
00117     MessageBox tmp;
00118     tmp<<cuts;
00119     out<<tmp;
00120 
00121     return out;
00122   }
00123   
00124 }

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