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

/Users/jmonk/Physics/ForIA/src/Event.cxx

Go to the documentation of this file.
00001 #include "ForIA/Event.hh"
00002 #include "ForIA/DataConverter.hh"
00003 #include "ForIA/JetKey.hh"
00004 #include "ForIA/Jet.hh"
00005 
00006 #include "ForIA/Utils.hh"
00007 
00008 #include <boost/cast.hpp>
00009 
00010 namespace  ForIA{
00011  
00012   Event::Event(DataConverter *converter ): m_converter(converter),
00013                                            m_goodRun(true), m_goodLumiBlock(true),
00014                                            m_gotClusters(false), m_gotDetectorErrors(false),
00015              m_gotTracks(false), m_gotVertices(false), m_gotTriggerConfiguration(false),
00016                                            m_gotTriggerDecision(false), m_gotTruth(false), m_gotTruthJets(false),
00017                                            m_gotTruthVertices(false), m_gotL1Trigger(false), 
00018              m_gotL2SpacePoints(false){
00019     
00020   }
00022   unsigned long Event::runNumber()const{
00023     return m_runNumber;
00024   }
00025   
00027   unsigned long Event::eventNumber()const{
00028     return boost::numeric_cast<unsigned long>(m_eventNumber);
00029   }
00030   
00032   unsigned int Event::lumiBlock()const{
00033     return m_lumiBlock;
00034   }
00035  
00037   double Event::weight()const{
00038     return m_weight;
00039   }
00040  
00042   bool Event::goodRun() const{
00043     return m_goodRun;
00044   }
00045   
00047   bool Event::goodLumiBlock() const{
00048     return m_goodLumiBlock;
00049   }
00050   
00052   const TrackVector &Event::tracks() const {
00053     if(m_gotTracks) return m_tracks;
00054     m_tracks = m_converter->loadTracks(this);
00055     m_gotTracks = true;
00056     return m_tracks;
00057   }
00058 
00060   const ClusterVector &Event::clusters() const {
00061     if(m_gotClusters) return m_clusters;
00062     m_clusters = m_converter->loadClusters();
00063     m_gotClusters = true;
00064     return m_clusters;
00065   }
00066   
00068   DetectorErrorsConstPtr Event::detectorErrors()const{
00069     if(m_gotDetectorErrors) return m_detectorErrors;
00070     m_detectorErrors = m_converter->loadDetectorErrors();
00071     m_gotDetectorErrors = true;
00072     return m_detectorErrors;
00073   }
00074   
00076   const JetVector &Event::jets(const JetKey &jetKey) const {
00077     if(m_gotJets[jetKey]) return m_jets[jetKey];
00078     
00079     boost::unordered_map<JetKey, JetVector>::iterator jetIt = m_jets.find(jetKey);
00080     if(jetIt == m_jets.end()){
00081       jetIt = m_jets.insert(std::make_pair(jetKey, m_converter->loadJets(jetKey, this))).first;
00082     }else{
00083       jetIt->second = m_converter->loadJets(jetKey, this);
00084     }
00085     
00086     m_gotJets[jetKey] = true;
00087     return jetIt->second;
00088   }
00089   
00091 
00092   struct TrackAndJet{
00093     TrackAndJet(double d, JetConstPtr j ): dr(d), jet(j){}
00094     bool operator <( const TrackAndJet &right)const{
00095       return this->dr < right.dr;
00096     }
00097     
00098     double dr;
00099     JetConstPtr jet;
00100   };
00102   void Event::matchTracksToJets(const JetKey &key)const{
00103     
00104     vector<vector< TrackAndJet> > matchings;
00105     
00106     JetVector jets = this->jets(key);
00107     TrackVector tracks = this->tracks();
00108     
00109     for(TrackVector::const_iterator track = tracks.begin();
00110         track != tracks.end(); ++track){
00111       matchings.push_back(vector<TrackAndJet>());
00112       
00113       for(JetVector::iterator jet = jets.begin();
00114           jet != jets.end(); ++jet){
00115         
00116         if((*jet)->m_matchedTracks.size() != 0){
00117           throw std::runtime_error("matchTracksToJets: trying to match jets that have already been matched to tracks");
00118         }
00119         
00120         (*jet)->m_gotMatchedTracks = true;
00121         
00122         double dr = deltaR(*track, *jet);
00123         if(dr < (*jet)->rParam()){
00124           matchings.back().push_back(TrackAndJet(dr, *jet));
00125         }
00126       }
00127     }
00128     
00129     for(size_t ii = 0; ii != tracks.size(); ++ii){
00130       if(matchings[ii].size()==0) continue;
00131       
00132       std::sort(matchings[ii].begin(), matchings[ii].end());
00133       matchings[ii][0].jet->m_matchedTracks.push_back(tracks[ii]);
00134       
00135     }
00136     
00137     return;
00138   }
00139  
00141   void Event::matchVerticesToTracks()const{
00142     
00143     const TrackVector &allTracks = this->tracks();
00144     
00145     for(TrackVector::const_iterator track = allTracks.begin();
00146         track != allTracks.end(); ++track){
00147       (*track)->m_vertices.clear();
00148       (*track)->m_haveMatchedVertices = true;
00149     }
00150     
00151     const VertexVector &vertices = this->vertices();
00152     
00153     int nTracks = 0;
00154     
00155     for(VertexVector::const_iterator vtx = vertices.begin();
00156         vtx != vertices.end(); ++vtx){
00157       
00158       const TrackVector &tracks = (*vtx)->associatedTracks();
00159       for(TrackVector::const_iterator track = tracks.begin();
00160           track != tracks.end(); ++track){
00161         (*track)->m_vertices.push_back(*vtx);
00162         (*track)->m_haveMatchedVertices = true;
00163         ++nTracks;
00164       }
00165     }
00166             
00167     return;
00168   }
00169   
00171   const JetVector &Event::jets()const{
00172     static JetKey key(Jet::ANTI_KT, 0.6, Jet::TOPO);
00173     return jets(key);
00174   }
00175   
00177   EtMissPtr Event::met() const{
00178     if(m_gotMet) return m_etMiss;
00179     m_etMiss = m_converter->loadEtMiss();
00180     m_gotMet = true;
00181     return m_etMiss;
00182   }
00183 
00185   const VertexVector &Event::vertices() const{
00186     if(m_gotVertices) return m_vertices;
00187     m_vertices = m_converter->loadVertices(this);
00188     m_gotVertices = true;
00189     return m_vertices;
00190   }
00192   const TriggerConfiguration &Event::triggerConfiguration()const{
00193     if(m_gotTriggerConfiguration) return m_triggerConfiguration;
00194     
00195     m_triggerConfiguration = m_converter->loadTriggerConfiguration();
00196     m_gotTriggerConfiguration = true;
00197     return m_triggerConfiguration;
00198   }
00200   TriggerDecisionPtr Event::triggerDecision()const{
00201     if(m_gotTriggerDecision) return m_triggerDecision;
00202     m_triggerDecision = m_converter->loadTriggerDecision();
00203     m_gotTriggerDecision = true;
00204     m_triggerDecision->setEvent(*this);
00205     return m_triggerDecision;
00206   }
00208   const TruthParticleVector &Event::truthParticles() const{
00209     if(m_gotTruth) return m_truthParticles;
00210     m_truthParticles = m_converter->loadTruthParticles();
00211     m_gotTruth = true;
00212     return m_truthParticles;
00213   }
00214 
00216   const TruthJetVector &Event::truthJets() const{
00217     if(m_gotTruthJets) return m_truthJets;
00218     m_truthJets = m_converter->loadTruthJets();
00219     m_gotTruthJets = true;
00220     return m_truthJets;
00221   }
00222 
00224   const VertexVector &Event::truthVertices()const{
00225     if(m_gotTruthVertices) return m_truthVertices;
00226     m_truthVertices = m_converter->loadTruthVertices();
00227     m_gotTruthVertices = true;
00228     return m_truthVertices;
00229   }
00230   
00232   L1TriggerBitPtr Event::l1Trigger()const{
00233     if(m_gotL1Trigger) return m_l1Trigger;
00234     m_l1Trigger = m_converter->loadL1Trigger();
00235     m_gotL1Trigger = true;
00236     return m_l1Trigger;
00237   }
00238   
00240   L2SpacePointsConstPtr Event::l2SpacePoints()const{
00241     if(m_gotL2SpacePoints) return m_l2SpacePoints;
00242     m_l2SpacePoints = m_converter->loadL2SpacePoints();
00243     return m_l2SpacePoints;
00244   }
00245   
00247   void Event::clear(){
00248    
00249     m_gotTracks               = false;
00250     m_gotClusters             = false;
00251     m_gotDetectorErrors       = false;
00252     m_gotVertices             = false;
00253     m_gotTriggerConfiguration = false;
00254     m_gotTriggerDecision      = false;
00255     m_gotTruth                = false;
00256     m_gotTruthVertices        = false;
00257     m_gotL1Trigger            = false;
00258     m_gotL2SpacePoints        = false;
00259     
00260     m_eventNumber = -1;
00261     
00262     for(boost::unordered_map<JetKey, bool>::iterator got = m_gotJets.begin();
00263         got != m_gotJets.end(); ++got){
00264       got->second=false;
00265     }
00266         
00267     return;
00268   }
00269   
00271   std::ostream &operator << (std::ostream &out, const Event &evt){
00272     out<<"Event: "<<evt.eventNumber()<<", Run number: "<<evt.m_runNumber<<", Lumi block: "<<evt.m_lumiBlock;
00273     return out;
00274   }
00275   
00276 }
00277 

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