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.73 by lantonel, Thu May 30 18:09:58 2013 UTC vs.
Revision 1.78 by wulsin, Fri May 31 14:07:11 2013 UTC

# Line 28 | Line 28 | OSUAnalysis::OSUAnalysis (const edm::Par
28    datasetType_ (cfg.getParameter<string> ("datasetType")),
29    channels_  (cfg.getParameter<vector<edm::ParameterSet> >("channels")),
30    histogramSets_ (cfg.getParameter<vector<edm::ParameterSet> >("histogramSets")),
31 +  treeBranchSets_   (cfg.getParameter<vector<edm::ParameterSet> >("treeBranchSets")),
32    plotAllObjectsInPassingEvents_ (cfg.getParameter<bool> ("plotAllObjectsInPassingEvents")),
33    doPileupReweighting_ (cfg.getParameter<bool> ("doPileupReweighting")),
34    applyLeptonSF_ (cfg.getParameter<bool> ("applyLeptonSF")),
# Line 67 | Line 68 | OSUAnalysis::OSUAnalysis (const edm::Par
68    //always get the event collection to do pile-up reweighting
69    objectsToGet.push_back("events");
70  
71 +
72 +  // Parse the tree variable definitions.    
73 +  for (uint iBranchSet = 0; iBranchSet<treeBranchSets_.size(); iBranchSet++) {
74 +    string tempInputCollection = treeBranchSets_.at(iBranchSet).getParameter<string> ("inputCollection");
75 +    if(tempInputCollection.find("pairs")!=string::npos) { cout << "Warning:  tree filling is not configured for pairs of objects, so will not work for collection: " << tempInputCollection << endl; }  
76 +    objectsToGet.push_back(tempInputCollection);
77 +    objectsToCut.push_back(tempInputCollection);
78 +
79 +    vector<string> branchList(treeBranchSets_.at(iBranchSet).getParameter<vector<string> >("branches"));
80 +
81 +    for (uint iBranch = 0; iBranch<branchList.size(); iBranch++) {
82 +      BranchSpecs br;
83 +      br.inputCollection = tempInputCollection;
84 +      br.inputVariable = branchList.at(iBranch);  
85 +      TString newName = TString(br.inputCollection) + "_" + TString(br.inputVariable);  
86 +      br.name = string(newName.Data());  
87 +      treeBranches_.push_back(br);
88 +    }  
89 +
90 +  } // end   for (uint iBranchSet = 0; iBranchSet<treeBranchSets_.size(); iBranchSet++) {
91 +
92 +
93    //parse the histogram definitions
94    for(uint currentHistogramSet = 0; currentHistogramSet != histogramSets_.size(); currentHistogramSet++){
95  
# Line 90 | Line 113 | OSUAnalysis::OSUAnalysis (const edm::Par
113        }
114        objectsToPlot.push_back(tempInputCollection);
115        objectsToCut.push_back(tempInputCollection);
116 <    }
94 <    else{//pair of objects, need to add the pair and the individual objects to the lists of things to Get/Plot/Cut
116 >    } else { //pair of objects, need to add the pair and the individual objects to the lists of things to Get/Plot/Cut
117        string obj1;
118        string obj2;
119        getTwoObjs(tempInputCollection, obj1, obj2);
# Line 105 | Line 127 | OSUAnalysis::OSUAnalysis (const edm::Par
127        objectsToGet.push_back(tempInputCollection);
128        objectsToGet.push_back(obj1);
129        objectsToGet.push_back(obj2ToGet);
130 +    } // end else
131  
109    }
132  
133  
134      vector<edm::ParameterSet> histogramList_  (histogramSets_.at(currentHistogramSet).getParameter<vector<edm::ParameterSet> >("histograms"));
# Line 128 | Line 150 | OSUAnalysis::OSUAnalysis (const edm::Par
150        histograms.push_back(tempHistogram);
151  
152      }
153 <  }
153 >  } //   for(uint currentHistogramSet = 0; currentHistogramSet != histogramSets_.size(); currentHistogramSet++){
154 >
155    //make unique vector of objects we need to plot (so we can book a histogram with the number of each object)
156    sort( objectsToPlot.begin(), objectsToPlot.end() );
157    objectsToPlot.erase( unique( objectsToPlot.begin(), objectsToPlot.end() ), objectsToPlot.end() );
# Line 350 | Line 373 | OSUAnalysis::OSUAnalysis (const edm::Par
373      TFileDirectory subDir = fs_->mkdir( channelName );
374      //loop over the cuts to set up subdirectory for each cut if GetPlotsAfterEachCut_ is true.
375      if(GetPlotsAfterEachCut_){
376 <       for( uint currentDir=0; currentDir != subSubDirNames.size(); currentDir++){
377 <            TFileDirectory subSubDir = subDir.mkdir( subSubDirNames[currentDir] );
378 <            directories.push_back(subSubDir);
379 <            map<string, TH1D*> oneDhistoMap;
380 <            oneDHistsTmp.push_back(oneDhistoMap);
381 <            map<string, TH2D*> twoDhistoMap;
382 <            twoDHistsTmp.push_back(twoDhistoMap);
376 >      for( uint currentDir=0; currentDir != subSubDirNames.size(); currentDir++){
377 >        TFileDirectory subSubDir = subDir.mkdir( subSubDirNames[currentDir] );
378 >        directories.push_back(subSubDir);
379 >        map<string, TH1D*> oneDhistoMap;
380 >        oneDHistsTmp.push_back(oneDhistoMap);
381 >        map<string, TH2D*> twoDhistoMap;
382 >        twoDHistsTmp.push_back(twoDhistoMap);
383        }
384        oneDHists_.push_back(oneDHistsTmp);
385        twoDHists_.push_back(twoDHistsTmp);
386      }
387 <   //only set up directories with names of the channels if GetPlotsAfterEachCut_ is false.
388 <   else{
387 >    //only set up directories with names of the channels if GetPlotsAfterEachCut_ is false.
388 >    else{
389        map<string, TH1D*> oneDhistoMap;
390        oneDHistsTmp.push_back(oneDhistoMap);
391        map<string, TH2D*> twoDhistoMap;
# Line 370 | Line 393 | OSUAnalysis::OSUAnalysis (const edm::Par
393        oneDHists_.push_back(oneDHistsTmp);
394        twoDHists_.push_back(twoDHistsTmp);
395        directories.push_back(subDir);
396 <   }
396 >
397 >    }
398 >
399 >
400      //book all histograms included in the configuration
401      for(uint currentDir = 0; currentDir != directories.size(); currentDir++){//loop over all the directories.
402 <    for(uint currentHistogramIndex = 0; currentHistogramIndex != histograms.size(); currentHistogramIndex++){
403 <      histogram currentHistogram = histograms.at(currentHistogramIndex);
404 <      int numBinsElements = currentHistogram.bins.size();
405 <      int numInputVariables = currentHistogram.inputVariables.size();
406 <      int numBinEdgesX = currentHistogram.variableBinsX.size();
407 <      int numBinEdgesY = currentHistogram.variableBinsY.size();
408 <
409 <      if(numBinsElements == 1){
410 <        if(numBinEdgesX > 1){
411 <          if(numBinEdgesY > 1)
412 <            numBinsElements = 6;
413 <          else
414 <            numBinsElements = 3;
415 <        }
416 <      }
417 <      if(numBinsElements != 3 && numBinsElements !=6){
418 <        cout << "Error: Didn't find correct number of bin specifications for histogram named '" << currentHistogram.name << "'\n";
419 <        exit(0);
420 <      }
421 <      else if((numBinsElements == 3 && numInputVariables !=1) || (numBinsElements == 6 && numInputVariables!=2)){
422 <        cout << "Error: Didn't find correct number of input variables for histogram named '" << currentHistogram.name << "'\n";
423 <        exit(0);
424 <      }
425 <      else if(numBinsElements == 3){
426 <        if (currentHistogram.bins.size () == 3)
427 <          oneDHists_.at(currentChannel).at(currentDir)[currentHistogram.name] = directories.at(currentDir).make<TH1D> (TString(currentHistogram.name),channelLabel+" channel: "+currentHistogram.title, currentHistogram.bins.at(0), currentHistogram.bins.at(1), currentHistogram.bins.at(2));
428 <        else
429 <          {
430 <            oneDHists_.at(currentChannel).at(currentDir)[currentHistogram.name] = directories.at(currentDir).make<TH1D> (TString(currentHistogram.name),channelLabel+" channel: "+currentHistogram.title, numBinEdgesX - 1, currentHistogram.variableBinsX.data ());
431 <          }
432 <      }
433 <      else if(numBinsElements == 6){
434 <        if (currentHistogram.bins.size () == 6)
435 <          twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name] = directories.at(currentDir).make<TH2D> (TString(currentHistogram.name),channelLabel+" channel: "+currentHistogram.title, currentHistogram.bins.at(0), currentHistogram.bins.at(1), currentHistogram.bins.at(2),currentHistogram.bins.at(3),currentHistogram.bins.at(4),currentHistogram.bins.at(5));
436 <        else
437 <          twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name] = directories.at(currentDir).make<TH2D> (TString(currentHistogram.name),channelLabel+" channel: "+currentHistogram.title, numBinEdgesX - 1, currentHistogram.variableBinsX.data (), numBinEdgesY - 1, currentHistogram.variableBinsY.data ());
438 <      }
439 <
440 <
441 <      if(currentHistogram.name.find("GenMatch")==string::npos) continue;
442 <
443 <      // bin      particle type
444 <      // ---      -------------
445 <      //  0        unmatched
446 <      //  1        u
447 <      //  2        d
448 <      //  3        s
449 <      //  4        c
424 <      //  5        b
425 <      //  6        t
426 <      //  7        e
427 <      //  8        mu
428 <      //  9        tau
429 <      // 10        nu
430 <      // 11        g
431 <      // 12        gamma
432 <      // 13        Z
433 <      // 14        W
434 <      // 15        light meson
435 <      // 16        K meson
436 <      // 17        D meson
437 <      // 18        B meson
438 <      // 19        light baryon
439 <      // 20        strange baryon
440 <      // 21        charm baryon
441 <      // 22        bottom baryon
442 <      // 23        QCD string
443 <      // 24        other
444 <
445 <      vector<TString> labelArray;
446 <      labelArray.push_back("unmatched");
447 <      labelArray.push_back("u");
448 <      labelArray.push_back("d");
449 <      labelArray.push_back("s");
450 <      labelArray.push_back("c");
451 <      labelArray.push_back("b");
452 <      labelArray.push_back("t");
453 <      labelArray.push_back("e");
454 <      labelArray.push_back("#mu");
455 <      labelArray.push_back("#tau");
456 <      labelArray.push_back("#nu");
457 <      labelArray.push_back("g");
458 <      labelArray.push_back("#gamma");
459 <      labelArray.push_back("Z");
460 <      labelArray.push_back("W");
461 <      labelArray.push_back("light meson");
462 <      labelArray.push_back("K meson");
463 <      labelArray.push_back("D meson");
464 <      labelArray.push_back("B meson");
465 <      labelArray.push_back("light baryon");
466 <      labelArray.push_back("strange baryon");
467 <      labelArray.push_back("charm baryon");
468 <      labelArray.push_back("bottom baryon");
469 <      labelArray.push_back("QCD string");
470 <      labelArray.push_back("other");
471 <
472 <      for(int bin = 0; bin !=currentHistogram.bins.at(0); bin++){
473 <        if(currentHistogram.name.find("GenMatchIdVsMotherId")==string::npos && currentHistogram.name.find("GenMatchIdVsGrandmotherId")==string::npos) {
474 <          oneDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetXaxis()->SetBinLabel(bin+1,labelArray.at(bin));
475 <        }
476 <        else {
477 <          twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetYaxis()->SetBinLabel(bin+1,labelArray.at(currentHistogram.bins.at(0)-bin-1));
478 <          twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetXaxis()->SetBinLabel(bin+1,labelArray.at(bin));
479 <        }
480 <      }
481 <      if(currentHistogram.name.find("GenMatchIdVsMotherId")!=string::npos || currentHistogram.name.find("GenMatchIdVsGrandmotherId")!=string::npos) {
482 <        twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetXaxis()->CenterTitle();
483 <        twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetYaxis()->CenterTitle();
484 <      }
402 >      
403 >      TTree* newTree = directories.at(currentDir).make<TTree> (TString("BNTree_"+channelLabel), TString("BNTree_"+channelLabel));  
404 >      BNTrees_.push_back(newTree);      
405 >      for (uint iBranch = 0; iBranch < treeBranches_.size(); iBranch++){
406 >        BranchSpecs currentVar = treeBranches_.at(iBranch);
407 >        vector<float> newVec;  
408 >        BNTreeBranchVals_[currentVar.name] = newVec;  
409 >        BNTrees_.back()->Branch(TString(currentVar.name), &BNTreeBranchVals_.at(currentVar.name));
410 >      } // end for (uint iBranch = 0; iBranch < treeBranches_.size(); iBranch++){
411 >
412 >      for(uint currentHistogramIndex = 0; currentHistogramIndex != histograms.size(); currentHistogramIndex++){
413 >
414 >        histogram currentHistogram = histograms.at(currentHistogramIndex);
415 >        int numBinsElements = currentHistogram.bins.size();
416 >        int numInputVariables = currentHistogram.inputVariables.size();
417 >        int numBinEdgesX = currentHistogram.variableBinsX.size();
418 >        int numBinEdgesY = currentHistogram.variableBinsY.size();
419 >        
420 >        if(numBinsElements == 1){
421 >          if(numBinEdgesX > 1){
422 >            if(numBinEdgesY > 1)
423 >              numBinsElements = 6;
424 >            else
425 >              numBinsElements = 3;
426 >          }
427 >        }
428 >        if(numBinsElements != 3 && numBinsElements !=6){
429 >          cout << "Error: Didn't find correct number of bin specifications for histogram named '" << currentHistogram.name << "'\n";
430 >          exit(0);
431 >        }
432 >        else if((numBinsElements == 3 && numInputVariables !=1) || (numBinsElements == 6 && numInputVariables!=2)){
433 >          cout << "Error: Didn't find correct number of input variables for histogram named '" << currentHistogram.name << "'\n";
434 >          exit(0);
435 >        }
436 >        else if(numBinsElements == 3){
437 >          if (currentHistogram.bins.size () == 3)
438 >            oneDHists_.at(currentChannel).at(currentDir)[currentHistogram.name] = directories.at(currentDir).make<TH1D> (TString(currentHistogram.name),channelLabel+" channel: "+currentHistogram.title, currentHistogram.bins.at(0), currentHistogram.bins.at(1), currentHistogram.bins.at(2));
439 >          else
440 >            {
441 >              oneDHists_.at(currentChannel).at(currentDir)[currentHistogram.name] = directories.at(currentDir).make<TH1D> (TString(currentHistogram.name),channelLabel+" channel: "+currentHistogram.title, numBinEdgesX - 1, currentHistogram.variableBinsX.data ());
442 >            }
443 >        }
444 >        else if(numBinsElements == 6){
445 >          if (currentHistogram.bins.size () == 6)
446 >            twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name] = directories.at(currentDir).make<TH2D> (TString(currentHistogram.name),channelLabel+" channel: "+currentHistogram.title, currentHistogram.bins.at(0), currentHistogram.bins.at(1), currentHistogram.bins.at(2),currentHistogram.bins.at(3),currentHistogram.bins.at(4),currentHistogram.bins.at(5));
447 >          else
448 >            twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name] = directories.at(currentDir).make<TH2D> (TString(currentHistogram.name),channelLabel+" channel: "+currentHistogram.title, numBinEdgesX - 1, currentHistogram.variableBinsX.data (), numBinEdgesY - 1, currentHistogram.variableBinsY.data ());
449 >        }
450  
486    }
451  
452 <    // Book a histogram for the number of each object type to be plotted.
453 <    // Name of objectToPlot here must match the name specified in OSUAnalysis::analyze().
454 <    for (uint currentObjectIndex = 0; currentObjectIndex != objectsToPlot.size(); currentObjectIndex++){
455 <      string currentObject = objectsToPlot.at(currentObjectIndex);
456 <      int maxNum = 10;
457 <      if(currentObject == "mcparticles") maxNum = 50;
458 <      else if(currentObject == "primaryvertexs") maxNum = 50;
459 <
460 <      if(currentObject == "muon-muon pairs")                currentObject = "dimuonPairs";
461 <      else if(currentObject == "electron-electron pairs")   currentObject = "dielectronPairs";
462 <      else if(currentObject == "electron-muon pairs")       currentObject = "electronMuonPairs";
463 <      else if(currentObject == "secondary jets")            currentObject = "secondaryJets";
464 <      else if(currentObject == "jet-jet pairs")             currentObject = "dijetPairs";
465 <      else if(currentObject == "electron-jet pairs")        currentObject = "electronJetPairs";
466 <      else if(currentObject == "muon-jet pairs")            currentObject = "muonJetPairs";
467 <      else if(currentObject == "track-event pairs")         currentObject = "trackEventPairs";
468 <      else if(currentObject == "electron-track pairs")      currentObject = "electronTrackPairs";
469 <      else if(currentObject == "muon-track pairs")          currentObject = "muonTrackPairs";
470 <      else if(currentObject == "muon-tau pairs")            currentObject = "muonTauPairs";
471 <      else if(currentObject == "tau-tau pairs")             currentObject = "ditauPairs";
472 <      else if(currentObject == "tau-track pairs")           currentObject = "tauTrackPairs";
473 <      else if(currentObject == "muon-secondary muon pairs") currentObject = "muonSecondaryMuonPairs";
474 <      else if(currentObject == "secondary muons")           currentObject = "secondaryMuons";
475 <      else if(currentObject == "electron-secondary electron pairs") currentObject = "electronSecondaryElectronPairs";
476 <      else if(currentObject == "secondary electrons")       currentObject = "secondaryElectrons";
477 <      else if(currentObject == "electron-trigobj pairs")    currentObject = "electronTrigobjPairs";
478 <      else if(currentObject == "muon-trigobj pairs")        currentObject = "muonTrigobjPairs";
479 <
480 <      currentObject.at(0) = toupper(currentObject.at(0));
481 <      string histoName = "num" + currentObject;
482 <
483 <      if(histoName == "numPrimaryvertexs"){
484 <        string newHistoName = histoName + "BeforePileupCorrection";
485 <        oneDHists_.at(currentChannel).at(currentDir)[newHistoName] = directories.at(currentDir).make<TH1D> (TString(newHistoName),channelLabel+" channel: Number of Selected "+currentObject+" Before Pileup Correction; # "+currentObject, maxNum, 0, maxNum);
486 <        newHistoName = histoName + "AfterPileupCorrection";
487 <        oneDHists_.at(currentChannel).at(currentDir)[newHistoName] = directories.at(currentDir).make<TH1D> (TString(newHistoName),channelLabel+" channel: Number of Selected "+currentObject+ " After Pileup Correction; # "+currentObject, maxNum, 0, maxNum);
452 >        if(currentHistogram.name.find("GenMatch")==string::npos) continue;
453 >
454 >        // bin      particle type
455 >        // ---      -------------
456 >        //  0        unmatched
457 >        //  1        u
458 >        //  2        d
459 >        //  3        s
460 >        //  4        c
461 >        //  5        b
462 >        //  6        t
463 >        //  7        e
464 >        //  8        mu
465 >        //  9        tau
466 >        // 10        nu
467 >        // 11        g
468 >        // 12        gamma
469 >        // 13        Z
470 >        // 14        W
471 >        // 15        light meson
472 >        // 16        K meson
473 >        // 17        D meson
474 >        // 18        B meson
475 >        // 19        light baryon
476 >        // 20        strange baryon
477 >        // 21        charm baryon
478 >        // 22        bottom baryon
479 >        // 23        QCD string
480 >        // 24        other
481 >
482 >        vector<TString> labelArray;
483 >        labelArray.push_back("unmatched");
484 >        labelArray.push_back("u");
485 >        labelArray.push_back("d");
486 >        labelArray.push_back("s");
487 >        labelArray.push_back("c");
488 >        labelArray.push_back("b");
489 >        labelArray.push_back("t");
490 >        labelArray.push_back("e");
491 >        labelArray.push_back("#mu");
492 >        labelArray.push_back("#tau");
493 >        labelArray.push_back("#nu");
494 >        labelArray.push_back("g");
495 >        labelArray.push_back("#gamma");
496 >        labelArray.push_back("Z");
497 >        labelArray.push_back("W");
498 >        labelArray.push_back("light meson");
499 >        labelArray.push_back("K meson");
500 >        labelArray.push_back("D meson");
501 >        labelArray.push_back("B meson");
502 >        labelArray.push_back("light baryon");
503 >        labelArray.push_back("strange baryon");
504 >        labelArray.push_back("charm baryon");
505 >        labelArray.push_back("bottom baryon");
506 >        labelArray.push_back("QCD string");
507 >        labelArray.push_back("other");
508 >
509 >        for(int bin = 0; bin !=currentHistogram.bins.at(0); bin++){
510 >          if(currentHistogram.name.find("GenMatchIdVsMotherId")==string::npos && currentHistogram.name.find("GenMatchIdVsGrandmotherId")==string::npos) {
511 >            oneDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetXaxis()->SetBinLabel(bin+1,labelArray.at(bin));
512 >          }
513 >          else {
514 >            twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetYaxis()->SetBinLabel(bin+1,labelArray.at(currentHistogram.bins.at(0)-bin-1));
515 >            twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetXaxis()->SetBinLabel(bin+1,labelArray.at(bin));
516 >          }
517 >        }
518 >        if(currentHistogram.name.find("GenMatchIdVsMotherId")!=string::npos || currentHistogram.name.find("GenMatchIdVsGrandmotherId")!=string::npos) {
519 >          twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetXaxis()->CenterTitle();
520 >          twoDHists_.at(currentChannel).at(currentDir)[currentHistogram.name]->GetYaxis()->CenterTitle();
521 >        }
522 >
523 >      }  // end      for(uint currentHistogramIndex = 0; currentHistogramIndex != histograms.size(); currentHistogramIndex++){
524 >
525 >
526 >      // Book a histogram for the number of each object type to be plotted.
527 >      // Name of objectToPlot here must match the name specified in OSUAnalysis::analyze().
528 >      for (uint currentObjectIndex = 0; currentObjectIndex != objectsToPlot.size(); currentObjectIndex++){
529 >        string currentObject = objectsToPlot.at(currentObjectIndex);
530 >        int maxNum = 10;
531 >        if(currentObject == "mcparticles") maxNum = 50;
532 >        else if(currentObject == "primaryvertexs") maxNum = 50;
533 >
534 >        if(currentObject == "muon-muon pairs")                currentObject = "dimuonPairs";
535 >        else if(currentObject == "electron-electron pairs")   currentObject = "dielectronPairs";
536 >        else if(currentObject == "electron-muon pairs")       currentObject = "electronMuonPairs";
537 >        else if(currentObject == "secondary jets")            currentObject = "secondaryJets";
538 >        else if(currentObject == "jet-jet pairs")             currentObject = "dijetPairs";
539 >        else if(currentObject == "electron-jet pairs")        currentObject = "electronJetPairs";
540 >        else if(currentObject == "muon-jet pairs")            currentObject = "muonJetPairs";
541 >        else if(currentObject == "track-event pairs")         currentObject = "trackEventPairs";
542 >        else if(currentObject == "electron-track pairs")      currentObject = "electronTrackPairs";
543 >        else if(currentObject == "muon-track pairs")          currentObject = "muonTrackPairs";
544 >        else if(currentObject == "muon-tau pairs")            currentObject = "muonTauPairs";
545 >        else if(currentObject == "tau-tau pairs")             currentObject = "ditauPairs";
546 >        else if(currentObject == "tau-track pairs")           currentObject = "tauTrackPairs";
547 >        else if(currentObject == "muon-secondary muon pairs") currentObject = "muonSecondaryMuonPairs";
548 >        else if(currentObject == "secondary muons")           currentObject = "secondaryMuons";
549 >        else if(currentObject == "electron-secondary electron pairs") currentObject = "electronSecondaryElectronPairs";
550 >        else if(currentObject == "secondary electrons")       currentObject = "secondaryElectrons";
551 >        else if(currentObject == "electron-trigobj pairs")    currentObject = "electronTrigobjPairs";
552 >        else if(currentObject == "muon-trigobj pairs")        currentObject = "muonTrigobjPairs";
553 >
554 >        currentObject.at(0) = toupper(currentObject.at(0));
555 >        string histoName = "num" + currentObject;
556 >
557 >        if(histoName == "numPrimaryvertexs"){
558 >          string newHistoName = histoName + "BeforePileupCorrection";
559 >          oneDHists_.at(currentChannel).at(currentDir)[newHistoName] = directories.at(currentDir).make<TH1D> (TString(newHistoName),channelLabel+" channel: Number of Selected "+currentObject+" Before Pileup Correction; # "+currentObject, maxNum, 0, maxNum);
560 >          newHistoName = histoName + "AfterPileupCorrection";
561 >          oneDHists_.at(currentChannel).at(currentDir)[newHistoName] = directories.at(currentDir).make<TH1D> (TString(newHistoName),channelLabel+" channel: Number of Selected "+currentObject+ " After Pileup Correction; # "+currentObject, maxNum, 0, maxNum);
562 >        }
563 >        else
564 >          oneDHists_.at(currentChannel).at(currentDir)[histoName] = directories.at(currentDir).make<TH1D> (TString(histoName),channelLabel+" channel: Number of Selected "+currentObject+"; # "+currentObject, maxNum, 0, maxNum);
565        }
566 <      else
526 <        oneDHists_.at(currentChannel).at(currentDir)[histoName] = directories.at(currentDir).make<TH1D> (TString(histoName),channelLabel+" channel: Number of Selected "+currentObject+"; # "+currentObject, maxNum, 0, maxNum);
527 <    }
528 <   }//end of loop over directories
566 >    }//end of loop over directories
567      channels.push_back(tempChannel);
568      tempChannel.cuts.clear();
569    }//end loop over channels
# Line 637 | Line 675 | OSUAnalysis::analyze (const edm::Event &
675      counterMap passingCounter;
676      cumulativeFlags.clear ();
677  
678 +    for (map<string, vector<float>>::iterator iter = BNTreeBranchVals_.begin();
679 +         iter != BNTreeBranchVals_.end(); iter++) {
680 +      iter->second.clear();  // clear array
681 +    }
682 +
683      bool triggerDecision = true;
684      if(currentChannel.triggers.size() != 0 || currentChannel.triggersToVeto.size() != 0){  //triggers specified
685        triggerDecision = evaluateTriggers(currentChannel.triggers, currentChannel.triggersToVeto, triggers.product());
# Line 686 | Line 729 | OSUAnalysis::analyze (const edm::Event &
729                                                                     "muon-muon pairs");
730  
731          else if(currentObject == "muon-secondary muon pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),muons.product(), \
732 <                                                                   cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
733 <                                                                   cumulativeFlags.at("secondary muons").at(flagsForPairCutsIndex), \
734 <                                                                   "muon-secondary muon pairs");
732 >                                                                             cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
733 >                                                                             cumulativeFlags.at("secondary muons").at(flagsForPairCutsIndex), \
734 >                                                                             "muon-secondary muon pairs");
735  
736          else if(currentObject == "electron-secondary electron pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),electrons.product(), \
737 <                                                                   cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
738 <                                                                   cumulativeFlags.at("secondary electrons").at(flagsForPairCutsIndex), \
739 <                                                                   "electron-secondary electron pairs");
737 >                                                                                     cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
738 >                                                                                     cumulativeFlags.at("secondary electrons").at(flagsForPairCutsIndex), \
739 >                                                                                     "electron-secondary electron pairs");
740  
741          else if(currentObject == "electron-electron pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),electrons.product(), \
742                                                                             cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
# Line 704 | Line 747 | OSUAnalysis::analyze (const edm::Event &
747                                                                         cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
748                                                                         "electron-muon pairs");
749          else if(currentObject == "jet-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,jets.product(),jets.product(), \
750 <                                                                           cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
751 <                                                                           cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
752 <                                                                           "jet-jet pairs");
750 >                                                                 cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
751 >                                                                 cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
752 >                                                                 "jet-jet pairs");
753          else if(currentObject == "electron-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),jets.product(), \
754 <                                                                       cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
755 <                                                                       cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
756 <                                                                       "electron-jet pairs");
754 >                                                                      cumulativeFlags.at("electrons").at(flagsForPairCutsIndex), \
755 >                                                                      cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
756 >                                                                      "electron-jet pairs");
757          else if(currentObject == "muon-jet pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,muons.product(),jets.product(), \
758 <                                                                       cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
759 <                                                                       cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
760 <                                                                       "muon-jet pairs");
758 >                                                                  cumulativeFlags.at("muons").at(flagsForPairCutsIndex), \
759 >                                                                  cumulativeFlags.at("jets").at(flagsForPairCutsIndex), \
760 >                                                                  "muon-jet pairs");
761          else if(currentObject == "track-event pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,tracks.product(),events.product(),
762                                                                       cumulativeFlags.at("tracks").at(flagsForPairCutsIndex),
763                                                                       cumulativeFlags.at("events").at(flagsForPairCutsIndex),
# Line 736 | Line 779 | OSUAnalysis::analyze (const edm::Event &
779                                                                   cumulativeFlags.at("taus").at(flagsForPairCutsIndex),
780                                                                   "tau-tau pairs");
781          else if(currentObject == "tau-track pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,taus .product(),tracks.product(),
782 <                                                                 cumulativeFlags.at("taus").at(flagsForPairCutsIndex),
783 <                                                                 cumulativeFlags.at("tracks").at(flagsForPairCutsIndex),
784 <                                                                 "tau-track pairs");
782 >                                                                   cumulativeFlags.at("taus").at(flagsForPairCutsIndex),
783 >                                                                   cumulativeFlags.at("tracks").at(flagsForPairCutsIndex),
784 >                                                                   "tau-track pairs");
785          else if(currentObject == "electron-trigobj pairs") setObjectFlags(currentCut,currentCutIndex,individualFlags,cumulativeFlags,electrons.product(),trigobjs.product(),
786                                                                            cumulativeFlags.at("electrons").at(flagsForPairCutsIndex),
787                                                                            cumulativeFlags.at("trigobjs").at(flagsForPairCutsIndex),
# Line 762 | Line 805 | OSUAnalysis::analyze (const edm::Event &
805      //apply trigger (true if none were specified)
806      eventPassedAllCuts = eventPassedAllCuts && triggerDecision;
807  
765
808      for(uint currentCutIndex = 0; currentCutIndex != currentChannel.cuts.size(); currentCutIndex++){
809  
810        //loop over all objects and count how many passed the cumulative selection up to this point
# Line 813 | Line 855 | OSUAnalysis::analyze (const edm::Event &
855  
856      cutFlows_.at(currentChannelIndex)->fillCutFlow(scaleFactor);
857  
816
858      if (printEventInfo_) {
859        // Write information about event to screen, for testing purposes.
860        cout << "Event passed all cuts in channel " <<  currentChannel.name
# Line 824 | Line 865 | OSUAnalysis::analyze (const edm::Event &
865      }
866  
867  
827
868      //filling histograms
869      for(uint currentCut = 0; currentCut != oneDHists_.at(currentChannelIndex).size(); currentCut++){//loop over all the directories in each channel.
830
870        uint currentDir;
871 <      if(!GetPlotsAfterEachCut_){ currentDir =  currentChannel.cuts.size() - oneDHists_.at(currentChannelIndex).size();}//if GetPlotsAfterEachCut_ is true, set currentDir point to the last cut.
872 <      else currentDir = currentCut;
873 <
874 <      if(!eventPassedPreviousCuts.at(currentDir)) continue;
875 <
837 <
838 <      for (uint histogramIndex = 0; histogramIndex != histograms.size(); histogramIndex++){
839 <        histogram currentHistogram = histograms.at(histogramIndex);
871 >      if(!GetPlotsAfterEachCut_){ currentDir =  currentChannel.cuts.size() - oneDHists_.at(currentChannelIndex).size();}//if GetPlotsAfterEachCut_ is true, set currentDir point to the lat cut.
872 >      else{
873 >        currentDir = currentCut;
874 >      }
875 >      if(eventPassedPreviousCuts.at(currentDir)){
876  
877 <        if(currentHistogram.inputVariables.size() == 1){
878 <          TH1D* histo;
879 <          histo = oneDHists_.at(currentChannelIndex).at(currentCut).at(currentHistogram.name);
880 <
881 <          if     (currentHistogram.inputCollection == "jets")            fill1DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("jets").at(currentDir),scaleFactor);
882 <          else if(currentHistogram.inputCollection == "secondary jets")  fill1DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("secondary jets").at(currentDir),scaleFactor);
883 <          else if(currentHistogram.inputCollection == "muons")           fill1DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("muons").at(currentDir),scaleFactor);
884 <          else if(currentHistogram.inputCollection == "secondary muons") fill1DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("secondary muons").at(currentDir),scaleFactor);
885 <          else if(currentHistogram.inputCollection == "secondary electrons") fill1DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("secondary electrons").at(currentDir),scaleFactor);
886 <          else if(currentHistogram.inputCollection == "muon-muon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
887 <                                                                                         cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
888 <                                                                                         cumulativeFlags.at("muon-muon pairs").at(currentDir),scaleFactor);
889 <          else if(currentHistogram.inputCollection == "muon-secondary muon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
890 <                                                                                                   cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary muons").at(currentDir), \
891 <                                                                                                   cumulativeFlags.at("muon-secondary muon pairs").at(currentDir),scaleFactor);
892 <          else if(currentHistogram.inputCollection == "electrons") fill1DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("electrons").at(currentDir),scaleFactor);
893 <          else if(currentHistogram.inputCollection == "electron-electron pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
894 <                                                                                                 cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("electrons").at(currentDir), \
895 <                                                                                                 cumulativeFlags.at("electron-electron pairs").at(currentDir),scaleFactor);
896 <          else if(currentHistogram.inputCollection == "jet-jet pairs") fill1DHistogram(histo,currentHistogram,jets.product(),jets.product(), \
897 <                                                                                       cumulativeFlags.at("jets").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
898 <                                                                                       cumulativeFlags.at("jet-jet pairs").at(currentDir),scaleFactor);
899 <          else if(currentHistogram.inputCollection == "electron-secondary electron pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
900 <                                                                                                           cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("secondary electrons").at(currentDir), \
901 <                                                                                                           cumulativeFlags.at("electron-secondary electron pairs").at(currentDir),scaleFactor);
902 <          else if(currentHistogram.inputCollection == "electron-muon pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),muons.product(), \
903 <                                                                                             cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("muons").at(currentDir),
904 <                                                                                             cumulativeFlags.at("electron-muon pairs").at(currentDir),scaleFactor);
905 <          else if(currentHistogram.inputCollection == "electron-jet pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),jets.product(), \
906 <                                                                                            cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
907 <                                                                                            cumulativeFlags.at("electron-jet pairs").at(currentDir),scaleFactor);
908 <          else if(currentHistogram.inputCollection == "muon-jet pairs") fill1DHistogram(histo,currentHistogram, muons.product(),jets.product(), \
909 <                                                                                        cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
910 <                                                                                        cumulativeFlags.at("muon-jet pairs").at(currentDir),scaleFactor);
911 <          else if(currentHistogram.inputCollection == "electron-track pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),tracks.product(),
912 <                                                                                              cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
913 <                                                                                              cumulativeFlags.at("electron-track pairs").at(currentDir),scaleFactor);
914 <          else if(currentHistogram.inputCollection == "muon-track pairs") fill1DHistogram(histo,currentHistogram, muons.product(),tracks.product(),
915 <                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
916 <                                                                                          cumulativeFlags.at("muon-track pairs").at(currentDir),scaleFactor);
917 <          else if(currentHistogram.inputCollection == "muon-tau pairs") fill1DHistogram(histo,currentHistogram, muons.product(),taus.product(),
918 <                                                                                        cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
919 <                                                                                        cumulativeFlags.at("muon-tau pairs").at(currentDir),scaleFactor);
920 <          else if(currentHistogram.inputCollection == "tau-tau pairs") fill1DHistogram(histo,currentHistogram, taus.product(),taus.product(),
921 <                                                                                       cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
922 <                                                                                       cumulativeFlags.at("tau-tau pairs").at(currentDir),scaleFactor);
923 <          else if(currentHistogram.inputCollection == "tau-track pairs") fill1DHistogram(histo,currentHistogram, taus.product(),tracks.product(),
924 <                                                                                         cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
925 <                                                                                         cumulativeFlags.at("tau-track pairs").at(currentDir),scaleFactor);
926 <          else if(currentHistogram.inputCollection == "electron-trigobj pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),trigobjs.product(),
927 <                                                                                                cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
928 <                                                                                                cumulativeFlags.at("electron-trigobj pairs").at(currentDir),scaleFactor);
929 <          else if(currentHistogram.inputCollection == "muon-trigobj pairs") fill1DHistogram(histo,currentHistogram, muons.product(),trigobjs.product(),
930 <                                                                                            cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
931 <                                                                                            cumulativeFlags.at("muon-trigobj pairs").at(currentDir),scaleFactor);
877 >        // Assign BNTree variables
878 >        for (uint iBranch = 0; iBranch != treeBranches_.size(); iBranch++) {
879 >          BranchSpecs brSpecs = treeBranches_.at(iBranch);  
880 >          string coll = brSpecs.inputCollection;  
881 >          if (cumulativeFlags.count(coll) == 0) cout << "Error: no flags found for collection:  " << coll << ", will cause a seg fault" << endl;
882 >
883 >          if     (coll == "jets")                assignTreeBranch(brSpecs,jets.product(),          cumulativeFlags.at(coll).at(currentDir));            
884 >          else if(coll == "secondary jets")      assignTreeBranch(brSpecs,jets.product(),          cumulativeFlags.at(coll).at(currentDir));
885 >          else if(coll == "muons")               assignTreeBranch(brSpecs,muons.product(),         cumulativeFlags.at(coll).at(currentDir));        
886 >          else if(coll == "secondary muons")     assignTreeBranch(brSpecs,muons.product(),         cumulativeFlags.at(coll).at(currentDir));
887 >          else if(coll == "electrons")           assignTreeBranch(brSpecs,electrons.product(),     cumulativeFlags.at(coll).at(currentDir));
888 >          else if(coll == "secondary electrons") assignTreeBranch(brSpecs,electrons.product(),     cumulativeFlags.at(coll).at(currentDir));
889 >          else if(coll == "events")              assignTreeBranch(brSpecs,events.product(),        cumulativeFlags.at(coll).at(currentDir));
890 >          else if(coll == "taus")                assignTreeBranch(brSpecs,taus.product(),          cumulativeFlags.at(coll).at(currentDir));
891 >          else if(coll == "mets")                assignTreeBranch(brSpecs,mets.product(),          cumulativeFlags.at(coll).at(currentDir));
892 >          else if(coll == "tracks")              assignTreeBranch(brSpecs,tracks.product(),        cumulativeFlags.at(coll).at(currentDir));
893 >          else if(coll == "genjets")             assignTreeBranch(brSpecs,genjets.product(),       cumulativeFlags.at(coll).at(currentDir));
894 >          else if(coll == "mcparticles")         assignTreeBranch(brSpecs,mcparticles.product(),   cumulativeFlags.at(coll).at(currentDir));
895 >          else if(coll == "primaryvertexs")      assignTreeBranch(brSpecs,primaryvertexs.product(),cumulativeFlags.at(coll).at(currentDir));
896 >          else if(coll == "bxlumis")             assignTreeBranch(brSpecs,bxlumis.product(),       cumulativeFlags.at(coll).at(currentDir));
897 >          else if(coll == "photons")             assignTreeBranch(brSpecs,photons.product(),       cumulativeFlags.at(coll).at(currentDir));
898 >          else if(coll == "superclusters")       assignTreeBranch(brSpecs,superclusters.product(), cumulativeFlags.at(coll).at(currentDir));
899 >          else if(coll == "trigobjs")            assignTreeBranch(brSpecs,trigobjs.product(),      cumulativeFlags.at(coll).at(currentDir));
900 >          else if(coll == "stops"
901 >                  && datasetType_ == "signalMC") assignTreeBranch(brSpecs,stops.product(),         cumulativeFlags.at(coll).at(currentDir));
902 >        } // end loop over branches  
903 >                                                                                          
904 >        for (uint histogramIndex = 0; histogramIndex != histograms.size(); histogramIndex++){
905 >          histogram currentHistogram = histograms.at(histogramIndex);
906 >
907 >          if (cumulativeFlags.count(currentHistogram.inputCollection) == 0) cout << "Error: no flags found for collection:  " << currentHistogram.inputCollection << ", will cause a seg fault" << endl;
908 >
909 >          if(currentHistogram.inputVariables.size() == 1){
910 >            TH1D* histo;  
911 >            histo = oneDHists_.at(currentChannelIndex).at(currentCut).at(currentHistogram.name);
912 >            if     (currentHistogram.inputCollection == "jets")            fill1DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("jets").at(currentDir),scaleFactor);
913 >            else if(currentHistogram.inputCollection == "secondary jets")  fill1DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("secondary jets").at(currentDir),scaleFactor);
914 >            else if(currentHistogram.inputCollection == "muons")           fill1DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("muons").at(currentDir),scaleFactor);
915 >            else if(currentHistogram.inputCollection == "secondary muons") fill1DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("secondary muons").at(currentDir),scaleFactor);
916 >            else if(currentHistogram.inputCollection == "secondary electrons") fill1DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("secondary electrons").at(currentDir),scaleFactor);
917 >            else if(currentHistogram.inputCollection == "muon-muon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
918 >                                                                                           cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
919 >                                                                                           cumulativeFlags.at("muon-muon pairs").at(currentDir),scaleFactor);
920 >            else if(currentHistogram.inputCollection == "muon-secondary muon pairs") fill1DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
921 >                                                                                                     cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary muons").at(currentDir), \
922 >                                                                                                     cumulativeFlags.at("muon-secondary muon pairs").at(currentDir),scaleFactor);
923 >            else if(currentHistogram.inputCollection == "electrons") fill1DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("electrons").at(currentDir),scaleFactor);
924 >            else if(currentHistogram.inputCollection == "electron-electron pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),electrons.product(),\
925 >                                                                                                   cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("electrons").at(currentDir),\
926 >                                                                                                   cumulativeFlags.at("electron-electron pairs").at(currentDir),scaleFactor);
927 >            else if(currentHistogram.inputCollection == "jet-jet pairs") fill1DHistogram(histo,currentHistogram,jets.product(),jets.product(),\
928 >                                                                                         cumulativeFlags.at("jets").at(currentDir),cumulativeFlags.at("jets").at(currentDir),\
929 >                                                                                         cumulativeFlags.at("jet-jet pairs").at(currentDir),scaleFactor);
930 >            else if(currentHistogram.inputCollection == "electron-secondary electron pairs") fill1DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
931 >                                                                                                             cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("secondary electrons").at(currentDir), \
932 >                                                                                                             cumulativeFlags.at("electron-secondary electron pairs").at(currentDir),scaleFactor);
933 >            else if(currentHistogram.inputCollection == "electron-muon pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),muons.product(), \
934 >                                                                                               cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("muons").at(currentDir),
935 >                                                                                               cumulativeFlags.at("electron-muon pairs").at(currentDir),scaleFactor);
936 >            else if(currentHistogram.inputCollection == "electron-jet pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),jets.product(), \
937 >                                                                                              cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
938 >                                                                                              cumulativeFlags.at("electron-jet pairs").at(currentDir),scaleFactor);
939 >            else if(currentHistogram.inputCollection == "muon-jet pairs") fill1DHistogram(histo,currentHistogram, muons.product(),jets.product(), \
940 >                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("jets").at(currentDir),
941 >                                                                                          cumulativeFlags.at("muon-jet pairs").at(currentDir),scaleFactor);
942 >            else if(currentHistogram.inputCollection == "electron-track pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),tracks.product(),
943 >                                                                                                cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
944 >                                                                                                cumulativeFlags.at("electron-track pairs").at(currentDir),scaleFactor);
945 >            else if(currentHistogram.inputCollection == "muon-track pairs") fill1DHistogram(histo,currentHistogram, muons.product(),tracks.product(),
946 >                                                                                            cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
947 >                                                                                            cumulativeFlags.at("muon-track pairs").at(currentDir),scaleFactor);
948 >            else if(currentHistogram.inputCollection == "muon-tau pairs") fill1DHistogram(histo,currentHistogram, muons.product(),taus.product(),
949 >                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
950 >                                                                                          cumulativeFlags.at("muon-tau pairs").at(currentDir),scaleFactor);
951 >            else if(currentHistogram.inputCollection == "tau-tau pairs") fill1DHistogram(histo,currentHistogram, taus.product(),taus.product(),
952 >                                                                                         cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
953 >                                                                                         cumulativeFlags.at("tau-tau pairs").at(currentDir),scaleFactor);
954 >            else if(currentHistogram.inputCollection == "tau-track pairs") fill1DHistogram(histo,currentHistogram, taus.product(),tracks.product(),
955 >                                                                                           cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
956 >                                                                                           cumulativeFlags.at("tau-track pairs").at(currentDir),scaleFactor);
957 >            else if(currentHistogram.inputCollection == "electron-trigobj pairs") fill1DHistogram(histo,currentHistogram, electrons.product(),trigobjs.product(),
958 >                                                                                                  cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
959 >                                                                                                  cumulativeFlags.at("electron-trigobj pairs").at(currentDir),scaleFactor);
960 >            else if(currentHistogram.inputCollection == "muon-trigobj pairs") fill1DHistogram(histo,currentHistogram, muons.product(),trigobjs.product(),
961 >                                                                                              cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
962 >                                                                                              cumulativeFlags.at("muon-trigobj pairs").at(currentDir),scaleFactor);
963 >
964 >            else if(currentHistogram.inputCollection == "events") fill1DHistogram(histo,currentHistogram,events.product(),cumulativeFlags.at("events").at(currentDir),scaleFactor);
965 >            else if(currentHistogram.inputCollection == "taus") fill1DHistogram(histo,currentHistogram,taus.product(),cumulativeFlags.at("taus").at(currentDir),scaleFactor);
966 >            else if(currentHistogram.inputCollection == "mets") fill1DHistogram(histo,currentHistogram,mets.product(),cumulativeFlags.at("mets").at(currentDir),scaleFactor);
967 >            else if(currentHistogram.inputCollection == "tracks") fill1DHistogram(histo,currentHistogram,tracks.product(),cumulativeFlags.at("tracks").at(currentDir),scaleFactor);
968 >            else if(currentHistogram.inputCollection == "genjets") fill1DHistogram(histo,currentHistogram,genjets.product(),cumulativeFlags.at("genjets").at(currentDir),scaleFactor);
969 >            else if(currentHistogram.inputCollection == "mcparticles") fill1DHistogram(histo,currentHistogram,mcparticles.product(),cumulativeFlags.at("mcparticles").at(currentDir),scaleFactor);
970 >            else if(currentHistogram.inputCollection == "primaryvertexs") fill1DHistogram(histo,currentHistogram,primaryvertexs.product(),cumulativeFlags.at("primaryvertexs").at(currentDir),scaleFactor);
971 >            else if(currentHistogram.inputCollection == "bxlumis") fill1DHistogram(histo,currentHistogram,bxlumis.product(),cumulativeFlags.at("bxlumis").at(currentDir),scaleFactor);
972 >            else if(currentHistogram.inputCollection == "photons") fill1DHistogram(histo,currentHistogram,photons.product(),cumulativeFlags.at("photons").at(currentDir),scaleFactor);
973 >            else if(currentHistogram.inputCollection == "superclusters") fill1DHistogram(histo,currentHistogram,superclusters.product(),cumulativeFlags.at("superclusters").at(currentDir),scaleFactor);
974 >            else if(currentHistogram.inputCollection == "trigobjs") fill1DHistogram(histo,currentHistogram,trigobjs.product(),cumulativeFlags.at("trigobjs").at(currentDir),scaleFactor);
975 >            else if(currentHistogram.inputCollection == "stops" && datasetType_ == "signalMC") fill1DHistogram(histo,currentHistogram,stops.product(),cumulativeFlags.at("stops").at(currentDir),scaleFactor);
976 >          }
977 >          else if(currentHistogram.inputVariables.size() == 2){
978 >            TH2D* histo;
979 >            histo = twoDHists_.at(currentChannelIndex).at(currentCut).at(currentHistogram.name);
980 >            if     (currentHistogram.inputCollection == "jets")            fill2DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("jets").at(currentDir),scaleFactor);
981 >            else if(currentHistogram.inputCollection == "secondary jets")  fill2DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("secondary jets").at(currentDir),scaleFactor);
982 >            else if(currentHistogram.inputCollection == "muons")           fill2DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("muons").at(currentDir),scaleFactor);
983 >            else if(currentHistogram.inputCollection == "secondary muons") fill2DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("secondary muons").at(currentDir),scaleFactor);
984 >            else if(currentHistogram.inputCollection == "muon-muon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
985 >                                                                                           cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
986 >                                                                                           cumulativeFlags.at("muon-muon pairs").at(currentDir),scaleFactor);
987 >            else if(currentHistogram.inputCollection == "muon-secondary muon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
988 >                                                                                                     cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary muons").at(currentDir), \
989 >                                                                                                     cumulativeFlags.at("muon-secondary muon pairs").at(currentDir),scaleFactor);
990 >            else if(currentHistogram.inputCollection == "electrons") fill2DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("electrons").at(currentDir),scaleFactor);
991 >            else if(currentHistogram.inputCollection == "secondary electrons") fill2DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("secondary electrons").at(currentDir),scaleFactor);
992 >            else if(currentHistogram.inputCollection == "electron-electron pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
993 >                                                                                                   cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("electrons").at(currentDir), \
994 >                                                                                                   cumulativeFlags.at("electron-electron pairs").at(currentDir),scaleFactor);
995 >            else if(currentHistogram.inputCollection == "jet-jet pairs") fill2DHistogram(histo,currentHistogram,jets.product(),jets.product(), \
996 >                                                                                         cumulativeFlags.at("jets").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
997 >                                                                                         cumulativeFlags.at("jet-jet pairs").at(currentDir),scaleFactor);
998 >            else if(currentHistogram.inputCollection == "electron-secondary electron pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
999 >                                                                                                             cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("secondary electrons").at(currentDir), \
1000 >                                                                                                             cumulativeFlags.at("electron-secondary electron pairs").at(currentDir),scaleFactor);
1001 >            else if(currentHistogram.inputCollection == "electron-muon pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),muons.product(), \
1002 >                                                                                               cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
1003 >                                                                                               cumulativeFlags.at("electron-muon pairs").at(currentDir),scaleFactor);
1004 >            else if(currentHistogram.inputCollection == "electron-jet pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),jets.product(), \
1005 >                                                                                              cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
1006 >                                                                                              cumulativeFlags.at("electron-jet pairs").at(currentDir),scaleFactor);
1007 >            else if(currentHistogram.inputCollection == "muon-jet pairs") fill2DHistogram(histo,currentHistogram,muons.product(),jets.product(), \
1008 >                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
1009 >                                                                                          cumulativeFlags.at("muon-jet pairs").at(currentDir),scaleFactor);
1010 >            else if(currentHistogram.inputCollection == "electron-track pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),tracks.product(),
1011 >                                                                                                cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1012 >                                                                                                cumulativeFlags.at("electron-track pairs").at(currentDir),scaleFactor);
1013 >            else if(currentHistogram.inputCollection == "muon-track pairs") fill2DHistogram(histo,currentHistogram,muons.product(),tracks.product(),
1014 >                                                                                            cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1015 >                                                                                            cumulativeFlags.at("muon-track pairs").at(currentDir),scaleFactor);
1016 >            else if(currentHistogram.inputCollection == "muon-tau pairs") fill2DHistogram(histo,currentHistogram,muons.product(),taus.product(),
1017 >                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
1018 >                                                                                          cumulativeFlags.at("muon-tau pairs").at(currentDir),scaleFactor);
1019 >            else if(currentHistogram.inputCollection == "tau-tau pairs") fill2DHistogram(histo,currentHistogram,taus.product(),taus.product(),
1020 >                                                                                         cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
1021 >                                                                                         cumulativeFlags.at("tau-tau pairs").at(currentDir),scaleFactor);
1022 >            else if(currentHistogram.inputCollection == "tau-track pairs") fill2DHistogram(histo,currentHistogram,taus.product(),tracks.product(),
1023 >                                                                                           cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
1024 >                                                                                           cumulativeFlags.at("tau-track pairs").at(currentDir),scaleFactor);
1025 >            else if(currentHistogram.inputCollection == "electron-trigobj pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),trigobjs.product(),
1026 >                                                                                                  cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
1027 >                                                                                                  cumulativeFlags.at("electron-trigobj pairs").at(currentDir),scaleFactor);
1028 >            else if(currentHistogram.inputCollection == "muon-trigobj pairs") fill2DHistogram(histo,currentHistogram,muons.product(),trigobjs.product(),
1029 >                                                                                              cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
1030 >                                                                                              cumulativeFlags.at("muon-trigobj pairs").at(currentDir),scaleFactor);
1031 >            else if(currentHistogram.inputCollection == "events") fill2DHistogram(histo,currentHistogram,events.product(),cumulativeFlags.at("events").at(currentDir),scaleFactor);
1032 >            else if(currentHistogram.inputCollection == "taus") fill2DHistogram(histo,currentHistogram,taus.product(),cumulativeFlags.at("taus").at(currentDir),scaleFactor);
1033 >            else if(currentHistogram.inputCollection == "mets") fill2DHistogram(histo,currentHistogram,mets.product(),cumulativeFlags.at("mets").at(currentDir),scaleFactor);
1034 >            else if(currentHistogram.inputCollection == "tracks") fill2DHistogram(histo,currentHistogram,tracks.product(),cumulativeFlags.at("tracks").at(currentDir),scaleFactor);
1035 >            else if(currentHistogram.inputCollection == "track-event pairs") fill2DHistogram(histo,currentHistogram,tracks.product(),events.product(),
1036 >                                                                                             cumulativeFlags.at("tracks").at(currentDir),cumulativeFlags.at("events").at(currentDir),
1037 >                                                                                             cumulativeFlags.at("track-event pairs").at(currentDir),scaleFactor);
1038 >            else if(currentHistogram.inputCollection == "genjets") fill2DHistogram(histo,currentHistogram,genjets.product(),cumulativeFlags.at("genjets").at(currentDir),scaleFactor);
1039 >            else if(currentHistogram.inputCollection == "mcparticles") fill2DHistogram(histo,currentHistogram,mcparticles.product(),cumulativeFlags.at("mcparticles").at(currentDir),scaleFactor);
1040 >            else if(currentHistogram.inputCollection == "primaryvertexs") fill2DHistogram(histo,currentHistogram,primaryvertexs.product(),cumulativeFlags.at("primaryvertexs").at(currentDir),scaleFactor);
1041 >            else if(currentHistogram.inputCollection == "bxlumis") fill2DHistogram(histo,currentHistogram,bxlumis.product(),cumulativeFlags.at("bxlumis").at(currentDir),scaleFactor);
1042 >            else if(currentHistogram.inputCollection == "photons") fill2DHistogram(histo,currentHistogram,photons.product(),cumulativeFlags.at("photons").at(currentDir),scaleFactor);
1043 >            else if(currentHistogram.inputCollection == "superclusters") fill2DHistogram(histo,currentHistogram,superclusters.product(),cumulativeFlags.at("superclusters").at(currentDir),scaleFactor);
1044 >            else if(currentHistogram.inputCollection == "trigobjs") fill2DHistogram(histo,currentHistogram,trigobjs.product(),cumulativeFlags.at("trigobjs").at(currentDir),scaleFactor);
1045 >            else if(currentHistogram.inputCollection == "stops" && datasetType_ == "signalMC") fill2DHistogram(histo,currentHistogram,stops.product(),cumulativeFlags.at("stops").at(currentDir),scaleFactor);
1046 >          }
1047            
897          else if(currentHistogram.inputCollection == "events") fill1DHistogram(histo,currentHistogram,events.product(),cumulativeFlags.at("events").at(currentDir),scaleFactor);
898          else if(currentHistogram.inputCollection == "taus") fill1DHistogram(histo,currentHistogram,taus.product(),cumulativeFlags.at("taus").at(currentDir),scaleFactor);
899          else if(currentHistogram.inputCollection == "mets") fill1DHistogram(histo,currentHistogram,mets.product(),cumulativeFlags.at("mets").at(currentDir),scaleFactor);
900          else if(currentHistogram.inputCollection == "tracks") fill1DHistogram(histo,currentHistogram,tracks.product(),cumulativeFlags.at("tracks").at(currentDir),scaleFactor);
901          else if(currentHistogram.inputCollection == "genjets") fill1DHistogram(histo,currentHistogram,genjets.product(),cumulativeFlags.at("genjets").at(currentDir),scaleFactor);
902          else if(currentHistogram.inputCollection == "mcparticles") fill1DHistogram(histo,currentHistogram,mcparticles.product(),cumulativeFlags.at("mcparticles").at(currentDir),scaleFactor);
903          else if(currentHistogram.inputCollection == "primaryvertexs") fill1DHistogram(histo,currentHistogram,primaryvertexs.product(),cumulativeFlags.at("primaryvertexs").at(currentDir),scaleFactor);
904          else if(currentHistogram.inputCollection == "bxlumis") fill1DHistogram(histo,currentHistogram,bxlumis.product(),cumulativeFlags.at("bxlumis").at(currentDir),scaleFactor);
905          else if(currentHistogram.inputCollection == "photons") fill1DHistogram(histo,currentHistogram,photons.product(),cumulativeFlags.at("photons").at(currentDir),scaleFactor);
906          else if(currentHistogram.inputCollection == "superclusters") fill1DHistogram(histo,currentHistogram,superclusters.product(),cumulativeFlags.at("superclusters").at(currentDir),scaleFactor);
907          else if(currentHistogram.inputCollection == "trigobjs") fill1DHistogram(histo,currentHistogram,trigobjs.product(),cumulativeFlags.at("trigobjs").at(currentDir),scaleFactor);
908          else if(currentHistogram.inputCollection == "stops" && datasetType_ == "signalMC") fill1DHistogram(histo,currentHistogram,stops.product(),cumulativeFlags.at("stops").at(currentDir),scaleFactor);
1048          }
910        else if(currentHistogram.inputVariables.size() == 2){
911          TH2D* histo;
912          histo = twoDHists_.at(currentChannelIndex).at(currentCut).at(currentHistogram.name);
913
914          if     (currentHistogram.inputCollection == "jets")            fill2DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("jets").at(currentDir),scaleFactor);
915          else if(currentHistogram.inputCollection == "secondary jets")  fill2DHistogram(histo,currentHistogram,jets.product(),cumulativeFlags.at("secondary jets").at(currentDir),scaleFactor);
916          else if(currentHistogram.inputCollection == "muons")           fill2DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("muons").at(currentDir),scaleFactor);
917          else if(currentHistogram.inputCollection == "secondary muons") fill2DHistogram(histo,currentHistogram,muons.product(),cumulativeFlags.at("secondary muons").at(currentDir),scaleFactor);
918          else if(currentHistogram.inputCollection == "muon-muon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
919                                                                                         cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
920                                                                                         cumulativeFlags.at("muon-muon pairs").at(currentDir),scaleFactor);
921          else if(currentHistogram.inputCollection == "muon-secondary muon pairs") fill2DHistogram(histo,currentHistogram,muons.product(),muons.product(), \
922                                                                                                   cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("secondary muons").at(currentDir), \
923                                                                                                   cumulativeFlags.at("muon-secondary muon pairs").at(currentDir),scaleFactor);
924          else if(currentHistogram.inputCollection == "electrons") fill2DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("electrons").at(currentDir),scaleFactor);
925          else if(currentHistogram.inputCollection == "secondary electrons") fill2DHistogram(histo,currentHistogram,electrons.product(),cumulativeFlags.at("secondary electrons").at(currentDir),scaleFactor);
926          else if(currentHistogram.inputCollection == "electron-electron pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
927                                                                                                 cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("electrons").at(currentDir), \
928                                                                                                 cumulativeFlags.at("electron-electron pairs").at(currentDir),scaleFactor);
929          else if(currentHistogram.inputCollection == "jet-jet pairs") fill2DHistogram(histo,currentHistogram,jets.product(),jets.product(), \
930                                                                                       cumulativeFlags.at("jets").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
931                                                                                       cumulativeFlags.at("jet-jet pairs").at(currentDir),scaleFactor);
932          else if(currentHistogram.inputCollection == "electron-secondary electron pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),electrons.product(), \
933                                                                                                           cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("secondary electrons").at(currentDir), \
934                                                                                                           cumulativeFlags.at("electron-secondary electron pairs").at(currentDir),scaleFactor);
935          else if(currentHistogram.inputCollection == "electron-muon pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),muons.product(), \
936                                                                                             cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("muons").at(currentDir), \
937                                                                                             cumulativeFlags.at("electron-muon pairs").at(currentDir),scaleFactor);
938          else if(currentHistogram.inputCollection == "electron-jet pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),jets.product(), \
939                                                                                            cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
940                                                                                            cumulativeFlags.at("electron-jet pairs").at(currentDir),scaleFactor);
941          else if(currentHistogram.inputCollection == "muon-jet pairs") fill2DHistogram(histo,currentHistogram,muons.product(),jets.product(), \
942                                                                                        cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("jets").at(currentDir), \
943                                                                                        cumulativeFlags.at("muon-jet pairs").at(currentDir),scaleFactor);
944          else if(currentHistogram.inputCollection == "electron-track pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),tracks.product(),
945                                                                                              cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
946                                                                                              cumulativeFlags.at("electron-track pairs").at(currentDir),scaleFactor);
947          else if(currentHistogram.inputCollection == "muon-track pairs") fill2DHistogram(histo,currentHistogram,muons.product(),tracks.product(),
948                                                                                          cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
949                                                                                          cumulativeFlags.at("muon-track pairs").at(currentDir),scaleFactor);
950          else if(currentHistogram.inputCollection == "muon-tau pairs") fill2DHistogram(histo,currentHistogram,muons.product(),taus.product(),
951                                                                                        cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
952                                                                                        cumulativeFlags.at("muon-tau pairs").at(currentDir),scaleFactor);
953          else if(currentHistogram.inputCollection == "tau-tau pairs") fill2DHistogram(histo,currentHistogram,taus.product(),taus.product(),
954                                                                                       cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("taus").at(currentDir),
955                                                                                       cumulativeFlags.at("tau-tau pairs").at(currentDir),scaleFactor);
956          else if(currentHistogram.inputCollection == "tau-track pairs") fill2DHistogram(histo,currentHistogram,taus.product(),tracks.product(),
957                                                                                         cumulativeFlags.at("taus").at(currentDir),cumulativeFlags.at("tracks").at(currentDir),
958                                                                                         cumulativeFlags.at("tau-track pairs").at(currentDir),scaleFactor);
959          else if(currentHistogram.inputCollection == "electron-trigobj pairs") fill2DHistogram(histo,currentHistogram,electrons.product(),trigobjs.product(),
960                                                                                                cumulativeFlags.at("electrons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
961                                                                                                cumulativeFlags.at("electron-trigobj pairs").at(currentDir),scaleFactor);
962          else if(currentHistogram.inputCollection == "muon-trigobj pairs") fill2DHistogram(histo,currentHistogram,muons.product(),trigobjs.product(),
963                                                                                            cumulativeFlags.at("muons").at(currentDir),cumulativeFlags.at("trigobjs").at(currentDir),
964                                                                                            cumulativeFlags.at("muon-trigobj pairs").at(currentDir),scaleFactor);
965          else if(currentHistogram.inputCollection == "events") fill2DHistogram(histo,currentHistogram,events.product(),cumulativeFlags.at("events").at(currentDir),scaleFactor);
966          else if(currentHistogram.inputCollection == "taus") fill2DHistogram(histo,currentHistogram,taus.product(),cumulativeFlags.at("taus").at(currentDir),scaleFactor);
967          else if(currentHistogram.inputCollection == "mets") fill2DHistogram(histo,currentHistogram,mets.product(),cumulativeFlags.at("mets").at(currentDir),scaleFactor);
968          else if(currentHistogram.inputCollection == "tracks") fill2DHistogram(histo,currentHistogram,tracks.product(),cumulativeFlags.at("tracks").at(currentDir),scaleFactor);
969          else if(currentHistogram.inputCollection == "track-event pairs") fill2DHistogram(histo,currentHistogram,tracks.product(),events.product(),
970                                                                                           cumulativeFlags.at("tracks").at(currentDir),cumulativeFlags.at("events").at(currentDir),
971                                                                                           cumulativeFlags.at("track-event pairs").at(currentDir),scaleFactor);
972          else if(currentHistogram.inputCollection == "genjets") fill2DHistogram(histo,currentHistogram,genjets.product(),cumulativeFlags.at("genjets").at(currentDir),scaleFactor);
973          else if(currentHistogram.inputCollection == "mcparticles") fill2DHistogram(histo,currentHistogram,mcparticles.product(),cumulativeFlags.at("mcparticles").at(currentDir),scaleFactor);
974          else if(currentHistogram.inputCollection == "primaryvertexs") fill2DHistogram(histo,currentHistogram,primaryvertexs.product(),cumulativeFlags.at("primaryvertexs").at(currentDir),scaleFactor);
975          else if(currentHistogram.inputCollection == "bxlumis") fill2DHistogram(histo,currentHistogram,bxlumis.product(),cumulativeFlags.at("bxlumis").at(currentDir),scaleFactor);
976          else if(currentHistogram.inputCollection == "photons") fill2DHistogram(histo,currentHistogram,photons.product(),cumulativeFlags.at("photons").at(currentDir),scaleFactor);
977          else if(currentHistogram.inputCollection == "superclusters") fill2DHistogram(histo,currentHistogram,superclusters.product(),cumulativeFlags.at("superclusters").at(currentDir),scaleFactor);
978          else if(currentHistogram.inputCollection == "trigobjs") fill2DHistogram(histo,currentHistogram,trigobjs.product(),cumulativeFlags.at("trigobjs").at(currentDir),scaleFactor);
979          else if(currentHistogram.inputCollection == "stops" && datasetType_ == "signalMC") fill2DHistogram(histo,currentHistogram,stops.product(),cumulativeFlags.at("stops").at(currentDir),scaleFactor);
980        }
981      }
1049  
983      //fills histograms with the sizes of collections
1050  
1051 <      for (uint currentObjectIndex = 0; currentObjectIndex != objectsToPlot.size(); currentObjectIndex++){
1052 <        
987 <        string currentObject = objectsToPlot.at(currentObjectIndex);
988 <        string objectToPlot = "";
989 <        
990 <        // Name of objectToPlot here must match the name specified in OSUAnalysis::OSUAnalysis().
991 <        if(currentObject == "muon-muon pairs")                         objectToPlot = "dimuonPairs";
992 <        else if(currentObject == "electron-electron pairs")            objectToPlot = "dielectronPairs";
993 <        else if(currentObject == "electron-muon pairs")                objectToPlot = "electronMuonPairs";
994 <        else if(currentObject == "electron-jet pairs")                 objectToPlot = "electronJetPairs";
995 <        else if(currentObject == "muon-jet pairs")                     objectToPlot = "muonJetPairs";
996 <        else if(currentObject == "jet-jet pairs")                      objectToPlot = "dijetPairs";
997 <        else if(currentObject == "secondary jets")                     objectToPlot = "secondaryJets";
998 <        else if(currentObject == "electron-track pairs")               objectToPlot = "electronTrackPairs";
999 <        else if(currentObject == "muon-track pairs")                   objectToPlot = "muonTrackPairs";
1000 <        else if(currentObject == "muon-tau pairs")                     objectToPlot = "muonTauPairs";
1001 <        else if(currentObject == "tau-tau pairs")                      objectToPlot = "ditauPairs";
1002 <        else if(currentObject == "tau-track pairs")                    objectToPlot = "tauTrackPairs";
1003 <        else if(currentObject == "track-event pairs")                  objectToPlot = "trackEventPairs";
1004 <        else if(currentObject == "muon-secondary muon pairs")          objectToPlot = "muonSecondaryMuonPairs";
1005 <        else if(currentObject == "secondary muons")                    objectToPlot = "secondaryMuons";
1006 <        else if(currentObject == "electron-secondary electron pairs")  objectToPlot = "electronSecondaryElectronPairs";
1007 <        else if(currentObject == "secondary electrons")                objectToPlot = "secondaryElectrons";
1008 <        else if(currentObject == "electron-trigobj pairs")             objectToPlot = "electronTrigobjPairs";
1009 <        else if(currentObject == "muon-trigobj pairs")                 objectToPlot = "muonTrigobjPairs";
1010 <        else objectToPlot = currentObject;
1011 <        
1012 <        string tempCurrentObject = objectToPlot;
1013 <        tempCurrentObject.at(0) = toupper(tempCurrentObject.at(0));
1014 <        string histoName = "num" + tempCurrentObject;
1015 <        
1051 >        //fills histograms with the sizes of collections
1052 >        for (uint currentObjectIndex = 0; currentObjectIndex != objectsToPlot.size(); currentObjectIndex++){
1053  
1054 <        vector<bool> lastCutFlags = cumulativeFlags.at(currentObject).at(currentDir);
1054 >          string currentObject = objectsToPlot.at(currentObjectIndex);
1055 >          string objectToPlot = "";
1056  
1057 <        //count the number of objects passing all cuts
1058 <        int numToPlot = 0;
1059 <        for (uint currentFlag = 0; currentFlag != lastCutFlags.size(); currentFlag++){
1060 <          if(lastCutFlags.at(currentFlag)) numToPlot++;
1061 <        }
1057 >          // Name of objectToPlot here must match the name specified in OSUAnalysis::OSUAnalysis().
1058 >          if(currentObject == "muon-muon pairs")                         objectToPlot = "dimuonPairs";
1059 >          else if(currentObject == "electron-electron pairs")            objectToPlot = "dielectronPairs";
1060 >          else if(currentObject == "electron-muon pairs")                objectToPlot = "electronMuonPairs";
1061 >          else if(currentObject == "electron-jet pairs")                 objectToPlot = "electronJetPairs";
1062 >          else if(currentObject == "muon-jet pairs")                     objectToPlot = "muonJetPairs";
1063 >          else if(currentObject == "jet-jet pairs")                      objectToPlot = "dijetPairs";
1064 >          else if(currentObject == "secondary jets")                     objectToPlot = "secondaryJets";
1065 >          else if(currentObject == "electron-track pairs")               objectToPlot = "electronTrackPairs";
1066 >          else if(currentObject == "muon-track pairs")                   objectToPlot = "muonTrackPairs";
1067 >          else if(currentObject == "muon-tau pairs")                     objectToPlot = "muonTauPairs";
1068 >          else if(currentObject == "tau-tau pairs")                      objectToPlot = "ditauPairs";
1069 >          else if(currentObject == "tau-track pairs")                    objectToPlot = "tauTrackPairs";
1070 >          else if(currentObject == "track-event pairs")                  objectToPlot = "trackEventPairs";
1071 >          else if(currentObject == "muon-secondary muon pairs")          objectToPlot = "muonSecondaryMuonPairs";
1072 >          else if(currentObject == "secondary muons")                    objectToPlot = "secondaryMuons";
1073 >          else if(currentObject == "electron-secondary electron pairs")  objectToPlot = "electronSecondaryElectronPairs";
1074 >          else if(currentObject == "secondary electrons")                objectToPlot = "secondaryElectrons";
1075 >          else if(currentObject == "electron-trigobj pairs")             objectToPlot = "electronTrigobjPairs";
1076 >          else if(currentObject == "muon-trigobj pairs")                 objectToPlot = "muonTrigobjPairs";
1077 >          else objectToPlot = currentObject;
1078 >
1079 >          string tempCurrentObject = objectToPlot;
1080 >          tempCurrentObject.at(0) = toupper(tempCurrentObject.at(0));
1081 >          string histoName = "num" + tempCurrentObject;
1082 >
1083 >          //set position of primary vertex in event, in order to calculate quantities relative to it
1084 >          if(find(objectsToCut.begin(), objectsToCut.end(), currentObject) != objectsToCut.end()) {
1085 >            vector<bool> lastCutFlags = cumulativeFlags.at(currentObject).at(currentDir);
1086 >            int numToPlot = 0;
1087 >            for (uint currentFlag = 0; currentFlag != lastCutFlags.size(); currentFlag++){
1088 >              if(lastCutFlags.at(currentFlag)) numToPlot++;
1089 >            }
1090 >            if(objectToPlot == "primaryvertexs"){
1091 >              oneDHists_.at(currentChannelIndex).at(currentCut).at(histoName+"BeforePileupCorrection")->Fill(primaryvertexs->size());
1092 >              oneDHists_.at(currentChannelIndex).at(currentCut).at(histoName+"AfterPileupCorrection")->Fill(primaryvertexs->size(),scaleFactor);
1093 >            }
1094 >            else {
1095 >              oneDHists_.at(currentChannelIndex).at(currentCut).at(histoName)->Fill(numToPlot,scaleFactor);
1096 >            }
1097 >          }
1098 >        } // end for (uint currentObjectIndex = 0; currentObjectIndex != objectsToPlot.size(); currentObjectIndex++)
1099 >      } // end if(eventPassedPreviousCuts.at(currentDir)){
1100 >    } // end loop over cuts
1101  
1102 <        if(objectToPlot == "primaryvertexs"){
1026 <          oneDHists_.at(currentChannelIndex).at(currentCut).at(histoName+"BeforePileupCorrection")->Fill(primaryvertexs->size());
1027 <          oneDHists_.at(currentChannelIndex).at(currentCut).at(histoName+"AfterPileupCorrection")->Fill(primaryvertexs->size(),scaleFactor);
1028 <        }
1029 <        else {
1030 <          oneDHists_.at(currentChannelIndex).at(currentCut).at(histoName)->Fill(numToPlot,scaleFactor);
1031 <        }
1032 <      } // end for (uint currentObjectIndex = 0; currentObjectIndex != objectsToPlot.size(); currentObjectIndex++)
1033 <    }
1102 >    BNTrees_.at(currentChannelIndex)->Fill();  
1103  
1104 <  } //end loop over channel
1104 >  } // end loop over channel
1105  
1106    masterCutFlow_->fillCutFlow(masterScaleFactor);
1107  
1108 +
1109   } // end void OSUAnalysis::analyze (const edm::Event &event, const edm::EventSetup &setup)
1110  
1111  
# Line 1553 | Line 1623 | OSUAnalysis::valueLookup (const BNmuon*
1623      value = object->isGlobalMuon > 0                \
1624        && object->isPFMuon > 0                        \
1625        && object->normalizedChi2 < 10                \
1626 <                                  && object->numberOfValidMuonHits > 0        \
1626 >      && object->numberOfValidMuonHits > 0        \
1627        && object->numberOfMatchedStations > 1        \
1628        && fabs(object->correctedD0Vertex) < 0.2        \
1629        && fabs(object->correctedDZ) < 0.5        \
# Line 1564 | Line 1634 | OSUAnalysis::valueLookup (const BNmuon*
1634      value = object->isGlobalMuon > 0                \
1635        && object->isPFMuon > 0                        \
1636        && object->normalizedChi2 < 10                \
1637 <                                  && object->numberOfValidMuonHits > 0        \
1637 >      && object->numberOfValidMuonHits > 0        \
1638        && object->numberOfMatchedStations > 1        \
1639        && object->numberOfValidPixelHits > 0        \
1640        && object->numberOfLayersWithMeasurement > 5;
# Line 1619 | Line 1689 | OSUAnalysis::valueLookup (const BNmuon*
1689      d0Error = hypot (object->tkD0err, hypot (chosenVertex ()->xError, chosenVertex ()->yError));
1690      dzError = hypot (object->tkDZerr, chosenVertex ()->zError);
1691      value = fabs (object->correctedD0Vertex) > 0.2 || fabs (object->correctedDZ) > 0.5
1692 <         || fabs (object->correctedD0Vertex / d0Error) > 99.0
1693 <         || fabs (object->correctedDZ / dzError) > 99.0;
1692 >      || fabs (object->correctedD0Vertex / d0Error) > 99.0
1693 >      || fabs (object->correctedDZ / dzError) > 99.0;
1694      value = (object->isStandAloneMuon && !object->isTrackerMuon && !object->isGlobalMuon) || !value;
1695    }
1696  
# Line 2019 | Line 2089 | OSUAnalysis::valueLookup (const BNelectr
2089      d0Error = hypot (object->tkD0err, hypot (chosenVertex ()->xError, chosenVertex ()->yError));
2090      dzError = hypot (object->tkDZerr, chosenVertex ()->zError);
2091      value = fabs (object->correctedD0Vertex) > 0.2 || fabs (object->correctedDZ) > 0.5
2092 <         || fabs (object->correctedD0Vertex / d0Error) > 99.0
2093 <         || fabs (object->correctedDZ / dzError) > 99.0;
2092 >      || fabs (object->correctedD0Vertex / d0Error) > 99.0
2093 >      || fabs (object->correctedDZ / dzError) > 99.0;
2094      value = !value;
2095    }
2096  
# Line 3381 | Line 3451 | OSUAnalysis::valueLookup (const BNstop*
3451      for(BNprimaryvertexCollection::const_iterator vertex = primaryvertexs->begin (); vertex != primaryvertexs->end (); vertex++){
3452        vertex_rank++;
3453        int dist = sqrt((object->vx-vertex->x)*(object->vx-vertex->x) + \
3454 <                   (object->vy-vertex->y)*(object->vy-vertex->y) + \
3455 <                   (object->vz-vertex->z)*(object->vz-vertex->z));
3454 >                      (object->vy-vertex->y)*(object->vy-vertex->y) + \
3455 >                      (object->vz-vertex->z)*(object->vz-vertex->z));
3456  
3457        if(abs(dist) < abs(minDistToVertex)){
3458          value = vertex_rank;
# Line 3546 | Line 3616 | void OSUAnalysis::setObjectFlags(cut &cu
3616      string obj1, obj2;
3617      getTwoObjs(currentCut.inputCollection, obj1, obj2);
3618      if (inputType==obj1 ||
3619 <          inputType==obj2) {
3619 >        inputType==obj2) {
3620        // Do not add a cut to individualFlags or cumulativeFlags, if the cut is on a paired collection,
3621        // and the inputType is a member of the pair.
3622        // The cut will instead be applied when the setObjectFlags() is called for the paired collection.
# Line 3706 | Line 3776 | bool OSUAnalysis::getPreviousCumulativeF
3776   }
3777  
3778  
3779 +
3780 + template <class InputCollection>
3781 + void OSUAnalysis::assignTreeBranch(BranchSpecs parameters, InputCollection inputCollection, vector<bool> flags){
3782 +  // This function is similar to fill1DHistogram(), but instead of filling a histogram it assigns a value to a variable for the BNTree  
3783 +
3784 +  if (BNTreeBranchVals_.count(parameters.name)==0) cout << "Error[assignTreeBranch]:  trying to assign value to " << parameters.name << " that does not have a branch set up.  Will likely seg fault." << endl;  
3785 +  for (uint object = 0; object != inputCollection->size(); object++) {  
3786 +
3787 +    if (!plotAllObjectsInPassingEvents_ && !flags.at(object)) continue;  
3788 +
3789 +    string inputVariable = parameters.inputVariable;
3790 +    string function = "";
3791 +    string stringValue = "";  
3792 +    double value = valueLookup(&inputCollection->at(object), inputVariable, function, stringValue);  
3793 +    BNTreeBranchVals_.at(parameters.name).push_back(value);  
3794 +
3795 +  }
3796 + }
3797 +
3798 +
3799   template <class InputCollection>
3800   void OSUAnalysis::fill1DHistogram(TH1* histo, histogram parameters, InputCollection inputCollection,vector<bool> flags, double scaleFactor){
3801  
# Line 3723 | Line 3813 | void OSUAnalysis::fill1DHistogram(TH1* h
3813        function = currentString.substr(0,currentString.find("("));//function comes before the "("
3814        inputVariable = currentString.substr(currentString.find("(")+1);//get rest of string
3815        inputVariable = inputVariable.substr(0,inputVariable.size()-1);//remove trailing ")"
3816 <    }
3816 >    }  
3817 >
3818 >    string stringValue = "";  
3819 >    double value = valueLookup(&inputCollection->at(object), inputVariable, function, stringValue);  
3820 >    histo->Fill(value,scaleFactor);  
3821  
3728    string stringValue = "";
3729    double value = valueLookup(&inputCollection->at(object), inputVariable, function, stringValue);
3730    histo->Fill(value,scaleFactor);
3822      if (printEventInfo_) {
3823        // Write information about event to screen, for testing purposes.
3824        cout << "  Info for event:  value for histogram " << histo->GetName() << ":  " << value << endl;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines