ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/OSUT3Analysis/AnaTools/plugins/OSUAnalysis.cc
(Generate patch)

Comparing UserCode/OSUT3Analysis/AnaTools/plugins/OSUAnalysis.cc (file contents):
Revision 1.107 by jbrinson, Tue Jul 23 08:51:35 2013 UTC vs.
Revision 1.108 by wulsin, Wed Jul 24 16:24:44 2013 UTC

# Line 38 | Line 38 | OSUAnalysis::OSUAnalysis (const edm::Par
38    printAllTriggers_    (cfg.getParameter<bool> ("printAllTriggers")),
39    useTrackCaloRhoCorr_ (cfg.getParameter<bool> ("useTrackCaloRhoCorr")),
40    stopCTau_ (cfg.getParameter<vector<double> > ("stopCTau")),
41 <  GetPlotsAfterEachCut_ (cfg.getParameter<bool> ("GetPlotsAfterEachCut"))
41 >  GetPlotsAfterEachCut_ (cfg.getParameter<bool> ("GetPlotsAfterEachCut")),
42 >  verbose_ (cfg.getParameter<int> ("verbose"))
43   {
44  
45 <  TH1::SetDefaultSumw2 ();
45 >  if (verbose_) printEventInfo_ = true;  
46 >  if (verbose_) clog << "Beginning OSUAnalysis::OSUAnalysis constructor." << endl;  
47 >
48 >  TH1::SetDefaultSumw2();
49  
50    //create pile-up reweighting object, if necessary
51    if(datasetType_ != "data") {
# Line 55 | Line 59 | OSUAnalysis::OSUAnalysis (const edm::Par
59      }
60    }
61    if (datasetType_ == "signalMC" && regex_match (dataset_, regex ("stop.*to.*_.*mm.*")))
62 <    stopCTauWeight_ = new StopCTauWeight (stopCTau_.at (0), stopCTau_.at (1), stops_);
62 >    stopCTauWeight_ = new StopCTauWeight (stopCTau_.at(0), stopCTau_.at(1), stops_);
63  
64  
65    // Construct Cutflow Objects. These store the results of cut decisions and
# Line 91 | Line 95 | OSUAnalysis::OSUAnalysis (const edm::Par
95        TString newName = TString(br.inputCollection) + "_" + TString(br.inputVariable);
96        br.name = string(newName.Data());
97        treeBranches_.push_back(br);
98 +      if (verbose_>3) clog << "   Adding branch to BNTree: " << br.name << endl;  
99      }
100  
101    } // end   for (uint iBranchSet = 0; iBranchSet<treeBranchSets_.size(); iBranchSet++)
# Line 145 | Line 150 | OSUAnalysis::OSUAnalysis (const edm::Par
150        objectsToGet.push_back(obj1);
151        objectsToGet.push_back(obj2ToGet);
152      } // end else
153 <      if (find(objectsToPlot.begin(), objectsToPlot.end(), "events") != objectsToPlot.end())
154 <        objectsToGet.push_back("jets");
155 <
156 <
153 >    if (find(objectsToPlot.begin(), objectsToPlot.end(), "events") != objectsToPlot.end())
154 >      objectsToGet.push_back("jets");
155 >    
156 >    
157      vector<edm::ParameterSet> histogramList_  (histogramSets_.at(currentHistogramSet).getParameter<vector<edm::ParameterSet> >("histograms"));
158  
159      for(uint currentHistogram = 0; currentHistogram != histogramList_.size(); currentHistogram++){
# Line 251 | Line 256 | OSUAnalysis::OSUAnalysis (const edm::Par
256      string channelName  (channels_.at(currentChannel).getParameter<string>("name"));
257      tempChannel.name = channelName;
258      TString channelLabel = channelName;
259 +    if (verbose_) clog << "Processing channel:  " << channelName << endl;  
260  
261      //set triggers for this channel
262      vector<string> triggerNames;
# Line 401 | Line 407 | OSUAnalysis::OSUAnalysis (const edm::Par
407        }
408        subSubDirNames.push_back(subSubDirName);
409        tempCut.name = tempCutName;
410 +      if (verbose_) clog << "Setting up cut, index: " << currentCut << ", input collection: " << tempInputCollection<< ", name: " << tempCut.name << endl;  
411  
412        tempChannel.cuts.push_back(tempCut);
413  
# Line 618 | Line 625 | OSUAnalysis::OSUAnalysis (const edm::Par
625          else
626            oneDHists_.at(currentChannel).at(currentDir)[histoName] = directories.at(currentDir).make<TH1D> (TString(histoName),channelLabel+" channel: Number of Selected "+currentObject+"; # "+currentObject, maxNum, 0, maxNum);
627        }
628 +
629 +      if (verbose_) {
630 +        clog << "List of 1D histograms booked for channel " << channelName << " and directory " << currentDir << ":" << endl;
631 +        for(map<string, TH1D*>::iterator
632 +              iter = oneDHists_.at(currentChannel).at(currentDir).begin();
633 +            iter  != oneDHists_.at(currentChannel).at(currentDir).end();
634 +            iter++) {
635 +          clog << " " << iter->first
636 +               << ":  name=" << iter->second->GetName()
637 +               << ", title=" << iter->second->GetTitle()
638 +               << ", bins=(" << iter->second->GetNbinsX()
639 +               << "," << iter->second->GetXaxis()->GetXmin()
640 +               << "," << iter->second->GetXaxis()->GetXmax()
641 +               << ")" << endl;
642 +        }  
643 +        clog << "List of 2D histograms booked for channel " << channelName << " and directory " << currentDir << ":" << endl;
644 +        for(map<string, TH2D*>::iterator
645 +              iter = twoDHists_.at(currentChannel).at(currentDir).begin();
646 +            iter  != twoDHists_.at(currentChannel).at(currentDir).end();
647 +            iter++) {
648 +          clog << " " << iter->first
649 +               << ":  name=" << iter->second->GetName()
650 +               << ", title=" << iter->second->GetTitle()
651 +               << ", binsX=(" << iter->second->GetNbinsX()
652 +               << "," << iter->second->GetXaxis()->GetXmin()
653 +               << "," << iter->second->GetXaxis()->GetXmax()
654 +               << ")"
655 +               << ", binsY=(" << iter->second->GetNbinsY()
656 +               << "," << iter->second->GetYaxis()->GetXmin()
657 +               << "," << iter->second->GetYaxis()->GetXmax()
658 +               << ")"
659 +               << endl;
660 +        }  
661 +      }
662 +
663      }//end of loop over directories
664      channels.push_back(tempChannel);
665      tempChannel.cuts.clear();
666    }//end loop over channels
667  
668  
669 +
670    //make unique vector of objects we need to get from the event
671    sort( objectsToGet.begin(), objectsToGet.end() );
672    objectsToGet.erase( unique( objectsToGet.begin(), objectsToGet.end() ), objectsToGet.end() );
# Line 634 | Line 677 | OSUAnalysis::OSUAnalysis (const edm::Par
677    sort( objectsToFlag.begin(), objectsToFlag.end() );
678    objectsToFlag.erase( unique( objectsToFlag.begin(), objectsToFlag.end() ), objectsToFlag.end() );
679  
680 +  // Move all paired objects to the end of the list, so that the flags for single objects are always set before those of paired objects.  
681 +  for (uint i=0; i<objectsToFlag.size(); i++) {
682 +    if (objectsToFlag.at(i).find("pairs")!=string::npos) { // if it contains "pairs"
683 +      objectsToFlag.push_back(objectsToFlag.at(i));  
684 +      objectsToFlag.erase(objectsToFlag.begin()+i);  
685 +    }
686 +  }
687 +
688 +  if (verbose_) {
689 +    clog << "List of channels:" << endl;
690 +    for (uint i=0; i<channels.size(); i++) {
691 +      clog << " " << channels.at(i).name << endl;
692 +    }
693 +    clog << "List of objects to get:" << endl;
694 +    for (uint i=0; i<objectsToGet.size(); i++) {
695 +      clog << " " << objectsToGet.at(i) << endl;
696 +    }
697 +    clog << "List of objects to plot:" << endl;
698 +    for (uint i=0; i<objectsToPlot.size(); i++) {
699 +      clog << " " << objectsToPlot.at(i) << endl;
700 +    }
701 +    clog << "List of objects to cut:" << endl;
702 +    for (uint i=0; i<objectsToCut.size(); i++) {
703 +      clog << " " << objectsToCut.at(i) << endl;
704 +    }
705 +    clog << "List of objects to flag:" << endl;
706 +    for (uint i=0; i<objectsToFlag.size(); i++) {
707 +      clog << " " << objectsToFlag.at(i) << endl;
708 +    }
709 +  }
710 +
711    produces<map<string, bool> > ("channelDecisions");
712  
713    if (printEventInfo_) {
# Line 646 | Line 720 | OSUAnalysis::OSUAnalysis (const edm::Par
720  
721    isFirstEvent_ = true;  
722  
723 < } // end constructor OSUAnalysis::OSUAnalysis()
723 >  if (verbose_) clog << "Finished OSUAnalysis::OSUAnalysis constructor." << endl;  
724 >
725 >
726 >  } // end constructor OSUAnalysis::OSUAnalysis()
727  
728  
729   OSUAnalysis::~OSUAnalysis ()
730   {
731  
732 +  if (verbose_) clog << "Beginning OSUAnalysis::OSUAnalysis destructor." << endl;  
733 +
734    // Destroying the CutFlow objects causes the cut flow numbers and time
735    // information to be printed to standard output.
736    for(uint currentChannel = 0; currentChannel != channels_.size(); currentChannel++){
# Line 664 | Line 743 | OSUAnalysis::~OSUAnalysis ()
743    clog << "Successfully completed OSUAnalysis." << endl;  
744    clog << "=============================================" << endl;  
745  
746 +  if (verbose_) clog << "Finished OSUAnalysis::OSUAnalysis destructor." << endl;  
747 +
748   }
749  
750   void
# Line 671 | Line 752 | OSUAnalysis::produce (edm::Event &event,
752   {
753    // Retrieve necessary collections from the event.
754  
755 +  if (verbose_) clog << "Beginning OSUAnalysis::produce." << endl;  
756 +
757    if (find(objectsToGet.begin(), objectsToGet.end(), "triggers") != objectsToGet.end())
758      event.getByLabel (triggers_, triggers);
759  
# Line 748 | Line 831 | OSUAnalysis::produce (edm::Event &event,
831    auto_ptr<map<string, bool> > channelDecisions (new map<string, bool>);
832    for(uint currentChannelIndex = 0; currentChannelIndex != channels.size(); currentChannelIndex++){
833      channel currentChannel = channels.at(currentChannelIndex);
834 +    if (verbose_>1) clog << " Processing channel " << currentChannel.name << endl;
835  
836      flagMap individualFlags;
837      counterMap passingCounter;
# Line 767 | Line 851 | OSUAnalysis::produce (edm::Event &event,
851      //loop over all cuts
852      for(uint currentCutIndex = 0; currentCutIndex != currentChannel.cuts.size(); currentCutIndex++){
853        cut currentCut = currentChannel.cuts.at(currentCutIndex);
854 +      if (verbose_>2) clog << "  Processing cut, index: " << currentCutIndex << ", input collection: " << currentCut.inputCollection << ", name: " << currentCut.name << endl;  
855  
856        for(uint currentObjectIndex = 0; currentObjectIndex != objectsToFlag.size(); currentObjectIndex++){
857          string currentObject = objectsToFlag.at(currentObjectIndex);
# Line 778 | Line 863 | OSUAnalysis::produce (edm::Event &event,
863        }
864  
865        //set flags for all relevant objects
866 <      for(uint currentObjectIndex = 0; currentObjectIndex != objectsToFlag.size(); currentObjectIndex++){
867 <        string currentObject = objectsToFlag.at(currentObjectIndex);
868 <
869 <        int flagsForPairCutsIndex = max(int(currentCutIndex-1),0);
870 <
871 <
872 <        if     (currentObject == "jets")            setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),"jets");
873 <        else if(currentObject == "secondary jets")  setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),"secondary jets");
874 <        else if(currentObject == "secondary photons")  setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,photons.product(),"secondary photons");
875 <        else if(currentObject == "muons")           setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),"muons");
876 <        else if(currentObject == "secondary muons") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),"secondary muons");
866 >      for(int currentObjectIndex = -1; currentObjectIndex != int(objectsToFlag.size()); currentObjectIndex++){
867 >        string currentObject;  
868 >        if (currentObjectIndex < 0) currentObject = currentCut.inputCollection;  // In the first loop, set the flags for the collection that the cut is acting on.  That way other paired collections can access the correct flag for the current cut.  
869 >        else currentObject = objectsToFlag.at(currentObjectIndex);
870 >        if (currentObjectIndex >= 0 && currentObject == currentCut.inputCollection) continue;  // Flags have already been set for the inputCollection object, so should not be set again.  
871 >
872 >        // single object collections
873 >        if     (currentObject == "jets")                setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),"jets");
874 >        else if(currentObject == "secondary jets")      setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),"secondary jets");
875 >        else if(currentObject == "secondary photons")   setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,photons.product(),"secondary photons");
876 >        else if(currentObject == "muons")               setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),"muons");
877 >        else if(currentObject == "secondary muons")     setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),"secondary muons");
878          else if(currentObject == "secondary electrons") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),"secondary electrons");
879 <        else if(currentObject == "electrons") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),"electrons");
880 <        else if(currentObject == "events") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,events.product(),"events");
881 <        else if(currentObject == "taus") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,taus.product(),"taus");
882 <        else if(currentObject == "mets") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,mets.product(),"mets");
883 <        else if(currentObject == "tracks") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,tracks.product(),"tracks");
884 <        else if(currentObject == "genjets") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,genjets.product(),"genjets");
885 <        else if(currentObject == "mcparticles") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,mcparticles.product(),"mcparticles");
886 <        else if(currentObject == "primaryvertexs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,primaryvertexs.product(),"primaryvertexs");
887 <        else if(currentObject == "bxlumis") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,bxlumis.product(),"bxlumis");
888 <        else if(currentObject == "photons") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,photons.product(),"photons");
889 <        else if(currentObject == "superclusters") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,superclusters.product(),"superclusters");
890 <        else if(currentObject == "trigobjs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,trigobjs.product(),"trigobjs");
891 <
892 <
893 <
894 <        else if(currentObject == "muon-muon pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),muons.product(), \
895 <                                                                   cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
896 <                                                                   cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
897 <                                                                   "muon-muon pairs");
898 <
899 <        else if(currentObject == "muon-secondary muon pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),muons.product(), \
900 <                                                                             cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
901 <                                                                             cumulativeFlags.at("secondary muons").at(flagsForPairCutsIndex), \
902 <                                                                             "muon-secondary muon pairs");
903 <
904 <        else if(currentObject == "muon-secondary photon pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),photons.product(), \
905 <                                                                             cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
906 <                                                                             cumulativeFlags.at("secondary photons").at(flagsForPairCutsIndex), \
907 <                                                                             "muon-secondary photon pairs");
908 <        else if(currentObject == "muon-secondary jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),jets.product(), \
909 <                                                                             cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
910 <                                                                             cumulativeFlags.at("secondary jets").at(flagsForPairCutsIndex), \
911 <                                                                             "muon-secondary jet pairs");
912 <        else if(currentObject == "photon-secondary jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,photons.product(),jets.product(), \
913 <                                                                             cumulativeFlags.at("photons").at(flagsForPairCutsIndex), \
914 <                                                                             cumulativeFlags.at("secondary jets").at(flagsForPairCutsIndex), \
915 <                                                                             "photon-secondary jet pairs");
916 <
917 <        else if(currentObject == "electron-secondary jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),jets.product(), \
918 <                                                                             cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
919 <                                                                             cumulativeFlags.at("secondary jets").at(flagsForPairCutsIndex), \
920 <                                                                             "electron-secondary jet pairs");
921 <
922 <        else if(currentObject == "electron-secondary electron pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),electrons.product(), \
837 <                                                                                     cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
838 <                                                                                     cumulativeFlags.at("secondary electrons").at(flagsForPairCutsIndex), \
839 <                                                                                     "electron-secondary electron pairs");
840 <
841 <        else if(currentObject == "electron-electron pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),electrons.product(), \
842 <                                                                           cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
843 <                                                                           cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
844 <                                                                           "electron-electron pairs");
845 <        else if(currentObject == "electron-muon pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),muons.product(), \
846 <                                                                       cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
847 <                                                                       cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
848 <                                                                       "electron-muon pairs");
849 <        else if(currentObject == "jet-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),jets.product(), \
850 <                                                                 cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
851 <                                                                 cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
852 <                                                                 "jet-jet pairs");
853 <        else if(currentObject == "jet-secondary jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),jets.product(), \
854 <                                                                 cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
855 <                                                                 cumulativeFlags.at("secondary jets").at(flagsForPairCutsIndex),\
856 <                                                                 "jet-secondary jet pairs");
857 <        else if(currentObject == "electron-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),jets.product(), \
858 <                                                                      cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
859 <                                                                      cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
860 <                                                                      "electron-jet pairs");
861 <        else if(currentObject == "electron-photon pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),photons.product(), \
862 <                                                                      cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
863 <                                                                      cumulativeFlags.at("photons").at(flagsForPairCutsIndex), \
864 <                                                                      "electron-photon pairs");
865 <        else if(currentObject == "photon-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,photons.product(),jets.product(), \
866 <                                                                      cumulativeFlags.at("photons").at(flagsForPairCutsIndex), \
867 <                                                                      cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
868 <                                                                      "photon-jet pairs");
869 <        else if(currentObject == "muon-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),jets.product(), \
870 <                                                                  cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
871 <                                                                  cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
872 <                                                                  "muon-jet pairs");
873 <        else if(currentObject == "muon-event pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),events.product(), \
874 <                                                                  cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
875 <                                                                  cumulativeFlags.at("events").at(flagsForPairCutsIndex), \
876 <                                                                  "muon-event pairs");
877 <        else if(currentObject == "met-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,mets.product(),jets.product(), \
878 <                                                                  cumulativeFlags.at("mets").at(flagsForPairCutsIndex), \
879 <                                                                  cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
880 <                                                                  "met-jet pairs");
881 <        else if(currentObject == "track-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,tracks.product(),jets.product(), \
882 <                                                                 cumulativeFlags.at("tracks").at(flagsForPairCutsIndex), \
883 <                                                                 cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
884 <                                                                 "track-jet pairs");
885 <        else if(currentObject == "muon-photon pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),photons.product(), \
886 <                                                                  cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
887 <                                                                  cumulativeFlags.at("photons").at(flagsForPairCutsIndex), \
888 <                                                                  "muon-photon pairs");
889 <        else if(currentObject == "track-event pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,tracks.product(),events.product(),
890 <                                                                     cumulativeFlags.at("tracks").at(flagsForPairCutsIndex),
891 <                                                                     cumulativeFlags.at("events").at(flagsForPairCutsIndex),
892 <                                                                     "track-event pairs");
893 <        else if(currentObject == "electron-track pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),tracks.product(),
894 <                                                                        cumulativeFlags.at("electrons").at(flagsForPairCutsIndex),
895 <                                                                        cumulativeFlags.at("tracks").at(flagsForPairCutsIndex),
896 <                                                                        "electron-track pairs");
897 <        else if(currentObject == "muon-track pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),tracks.product(),
898 <                                                                    cumulativeFlags.at("muons").at(flagsForPairCutsIndex),
899 <                                                                    cumulativeFlags.at("tracks").at(flagsForPairCutsIndex),
900 <                                                                    "muon-track pairs");
901 <        else if(currentObject == "muon-tau pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),taus.product(),
902 <                                                                  cumulativeFlags.at("muons").at(flagsForPairCutsIndex),
903 <                                                                  cumulativeFlags.at("taus").at(flagsForPairCutsIndex),
904 <                                                                  "muon-tau pairs");
905 <        else if(currentObject == "tau-tau pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,taus.product(),taus.product(),
906 <                                                                 cumulativeFlags.at("taus").at(flagsForPairCutsIndex),
907 <                                                                 cumulativeFlags.at("taus").at(flagsForPairCutsIndex),
908 <                                                                 "tau-tau pairs");
909 <        else if(currentObject == "tau-track pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,taus .product(),tracks.product(),
910 <                                                                   cumulativeFlags.at("taus").at(flagsForPairCutsIndex),
911 <                                                                   cumulativeFlags.at("tracks").at(flagsForPairCutsIndex),
912 <                                                                   "tau-track pairs");
913 <        else if(currentObject == "electron-trigobj pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),trigobjs.product(),
914 <                                                                          cumulativeFlags.at("electrons").at(flagsForPairCutsIndex),
915 <                                                                          cumulativeFlags.at("trigobjs").at(flagsForPairCutsIndex),
916 <                                                                          "electron-trigobj pairs");
917 <        else if(currentObject == "muon-trigobj pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),trigobjs.product(),
918 <                                                                      cumulativeFlags.at("muons").at(flagsForPairCutsIndex),
919 <                                                                      cumulativeFlags.at("trigobjs").at(flagsForPairCutsIndex),
920 <                                                                      "muon-trigobj pairs");
879 >        else if(currentObject == "electrons")           setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),"electrons");
880 >        else if(currentObject == "events")              setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,events.product(),"events");
881 >        else if(currentObject == "taus")                setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,taus.product(),"taus");
882 >        else if(currentObject == "mets")                setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,mets.product(),"mets");
883 >        else if(currentObject == "tracks")              setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,tracks.product(),"tracks");
884 >        else if(currentObject == "genjets")             setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,genjets.product(),"genjets");
885 >        else if(currentObject == "mcparticles")         setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,mcparticles.product(),"mcparticles");
886 >        else if(currentObject == "primaryvertexs")      setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,primaryvertexs.product(),"primaryvertexs");
887 >        else if(currentObject == "bxlumis")             setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,bxlumis.product(),"bxlumis");
888 >        else if(currentObject == "photons")             setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,photons.product(),"photons");
889 >        else if(currentObject == "superclusters")       setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,superclusters.product(),"superclusters");
890 >        else if(currentObject == "trigobjs")            setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,trigobjs.product(),"trigobjs");
891 >
892 >
893 >        // paired object collections  
894 >        else if(currentObject == "muon-muon pairs")                   setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),muons.product(), "muon-muon pairs");
895 >        else if(currentObject == "muon-secondary muon pairs")         setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),muons.product(), "muon-secondary muon pairs");
896 >
897 >        else if(currentObject == "muon-secondary photon pairs")       setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),photons.product(), "muon-secondary photon pairs");
898 >        else if(currentObject == "muon-secondary jet pairs")          setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),jets.product(), "muon-secondary jet pairs");
899 >        else if(currentObject == "photon-secondary jet pairs")        setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,photons.product(),jets.product(), "photon-secondary jet pairs");
900 >        else if(currentObject == "electron-secondary jet pairs")      setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),jets.product(), "electron-secondary jet pairs");
901 >        else if(currentObject == "electron-secondary electron pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),electrons.product(), "electron-secondary electron pairs");
902 >
903 >        else if(currentObject == "electron-electron pairs")           setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),electrons.product(), "electron-electron pairs");
904 >        else if(currentObject == "electron-muon pairs")     setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),muons.product(), "electron-muon pairs");
905 >        else if(currentObject == "jet-jet pairs")           setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),jets.product(), "jet-jet pairs");
906 >        else if(currentObject == "jet-secondary jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),jets.product(), "jet-secondary jet pairs");
907 >        else if(currentObject == "electron-jet pairs")      setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),jets.product(), "electron-jet pairs");
908 >        else if(currentObject == "electron-photon pairs")   setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),photons.product(), "electron-photon pairs");
909 >        else if(currentObject == "photon-jet pairs")        setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,photons.product(),jets.product(), "photon-jet pairs");
910 >        else if(currentObject == "muon-jet pairs")          setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),jets.product(), "muon-jet pairs");
911 >        else if(currentObject == "muon-event pairs")        setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),events.product(), "muon-event pairs");
912 >        else if(currentObject == "met-jet pairs")           setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,mets.product(),jets.product(), "met-jet pairs");
913 >        else if(currentObject == "track-jet pairs")         setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,tracks.product(),jets.product(), "track-jet pairs");
914 >        else if(currentObject == "muon-photon pairs")       setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),photons.product(), "muon-photon pairs");
915 >        else if(currentObject == "track-event pairs")       setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,tracks.product(),events.product(), "track-event pairs");
916 >        else if(currentObject == "electron-track pairs")    setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),tracks.product(),"electron-track pairs");
917 >        else if(currentObject == "muon-track pairs")        setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),tracks.product(),"muon-track pairs");
918 >        else if(currentObject == "muon-tau pairs")          setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),taus.product(),"muon-tau pairs");
919 >        else if(currentObject == "tau-tau pairs")           setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,taus.product(),taus.product(),"tau-tau pairs");
920 >        else if(currentObject == "tau-track pairs")         setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,taus .product(),tracks.product(),"tau-track pairs");
921 >        else if(currentObject == "electron-trigobj pairs")  setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),trigobjs.product(),"electron-trigobj pairs");
922 >        else if(currentObject == "muon-trigobj pairs")      setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),trigobjs.product(),"muon-trigobj pairs");
923  
924          if(currentObject == "stops" && datasetType_ == "signalMC") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,stops.product(),"stops");
925        }
926  
927 +    }//end loop over all cuts
928  
929  
927    }//end loop over all cuts
928    //use cumulative flags to apply cuts at event level
930  
931 <    //a vector to store cumulative cut descisions after each cut.
932 <    vector<bool> eventPassedPreviousCuts;
931 >    //use cumulative flags to apply cuts at event level
932 >    vector<bool> eventPassedPreviousCuts;    //a vector to store cumulative cut descisions after each cut.
933      bool eventPassedAllCuts = true;
934 <    //apply trigger (true if none were specified)
934 <    eventPassedAllCuts = eventPassedAllCuts && triggerDecision;
934 >    eventPassedAllCuts = eventPassedAllCuts && triggerDecision;    //apply trigger (true if none were specified)
935  
936      for(uint currentCutIndex = 0; currentCutIndex != currentChannel.cuts.size(); currentCutIndex++){
937  
938        //loop over all objects and count how many passed the cumulative selection up to this point
939        cut currentCut = currentChannel.cuts.at(currentCutIndex);
940        int numberPassing = 0;
941 +      int numberPassingPrev = 0;  // number of objects that pass cuts up to the previous one
942  
943        for (uint object = 0; object != cumulativeFlags.at(currentCut.inputCollection).at(currentCutIndex).size() ; object++){
944          if(cumulativeFlags.at(currentCut.inputCollection).at(currentCutIndex).at(object).first) numberPassing++;
945        }
946 <      bool cutDecision = evaluateComparison(numberPassing,currentCut.eventComparativeOperator,currentCut.numberRequired);
946 >      bool cutDecision;
947 >      if (!currentCut.isVeto) {
948 >        cutDecision = evaluateComparison(numberPassing,currentCut.eventComparativeOperator,currentCut.numberRequired);
949 >      } else {
950 >        int prevCutIndex = currentCutIndex - 1;
951 >        if (prevCutIndex<0) {
952 >          numberPassingPrev = cumulativeFlags.at(currentCut.inputCollection).at(currentCutIndex).size();  // count all objects in collection if cut is the first
953 >        } else {
954 >          for (uint object = 0; object != cumulativeFlags.at(currentCut.inputCollection).at(prevCutIndex).size() ; object++){
955 >            if (cumulativeFlags.at(currentCut.inputCollection).at(prevCutIndex).at(object).first) {
956 >              numberPassingPrev++;
957 >              if (verbose_>1) clog << " object passed previous cut" << endl;  
958 >            }
959 >          }  
960 >        }  
961 >        int numberFailCut = numberPassingPrev - numberPassing;
962 >        cutDecision = evaluateComparison(numberFailCut,currentCut.eventComparativeOperator,currentCut.numberRequired);  
963 >      }
964 >
965        cutFlows_.at(currentChannelIndex)->at (currentCut.name) = cutDecision;
966        eventPassedAllCuts = eventPassedAllCuts && cutDecision;
967        eventPassedPreviousCuts.push_back(eventPassedAllCuts);
968 +      if (verbose_>1) clog << " Event passed cuts up to cut index " << currentCutIndex << endl;  
969 +
970      }
971      //applying all appropriate scale factors
972      double scaleFactor = masterScaleFactor;
# Line 1010 | Line 1031 | OSUAnalysis::produce (edm::Event &event,
1031      scaleFactor *= electronScaleFactor_;
1032      scaleFactor *= bTagScaleFactor_;
1033      cutFlows_.at(currentChannelIndex)->fillCutFlow(scaleFactor);
1034 +    if (verbose_>1) clog << " Scale factors applied:  "
1035 +                         << " muonScaleFactor_ = " << muonScaleFactor_
1036 +                         << ", electronScaleFactor_ = " << electronScaleFactor_
1037 +                         << ", bTagScaleFactor_ = " << bTagScaleFactor_
1038 +                         << ", total scale factor = " << scaleFactor
1039 +                         << endl;  
1040 +
1041  
1042      if (printEventInfo_ && eventPassedAllCuts) {
1043        // Write information about event to screen, for testing purposes.
# Line 1028 | Line 1056 | OSUAnalysis::produce (edm::Event &event,
1056  
1057  
1058      //filling histograms
1059 <    for(uint currentCut = 0; currentCut != oneDHists_.at(currentChannelIndex).size(); currentCut++){//loop over all the directories in each channel.
1059 >    for(uint currentCut = 0; currentCut != oneDHists_.at(currentChannelIndex).size(); currentCut++){//loop over all the cuts in each channel; if GetPlotsAfterEachCut_ is false, only the last cut will be used.
1060 >
1061 >      if (verbose_>2) clog << "  Filling histograms for currentcut = " << currentCut << endl;  
1062 >
1063        uint currentDir;
1064        if (!GetPlotsAfterEachCut_) { currentDir =  currentChannel.cuts.size() - oneDHists_.at(currentChannelIndex).size(); } //if GetPlotsAfterEachCut_ is false, set currentDir point to the last cut.
1065        else{
# Line 1043 | Line 1074 | OSUAnalysis::produce (edm::Event &event,
1074  
1075            if (cumulativeFlags.count(currentHistogram.inputCollection) == 0) clog << "Error: no flags found for collection:  " << currentHistogram.inputCollection << ", will cause a seg fault" << endl;
1076  
1077 +          if (verbose_>1) clog << " Filling histogram " << currentHistogram.name << " for collection " << currentHistogram.inputCollection << endl;  
1078 +
1079            if(currentHistogram.inputVariables.size() == 1){
1080              TH1D* histo;
1081              histo = oneDHists_.at(currentChannelIndex).at(currentCut).at(currentHistogram.name);
1082 <            if     (currentHistogram.inputCollection == "jets")            fill1DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("jets").at(currentDir),scaleFactor);
1082 >            if     (currentHistogram.inputCollection == "jets")            fill1DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("jets").at(currentDir),scaleFactor);
1083              else if(currentHistogram.inputCollection == "secondary jets")  fill1DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("secondary jets").at(currentDir),scaleFactor);
1084              else if(currentHistogram.inputCollection == "secondary photons")  fill1DHistogram(histo,currentHistogram,photons.product(),cumulativeFlags.at("secondary photons").at(currentDir),scaleFactor);
1085              else if(currentHistogram.inputCollection == "muons")           fill1DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("muons").at(currentDir),scaleFactor);
1086              else if(currentHistogram.inputCollection == "secondary muons") fill1DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("secondary muons").at(currentDir),scaleFactor);
1087              else if(currentHistogram.inputCollection == "secondary electrons") fill1DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("secondary electrons").at(currentDir),scaleFactor);
1088 <            else if(currentHistogram.inputCollection == "muon-muon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
1056 <                                                                                           cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
1088 >            else if(currentHistogram.inputCollection == "muon-muon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),muons.product(),
1089                                                                                             cumulativeFlags.at("muon-muon pairs").at(currentDir),scaleFactor);
1090 <            else if(currentHistogram.inputCollection == "muon-secondary muon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
1059 <                                                                                                     cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary muons").at(currentDir), \
1090 >            else if(currentHistogram.inputCollection == "muon-secondary muon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),muons.product(),
1091                                                                                                       cumulativeFlags.at("muon-secondary muon pairs").at(currentDir),scaleFactor);
1092 <             else if(currentHistogram.inputCollection == "muon-secondary photon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),photons.product(), \
1062 <                                                                                                     cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary photons").at(currentDir), \
1092 >             else if(currentHistogram.inputCollection == "muon-secondary photon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),photons.product(),
1093                                                                                                       cumulativeFlags.at("muon-secondary photon pairs").at(currentDir),scaleFactor);
1094 <             else if(currentHistogram.inputCollection == "muon-secondary jet pairs") fill1DHistogram(histo,currentHistogram,muons.product(),jets.product(), \
1065 <                                                                                                     cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary jets").at(currentDir), \
1094 >             else if(currentHistogram.inputCollection == "muon-secondary jet pairs") fill1DHistogram(histo,currentHistogram,muons.product(),jets.product(),
1095                                                                                                       cumulativeFlags.at("muon-secondary jet pairs").at(currentDir),scaleFactor);
1096 <             else if(currentHistogram.inputCollection == "photon-secondary jet pairs") fill1DHistogram(histo,currentHistogram,photons.product(),jets.product(), \
1068 <                                                                                                     cumulativeFlags.at("photons").at(currentDir),cumulativeFlags.at("secondary jets").at(currentDir), \
1096 >             else if(currentHistogram.inputCollection == "photon-secondary jet pairs") fill1DHistogram(histo,currentHistogram,photons.product(),jets.product(),
1097                                                                                                       cumulativeFlags.at("photon-secondary jet pairs").at(currentDir),scaleFactor);
1098 <             else if(currentHistogram.inputCollection == "electron-secondary jet pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),jets.product(), \
1071 <                                                                                                     cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("secondary jets").at(currentDir), \
1098 >             else if(currentHistogram.inputCollection == "electron-secondary jet pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),jets.product(),
1099                                                                                                       cumulativeFlags.at("electron-secondary jet pairs").at(currentDir),scaleFactor);
1100  
1101              else if(currentHistogram.inputCollection == "electrons") fill1DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("electrons").at(currentDir),scaleFactor);
1102 <            else if(currentHistogram.inputCollection == "electron-electron pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),electrons.product(),\
1076 <                                                                                                   cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("electrons").at(currentDir),\
1102 >            else if(currentHistogram.inputCollection == "electron-electron pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),electrons.product(),
1103                                                                                                     cumulativeFlags.at("electron-electron pairs").at(currentDir),scaleFactor);
1104 <            else if(currentHistogram.inputCollection == "jet-jet pairs") fill1DHistogram(histo,currentHistogram,jets.product(),jets.product(),\
1079 <                                                                                         cumulativeFlags.at("jets").at(currentDir),cumulativeFlags.at("jets").at(currentDir),\
1104 >            else if(currentHistogram.inputCollection == "jet-jet pairs") fill1DHistogram(histo,currentHistogram,jets.product(),jets.product(),
1105                                                                                           cumulativeFlags.at("jet-jet pairs").at(currentDir),scaleFactor);
1106 <             else if(currentHistogram.inputCollection == "jet-secondary jet pairs") fill1DHistogram(histo,currentHistogram,jets.product(),jets.product(), \
1082 <                                                                                                     cumulativeFlags.at("jets").at(currentDir),cumulativeFlags.at("secondary jets").at(currentDir), \
1106 >             else if(currentHistogram.inputCollection == "jet-secondary jet pairs") fill1DHistogram(histo,currentHistogram,jets.product(),jets.product(),
1107                                                                                                       cumulativeFlags.at("jet-secondary jet pairs").at(currentDir),scaleFactor);
1108  
1109 <            else if(currentHistogram.inputCollection == "electron-secondary electron pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
1086 <                                                                                                             cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("secondary electrons").at(currentDir), \
1109 >            else if(currentHistogram.inputCollection == "electron-secondary electron pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),electrons.product(),
1110                                                                                                               cumulativeFlags.at("electron-secondary electron pairs").at(currentDir),scaleFactor);
1111 <            else if(currentHistogram.inputCollection == "electron-muon pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),muons.product(), \
1089 <                                                                                               cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("muons").at(currentDir),
1111 >            else if(currentHistogram.inputCollection == "electron-muon pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),muons.product(),
1112                                                                                                 cumulativeFlags.at("electron-muon pairs").at(currentDir),scaleFactor);
1113 <            else if(currentHistogram.inputCollection == "electron-jet pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),jets.product(), \
1092 <                                                                                              cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
1113 >            else if(currentHistogram.inputCollection == "electron-jet pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),jets.product(),
1114                                                                                                cumulativeFlags.at("electron-jet pairs").at(currentDir),scaleFactor);
1115 <            else if(currentHistogram.inputCollection == "photon-jet pairs") fill1DHistogram(histo,currentHistogram, photons.product(),jets.product(), \
1095 <                                                                                              cumulativeFlags.at("photons").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
1115 >            else if(currentHistogram.inputCollection == "photon-jet pairs") fill1DHistogram(histo,currentHistogram, photons.product(),jets.product(),
1116                                                                                                cumulativeFlags.at("photon-jet pairs").at(currentDir),scaleFactor);
1117 <            else if(currentHistogram.inputCollection == "muon-jet pairs") fill1DHistogram(histo,currentHistogram, muons.product(),jets.product(), \
1098 <                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
1117 >            else if(currentHistogram.inputCollection == "muon-jet pairs") fill1DHistogram(histo,currentHistogram, muons.product(),jets.product(),
1118                                                                                            cumulativeFlags.at("muon-jet pairs").at(currentDir),scaleFactor);
1119 <            else if(currentHistogram.inputCollection == "muon-event pairs") fill1DHistogram(histo,currentHistogram, muons.product(),events.product(), \
1101 <                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("events").at(currentDir),
1119 >            else if(currentHistogram.inputCollection == "muon-event pairs") fill1DHistogram(histo,currentHistogram, muons.product(),events.product(),
1120                                                                                            cumulativeFlags.at("muon-event pairs").at(currentDir),scaleFactor);
1121 <            else if(currentHistogram.inputCollection == "met-jet pairs")  fill1DHistogram(histo,currentHistogram, mets.product(),jets.product(), \
1104 <                                                                                          cumulativeFlags.at("mets").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
1121 >            else if(currentHistogram.inputCollection == "met-jet pairs")  fill1DHistogram(histo,currentHistogram, mets.product(),jets.product(),
1122                                                                                            cumulativeFlags.at("met-jet pairs").at(currentDir),scaleFactor);
1123 <            else if(currentHistogram.inputCollection == "track-jet pairs")  fill1DHistogram(histo,currentHistogram,tracks.product(),jets.product(), \
1107 <                                                                                          cumulativeFlags.at("tracks").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
1123 >            else if(currentHistogram.inputCollection == "track-jet pairs")  fill1DHistogram(histo,currentHistogram,tracks.product(),jets.product(),
1124                                                                                            cumulativeFlags.at("track-jet pairs").at(currentDir),scaleFactor);
1125 <            else if(currentHistogram.inputCollection == "muon-photon pairs") fill1DHistogram(histo,currentHistogram, muons.product(),photons.product(), \
1110 <                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("photons").at(currentDir),
1125 >            else if(currentHistogram.inputCollection == "muon-photon pairs") fill1DHistogram(histo,currentHistogram, muons.product(),photons.product(),
1126                                                                                            cumulativeFlags.at("muon-photon pairs").at(currentDir),scaleFactor);
1127 <            else if(currentHistogram.inputCollection == "electron-photon pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),photons.product(), \
1113 <                                                                                          cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("photons").at(currentDir),
1127 >            else if(currentHistogram.inputCollection == "electron-photon pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),photons.product(),
1128                                                                                            cumulativeFlags.at("electron-photon pairs").at(currentDir),scaleFactor);
1129              else if(currentHistogram.inputCollection == "electron-track pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),tracks.product(),
1116                                                                                                cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1130                                                                                                  cumulativeFlags.at("electron-track pairs").at(currentDir),scaleFactor);
1131              else if(currentHistogram.inputCollection == "muon-track pairs") fill1DHistogram(histo,currentHistogram, muons.product(),tracks.product(),
1119                                                                                            cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1132                                                                                              cumulativeFlags.at("muon-track pairs").at(currentDir),scaleFactor);
1133              else if(currentHistogram.inputCollection == "muon-tau pairs") fill1DHistogram(histo,currentHistogram, muons.product(),taus.product(),
1122                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
1134                                                                                            cumulativeFlags.at("muon-tau pairs").at(currentDir),scaleFactor);
1135              else if(currentHistogram.inputCollection == "tau-tau pairs") fill1DHistogram(histo,currentHistogram, taus.product(),taus.product(),
1125                                                                                         cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
1136                                                                                           cumulativeFlags.at("tau-tau pairs").at(currentDir),scaleFactor);
1137              else if(currentHistogram.inputCollection == "tau-track pairs") fill1DHistogram(histo,currentHistogram, taus.product(),tracks.product(),
1128                                                                                           cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1138                                                                                             cumulativeFlags.at("tau-track pairs").at(currentDir),scaleFactor);
1139              else if(currentHistogram.inputCollection == "electron-trigobj pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),trigobjs.product(),
1131                                                                                                  cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
1140                                                                                                    cumulativeFlags.at("electron-trigobj pairs").at(currentDir),scaleFactor);
1141              else if(currentHistogram.inputCollection == "muon-trigobj pairs") fill1DHistogram(histo,currentHistogram, muons.product(),trigobjs.product(),
1134                                                                                              cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
1142                                                                                                cumulativeFlags.at("muon-trigobj pairs").at(currentDir),scaleFactor);
1143  
1144              else if(currentHistogram.inputCollection == "events") fill1DHistogram(histo,currentHistogram,events.product(),cumulativeFlags.at("events").at(currentDir),scaleFactor);
# Line 1155 | Line 1162 | OSUAnalysis::produce (edm::Event &event,
1162              else if(currentHistogram.inputCollection == "secondary photons")  fill2DHistogram(histo,currentHistogram,photons.product(),cumulativeFlags.at("secondary photons").at(currentDir),scaleFactor);
1163              else if(currentHistogram.inputCollection == "muons")           fill2DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("muons").at(currentDir),scaleFactor);
1164              else if(currentHistogram.inputCollection == "secondary muons") fill2DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("secondary muons").at(currentDir),scaleFactor);
1165 <            else if(currentHistogram.inputCollection == "muon-muon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
1159 <                                                                                           cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
1165 >            else if(currentHistogram.inputCollection == "muon-muon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),muons.product(),
1166                                                                                             cumulativeFlags.at("muon-muon pairs").at(currentDir),scaleFactor);
1167 <            else if(currentHistogram.inputCollection == "muon-secondary muon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
1162 <                                                                                                     cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary muons").at(currentDir), \
1167 >            else if(currentHistogram.inputCollection == "muon-secondary muon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),muons.product(),
1168                                                                                                       cumulativeFlags.at("muon-secondary muon pairs").at(currentDir),scaleFactor);
1169 <            else if(currentHistogram.inputCollection == "muon-secondary photon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),photons.product(), \
1165 <                                                                                                     cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary photons").at(currentDir), \
1169 >            else if(currentHistogram.inputCollection == "muon-secondary photon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),photons.product(),
1170                                                                                                       cumulativeFlags.at("muon-secondary photon pairs").at(currentDir),scaleFactor);
1171 <            else if(currentHistogram.inputCollection == "muon-secondary jet pairs") fill2DHistogram(histo,currentHistogram,muons.product(),jets.product(), \
1168 <                                                                                                     cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary jets").at(currentDir), \
1171 >            else if(currentHistogram.inputCollection == "muon-secondary jet pairs") fill2DHistogram(histo,currentHistogram,muons.product(),jets.product(),
1172                                                                                                       cumulativeFlags.at("muon-secondary jet pairs").at(currentDir),scaleFactor);
1173 <            else if(currentHistogram.inputCollection == "electron-secondary jet pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),jets.product(), \
1171 <                                                                                                     cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("secondary jets").at(currentDir), \
1173 >            else if(currentHistogram.inputCollection == "electron-secondary jet pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),jets.product(),
1174                                                                                                       cumulativeFlags.at("electron-secondary jet pairs").at(currentDir),scaleFactor);
1175 <            else if(currentHistogram.inputCollection == "photon-secondary jet pairs") fill2DHistogram(histo,currentHistogram,photons.product(),jets.product(), \
1174 <                                                                                                     cumulativeFlags.at("photons").at(currentDir),cumulativeFlags.at("secondary jets").at(currentDir), \
1175 >            else if(currentHistogram.inputCollection == "photon-secondary jet pairs") fill2DHistogram(histo,currentHistogram,photons.product(),jets.product(),
1176                                                                                                       cumulativeFlags.at("photon-secondary jet pairs").at(currentDir),scaleFactor);
1177              else if(currentHistogram.inputCollection == "electrons") fill2DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("electrons").at(currentDir),scaleFactor);
1178              else if(currentHistogram.inputCollection == "secondary electrons") fill2DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("secondary electrons").at(currentDir),scaleFactor);
1179 <            else if(currentHistogram.inputCollection == "electron-electron pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
1179 <                                                                                                   cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("electrons").at(currentDir), \
1179 >            else if(currentHistogram.inputCollection == "electron-electron pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),electrons.product(),
1180                                                                                                     cumulativeFlags.at("electron-electron pairs").at(currentDir),scaleFactor);
1181 <            else if(currentHistogram.inputCollection == "jet-jet pairs") fill2DHistogram(histo,currentHistogram,jets.product(),jets.product(), \
1182 <                                                                                         cumulativeFlags.at("jets").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
1181 >            else if(currentHistogram.inputCollection == "jet-jet pairs") fill2DHistogram(histo,currentHistogram,jets.product(),jets.product(),
1182                                                                                           cumulativeFlags.at("jet-jet pairs").at(currentDir),scaleFactor);
1183 <            else if(currentHistogram.inputCollection == "electron-secondary electron pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
1185 <                                                                                                             cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("secondary electrons").at(currentDir), \
1183 >            else if(currentHistogram.inputCollection == "electron-secondary electron pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),electrons.product(),
1184                                                                                                               cumulativeFlags.at("electron-secondary electron pairs").at(currentDir),scaleFactor);
1185 <            else if(currentHistogram.inputCollection == "electron-muon pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),muons.product(), \
1188 <                                                                                               cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
1185 >            else if(currentHistogram.inputCollection == "electron-muon pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),muons.product(),
1186                                                                                                 cumulativeFlags.at("electron-muon pairs").at(currentDir),scaleFactor);
1187 <            else if(currentHistogram.inputCollection == "electron-jet pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),jets.product(), \
1191 <                                                                                              cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
1187 >            else if(currentHistogram.inputCollection == "electron-jet pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),jets.product(),
1188                                                                                                cumulativeFlags.at("electron-jet pairs").at(currentDir),scaleFactor);
1189 <            else if(currentHistogram.inputCollection == "electron-photon pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),photons.product(), \
1194 <                                                                                              cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("photons").at(currentDir), \
1189 >            else if(currentHistogram.inputCollection == "electron-photon pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),photons.product(),
1190                                                                                                cumulativeFlags.at("electron-photon pairs").at(currentDir),scaleFactor);
1191 <            else if(currentHistogram.inputCollection == "muon-jet pairs") fill2DHistogram(histo,currentHistogram,muons.product(),jets.product(), \
1197 <                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
1191 >            else if(currentHistogram.inputCollection == "muon-jet pairs") fill2DHistogram(histo,currentHistogram,muons.product(),jets.product(),
1192                                                                                            cumulativeFlags.at("muon-jet pairs").at(currentDir),scaleFactor);
1193 <            else if(currentHistogram.inputCollection == "muon-event pairs") fill2DHistogram(histo,currentHistogram,muons.product(),events.product(), \
1200 <                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("events").at(currentDir), \
1193 >            else if(currentHistogram.inputCollection == "muon-event pairs") fill2DHistogram(histo,currentHistogram,muons.product(),events.product(),
1194                                                                                            cumulativeFlags.at("muon-event pairs").at(currentDir),scaleFactor);
1195 <            else if(currentHistogram.inputCollection == "met-jet pairs") fill2DHistogram(histo,currentHistogram,mets.product(),jets.product(), \
1203 <                                                                                         cumulativeFlags.at("mets").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
1195 >            else if(currentHistogram.inputCollection == "met-jet pairs") fill2DHistogram(histo,currentHistogram,mets.product(),jets.product(),
1196                                                                                           cumulativeFlags.at("met-jet pairs").at(currentDir),scaleFactor);
1197              else if(currentHistogram.inputCollection == "track-jet pairs") fill2DHistogram(histo,currentHistogram,tracks.product(),jets.product(),
1206                                                                                         cumulativeFlags.at("tracks").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
1198                                                                                           cumulativeFlags.at("track-jet pairs").at(currentDir),scaleFactor);
1199 <            else if(currentHistogram.inputCollection == "photon-jet pairs") fill2DHistogram(histo,currentHistogram,photons.product(),jets.product(), \
1209 <                                                                                          cumulativeFlags.at("photons").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
1199 >            else if(currentHistogram.inputCollection == "photon-jet pairs") fill2DHistogram(histo,currentHistogram,photons.product(),jets.product(),
1200                                                                                            cumulativeFlags.at("photon-jet pairs").at(currentDir),scaleFactor);
1201 <            else if(currentHistogram.inputCollection == "muon-photon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),photons.product(), \
1212 <                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("photons").at(currentDir), \
1201 >            else if(currentHistogram.inputCollection == "muon-photon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),photons.product(),
1202                                                                                            cumulativeFlags.at("muon-photon pairs").at(currentDir),scaleFactor);
1203              else if(currentHistogram.inputCollection == "electron-track pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),tracks.product(),
1215                                                                                                cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1204                                                                                                  cumulativeFlags.at("electron-track pairs").at(currentDir),scaleFactor);
1205              else if(currentHistogram.inputCollection == "muon-track pairs") fill2DHistogram(histo,currentHistogram,muons.product(),tracks.product(),
1218                                                                                            cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1206                                                                                              cumulativeFlags.at("muon-track pairs").at(currentDir),scaleFactor);
1207              else if(currentHistogram.inputCollection == "muon-tau pairs") fill2DHistogram(histo,currentHistogram,muons.product(),taus.product(),
1221                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
1208                                                                                            cumulativeFlags.at("muon-tau pairs").at(currentDir),scaleFactor);
1209              else if(currentHistogram.inputCollection == "tau-tau pairs") fill2DHistogram(histo,currentHistogram,taus.product(),taus.product(),
1224                                                                                         cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
1210                                                                                           cumulativeFlags.at("tau-tau pairs").at(currentDir),scaleFactor);
1211              else if(currentHistogram.inputCollection == "tau-track pairs") fill2DHistogram(histo,currentHistogram,taus.product(),tracks.product(),
1227                                                                                           cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1212                                                                                             cumulativeFlags.at("tau-track pairs").at(currentDir),scaleFactor);
1213              else if(currentHistogram.inputCollection == "electron-trigobj pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),trigobjs.product(),
1230                                                                                                  cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
1214                                                                                                    cumulativeFlags.at("electron-trigobj pairs").at(currentDir),scaleFactor);
1215              else if(currentHistogram.inputCollection == "muon-trigobj pairs") fill2DHistogram(histo,currentHistogram,muons.product(),trigobjs.product(),
1233                                                                                              cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
1216                                                                                                cumulativeFlags.at("muon-trigobj pairs").at(currentDir),scaleFactor);
1217              else if(currentHistogram.inputCollection == "events") fill2DHistogram(histo,currentHistogram,events.product(),cumulativeFlags.at("events").at(currentDir),scaleFactor);
1218              else if(currentHistogram.inputCollection == "taus") fill2DHistogram(histo,currentHistogram,taus.product(),cumulativeFlags.at("taus").at(currentDir),scaleFactor);
1219              else if(currentHistogram.inputCollection == "mets") fill2DHistogram(histo,currentHistogram,mets.product(),cumulativeFlags.at("mets").at(currentDir),scaleFactor);
1220              else if(currentHistogram.inputCollection == "tracks") fill2DHistogram(histo,currentHistogram,tracks.product(),cumulativeFlags.at("tracks").at(currentDir),scaleFactor);
1221              else if(currentHistogram.inputCollection == "track-event pairs") fill2DHistogram(histo,currentHistogram,tracks.product(),events.product(),
1240                                                                                             cumulativeFlags.at("tracks").at(currentDir),cumulativeFlags.at("events").at(currentDir),
1222                                                                                               cumulativeFlags.at("track-event pairs").at(currentDir),scaleFactor);
1223              else if(currentHistogram.inputCollection == "genjets") fill2DHistogram(histo,currentHistogram,genjets.product(),cumulativeFlags.at("genjets").at(currentDir),scaleFactor);
1224              else if(currentHistogram.inputCollection == "mcparticles") fill2DHistogram(histo,currentHistogram,mcparticles.product(),cumulativeFlags.at("mcparticles").at(currentDir),scaleFactor);
# Line 1258 | Line 1239 | OSUAnalysis::produce (edm::Event &event,
1239            string currentObject = objectsToPlot.at(currentObjectIndex);
1240            string objectToPlot = "";
1241  
1242 +          if (verbose_) clog << "Filling histogram of number of selected objects in collection: " << currentObject << endl;  
1243 +
1244            // Name of objectToPlot here must match the name specified in OSUAnalysis::OSUAnalysis().
1245            if(currentObject == "muon-muon pairs")                         objectToPlot = "dimuonPairs";
1246            else if(currentObject == "electron-electron pairs")            objectToPlot = "dielectronPairs";
# Line 1265 | Line 1248 | OSUAnalysis::produce (edm::Event &event,
1248            else if(currentObject == "electron-photon pairs")              objectToPlot = "electronPhotonPairs";
1249            else if(currentObject == "electron-jet pairs")                 objectToPlot = "electronJetPairs";
1250            else if(currentObject == "muon-jet pairs")                     objectToPlot = "muonJetPairs";
1251 <          else if(currentObject == "muon-event pairs")                     objectToPlot = "muonEventPairs";
1252 <          else if(currentObject == "muon-photon pairs")                     objectToPlot = "muonPhotonPairs";
1253 <          else if(currentObject == "photon-jet pairs")                     objectToPlot = "photonJetPairs";
1251 >          else if(currentObject == "muon-event pairs")                   objectToPlot = "muonEventPairs";
1252 >          else if(currentObject == "muon-photon pairs")                  objectToPlot = "muonPhotonPairs";
1253 >          else if(currentObject == "photon-jet pairs")                   objectToPlot = "photonJetPairs";
1254            else if(currentObject == "met-jet pairs")                      objectToPlot = "metJetPairs";
1255            else if(currentObject == "track-jet pairs")                    objectToPlot = "trackJetPairs";
1256            else if(currentObject == "jet-jet pairs")                      objectToPlot = "dijetPairs";
1257            else if(currentObject == "jet-secondary jet pairs")            objectToPlot = "jetSecondaryJetPairs";
1258            else if(currentObject == "secondary jets")                     objectToPlot = "secondaryJets";
1259 <          else if(currentObject == "secondary photons")                     objectToPlot = "secondaryPhotons";
1259 >          else if(currentObject == "secondary photons")                  objectToPlot = "secondaryPhotons";
1260            else if(currentObject == "electron-track pairs")               objectToPlot = "electronTrackPairs";
1261            else if(currentObject == "muon-track pairs")                   objectToPlot = "muonTrackPairs";
1262            else if(currentObject == "muon-tau pairs")                     objectToPlot = "muonTauPairs";
# Line 1283 | Line 1266 | OSUAnalysis::produce (edm::Event &event,
1266            else if(currentObject == "muon-secondary muon pairs")          objectToPlot = "muonSecondaryMuonPairs";
1267            else if(currentObject == "secondary muons")                    objectToPlot = "secondaryMuons";
1268            else if(currentObject == "muon-secondary jet pairs")           objectToPlot = "muonSecondaryJetPairs";
1269 <          else if(currentObject == "muon-secondary photon pairs")           objectToPlot = "muonSecondaryJetPairs";
1269 >          else if(currentObject == "muon-secondary photon pairs")        objectToPlot = "muonSecondaryJetPairs";
1270            else if(currentObject == "electron-secondary jet pairs")       objectToPlot = "electronSecondaryJetPairs";
1271            else if(currentObject == "photon-secondary jet pairs")         objectToPlot = "photonSecondaryJetPairs";
1272            else if(currentObject == "electron-secondary electron pairs")  objectToPlot = "electronSecondaryElectronPairs";
# Line 1297 | Line 1280 | OSUAnalysis::produce (edm::Event &event,
1280            string histoName = "num" + tempCurrentObject;
1281  
1282  
1283 <          if(find(objectsToCut.begin(), objectsToCut.end(), currentObject) != objectsToCut.end()) {
1283 >          if(find(objectsToPlot.begin(), objectsToPlot.end(), currentObject) != objectsToPlot.end()) {
1284              flagPair lastCutFlags = cumulativeFlags.at(currentObject).at(currentDir);
1285              int numToPlot = 0;
1286 <            for (uint currentFlag = 0; currentFlag != lastCutFlags.size(); currentFlag++){
1287 <              if(lastCutFlags.at(currentFlag).second) numToPlot++;
1286 >            for (uint iObj = 0; iObj != lastCutFlags.size(); iObj++){  // loop over all the objects  
1287 >              if(lastCutFlags.at(iObj).second) {
1288 >                numToPlot++;  
1289 >                if (verbose_>3) clog << "   Found object " << iObj << " in collection " << currentObject << " to plot." << endl;
1290 >              }
1291              }
1292  
1293              if(objectToPlot == "primaryvertexs"){
# Line 1309 | Line 1295 | OSUAnalysis::produce (edm::Event &event,
1295                oneDHists_.at(currentChannelIndex).at(currentCut).at(histoName+"AfterPileupCorrection")->Fill(primaryvertexs->size(),scaleFactor);
1296              }
1297              else {
1298 +              if (printEventInfo_) clog << "Number of selected " << objectToPlot << " to plot:  " << numToPlot << endl;  
1299                oneDHists_.at(currentChannelIndex).at(currentCut).at(histoName)->Fill(numToPlot,scaleFactor);
1300              }
1301            }
1302 +
1303          } // end for (uint currentObjectIndex = 0; currentObjectIndex != objectsToPlot.size(); currentObjectIndex++)
1304  
1305  
# Line 1361 | Line 1349 | OSUAnalysis::produce (edm::Event &event,
1349  
1350    isFirstEvent_ = false;  
1351  
1352 +  if (verbose_) clog << "Finished OSUAnalysis::produce." << endl;  
1353 +
1354   } // end void OSUAnalysis::produce (const edm::Event &event, const edm::EventSetup &setup)
1355  
1356  
# Line 1389 | Line 1379 | OSUAnalysis::evaluateComparison (string
1379    else if(comparison == "<")  return testValue <  cutValue;
1380    else if(comparison == "<=") return testValue <= cutValue;
1381    else if(comparison == "==") return testValue == cutValue;
1382 <  else if(comparison == "=") return testValue == cutValue;
1382 >  else if(comparison == "=")  return testValue == cutValue;
1383    else if(comparison == "!=") return testValue != cutValue;
1384    else {clog << "WARNING: invalid comparison operator '" << comparison << "'\n"; return false;}
1385  
# Line 2795 | Line 2785 | OSUAnalysis::valueLookup (const BNtrack*
2785    else if(variable == "dZwrtBS") value = object->dZ - events->at(0).BSz;
2786    else if(variable == "depTrkRp5MinusPt"){
2787      if ( (object->depTrkRp5 - object->pt) < 0 ) {
2788 < //       cout << "Warning:  found track with depTrkRp5 < pt:  depTrkRp5=" << object->depTrkRp5
2788 > //       clog << "Warning:  found track with depTrkRp5 < pt:  depTrkRp5=" << object->depTrkRp5
2789   //         << "; pt=" << object->pt
2790   //         << "; object->depTrkRp5 - object->pt = " << object->depTrkRp5 - object->pt
2791   //         << endl;  
# Line 2907 | Line 2897 | OSUAnalysis::valueLookup (const BNtrack*
2897  
2898  
2899  
2900 <  else{clog << "WARNING: invalid variable '" << variable << "'\n"; value = -999;}
2900 >  else{clog << "WARNING: invalid variable '" << variable << "' for BNtrack collection.\n"; value = -999;}
2901  
2902    value = applyFunction(function, value);
2903  
# Line 4180 | Line 4170 | OSUAnalysis::getTrkDepTrkRp5RhoCorr(cons
4170    // Return the pile-up (rho) corrected isolation energy, i.e., the total calorimeter energy around the candidate track.              
4171    if (!useTrackCaloRhoCorr_) return -99;
4172    // if (!rhokt6CaloJetsHandle_) {                                                                                                    
4173 <  //   cout << "ERROR [getTrkCaloTotRhoCorr]:  The collection rhokt6CaloJetsHandle is not available!" << endl;                        
4173 >  //   clog << "ERROR [getTrkCaloTotRhoCorr]:  The collection rhokt6CaloJetsHandle is not available!" << endl;                        
4174    //   return -99;                                                                                                                    
4175    // }                                                                                                                                
4176    double radDeltaRCone = 0.5;
# Line 4196 | Line 4186 | OSUAnalysis::getTrkDepTrkRp3RhoCorr(cons
4186    // Return the pile-up (rho) corrected isolation energy, i.e., the total calorimeter energy around the candidate track.                                                
4187    if (!useTrackCaloRhoCorr_) return -99;
4188    // if (!rhokt6CaloJetsHandle_) {                                                                                                                                      
4189 <  //   cout << "ERROR [getTrkCaloTotRhoCorr]:  The collection rhokt6CaloJetsHandle is not available!" << endl;                                                          
4189 >  //   clog << "ERROR [getTrkCaloTotRhoCorr]:  The collection rhokt6CaloJetsHandle is not available!" << endl;                                                          
4190    //   return -99;                                                                                                                                                      
4191    // }                                                                                                                                                                  
4192    double radDeltaRCone = 0.3;
# Line 4284 | Line 4274 | OSUAnalysis::applyFunction(string functi
4274   template <class InputCollection>
4275   void OSUAnalysis::setObjectFlags(cut &currentCut, uint currentCutIndex, flagMap &individualFlags, flagMap &cumulativeFlags, InputCollection inputCollection, string inputType){
4276  
4277 +  if (verbose_>2) clog << "  Beginning setObjectFlags for cut " << currentCutIndex << ": " << currentCut.name
4278 +                       << ", inputType=" << inputType
4279 +                       << endl;  
4280    if (currentCut.inputCollection.find("pair")!=string::npos)  {
4281      string obj1, obj2;
4282      getTwoObjs(currentCut.inputCollection, obj1, obj2);
# Line 4324 | Line 4317 | void OSUAnalysis::setObjectFlags(cut &cu
4317          }
4318          cutDecision = tempDecision;
4319        }
4320 <      //invert the cut for plotting if this cut is a veto
4321 <      if(currentCut.isVeto) plotDecision = !cutDecision;
4322 <      else plotDecision = cutDecision;
4320 >      //invert the cut if this cut is a veto
4321 >      if(currentCut.isVeto) cutDecision = !cutDecision;
4322 >      plotDecision = cutDecision;
4323      }
4324  
4325      individualFlags.at(inputType).at(currentCutIndex).push_back(make_pair(cutDecision,plotDecision));
# Line 4349 | Line 4342 | void OSUAnalysis::setObjectFlags(cut &cu
4342  
4343    }
4344  
4345 < }
4345 > } // end void OSUAnalysis::setObjectFlags
4346  
4347  
4348   template <class InputCollection1, class InputCollection2>
4349 < void OSUAnalysis::setObjectFlags(cut &currentCut, uint currentCutIndex, flagMap &individualFlags, flagMap &cumulativeFlags, \
4350 <                                 InputCollection1 inputCollection1, InputCollection2 inputCollection2, flagPair flags1, flagPair flags2, string inputType){
4351 <
4349 > void OSUAnalysis::setObjectFlags(cut &currentCut, uint currentCutIndex, flagMap &individualFlags, flagMap &cumulativeFlags,
4350 >                                 InputCollection1 inputCollection1, InputCollection2 inputCollection2, string inputType){
4351 >  // This function sets the flags for the paired object collection.  
4352 >  // If the cut is applying on the given paired object collection, then the flags for the single object collections are also set.
4353 >  // If not, then the flags for the paired object collection are taken as the AND of the flags for each single object collection.  
4354 >
4355 >  if (verbose_>2) clog << "  Beginning setObjectFlags for cut=" << currentCut.name
4356 >                       << ", inputType=" << inputType
4357 >                       << endl;  
4358  
4359    bool sameObjects = false;
4360 <  if(typeid(InputCollection1).name() == typeid(InputCollection2).name()) sameObjects = true;
4360 >  if(typeid(InputCollection1).name() == typeid(InputCollection2).name()) sameObjects = true;  // FIXME:  is sameObjects just the not of isTwoTypesOfObject?  If so, it's redundant.  
4361  
4362    // Get the strings for the two objects that make up the pair.
4363    string obj1Type, obj2Type;
# Line 4389 | Line 4388 | void OSUAnalysis::setObjectFlags(cut &cu
4388        if(sameObjects && object1 >= object2) continue;//account for duplicate pairs if both collections are the same
4389  
4390  
4391 <      bool cutDecision = true;//object passes if this cut doesn't cut on that type of object
4391 >      bool cutDecision  = true;//object passes if this cut doesn't cut on that type of object
4392        bool plotDecision = true;
4393  
4394 +      // Determine whether each pair passes the cut, only if inputCollection is the same as the inputType.  
4395        if(currentCut.inputCollection == inputType){
4396  
4397          vector<bool> subcutDecisions;
4398          for( int subcutIndex = 0; subcutIndex != currentCut.numSubcuts; subcutIndex++){
4399            string stringValue = "";
4400            double value = valueLookup(&inputCollection1->at(object1), &inputCollection2->at(object2), currentCut.variables.at(subcutIndex), currentCut.functions.at(subcutIndex), stringValue);
4401 +          if (verbose_>1) clog << currentCut.variables.at(subcutIndex) << " = " << value
4402 +                               << endl;  
4403            if (stringValue == "") subcutDecisions.push_back(evaluateComparison(value,currentCut.comparativeOperators.at(subcutIndex),currentCut.cutValues.at(subcutIndex)));
4404            else subcutDecisions.push_back(evaluateComparison(stringValue,currentCut.comparativeOperators.at(subcutIndex),currentCut.cutStringValues.at(subcutIndex)));
4405          }
# Line 4413 | Line 4415 | void OSUAnalysis::setObjectFlags(cut &cu
4415            }
4416            cutDecision = tempDecision;
4417          }
4418 <        //invert the cut for plotting if this cut is a veto
4419 <        if(currentCut.isVeto) plotDecision = !cutDecision;
4420 <        else plotDecision = cutDecision;
4421 <      }
4422 <      individualFlags.at(inputType).at(currentCutIndex).push_back(make_pair(cutDecision,plotDecision));
4423 <      if (cutDecision && currentCut.inputCollection == inputType) {  // only set the flags for the individual objects if the pair object is being cut on
4424 <        individualFlags.at(obj1Type).at(currentCutIndex).at(object1).first = true;
4425 <        individualFlags.at(obj2Type).at(currentCutIndex).at(object2).first = true;
4426 <      }
4427 <      if (plotDecision && currentCut.inputCollection == inputType) {  // only set the flags for the individual objects if the pair object is being cut on
4428 <        individualFlags.at(obj1Type).at(currentCutIndex).at(object1).second = true;
4429 <        individualFlags.at(obj2Type).at(currentCutIndex).at(object2).second = true;
4430 <      }
4418 >        //invert the cut if this cut is a veto
4419 >        if (currentCut.isVeto) cutDecision = !cutDecision;
4420 >        plotDecision = cutDecision;
4421 >
4422 >        if (verbose_>1) clog << " cutDecision = " << cutDecision
4423 >                             << "; for currentCut.inputCollection = " << currentCut.inputCollection
4424 >                             << "; object1 (" << obj1Type << ") = " << object1
4425 >                             << "; object2 (" << obj2Type << ") = " << object2
4426 >                             << endl;  
4427 >        
4428 >        if (cutDecision) {  // only set the flags for the individual objects if the pair object is being cut on
4429 >          individualFlags.at(obj1Type).at(currentCutIndex).at(object1).first = true;
4430 >          individualFlags.at(obj2Type).at(currentCutIndex).at(object2).first = true;
4431 >        }
4432 >        if (plotDecision) {  // only set the flags for the individual objects if the pair object is being cut on
4433 >          individualFlags.at(obj1Type).at(currentCutIndex).at(object1).second = true;
4434 >          individualFlags.at(obj2Type).at(currentCutIndex).at(object2).second = true;
4435 >        }
4436 >        
4437 >
4438 >      } // if(currentCut.inputCollection == inputType){
4439 >
4440 >      // The individualFlags will be true if the inputCollection is not the same as the inputType.
4441 >      // They are also independent of the previous flags on the single objects.  
4442 >      individualFlags.at(inputType).at(currentCutIndex).push_back(make_pair(cutDecision,plotDecision));  
4443 >
4444  
4445 <      //set flags for objects that pass this cut AND all the previous cuts
4445 >
4446 >      // ************************************
4447 >      // Determine cumulative flags
4448 >      // ************************************
4449 >      // determine whether this paired object passes this cut AND all previous cuts
4450        bool previousCumulativeCutFlag = true;
4451        for(uint previousCutIndex = 0; previousCutIndex != currentCutIndex; previousCutIndex++){
4452 <        if(previousCumulativeCutFlag && individualFlags.at(inputType).at(previousCutIndex).at(counter).first) previousCumulativeCutFlag = true;
4453 <        else{ previousCumulativeCutFlag = false; break;}
4452 >        if(previousCumulativeCutFlag && individualFlags.at(inputType).at(previousCutIndex).at(counter).first) previousCumulativeCutFlag = true;
4453 >        else{ previousCumulativeCutFlag = false; break;}
4454        }
4455        previousCumulativeCutFlag = previousCumulativeCutFlag && cutDecision;
4456  
# Line 4442 | Line 4461 | void OSUAnalysis::setObjectFlags(cut &cu
4461        }
4462        previousCumulativePlotFlag = previousCumulativePlotFlag && plotDecision;
4463        
4464 <      //apply flags for the components of the composite object as well
4464 >      // Get the index for the flags of each of the single objects in the pair.  Usually this is the index of the previous cut, i.e., currentCutIndex-1.    
4465 >      int cutIdxFlagsObj1 = max(int(currentCutIndex-1),0);
4466 >      int cutIdxFlagsObj2 = max(int(currentCutIndex-1),0);
4467 >      // If the inputCollection of the cut is not equal to the inputType but the inputCollection includes objects that are contained in inputType, then use the currentCutIndex for those collections.
4468 >      // For example, if the inputType is jet-jet pairs, and the inputCollection is track-jet pairs, then use currentCutIndex for cutIdxFlagsObj{1,2}, i.e., for both jets.  
4469 >      // For example, if the inputType is jets, and the inputCollection is track-jet pairs, then use currentCutIndex for cutIdxFlagsObj2 (jets) and currentCutIndex-1 for cutIdxFlagsObj1 (tracks).  
4470 >      if (currentCut.inputCollection != inputType) {  
4471 >        if (currentCut.inputCollection.find(obj1Type)!=string::npos) cutIdxFlagsObj1 = currentCutIndex;
4472 >        if (currentCut.inputCollection.find(obj2Type)!=string::npos) cutIdxFlagsObj2 = currentCutIndex;
4473 >      }  
4474 >      flagPair flags1 = cumulativeFlags.at(obj1Type).at(cutIdxFlagsObj1);  // flag for input collection 1
4475 >      flagPair flags2 = cumulativeFlags.at(obj2Type).at(cutIdxFlagsObj2);  // flag for input collection 2
4476 >      
4477 >      // The cumulative flag is only true if the paired object cumulative flag is true, and if the single object cumulative flags are true.  
4478        bool currentCumulativeCutFlag = true;
4479        bool currentCumulativePlotFlag = true;
4448
4480        if(flags1.size() == 0 && flags2.size() == 0) currentCumulativeCutFlag = previousCumulativeCutFlag;
4481        else if(flags1.size() == 0) currentCumulativeCutFlag = previousCumulativeCutFlag && flags2.at(object2).first;
4482        else if(flags2.size() == 0) currentCumulativeCutFlag = previousCumulativeCutFlag && flags1.at(object1).first;
# Line 4456 | Line 4487 | void OSUAnalysis::setObjectFlags(cut &cu
4487        else if(flags2.size() == 0) currentCumulativePlotFlag = previousCumulativePlotFlag && flags1.at(object1).second;
4488        else currentCumulativePlotFlag = previousCumulativePlotFlag && flags1.at(object1).first && flags2.at(object2).second;
4489  
4490 <      cumulativeFlags.at(inputType).at(currentCutIndex).push_back(make_pair(currentCumulativeCutFlag,currentCumulativePlotFlag));
4490 >      cumulativeFlags.at(inputType).at(currentCutIndex).push_back(make_pair(currentCumulativeCutFlag,currentCumulativePlotFlag));  // Set the flag for the paired object
4491  
4461      if (currentCumulativeCutFlag && currentCut.inputCollection == inputType) {  // only set the flags for the individual objects if the pair object is being cut on
4462        cumulativeFlags.at(obj1Type).at(currentCutIndex).at(object1).first = true && getPreviousCumulativeFlags(currentCutIndex, individualFlags, obj1Type, object1, "cut");
4463        cumulativeFlags.at(obj2Type).at(currentCutIndex).at(object2).first = true && getPreviousCumulativeFlags(currentCutIndex, individualFlags, obj2Type, object2, "cut");
4464      }
4492  
4493 <      if (currentCumulativePlotFlag && currentCut.inputCollection == inputType) {  // only set the flags for the individual objects if the pair object is being cut on
4493 >      if (currentCumulativeCutFlag && currentCut.inputCollection == inputType) {  // Set the flags for the individual objects if the paired object is being cut on.  
4494 >        cumulativeFlags.at(obj1Type).at(currentCutIndex).at(object1).first  = true && getPreviousCumulativeFlags(currentCutIndex, individualFlags, obj1Type, object1, "cut");
4495 >        cumulativeFlags.at(obj2Type).at(currentCutIndex).at(object2).first  = true && getPreviousCumulativeFlags(currentCutIndex, individualFlags, obj2Type, object2, "cut");
4496          cumulativeFlags.at(obj1Type).at(currentCutIndex).at(object1).second = true && getPreviousCumulativeFlags(currentCutIndex, individualFlags, obj1Type, object1, "plot");
4497          cumulativeFlags.at(obj2Type).at(currentCutIndex).at(object2).second = true && getPreviousCumulativeFlags(currentCutIndex, individualFlags, obj2Type, object2, "plot");
4498 +
4499 +        if (verbose_>1) clog << " previousCumulativeCutFlag for object1 = " << getPreviousCumulativeFlags(currentCutIndex, individualFlags, obj2Type, object1, "cut") << endl;  
4500 +        if (verbose_>1) clog << " previousCumulativeCutFlag for object2 = " << getPreviousCumulativeFlags(currentCutIndex, individualFlags, obj2Type, object2, "cut") << endl;  
4501 +
4502        }
4503  
4504        counter++;
# Line 4473 | Line 4506 | void OSUAnalysis::setObjectFlags(cut &cu
4506      } // end   for (uint object2 = 0; object2 != inputCollection2->size(); object2++)
4507    }  // end   for (uint object1 = 0; object1 != inputCollection1->size(); object1++)
4508  
4509 < }
4509 > } // end void OSUAnalysis::setObjectFlags
4510  
4511  
4512   bool OSUAnalysis::getPreviousCumulativeFlags(uint currentCutIndex, flagMap &individualFlags, string obj1Type, uint object1, string flagType) {
# Line 4518 | Line 4551 | void OSUAnalysis::assignTreeBranch(Branc
4551   template <class InputCollection>
4552   void OSUAnalysis::fill1DHistogram(TH1* histo, histogram parameters, InputCollection inputCollection, flagPair flags, double scaleFactor){
4553  
4554 +  if (verbose_>2) clog << "  Filling histogram for " << parameters.name << endl;  
4555  
4556    for (uint object = 0; object != inputCollection->size(); object++){
4557  
# Line 4541 | Line 4575 | void OSUAnalysis::fill1DHistogram(TH1* h
4575  
4576      if (printEventInfo_) {
4577        // Write information about event to screen, for testing purposes.
4578 <      clog << "  Info for event:  value for histogram " << histo->GetName() << ":  " << value << endl;
4578 >      clog << "  Info for event:  value for histogram " << histo->GetName() << ":  " << value << " (object number " << object << ")" << endl;
4579      }
4580  
4581    }
4582   }
4583  
4584   template <class InputCollection1, class InputCollection2>
4585 < void OSUAnalysis::fill1DHistogram(TH1* histo, histogram parameters, InputCollection1 inputCollection1, InputCollection2 inputCollection2, flagPair flags1, flagPair flags2, flagPair pairFlags, double scaleFactor){
4585 > void OSUAnalysis::fill1DHistogram(TH1* histo, histogram parameters, InputCollection1 inputCollection1, InputCollection2 inputCollection2,
4586 >                                  flagPair pairFlags, double scaleFactor){
4587  
4588    bool sameObjects = false;
4589    if(typeid(InputCollection1).name() == typeid(InputCollection2).name()) sameObjects = true;
# Line 4560 | Line 4595 | void OSUAnalysis::fill1DHistogram(TH1* h
4595        if(sameObjects && object1 >= object2) continue;//account for duplicate pairs if both collections are the same
4596  
4597        pairCounter++;
4563      //only take objects which have passed all cuts and pairs which have passed all cuts
4564      if(!plotAllObjectsInPassingEvents_ && !flags1.at(object1).second) continue;
4565      if(!plotAllObjectsInPassingEvents_ && !flags2.at(object2).second) continue;
4598        if(!plotAllObjectsInPassingEvents_ && !pairFlags.at(pairCounter).second) continue;
4599  
4600        string currentString = parameters.inputVariables.at(0);
# Line 4581 | Line 4613 | void OSUAnalysis::fill1DHistogram(TH1* h
4613        double value = valueLookup(&inputCollection1->at(object1), &inputCollection2->at(object2), inputVariable, function, stringValue);
4614        histo->Fill(value,scaleFactor);
4615  
4616 +      if (printEventInfo_) {
4617 +        // Write information about event to screen, for testing purposes.
4618 +        clog << "  Info for event:  value for histogram " << histo->GetName() << ":  " << value
4619 +             << " (object1 number " << object1 << "), "
4620 +             << " (object2 number " << object2 << ")"
4621 +             << endl;
4622 +      }
4623 +      
4624      }
4625    }
4626  
# Line 4629 | Line 4669 | void OSUAnalysis::fill2DHistogram(TH2* h
4669   }
4670  
4671   template <class InputCollection1, class InputCollection2>
4672 < void OSUAnalysis::fill2DHistogram(TH2* histo, histogram parameters, InputCollection1 inputCollection1, InputCollection2 inputCollection2, flagPair flags1, flagPair flags2, flagPair pairFlags, double scaleFactor){
4672 > void OSUAnalysis::fill2DHistogram(TH2* histo, histogram parameters, InputCollection1 inputCollection1, InputCollection2 inputCollection2,
4673 >                                  flagPair pairFlags, double scaleFactor){
4674  
4675    bool sameObjects = false;
4676    if(typeid(InputCollection1).name() == typeid(InputCollection2).name()) sameObjects = true;
# Line 4642 | Line 4683 | void OSUAnalysis::fill2DHistogram(TH2* h
4683  
4684        pairCounter++;
4685  
4645      //only take objects which have passed all cuts and pairs which have passed all cuts
4646      if(!plotAllObjectsInPassingEvents_ && !flags1.at(object1).second) continue;
4647      if(!plotAllObjectsInPassingEvents_ && !flags2.at(object2).second) continue;
4686        if(!plotAllObjectsInPassingEvents_ && !pairFlags.at(pairCounter).second) continue;
4687  
4688        string stringValue = "";

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines