ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/grimes/VHbbAnalysisCode/src/MCInfoPlotSet.cpp
Revision: 1.2
Committed: Mon Feb 27 11:01:07 2012 UTC (13 years, 2 months ago) by grimes
Branch: MAIN
Changes since 1.1: +26 -0 lines
Log Message:
Added a pass-through cut type
Added a number of primary vertices plot to MCInfoPlotSet (even though not MC)
Restructured the "name" method of VHbbCandidateCutSets
Added sliding dijet mass cut

File Contents

# User Rev Content
1 grimes 1.1 #include "TrkUpgradeAnalysis/VHbb/interface/MCInfoPlotSet.h"
2    
3     #include <stdexcept>
4     #include <sstream>
5    
6     #include <TDirectory.h>
7     #include <TH1F.h>
8    
9    
10     trkupgradeanalysis::MCInfoPlotSet::MCInfoPlotSet()
11     : histogramHaveBeenBooked_(false)
12     {
13     // No operation besides the initialiser list.
14     }
15    
16     void trkupgradeanalysis::MCInfoPlotSet::book( TDirectory* pDirectory )
17     {
18     if( histogramHaveBeenBooked_ ) throw std::runtime_error( "trkupgradeanalysis::MCInfoPlotSet::book() - histograms have already been booked" );
19    
20     //
21     // Note that the root file which TDirectory is part of takes ownership of all
22     // of these objects, so I don't need to (and shouldn't) delete them when I'm
23     // finished.
24     //
25    
26    
27     pEventString_=new TH1F( "mcEventType", "Event type from MC", 10, 0.5, 10.5 );
28     pEventString_->SetDirectory(pDirectory);
29    
30 grimes 1.2 pNumberOfPrimaryVertices_=new TH1F( "numberOfPrimaryVertices", "Number of primary vertices", 71, -0.5, 70.5 );
31     pNumberOfPrimaryVertices_->SetDirectory(pDirectory);
32    
33     pNumberOfBunchCrossings_=new TH1F( "numberOfBunchCrossings", "Number of bunch crossings", 71, -0.5, 70.5 );
34     pNumberOfInteractionsPerBunchCrossing_=new TH1F( "numberOfInteractionsPerBunchCrossing", "Number of interactions per bunch crossing", 71, -0.5, 70.5 );
35     pTotalInteractionsPerEvent_=new TH1F( "totalInteractionsPerEvent", "Total number of interactions per event", 71, -0.5, 70.5 );
36     pNumberOfBunchCrossings_->SetDirectory(pDirectory);
37     pNumberOfInteractionsPerBunchCrossing_->SetDirectory(pDirectory);
38     pTotalInteractionsPerEvent_->SetDirectory(pDirectory);
39    
40 grimes 1.1 histogramHaveBeenBooked_=true;
41     }
42    
43     void trkupgradeanalysis::MCInfoPlotSet::fill( const VHbbEventAuxInfo& eventAuxInfo )
44     {
45     if( !histogramHaveBeenBooked_ ) throw std::runtime_error( "trkupgradeanalysis::MCInfoPlotSet::book() - histograms have not been booked" );
46    
47     std::stringstream eventStringStream;
48    
49     std::vector<VHbbEventAuxInfo::ParticleMCInfo> zMCInfo=eventAuxInfo.mcZ;
50     std::vector<VHbbEventAuxInfo::ParticleMCInfo> higgsMCInfo=eventAuxInfo.mcH;
51    
52     for( std::vector<VHbbEventAuxInfo::ParticleMCInfo>::const_iterator higgsInfo=higgsMCInfo.begin(); higgsInfo!=higgsMCInfo.end(); ++higgsInfo )
53     {
54     if( higgsInfo->dauid.size()==1 && std::abs(higgsInfo->dauid[0])==25 ) continue;
55    
56     eventStringStream << "H->(";
57     for( std::vector<int>::const_iterator daughterID=higgsInfo->dauid.begin(); daughterID!=higgsInfo->dauid.end(); ++daughterID )
58     {
59     if( daughterID!=higgsInfo->dauid.begin() ) eventStringStream << ",";
60     eventStringStream << *daughterID;
61     }
62     eventStringStream << ") ";
63     }
64    
65     for( std::vector<VHbbEventAuxInfo::ParticleMCInfo>::const_iterator zInfo=zMCInfo.begin(); zInfo!=zMCInfo.end(); ++zInfo )
66     {
67     if( zInfo->dauid.empty() ) continue;
68     if( zInfo->dauid.size()==1 && std::abs(zInfo->dauid[0])==23 ) continue;
69     if( zInfo->dauid.size()==2 && std::abs(zInfo->dauid[0])==23 && std::abs(zInfo->dauid[1])==25 ) continue;
70    
71     eventStringStream << "Z->(";
72     for( std::vector<int>::const_iterator daughterID=zInfo->dauid.begin(); daughterID!=zInfo->dauid.end(); ++daughterID )
73     {
74     if( *daughterID==23 ) continue;
75     if( zInfo->dauid.size()>2 && *daughterID==22 ) continue;
76     if( daughterID!=zInfo->dauid.begin() ) eventStringStream << ",";
77     eventStringStream << *daughterID;
78     }
79     eventStringStream << ") ";
80     }
81    
82     // Now that I've created the string describing the MC truth type of the event, see
83     // if it's already been used. If so find out which bin it's being plotted in. Note that
84     // "binNumber" here isn't strictly speaking the bin number, it's the x-coord used to fill
85     // the correct bin.
86     int binNumber=0;
87     std::map<std::string,int>::const_iterator iBinNumber=stringToBinMap_.find( eventStringStream.str() );
88     if( iBinNumber==stringToBinMap_.end() )
89     {
90     // hasn't been plotted before, so I need to create an entry in the map
91     // and use the next available bin.
92     binNumber=stringToBinMap_.size()+1;
93     stringToBinMap_[eventStringStream.str()]=binNumber;
94    
95     // Give the histogram bin the correct label
96     pEventString_->GetXaxis()->SetBinLabel( binNumber, eventStringStream.str().c_str() );
97     }
98     else binNumber=iBinNumber->second;
99    
100     pEventString_->Fill( binNumber );
101 grimes 1.2
102     pNumberOfPrimaryVertices_->Fill( eventAuxInfo.pvInfo.nVertices );
103    
104     // Loop over the pile up data
105     unsigned int totalNumberOfInteractions=0;
106     unsigned int numberOfBunchCrossings=0;
107     for( std::map<int,unsigned int>::const_iterator iBXInteractionPair=eventAuxInfo.puInfo.pus.begin(); iBXInteractionPair!=eventAuxInfo.puInfo.pus.end(); ++iBXInteractionPair )
108     {
109     const unsigned int& numberOfInteractions=iBXInteractionPair->second;
110     totalNumberOfInteractions+=numberOfInteractions;
111     pNumberOfInteractionsPerBunchCrossing_->Fill( numberOfInteractions );
112     ++numberOfBunchCrossings;
113     }
114     pNumberOfBunchCrossings_->Fill( numberOfBunchCrossings );
115     pTotalInteractionsPerEvent_->Fill( totalNumberOfInteractions );
116    
117 grimes 1.1 }
118