CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Protected Attributes
MuScleFit Class Reference

#include <MuScleFit.h>

Inheritance diagram for MuScleFit:
edm::EDLooper MuScleFitBase edm::EDLooper MuScleFitBase edm::EDLooperBase edm::EDLooperBase

Public Member Functions

void beginOfJobInConstructor ()
 
void beginOfJobInConstructor ()
 
virtual void duringFastLoop ()
 
virtual void duringFastLoop ()
 
virtual edm::EDLooper::Status duringLoop (const edm::Event &event, const edm::EventSetup &eventSetup)
 
virtual edm::EDLooper::Status duringLoop (const edm::Event &event, const edm::EventSetup &eventSetup) override
 
virtual void endOfFastLoop (const unsigned int iLoop)
 
virtual void endOfFastLoop (const unsigned int iLoop)
 
virtual void endOfJob ()
 
virtual void endOfJob () override
 
virtual edm::EDLooper::Status endOfLoop (const edm::EventSetup &eventSetup, unsigned int iLoop)
 
virtual edm::EDLooper::Status endOfLoop (const edm::EventSetup &eventSetup, unsigned int iLoop) override
 
template<typename T >
std::vector< reco::LeafCandidatefillMuonCollection (const std::vector< T > &tracks)
 
template<typename T >
std::vector< reco::LeafCandidatefillMuonCollection (const std::vector< T > &tracks)
 
 MuScleFit (const edm::ParameterSet &pset)
 
 MuScleFit (const edm::ParameterSet &pset)
 
virtual void startingNewLoop (unsigned int iLoop)
 
virtual void startingNewLoop (unsigned int iLoop) override
 
virtual ~MuScleFit ()
 
virtual ~MuScleFit ()
 
- Public Member Functions inherited from edm::EDLooper
 EDLooper ()
 
 EDLooper (EDLooper const &)=delete
 
EDLooperoperator= (EDLooper const &)=delete
 
virtual ~EDLooper ()
 
- Public Member Functions inherited from edm::EDLooperBase
virtual void attachTo (ActivityRegistry &)
 Override this method if you need to monitor the state of the processing. More...
 
virtual void beginOfJob (EventSetup const &)
 
virtual void beginOfJob ()
 
void copyInfo (ScheduleInfo const &)
 
void doBeginLuminosityBlock (LuminosityBlockPrincipal &, EventSetup const &, ProcessContext *)
 
void doBeginRun (RunPrincipal &, EventSetup const &, ProcessContext *)
 
Status doDuringLoop (EventPrincipal &eventPrincipal, EventSetup const &es, ProcessingController &, StreamContext *)
 
void doEndLuminosityBlock (LuminosityBlockPrincipal &, EventSetup const &, ProcessContext *)
 
Status doEndOfLoop (EventSetup const &es)
 
void doEndRun (RunPrincipal &, EventSetup const &, ProcessContext *)
 
void doStartingNewLoop ()
 
 EDLooperBase ()
 
 EDLooperBase (EDLooperBase const &)=delete
 
virtual std::set
< eventsetup::EventSetupRecordKey
modifyingRecords () const
 
EDLooperBaseoperator= (EDLooperBase const &)=delete
 
void prepareForNextLoop (eventsetup::EventSetupProvider *esp)
 
void setActionTable (ExceptionToActionTable const *actionTable)
 
void setModuleChanger (ModuleChanger const *)
 
virtual ~EDLooperBase ()
 

Protected Member Functions

void applyBias (reco::Particle::LorentzVector &mu, const int charge)
 Apply the bias if needed using the function in MuScleFitUtils. More...
 
void applyBias (reco::Particle::LorentzVector &mu, const int charge)
 Apply the bias if needed using the function in MuScleFitUtils. More...
 
void applySmearing (reco::Particle::LorentzVector &mu)
 Apply the smearing if needed using the function in MuScleFitUtils. More...
 
void applySmearing (reco::Particle::LorentzVector &mu)
 Apply the smearing if needed using the function in MuScleFitUtils. More...
 
bool checkDeltaR (reco::Particle::LorentzVector &genMu, reco::Particle::LorentzVector &recMu)
 Check if two lorentzVector are near in deltaR. More...
 
bool checkDeltaR (reco::Particle::LorentzVector &genMu, reco::Particle::LorentzVector &recMu)
 Check if two lorentzVector are near in deltaR. More...
 
void checkParameters ()
 
void checkParameters ()
 
void fillComparisonHistograms (const reco::Particle::LorentzVector &genMu, const reco::Particle::LorentzVector &recoMu, const std::string &inputName, const int charge)
 Fill the reco vs gen and reco vs sim comparison histograms. More...
 
void fillComparisonHistograms (const reco::Particle::LorentzVector &genMu, const reco::Particle::LorentzVector &recoMu, const std::string &inputName, const int charge)
 Fill the reco vs gen and reco vs sim comparison histograms. More...
 
void selectMuons (const edm::Event &event)
 
void selectMuons (const int maxEvents, const TString &treeFileName)
 
void selectMuons (const edm::Event &event)
 
void selectMuons (const int maxEvents, const TString &treeFileName)
 
bool selGlobalMuon (const pat::Muon *aMuon)
 Function for onia selections. More...
 
bool selGlobalMuon (const pat::Muon *aMuon)
 Function for onia selections. More...
 
bool selTrackerMuon (const pat::Muon *aMuon)
 
bool selTrackerMuon (const pat::Muon *aMuon)
 
template<typename T >
void takeSelectedMuonType (const T &muon, std::vector< reco::Track > &tracks)
 Template method used to fill the track collection starting from reco::muons or pat::muons. More...
 
template<typename T >
void takeSelectedMuonType (const T &muon, std::vector< reco::Track > &tracks)
 Template method used to fill the track collection starting from reco::muons or pat::muons. More...
 
- Protected Member Functions inherited from edm::EDLooperBase
ModuleChanger const * moduleChanger () const
 This only returns a non-zero value during the call to endOfLoop. More...
 
ScheduleInfo const * scheduleInfo () const
 This returns a non-zero value after the constructor has been called. More...
 

Protected Attributes

bool compareToSimTracks_
 
bool fastLoop
 
std::string genParticlesName_
 
int iev
 
bool ifGenPart
 
bool ifHepMC
 
std::string inputRootTreeFileName_
 
unsigned int loopCounter
 
int maxEventsFromRootTree_
 
unsigned int maxLoopNumber
 
double maxResMass_hwindow [6]
 
double minResMass_hwindow [6]
 
std::auto_ptr
< MuScleFitMuonSelector
muonSelector_
 
bool negateTrigger_
 
int numberOfEwkZ
 
int numberOfSimMuons
 
int numberOfSimTracks
 
int numberOfSimVertices
 
std::string outputRootTreeFileName_
 
bool PATmuons_
 
MuScleFitPlotterplotter
 
reco::Particle::LorentzVector recMu1
 
reco::Particle::LorentzVector recMu2
 
bool saveAllToTree_
 
edm::InputTag simTracksCollection_
 
MuonServiceProxytheService
 
int totalEvents_
 
std::string triggerPath_
 
std::vector< std::string > triggerPath_
 
std::string triggerResultsLabel_
 
std::string triggerResultsProcess_
 

Additional Inherited Members

- Public Types inherited from edm::EDLooperBase
enum  Status { kContinue, kStop }
 
- Private Member Functions inherited from MuScleFitBase
 MuScleFitBase (const edm::ParameterSet &iConfig)
 
virtual ~MuScleFitBase ()
 
void clearHistoMap ()
 Clean the histograms map. More...
 
void fillHistoMap (TFile *outputFile, unsigned int iLoop)
 Create the histograms map. More...
 
void readProbabilityDistributionsFromFile ()
 Read probability distributions from a local root file. More...
 
void writeHistoMap (const unsigned int iLoop)
 Save the histograms map to file. More...
 
- Private Attributes inherited from MuScleFitBase
int debug_
 
std::vector< GenMuonPairgenMuonPairs_
 Stores the genMuon pairs and the motherId prior to the creation of the internal tree. More...
 
std::map< std::string,
Histograms * > 
mapHisto_
 The map of histograms. More...
 
std::vector< MuonPairmuonPairs_
 Used to store the muon pairs plus run and event number prior to the creation of the internal tree. More...
 
std::string probabilitiesFile_
 
std::string probabilitiesFileInPath_
 
std::vector< TFile * > theFiles_
 The files were the histograms are saved. More...
 
std::string theGenInfoRootFileName_
 
edm::InputTag theMuonLabel_
 
int theMuonType_
 
std::string theRootFileName_
 

Detailed Description

Analyzer of the Global muon tracks

Author
C.Mariotti, S.Bolognesi - INFN Torino / T.Dorigo - INFN Padova

Definition at line 181 of file MuScleFit.cc.

Constructor & Destructor Documentation

MuScleFit::MuScleFit ( const edm::ParameterSet pset)

Definition at line 355 of file MuScleFit.cc.

References MuScleFitUtils::backgroundHandler, beginOfJobInConstructor(), MuScleFitUtils::biasFunction, MuScleFitUtils::BiasType, checkParameters(), compareToSimTracks_, MuScleFitUtils::computeMinosErrors_, gather_cfg::cout, MuScleFitUtils::crossSectionHandler, MuScleFitUtils::debug, MuScleFitBase::debug_, MuScleFitUtils::debugMassResol_, MuScleFitUtils::deltaPhiMaxCut_, MuScleFitUtils::deltaPhiMinCut_, MuScleFitUtils::doBackgroundFit, MuScleFitUtils::doCrossSectionFit, MuScleFitUtils::doResolFit, MuScleFitUtils::doScaleFit, cmsRelvalreport::exit, fastLoop, MuScleFitUtils::FitStrategy, genParticlesName_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), MuScleFitUtils::goodmuon, i, inputRootTreeFileName_, j, loopCounter, MuScleFitUtils::massWindowHalfWidth, maxEventsFromRootTree_, maxLoopNumber, MuScleFitUtils::maxMuonEtaFirstRange_, MuScleFitUtils::maxMuonEtaSecondRange_, MuScleFitUtils::maxMuonPt_, maxResMass_hwindow, MuScleFitUtils::minimumShapePlots_, MuScleFitUtils::minMuonEtaFirstRange_, MuScleFitUtils::minMuonEtaSecondRange_, MuScleFitUtils::minMuonPt_, minResMass_hwindow, muonSelector_, MuScleFitUtils::MuonType, MuScleFitUtils::MuonTypeForCheckMassWindow, negateTrigger_, MuScleFitUtils::normalizeLikelihoodByEventNumber_, outputRootTreeFileName_, MuScleFitUtils::parBgr, MuScleFitUtils::parBgrFix, MuScleFitUtils::parBgrOrder, MuScleFitUtils::parBias, MuScleFitUtils::parCrossSection, MuScleFitUtils::parCrossSectionFix, MuScleFitUtils::parCrossSectionOrder, MuScleFitUtils::parResol, MuScleFitUtils::parResolFix, MuScleFitUtils::parResolMax, MuScleFitUtils::parResolMin, MuScleFitUtils::parResolOrder, MuScleFitUtils::parResolStep, MuScleFitUtils::parScale, MuScleFitUtils::parScaleFix, MuScleFitUtils::parScaleMax, MuScleFitUtils::parScaleMin, MuScleFitUtils::parScaleOrder, MuScleFitUtils::parScaleStep, MuScleFitUtils::parSmear, PATmuons_, Pi, MuScleFitUtils::rapidityBinsForZ_, MuScleFitUtils::resfind, MuScleFitUtils::ResMass, MuScleFitUtils::ResolFitType, MuScleFitUtils::resolutionFunction, MuScleFitUtils::resolutionFunctionForVec, resolutionFunctionService(), resolutionFunctionVecService(), saveAllToTree_, MuScleFitUtils::ScaleFitType, MuScleFitUtils::scaleFunction, MuScleFitUtils::scaleFunctionForVec, scaleFunctionService(), scaleFunctionVecService(), MuScleFitUtils::separateRanges_, MuScleFitUtils::sherpa_, simTracksCollection_, MuScleFitUtils::smearFunction, smearFunctionService(), MuScleFitUtils::SmearType, MuScleFitUtils::speedup, mathSSE::sqrt(), MuScleFitUtils::startWithSimplex_, AlCaHLTBitMon_QueryRunRegistry::string, MuScleFitBase::theMuonLabel_, MuScleFitBase::theMuonType_, triggerPath_, triggerResultsLabel_, triggerResultsProcess_, MuScleFitUtils::useProbsFile_, and MuScleFitUtils::x.

355  :
356  MuScleFitBase( pset ),
357  totalEvents_(0)
358 {
360  if (debug_>0) std::cout << "[MuScleFit]: Constructor" << std::endl;
361 
362  if ((theMuonType_<-4 || theMuonType_>5) && theMuonType_<10) {
363  std::cout << "[MuScleFit]: Unknown muon type! Aborting." << std::endl;
364  abort();
365  }
366 
367  loopCounter = 0;
368 
369  // Boundaries for h-function computation (to be improved!)
370  // -------------------------------------------------------
371  minResMass_hwindow[0] = 71.1876; // 76.;
372  maxResMass_hwindow[0] = 111.188; // 106.;
373  minResMass_hwindow[1] = 10.15;
374  maxResMass_hwindow[1] = 10.55;
375  minResMass_hwindow[2] = 9.8;
376  maxResMass_hwindow[2] = 10.2;
377  minResMass_hwindow[3] = 9.25;
378  maxResMass_hwindow[3] = 9.65;
379  minResMass_hwindow[4] = 3.58;
380  maxResMass_hwindow[4] = 3.78;
381  minResMass_hwindow[5] = 3.0;
382  maxResMass_hwindow[5] = 3.2;
383 
384  // Max number of loops (if > 2 then try to minimize likelihood more than once)
385  // ---------------------------------------------------------------------------
386  maxLoopNumber = pset.getUntrackedParameter<int>("maxLoopNumber", 2);
387  fastLoop = pset.getUntrackedParameter<bool>("FastLoop", true);
388 
389  // Selection of fits according to loop
390  MuScleFitUtils::doResolFit = pset.getParameter<std::vector<int> >("doResolFit");
391  MuScleFitUtils::doScaleFit = pset.getParameter<std::vector<int> >("doScaleFit");
392  MuScleFitUtils::doCrossSectionFit = pset.getParameter<std::vector<int> >("doCrossSectionFit");
393  MuScleFitUtils::doBackgroundFit = pset.getParameter<std::vector<int> >("doBackgroundFit");
394 
395  // Bias and smear types
396  // --------------------
397  int biasType = pset.getParameter<int>("BiasType");
398  MuScleFitUtils::BiasType = biasType;
399  // No error, the scale functions are used also for the bias
401  int smearType = pset.getParameter<int>("SmearType");
402  MuScleFitUtils::SmearType = smearType;
404 
405  // Fit types
406  // ---------
407  int resolFitType = pset.getParameter<int>("ResolFitType");
408  MuScleFitUtils::ResolFitType = resolFitType;
411  int scaleType = pset.getParameter<int>("ScaleFitType");
412  MuScleFitUtils::ScaleFitType = scaleType;
415 
416  // Initial parameters values
417  // -------------------------
418  MuScleFitUtils::parBias = pset.getParameter<std::vector<double> >("parBias");
419  MuScleFitUtils::parSmear = pset.getParameter<std::vector<double> >("parSmear");
420  MuScleFitUtils::parResol = pset.getParameter<std::vector<double> >("parResol");
421  MuScleFitUtils::parResolStep = pset.getUntrackedParameter<std::vector<double> >("parResolStep", std::vector<double>());
422  MuScleFitUtils::parResolMin = pset.getUntrackedParameter<std::vector<double> >("parResolMin", std::vector<double>());
423  MuScleFitUtils::parResolMax = pset.getUntrackedParameter<std::vector<double> >("parResolMax", std::vector<double>());
424  MuScleFitUtils::parScale = pset.getParameter<std::vector<double> >("parScale");
425  MuScleFitUtils::parScaleStep = pset.getUntrackedParameter<std::vector<double> >("parScaleStep", std::vector<double>());
426  MuScleFitUtils::parScaleMin = pset.getUntrackedParameter<std::vector<double> >("parScaleMin", std::vector<double>());
427  MuScleFitUtils::parScaleMax = pset.getUntrackedParameter<std::vector<double> >("parScaleMax", std::vector<double>());
428  MuScleFitUtils::parCrossSection = pset.getParameter<std::vector<double> >("parCrossSection");
429  MuScleFitUtils::parBgr = pset.getParameter<std::vector<double> >("parBgr");
430  MuScleFitUtils::parResolFix = pset.getParameter<std::vector<int> >("parResolFix");
431  MuScleFitUtils::parScaleFix = pset.getParameter<std::vector<int> >("parScaleFix");
432  MuScleFitUtils::parCrossSectionFix = pset.getParameter<std::vector<int> >("parCrossSectionFix");
433  MuScleFitUtils::parBgrFix = pset.getParameter<std::vector<int> >("parBgrFix");
434  MuScleFitUtils::parResolOrder = pset.getParameter<std::vector<int> >("parResolOrder");
435  MuScleFitUtils::parScaleOrder = pset.getParameter<std::vector<int> >("parScaleOrder");
436  MuScleFitUtils::parCrossSectionOrder = pset.getParameter<std::vector<int> >("parCrossSectionOrder");
437  MuScleFitUtils::parBgrOrder = pset.getParameter<std::vector<int> >("parBgrOrder");
438 
439  MuScleFitUtils::resfind = pset.getParameter<std::vector<int> >("resfind");
440  MuScleFitUtils::FitStrategy = pset.getParameter<int>("FitStrategy");
441 
442  // Option to skip unnecessary stuff
443  // --------------------------------
444  MuScleFitUtils::speedup = pset.getParameter<bool>("speedup");
445 
446  // Option to skip simTracks comparison
447  compareToSimTracks_ = pset.getParameter<bool>("compareToSimTracks");
448  simTracksCollection_ = pset.getUntrackedParameter<edm::InputTag>("SimTracksCollection", edm::InputTag("g4SimHits"));
449 
450  triggerResultsLabel_ = pset.getUntrackedParameter<std::string>("TriggerResultsLabel");
451  triggerResultsProcess_ = pset.getUntrackedParameter<std::string>("TriggerResultsProcess");
452  triggerPath_ = pset.getUntrackedParameter<std::vector<std::string> >("TriggerPath");
453  negateTrigger_ = pset.getUntrackedParameter<bool>("NegateTrigger", false);
454  saveAllToTree_ = pset.getUntrackedParameter<bool>("SaveAllToTree", false);
455 
456  PATmuons_ = pset.getUntrackedParameter<bool>("PATmuons", false);
457  genParticlesName_ = pset.getUntrackedParameter<std::string>("GenParticlesName", "genParticles");
458 
459  // Use the probability file or not. If not it will perform a simpler selection taking the muon pair with
460  // invariant mass closer to the pdf value and will crash if some fit is attempted.
461  MuScleFitUtils::useProbsFile_ = pset.getUntrackedParameter<bool>("UseProbsFile", true);
462 
463  // This must be set to true if using events generated with Sherpa
464  MuScleFitUtils::sherpa_ = pset.getUntrackedParameter<bool>("Sherpa", false);
465 
466  MuScleFitUtils::rapidityBinsForZ_ = pset.getUntrackedParameter<bool>("RapidityBinsForZ", true);
467 
468  // Set the cuts on muons to be used in the fit
469  MuScleFitUtils::separateRanges_ = pset.getUntrackedParameter<bool>("SeparateRanges", true);
470  MuScleFitUtils::maxMuonPt_ = pset.getUntrackedParameter<double>("MaxMuonPt", 100000000.);
471  MuScleFitUtils::minMuonPt_ = pset.getUntrackedParameter<double>("MinMuonPt", 0.);
472  MuScleFitUtils::minMuonEtaFirstRange_ = pset.getUntrackedParameter<double>("MinMuonEtaFirstRange", -6.);
473  MuScleFitUtils::maxMuonEtaFirstRange_ = pset.getUntrackedParameter<double>("MaxMuonEtaFirstRange", 6.);
474  MuScleFitUtils::minMuonEtaSecondRange_ = pset.getUntrackedParameter<double>("MinMuonEtaSecondRange", -100.);
475  MuScleFitUtils::maxMuonEtaSecondRange_ = pset.getUntrackedParameter<double>("MaxMuonEtaSecondRange", 100.);
476  MuScleFitUtils::deltaPhiMinCut_ = pset.getUntrackedParameter<double>("DeltaPhiMinCut", -100.);
477  MuScleFitUtils::deltaPhiMaxCut_ = pset.getUntrackedParameter<double>("DeltaPhiMaxCut", 100.);
478 
479  MuScleFitUtils::debugMassResol_ = pset.getUntrackedParameter<bool>("DebugMassResol", false);
480  // MuScleFitUtils::massResolComponentsStruct MuScleFitUtils::massResolComponents;
481 
482  // Check for parameters consistency
483  // it will abort in case of errors.
484  checkParameters();
485 
486  // Generate array of gaussian-distributed numbers for smearing
487  // -----------------------------------------------------------
489  std::cout << "[MuScleFit-Constructor]: Generating random values for smearing" << std::endl;
490  TF1 G("G", "[0]*exp(-0.5*pow(x,2))", -5., 5.);
491  double norm = 1/sqrt(2*TMath::Pi());
492  G.SetParameter (0,norm);
493  for (int i=0; i<10000; i++) {
494  for (int j=0; j<7; j++) {
495  MuScleFitUtils::x[j][i] = G.GetRandom();
496  }
497  }
498  }
500 
501  if(theMuonType_ > 0 && theMuonType_ < 4) {
504  }
505  else if(theMuonType_ == 0 || theMuonType_ == 4 || theMuonType_ == 5 || theMuonType_ >= 10 || theMuonType_==-1 || theMuonType_==-2 || theMuonType_==-3 || theMuonType_==-4) {
508  }
509  else{
510  std::cout<<"Wrong muon type "<<theMuonType_<<std::endl;
511  exit(1);
512  }
513 
514  // When using standalone muons switch to the single Z pdf
515  if( theMuonType_ == 2 ) {
517  }
518 
519  // Initialize ResMaxSigma And ResHalfWidth - 0 = global, 1 = SM, 2 = tracker
520  // -------------------------------------------------------------------------
539 
545 
546  MuScleFitUtils::backgroundHandler = new BackgroundHandler( pset.getParameter<std::vector<int> >("BgrFitType"),
547  pset.getParameter<std::vector<double> >("LeftWindowBorder"),
548  pset.getParameter<std::vector<double> >("RightWindowBorder"),
551 
553 
554  // Build cross section scale factors
555  // MuScleFitUtils::resfind
556 
557  MuScleFitUtils::normalizeLikelihoodByEventNumber_ = pset.getUntrackedParameter<bool>("NormalizeLikelihoodByEventNumber", true);
558  if(debug_>0) std::cout << "End of MuScleFit constructor" << std::endl;
559 
560  inputRootTreeFileName_ = pset.getParameter<std::string>("InputRootTreeFileName");
561  outputRootTreeFileName_ = pset.getParameter<std::string>("OutputRootTreeFileName");
562  maxEventsFromRootTree_ = pset.getParameter<int>("MaxEventsFromRootTree");
563 
564  MuScleFitUtils::startWithSimplex_ = pset.getParameter<bool>("StartWithSimplex");
565  MuScleFitUtils::computeMinosErrors_ = pset.getParameter<bool>("ComputeMinosErrors");
566  MuScleFitUtils::minimumShapePlots_ = pset.getParameter<bool>("MinimumShapePlots");
567 
569 }
const double Pi
static std::vector< int > doScaleFit
static std::vector< int > doResolFit
T getParameter(std::string const &) const
scaleFunctionBase< double * > * scaleFunctionService(const int identifier)
Service to build the scale functor corresponding to the passed identifier.
Definition: Functions.cc:3
MuScleFitBase(const edm::ParameterSet &iConfig)
Definition: MuScleFitBase.h:21
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
static std::vector< double > parBias
static std::vector< int > parCrossSectionOrder
static smearFunctionBase * smearFunction
static std::vector< int > parScaleOrder
edm::InputTag theMuonLabel_
Definition: MuScleFitBase.h:46
static std::vector< int > doCrossSectionFit
double maxResMass_hwindow[6]
Definition: MuScleFit.cc:266
static double maxMuonEtaSecondRange_
static std::vector< int > parBgrOrder
static double deltaPhiMaxCut_
static std::vector< double > parResolMax
unsigned int loopCounter
Definition: MuScleFit.cc:271
int totalEvents_
Definition: MuScleFit.cc:281
static bool startWithSimplex_
std::string triggerResultsProcess_
Definition: MuScleFit.cc:296
static std::vector< int > doBackgroundFit
static std::vector< double > parResol
static bool debugMassResol_
bool saveAllToTree_
Definition: MuScleFit.cc:299
void checkParameters()
Definition: MuScleFit.cc:1267
static BackgroundHandler * backgroundHandler
static double x[7][10000]
static int debug
static double ResMass[6]
static double massWindowHalfWidth[3][6]
static bool speedup
static scaleFunctionBase< std::vector< double > > * biasFunction
static std::vector< int > parBgrFix
static std::vector< double > parResolMin
static bool minimumShapePlots_
edm::InputTag simTracksCollection_
Definition: MuScleFit.cc:284
static int MuonTypeForCheckMassWindow
static double minMuonEtaFirstRange_
static int BiasType
std::vector< std::string > triggerPath_
Definition: MuScleFit.cc:297
static std::vector< int > parScaleFix
static bool computeMinosErrors_
static scaleFunctionBase< std::vector< double > > * scaleFunctionForVec
static double maxMuonPt_
static int ScaleFitType
std::string outputRootTreeFileName_
Definition: MuScleFit.cc:291
resolutionFunctionBase< std::vector< double > > * resolutionFunctionVecService(const int identifier)
Service to build the resolution functor corresponding to the passed identifier when receiving a std::...
Definition: Functions.cc:156
double minResMass_hwindow[6]
Definition: MuScleFit.cc:265
bool PATmuons_
Definition: MuScleFit.cc:285
static std::vector< double > parScaleMin
T sqrt(T t)
Definition: SSEVec.h:48
static std::vector< double > parBgr
unsigned int maxLoopNumber
Definition: MuScleFit.cc:270
static int SmearType
std::string genParticlesName_
Definition: MuScleFit.cc:286
int j
Definition: DBlmapReader.cc:9
bool compareToSimTracks_
Definition: MuScleFit.cc:283
static std::vector< double > parScaleStep
static std::vector< int > parResolFix
static std::vector< double > parSmear
void beginOfJobInConstructor()
Definition: MuScleFit.cc:599
smearFunctionBase * smearFunctionService(const int identifier)
Service to build the smearing functor corresponding to the passed identifier.
Definition: Functions.cc:101
static std::vector< int > parResolOrder
static bool sherpa_
bool fastLoop
Definition: MuScleFit.cc:273
static std::vector< double > parScaleMax
scaleFunctionBase< std::vector< double > > * scaleFunctionVecService(const int identifier)
Service to build the scale functor corresponding to the passed identifier when receiving a std::vecto...
Definition: Functions.cc:52
static std::vector< double > parScale
static double deltaPhiMinCut_
std::string triggerResultsLabel_
Definition: MuScleFit.cc:295
static bool rapidityBinsForZ_
static int ResolFitType
static int goodmuon
static bool separateRanges_
static double minMuonEtaSecondRange_
static std::vector< double > parCrossSection
static bool normalizeLikelihoodByEventNumber_
std::string inputRootTreeFileName_
Definition: MuScleFit.cc:289
std::auto_ptr< MuScleFitMuonSelector > muonSelector_
Definition: MuScleFit.cc:301
resolutionFunctionBase< double * > * resolutionFunctionService(const int identifier)
Service to build the resolution functor corresponding to the passed identifier.
Definition: Functions.cc:116
int maxEventsFromRootTree_
Definition: MuScleFit.cc:293
static int MuonType
tuple cout
Definition: gather_cfg.py:121
static double minMuonPt_
static scaleFunctionBase< double * > * scaleFunction
static bool useProbsFile_
static std::vector< int > resfind
static resolutionFunctionBase< std::vector< double > > * resolutionFunctionForVec
static int FitStrategy
static double maxMuonEtaFirstRange_
bool negateTrigger_
Definition: MuScleFit.cc:298
static CrossSectionHandler * crossSectionHandler
static std::vector< double > parResolStep
static std::vector< int > parCrossSectionFix
static resolutionFunctionBase< double * > * resolutionFunction
MuScleFit::~MuScleFit ( )
virtual

Definition at line 573 of file MuScleFit.cc.

References gather_cfg::cout, MuScleFitBase::debug_, MuScleFitBase::genMuonPairs_, inputRootTreeFileName_, MuScleFitBase::muonPairs_, outputRootTreeFileName_, saveAllToTree_, MuScleFitUtils::SavedPair, findQualityFiles::size, MuScleFitUtils::speedup, MuScleFitBase::theMuonType_, totalEvents_, and RootTreeHandler::writeTree().

573  {
574  if (debug_>0) std::cout << "[MuScleFit]: Destructor" << std::endl;
575  std::cout << "Total number of analyzed events = " << totalEvents_ << std::endl;
576 
577  if( !(outputRootTreeFileName_.empty()) ) {
578  // Save the events to a root tree unless we are reading from the edm root file and the SavedPair size is different from the totalEvents_
579  if( !(inputRootTreeFileName_.empty() && (int(MuScleFitUtils::SavedPair.size()) != totalEvents_)) ) {
580  std::cout << "Saving muon pairs to root tree" << std::endl;
581  RootTreeHandler rootTreeHandler;
583  // rootTreeHandler.writeTree(outputRootTreeFileName_, &(MuScleFitUtils::SavedPair), theMuonType_, 0, saveAllToTree_);
585  }
586  else {
587  // rootTreeHandler.writeTree(outputRootTreeFileName_, &(MuScleFitUtils::SavedPair), theMuonType_, &(MuScleFitUtils::genPair), saveAllToTree_ );
589  }
590  }
591  else {
592  std::cout << "ERROR: events in the vector = " << MuScleFitUtils::SavedPair.size() << " != totalEvents = " << totalEvents_ << std::endl;
593  }
594  }
595 }
std::vector< GenMuonPair > genMuonPairs_
Stores the genMuon pairs and the motherId prior to the creation of the internal tree.
Definition: MuScleFitBase.h:82
int totalEvents_
Definition: MuScleFit.cc:281
bool saveAllToTree_
Definition: MuScleFit.cc:299
static bool speedup
std::string outputRootTreeFileName_
Definition: MuScleFit.cc:291
static std::vector< std::pair< lorentzVector, lorentzVector > > SavedPair
void writeTree(const TString &fileName, const std::vector< MuonPair > *savedPair, const int muonType=0, const std::vector< GenMuonPair > *genPair=0, const bool saveAll=false)
std::string inputRootTreeFileName_
Definition: MuScleFit.cc:289
std::vector< MuonPair > muonPairs_
Used to store the muon pairs plus run and event number prior to the creation of the internal tree...
Definition: MuScleFitBase.h:80
tuple cout
Definition: gather_cfg.py:121
tuple size
Write out results.
MuScleFit::MuScleFit ( const edm::ParameterSet pset)
virtual MuScleFit::~MuScleFit ( )
virtual

Member Function Documentation

void MuScleFit::applyBias ( reco::Particle::LorentzVector mu,
const int  charge 
)
protected

Apply the bias if needed using the function in MuScleFitUtils.

void MuScleFit::applyBias ( reco::Particle::LorentzVector mu,
const int  charge 
)
protected

Apply the bias if needed using the function in MuScleFitUtils.

Definition at line 1256 of file MuScleFit.cc.

References MuScleFitUtils::applyBias(), MuScleFitUtils::BiasType, gather_cfg::cout, MuScleFitBase::debug_, and MuScleFitUtils::goodmuon.

Referenced by fillMuonCollection(), and selectMuons().

1257 {
1258  if( MuScleFitUtils::BiasType>0 ) {
1260  if (debug_>0) std::cout << "Muon #" << MuScleFitUtils::goodmuon
1261  << ": after bias Pt = " << mu.Pt() << std::endl;
1262  }
1263 }
double charge(const std::vector< uint8_t > &Ampls)
static int BiasType
static lorentzVector applyBias(const lorentzVector &muon, const int charge)
const int mu
Definition: Constants.h:22
static int goodmuon
tuple cout
Definition: gather_cfg.py:121
void MuScleFit::applySmearing ( reco::Particle::LorentzVector mu)
protected

Apply the smearing if needed using the function in MuScleFitUtils.

void MuScleFit::applySmearing ( reco::Particle::LorentzVector mu)
protected

Apply the smearing if needed using the function in MuScleFitUtils.

Definition at line 1247 of file MuScleFit.cc.

References MuScleFitUtils::applySmearing(), gather_cfg::cout, MuScleFitBase::debug_, MuScleFitUtils::goodmuon, and MuScleFitUtils::SmearType.

Referenced by fillMuonCollection(), and selectMuons().

1248 {
1249  if( MuScleFitUtils::SmearType>0 ) {
1251  if (debug_>0) std::cout << "Muon #" << MuScleFitUtils::goodmuon
1252  << ": after smearing Pt = " << mu.Pt() << std::endl;
1253  }
1254 }
static int SmearType
const int mu
Definition: Constants.h:22
static int goodmuon
static lorentzVector applySmearing(const lorentzVector &muon)
tuple cout
Definition: gather_cfg.py:121
void MuScleFit::beginOfJobInConstructor ( )
void MuScleFit::beginOfJobInConstructor ( )

Definition at line 599 of file MuScleFit.cc.

References gather_cfg::cout, MuScleFitPlotter::debug, MuScleFitBase::debug_, i, maxLoopNumber, plotter, MuScleFitBase::readProbabilityDistributionsFromFile(), dtT0Analyzer_cfg::rootFileName, AlCaHLTBitMon_QueryRunRegistry::string, MuScleFitBase::theFiles_, MuScleFitBase::theGenInfoRootFileName_, MuScleFitBase::theRootFileName_, and MuScleFitUtils::useProbsFile_.

Referenced by MuScleFit().

602 {
603  if (debug_>0) std::cout << "[MuScleFit]: beginOfJob" << std::endl;
604  //if(maxLoopNumber>1)
607  }
608 
609  if (debug_>0) std::cout << "[MuScleFit]: beginOfJob" << std::endl;
610 
611  // Create the root file
612  // --------------------
613  for (unsigned int i=0; i<(maxLoopNumber); i++) {
614  std::stringstream ss;
615  ss << i;
616  std::string rootFileName = ss.str() + "_" + theRootFileName_;
617  theFiles_.push_back (new TFile(rootFileName.c_str(), "RECREATE"));
618  }
619  if (debug_>0) std::cout << "[MuScleFit]: Root file created" << std::endl;
620 
621  std::cout << "creating plotter" << std::endl;
623  plotter->debug = debug_;
624 }
int i
Definition: DBlmapReader.cc:9
std::string theGenInfoRootFileName_
Definition: MuScleFitBase.h:48
unsigned int maxLoopNumber
Definition: MuScleFit.cc:270
std::string theRootFileName_
Definition: MuScleFitBase.h:47
std::vector< TFile * > theFiles_
The files were the histograms are saved.
Definition: MuScleFitBase.h:74
tuple cout
Definition: gather_cfg.py:121
static bool useProbsFile_
void readProbabilityDistributionsFromFile()
Read probability distributions from a local root file.
MuScleFitPlotter * plotter
Definition: MuScleFit.cc:275
bool MuScleFit::checkDeltaR ( reco::Particle::LorentzVector genMu,
reco::Particle::LorentzVector recMu 
)
protected

Check if two lorentzVector are near in deltaR.

bool MuScleFit::checkDeltaR ( reco::Particle::LorentzVector genMu,
reco::Particle::LorentzVector recMu 
)
protected

Check if two lorentzVector are near in deltaR.

Definition at line 1216 of file MuScleFit.cc.

References gather_cfg::cout, MuScleFitBase::debug_, MuScleFitUtils::deltaPhi(), deltaR(), and mathSSE::sqrt().

Referenced by duringFastLoop().

1216  {
1217  //first is always mu-, second is always mu+
1218  double deltaR = sqrt(MuScleFitUtils::deltaPhi(recMu.Phi(),genMu.Phi()) * MuScleFitUtils::deltaPhi(recMu.Phi(),genMu.Phi()) +
1219  ((recMu.Eta()-genMu.Eta()) * (recMu.Eta()-genMu.Eta())));
1220  if(deltaR<0.01)
1221  return true;
1222  else if( debug_ > 0 ) {
1223  std::cout<<"Reco muon "<<recMu<<" with eta "<<recMu.Eta()<<" and phi "<<recMu.Phi()<<std::endl
1224  <<" DOES NOT MATCH with generated muon from resonance: "<<std::endl
1225  <<genMu<<" with eta "<<genMu.Eta()<<" and phi "<<genMu.Phi()<<std::endl;
1226  }
1227  return false;
1228 }
T sqrt(T t)
Definition: SSEVec.h:48
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
static double deltaPhi(const double &phi1, const double &phi2)
tuple cout
Definition: gather_cfg.py:121
void MuScleFit::checkParameters ( )
protected

Simple method to check parameters consistency. It aborts the job if the parameters are not consistent.

void MuScleFit::checkParameters ( )
protected

Simple method to check parameters consistency. It aborts the job if the parameters are not consistent.

Definition at line 1267 of file MuScleFit.cc.

References MuScleFitUtils::BiasType, gather_cfg::cout, MuScleFitUtils::doBackgroundFit, MuScleFitUtils::doCrossSectionFit, MuScleFitUtils::doResolFit, MuScleFitUtils::doScaleFit, maxLoopNumber, MuScleFitUtils::parBgr, MuScleFitUtils::parBgrFix, MuScleFitUtils::parBgrOrder, MuScleFitUtils::parBias, MuScleFitUtils::parCrossSection, MuScleFitUtils::parCrossSectionFix, MuScleFitUtils::parCrossSectionOrder, MuScleFitUtils::parResol, MuScleFitUtils::parResolFix, MuScleFitUtils::parResolOrder, MuScleFitUtils::parScale, MuScleFitUtils::parScaleFix, MuScleFitUtils::parScaleOrder, MuScleFitUtils::parSmear, MuScleFitUtils::resfind, findQualityFiles::size, and MuScleFitUtils::SmearType.

Referenced by MuScleFit().

1267  {
1268 
1269  // Fits selection dimension check
1271  std::cout << "[MuScleFit-Constructor]: wrong size of resolution fits selector = " << MuScleFitUtils::doResolFit.size() << std::endl;
1272  std::cout << "it must have as many values as the number of loops, which is = " << maxLoopNumber << std::endl;
1273  abort();
1274  }
1276  std::cout << "[MuScleFit-Constructor]: wrong size of scale fits selector = " << MuScleFitUtils::doScaleFit.size() << std::endl;
1277  std::cout << "it must have as many values as the number of loops, which is = " << maxLoopNumber << std::endl;
1278  abort();
1279  }
1281  std::cout << "[MuScleFit-Constructor]: wrong size of cross section fits selector = " << MuScleFitUtils::doCrossSectionFit.size() << std::endl;
1282  std::cout << "it must have as many values as the number of loops, which is = " << maxLoopNumber << std::endl;
1283  abort();
1284  }
1286  std::cout << "[MuScleFit-Constructor]: wrong size of background fits selector = " << MuScleFitUtils::doBackgroundFit.size() << std::endl;
1287  std::cout << "it must have as many values as the number of loops, which is = " << maxLoopNumber << std::endl;
1288  abort();
1289  }
1290 
1291  // Bias parameters: dimension check
1292  // --------------------------------
1293  if ((MuScleFitUtils::BiasType==1 && MuScleFitUtils::parBias.size()!=2) || // linear in pt
1294  (MuScleFitUtils::BiasType==2 && MuScleFitUtils::parBias.size()!=2) || // linear in |eta|
1295  (MuScleFitUtils::BiasType==3 && MuScleFitUtils::parBias.size()!=4) || // sinusoidal in phi
1296  (MuScleFitUtils::BiasType==4 && MuScleFitUtils::parBias.size()!=3) || // linear in pt and |eta|
1297  (MuScleFitUtils::BiasType==5 && MuScleFitUtils::parBias.size()!=3) || // linear in pt and sinusoidal in phi
1298  (MuScleFitUtils::BiasType==6 && MuScleFitUtils::parBias.size()!=3) || // linear in |eta| and sinusoidal in phi
1299  (MuScleFitUtils::BiasType==7 && MuScleFitUtils::parBias.size()!=4) || // linear in pt and |eta| and sinusoidal in phi
1300  (MuScleFitUtils::BiasType==8 && MuScleFitUtils::parBias.size()!=4) || // linear in pt and parabolic in |eta|
1301  (MuScleFitUtils::BiasType==9 && MuScleFitUtils::parBias.size()!=2) || // exponential in pt
1302  (MuScleFitUtils::BiasType==10 && MuScleFitUtils::parBias.size()!=3) || // parabolic in pt
1303  (MuScleFitUtils::BiasType==11 && MuScleFitUtils::parBias.size()!=4) || // linear in pt and sin in phi with chg
1304  (MuScleFitUtils::BiasType==12 && MuScleFitUtils::parBias.size()!=6) || // linear in pt and para in plus sin in phi with chg
1305  (MuScleFitUtils::BiasType==13 && MuScleFitUtils::parBias.size()!=8) || // linear in pt and para in plus sin in phi with chg
1306  MuScleFitUtils::BiasType<0 || MuScleFitUtils::BiasType>13) {
1307  std::cout << "[MuScleFit-Constructor]: Wrong bias type or number of parameters: aborting!" << std::endl;
1308  abort();
1309  }
1310  // Smear parameters: dimension check
1311  // ---------------------------------
1319  MuScleFitUtils::SmearType<0 || MuScleFitUtils::SmearType>7) {
1320  std::cout << "[MuScleFit-Constructor]: Wrong smear type or number of parameters: aborting!" << std::endl;
1321  abort();
1322  }
1323  // Protect against bad size of parameters
1324  // --------------------------------------
1327  std::cout << "[MuScleFit-Constructor]: Mismatch in number of parameters for Resol: aborting!" << std::endl;
1328  abort();
1329  }
1332  std::cout << "[MuScleFit-Constructor]: Mismatch in number of parameters for Scale: aborting!" << std::endl;
1333  abort();
1334  }
1337  std::cout << "[MuScleFit-Constructor]: Mismatch in number of parameters for Bgr: aborting!" << std::endl;
1338  abort();
1339  }
1342  std::cout << "[MuScleFit-Constructor]: Mismatch in number of parameters for Bgr: aborting!" << std::endl;
1343  abort();
1344  }
1345 
1346  // Protect against an incorrect number of resonances
1347  // -------------------------------------------------
1348  if (MuScleFitUtils::resfind.size()!=6) {
1349  std::cout << "[MuScleFit-Constructor]: resfind must have 6 elements (1 Z, 3 Y, 2 Psi): aborting!" << std::endl;
1350  abort();
1351  }
1352 }
static std::vector< int > doScaleFit
static std::vector< int > doResolFit
static std::vector< double > parBias
static std::vector< int > parCrossSectionOrder
static std::vector< int > parScaleOrder
static std::vector< int > doCrossSectionFit
static std::vector< int > parBgrOrder
static std::vector< int > doBackgroundFit
static std::vector< double > parResol
static std::vector< int > parBgrFix
static int BiasType
static std::vector< int > parScaleFix
static std::vector< double > parBgr
unsigned int maxLoopNumber
Definition: MuScleFit.cc:270
static int SmearType
static std::vector< int > parResolFix
static std::vector< double > parSmear
static std::vector< int > parResolOrder
static std::vector< double > parScale
static std::vector< double > parCrossSection
tuple cout
Definition: gather_cfg.py:121
static std::vector< int > resfind
tuple size
Write out results.
static std::vector< int > parCrossSectionFix
virtual void MuScleFit::duringFastLoop ( )
virtual

This method performs all needed operations on the muon pair. It reads the muons from SavedPair and uses the iev counter to keep track of the event number. The iev is incremented internally and reset to 0 in startingNewLoop.

void MuScleFit::duringFastLoop ( )
virtual

This method performs all needed operations on the muon pair. It reads the muons from SavedPair and uses the iev counter to keep track of the event number. The iev is incremented internally and reset to 0 in startingNewLoop.

Definition at line 962 of file MuScleFit.cc.

References CrossSectionHandler::addParameters(), MuScleFitUtils::applyScale(), checkDeltaR(), compareToSimTracks_, MuScleFitUtils::computeWeight(), gather_cfg::cout, MuScleFitUtils::crossSectionHandler, MuScleFitBase::debug_, MuScleFitUtils::debugMassResol_, MuScleFitUtils::doScaleFit, fillComparisonHistograms(), first, MuScleFitUtils::genPair, i, iev, MuScleFitUtils::iev_, create_public_lumi_plots::log, loopCounter, MuScleFitBase::mapHisto_, MuScleFitUtils::massProb(), MuScleFitUtils::massResolComponents, MuScleFitUtils::massResolution(), MuScleFitUtils::parBgr, MuScleFitUtils::parCrossSection, MuScleFitUtils::parResol, MuScleFitUtils::parScale, MuScleFitUtils::parvalue, funct::pow(), mix_2012_Summer_inTimeOnly_cff::prob, recMu1, recMu2, MuScleFitUtils::ResFound, MuScleFitUtils::resolutionFunctionForVec, MuScleFitUtils::SavedPair, edm::second(), MuScleFitUtils::simPair, findQualityFiles::size, MuScleFitUtils::speedup, and histoStyle::weight.

Referenced by duringLoop(), and endOfLoop().

963 {
964  // On loops>0 the two muons are directly obtained from the SavedMuon array
965  // -----------------------------------------------------------------------
966  MuScleFitUtils::ResFound = false;
969  if (recMu1.Pt()>0 && recMu2.Pt()>0) {
971  if (debug_>0) std::cout << "Ev = " << iev << ": found muons in tree with Pt = "
972  << recMu1.Pt() << " " << recMu2.Pt() << std::endl;
973  }
974 
975  if( debug_>0 ) std::cout << "About to start lik par correction and histo filling; ResFound is "
976  << MuScleFitUtils::ResFound << std::endl;
977  // If resonance found, do the hard work
978  // ------------------------------------
980 
981  // Find weight and reference mass for this muon pair
982  // -------------------------------------------------
983  // The last parameter = true means that we want to use always the background window to compute the weight,
984  // otherwise the probability will be filled only for the resonance region.
985  double weight = MuScleFitUtils::computeWeight( (recMu1+recMu2).mass(), iev, true );
986  if (debug_>0) {
987  std::cout << "Loop #" << loopCounter << "Event #" << iev << ": before correction Pt1 = "
988  << recMu1.Pt() << " Pt2 = " << recMu2.Pt() << std::endl;
989  }
990  // For successive iterations, correct the muons only if the previous iteration was a scale fit.
991  // --------------------------------------------------------------------------------------------
992  if ( loopCounter>0 ) {
996  }
997  }
998  if (debug_>0) {
999  std::cout << "Loop #" << loopCounter << "Event #" << iev << ": after correction Pt1 = "
1000  << recMu1.Pt() << " Pt2 = " << recMu2.Pt() << std::endl;
1001  }
1002 
1004 
1005  //Fill histograms
1006  //------------------
1007 
1008  mapHisto_["hRecBestMu"]->Fill(recMu1, -1,weight);
1009  mapHisto_["hRecBestMuVSEta"]->Fill(recMu1);
1010  mapHisto_["hRecBestMu"]->Fill(recMu2, +1,weight);
1011  mapHisto_["hRecBestMuVSEta"]->Fill(recMu2);
1012  mapHisto_["hDeltaRecBestMu"]->Fill(recMu1, recMu2);
1013  // Reconstructed resonance
1014  mapHisto_["hRecBestRes"]->Fill(bestRecRes,+1, weight);
1015  mapHisto_["hRecBestResAllEvents"]->Fill(bestRecRes,+1, 1.);
1016 // // Fill histogram of Res mass vs muon variables
1017 // mapHisto_["hRecBestResVSMu"]->Fill (recMu1, bestRecRes, -1);
1018 // mapHisto_["hRecBestResVSMu"]->Fill (recMu2, bestRecRes, +1);
1019 // // Fill also the mass mu+/mu- comparisons
1020 // mapHisto_["hRecBestResVSMu"]->Fill(recMu1, recMu2, bestRecRes);
1021 
1022  mapHisto_["hRecBestResVSMu"]->Fill (recMu1, bestRecRes, -1, weight);
1023  mapHisto_["hRecBestResVSMu"]->Fill (recMu2, bestRecRes, +1, weight);
1024  // Fill also the mass mu+/mu- comparisons
1025  mapHisto_["hRecBestResVSMu"]->Fill(recMu1, recMu2, bestRecRes, weight);
1026 
1027  //-- rc 2010 filling histograms for mu+ /mu- ------
1028  // mapHisto_["hRecBestResVSMuMinus"]->Fill (recMu1, bestRecRes, -1);
1029  // mapHisto_["hRecBestResVSMuPlus"]->Fill (recMu2, bestRecRes, +1);
1030 
1031  //-- rc 2010 filling histograms MassVsMuEtaPhi------
1032  // mapHisto_["hRecBestResVSMuEtaPhi"]->Fill (recMu1, bestRecRes,-1);
1033  // mapHisto_["hRecBestResVSMuEtaPhi"]->Fill (recMu2, bestRecRes,+1);
1034 
1035  // Fill histogram of Res mass vs Res variables
1036  // mapHisto_["hRecBestResVSRes"]->Fill (bestRecRes, bestRecRes, +1);
1037  mapHisto_["hRecBestResVSRes"]->Fill (bestRecRes, bestRecRes, +1, weight);
1038 
1039 
1040 
1041 
1042 
1043 
1044  std::vector<double> * parval;
1045  std::vector<double> initpar;
1046  // Store a pointer to the vector of parameters of the last iteration, or the initial
1047  // parameters if this is the first iteration
1048  if (loopCounter==0) {
1049  initpar = MuScleFitUtils::parResol;
1050  initpar.insert( initpar.end(), MuScleFitUtils::parScale.begin(), MuScleFitUtils::parScale.end() );
1051  initpar.insert( initpar.end(), MuScleFitUtils::parCrossSection.begin(), MuScleFitUtils::parCrossSection.end() );
1052  initpar.insert( initpar.end(), MuScleFitUtils::parBgr.begin(), MuScleFitUtils::parBgr.end() );
1053  parval = &initpar;
1054  } else {
1055  parval = &(MuScleFitUtils::parvalue[loopCounter-1]);
1056  }
1057 
1058  //Compute pt resolution w.r.t generated and simulated muons
1059  //--------------------------------------------------------
1060  if( !MuScleFitUtils::speedup ) {
1061 
1062  //first is always mu-, second is always mu+
1065  }
1068  }
1069  if( compareToSimTracks_ ) {
1070  //first is always mu-, second is always mu+
1073  }
1076  }
1077  }
1078  }
1079 
1080  // ATTENTION: this was done only when a matching was found. Moved it outside because, genInfo or not, we still want to see the resolution function
1081  // Fill also the resolution histogramsm using the resolution functions:
1082  // the parameters are those from the last iteration, as the muons up to this point have also the corrections from the same iteration.
1083  // Need to use a different array (ForVec), containing functors able to operate on std::vector<double>
1084  mapHisto_["hFunctionResolPt"]->Fill( recMu1, MuScleFitUtils::resolutionFunctionForVec->sigmaPt(recMu1.Pt(), recMu1.Eta(), *parval ), -1 );
1085  mapHisto_["hFunctionResolCotgTheta"]->Fill( recMu1, MuScleFitUtils::resolutionFunctionForVec->sigmaCotgTh(recMu1.Pt(), recMu1.Eta(), *parval ), -1 );
1086  mapHisto_["hFunctionResolPhi"]->Fill( recMu1, MuScleFitUtils::resolutionFunctionForVec->sigmaPhi(recMu1.Pt(), recMu1.Eta(), *parval ), -1 );
1087  mapHisto_["hFunctionResolPt"]->Fill( recMu2, MuScleFitUtils::resolutionFunctionForVec->sigmaPt(recMu2.Pt(), recMu2.Eta(), *parval ), +1 );
1088  mapHisto_["hFunctionResolCotgTheta"]->Fill( recMu2, MuScleFitUtils::resolutionFunctionForVec->sigmaCotgTh(recMu2.Pt(), recMu2.Eta(), *parval ), +1 );
1089  mapHisto_["hFunctionResolPhi"]->Fill( recMu2, MuScleFitUtils::resolutionFunctionForVec->sigmaPhi(recMu2.Pt(), recMu2.Eta(), *parval ), +1 );
1090 
1091  // Compute likelihood histograms
1092  // -----------------------------
1093  if( debug_ > 0 ) std::cout << "mass = " << bestRecRes.mass() << std::endl;
1094  if (weight!=0.) {
1095  double massResol;
1096  double prob;
1097  double deltalike;
1098  if (loopCounter==0) {
1099  std::vector<double> initpar;
1100  for (int i=0; i<(int)(MuScleFitUtils::parResol.size()); i++) {
1101  initpar.push_back(MuScleFitUtils::parResol[i]);
1102  }
1103  for (int i=0; i<(int)(MuScleFitUtils::parScale.size()); i++) {
1104  initpar.push_back(MuScleFitUtils::parScale[i]);
1105  }
1106 // for (int i=0; i<(int)(MuScleFitUtils::parCrossSection.size()); i++) {
1107 // initpar.push_back(MuScleFitUtils::parCrossSection[i]);
1108 // }
1110 
1111  for (int i=0; i<(int)(MuScleFitUtils::parBgr.size()); i++) {
1112  initpar.push_back(MuScleFitUtils::parBgr[i]);
1113  }
1114  massResol = MuScleFitUtils::massResolution( recMu1, recMu2, initpar );
1115  // prob = MuScleFitUtils::massProb( bestRecRes.mass(), bestRecRes.Eta(), bestRecRes.Rapidity(), massResol, initpar, true );
1116  prob = MuScleFitUtils::massProb( bestRecRes.mass(), bestRecRes.Eta(), bestRecRes.Rapidity(), massResol,
1117  initpar, true, recMu1.eta(), recMu2.eta() );
1118  } else {
1121  // prob = MuScleFitUtils::massProb( bestRecRes.mass(), bestRecRes.Eta(), bestRecRes.Rapidity(),
1122  // massResol, MuScleFitUtils::parvalue[loopCounter-1], true );
1123  prob = MuScleFitUtils::massProb( bestRecRes.mass(), bestRecRes.Eta(), bestRecRes.Rapidity(),
1124  massResol, MuScleFitUtils::parvalue[loopCounter-1], true,
1125  recMu1.eta(), recMu2.eta() );
1126  }
1127  if( debug_ > 0 ) std::cout << "inside weight: mass = " << bestRecRes.mass() << ", prob = " << prob << std::endl;
1128  if (prob>0) {
1129  if( debug_ > 0 ) std::cout << "inside prob: mass = " << bestRecRes.mass() << ", prob = " << prob << std::endl;
1130 
1131  deltalike = log(prob)*weight; // NB maximum likelihood --> deltalike is maximized
1132  mapHisto_["hLikeVSMu"]->Fill(recMu1, deltalike);
1133  mapHisto_["hLikeVSMu"]->Fill(recMu2, deltalike);
1134  mapHisto_["hLikeVSMuMinus"]->Fill(recMu1, deltalike);
1135  mapHisto_["hLikeVSMuPlus"]->Fill(recMu2, deltalike);
1136 
1137  double recoMass = (recMu1+recMu2).mass();
1138  if( recoMass != 0 ) {
1139  // IMPORTANT: massResol is not a relative resolution
1140  mapHisto_["hResolMassVSMu"]->Fill(recMu1, massResol, -1);
1141  mapHisto_["hResolMassVSMu"]->Fill(recMu2, massResol, +1);
1142  mapHisto_["hFunctionResolMassVSMu"]->Fill(recMu1, massResol/recoMass, -1);
1143  mapHisto_["hFunctionResolMassVSMu"]->Fill(recMu2, massResol/recoMass, +1);
1144  }
1145 
1147  mapHisto_["hdMdPt1"]->Fill(recMu1, MuScleFitUtils::massResolComponents.dmdpt1, -1);
1148  mapHisto_["hdMdPt2"]->Fill(recMu2, MuScleFitUtils::massResolComponents.dmdpt2, +1);
1149  mapHisto_["hdMdPhi1"]->Fill(recMu1, MuScleFitUtils::massResolComponents.dmdphi1, -1);
1150  mapHisto_["hdMdPhi2"]->Fill(recMu2, MuScleFitUtils::massResolComponents.dmdphi2, +1);
1151  mapHisto_["hdMdCotgTh1"]->Fill(recMu1, MuScleFitUtils::massResolComponents.dmdcotgth1, -1);
1152  mapHisto_["hdMdCotgTh2"]->Fill(recMu2, MuScleFitUtils::massResolComponents.dmdcotgth2, +1);
1153  }
1154 
1155  if( !MuScleFitUtils::speedup ) {
1156  double genMass = (MuScleFitUtils::genPair[iev].first + MuScleFitUtils::genPair[iev].second).mass();
1157  // Fill the mass resolution (computed from MC), we use the covariance class to compute the variance
1158  if( genMass != 0 ) {
1159  mapHisto_["hGenResVSMu"]->Fill((MuScleFitUtils::genPair[iev].first), (MuScleFitUtils::genPair[iev].first + MuScleFitUtils::genPair[iev].second), -1);
1160  mapHisto_["hGenResVSMu"]->Fill((MuScleFitUtils::genPair[iev].second), (MuScleFitUtils::genPair[iev].first + MuScleFitUtils::genPair[iev].second), +1);
1161  double diffMass = (recoMass - genMass)/genMass;
1162  // double diffMass = recoMass - genMass;
1163  // Fill if for both muons
1164  double pt1 = recMu1.pt();
1165  double eta1 = recMu1.eta();
1166  double pt2 = recMu2.pt();
1167  double eta2 = recMu2.eta();
1168  // This is to avoid nan
1169  if( diffMass == diffMass ) {
1170  // Mass relative difference vs Pt and Eta. To be used to extract the true mass resolution
1171  mapHisto_["hDeltaMassOverGenMassVsPt"]->Fill(pt1, diffMass);
1172  mapHisto_["hDeltaMassOverGenMassVsPt"]->Fill(pt2, diffMass);
1173  mapHisto_["hDeltaMassOverGenMassVsEta"]->Fill(eta1, diffMass);
1174  mapHisto_["hDeltaMassOverGenMassVsEta"]->Fill(eta2, diffMass);
1175  // This is used for the covariance comparison
1176  mapHisto_["hMassResolutionVsPtEta"]->Fill(pt1, eta1, diffMass, diffMass);
1177  mapHisto_["hMassResolutionVsPtEta"]->Fill(pt2, eta2, diffMass, diffMass);
1178  }
1179  else {
1180  std::cout << "Error, there is a nan: recoMass = " << recoMass << ", genMass = " << genMass << std::endl;
1181  }
1182  }
1183  // Fill with mass resolution from resolution function
1185  mapHisto_["hFunctionResolMass"]->Fill( recMu1, std::pow(massRes,2), -1 );
1186  mapHisto_["hFunctionResolMass"]->Fill( recMu2, std::pow(massRes,2), +1 );
1187  }
1188 
1189  mapHisto_["hMass_P"]->Fill(bestRecRes.mass(), prob);
1190  if( debug_ > 0 ) std::cout << "mass = " << bestRecRes.mass() << ", prob = " << prob << std::endl;
1191  mapHisto_["hMass_fine_P"]->Fill(bestRecRes.mass(), prob);
1192 
1193  mapHisto_["hMassProbVsRes"]->Fill(bestRecRes, bestRecRes, +1, prob);
1194  mapHisto_["hMassProbVsMu"]->Fill(recMu1, bestRecRes, -1, prob);
1195  mapHisto_["hMassProbVsMu"]->Fill(recMu2, bestRecRes, +1, prob);
1196  mapHisto_["hMassProbVsRes_fine"]->Fill(bestRecRes, bestRecRes, +1, prob);
1197  mapHisto_["hMassProbVsMu_fine"]->Fill(recMu1, bestRecRes, -1, prob);
1198  mapHisto_["hMassProbVsMu_fine"]->Fill(recMu2, bestRecRes, +1, prob);
1199  }
1200  }
1201  } // end if ResFound
1202 
1203  // Fill the pair
1204  // -------------
1205  if (loopCounter>0) {
1206  if (debug_>0) std::cout << "[MuScleFit]: filling the pair" << std::endl;
1207  MuScleFitUtils::SavedPair[iev] = std::make_pair( recMu1, recMu2 );
1208  }
1209 
1210  iev++;
1212 
1213  // return kContinue;
1214 }
static std::vector< std::pair< lorentzVector, lorentzVector > > simPair
static std::vector< int > doScaleFit
int i
Definition: DBlmapReader.cc:9
unsigned int loopCounter
Definition: MuScleFit.cc:271
static std::vector< double > parResol
static bool debugMassResol_
static bool speedup
std::map< std::string, Histograms * > mapHisto_
The map of histograms.
Definition: MuScleFitBase.h:77
static bool ResFound
static double massProb(const double &mass, const double &rapidity, const int ires, const double &massResol)
void fillComparisonHistograms(const reco::Particle::LorentzVector &genMu, const reco::Particle::LorentzVector &recoMu, const std::string &inputName, const int charge)
Fill the reco vs gen and reco vs sim comparison histograms.
Definition: MuScleFit.cc:1230
static struct MuScleFitUtils::massResolComponentsStruct massResolComponents
static std::vector< std::vector< double > > parvalue
U second(std::pair< T, U > const &p)
static std::vector< std::pair< lorentzVector, lorentzVector > > genPair
static double massResolution(const lorentzVector &mu1, const lorentzVector &mu2)
reco::Particle::LorentzVector recMu2
Definition: MuScleFit.cc:279
reco::Particle::LorentzVector recMu1
Definition: MuScleFit.cc:279
static std::vector< double > parBgr
bool compareToSimTracks_
Definition: MuScleFit.cc:283
static double computeWeight(const double &mass, const int iev, const bool doUseBkgrWindow=false)
static std::vector< std::pair< lorentzVector, lorentzVector > > SavedPair
static lorentzVector applyScale(const lorentzVector &muon, const std::vector< double > &parval, const int charge)
bool first
Definition: L1TdeRCT.cc:79
static std::vector< double > parScale
static int iev_
static std::vector< double > parCrossSection
bool checkDeltaR(reco::Particle::LorentzVector &genMu, reco::Particle::LorentzVector &recMu)
Check if two lorentzVector are near in deltaR.
Definition: MuScleFit.cc:1216
tuple cout
Definition: gather_cfg.py:121
int weight
Definition: histoStyle.py:50
static resolutionFunctionBase< std::vector< double > > * resolutionFunctionForVec
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:27
tuple size
Write out results.
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
static CrossSectionHandler * crossSectionHandler
void addParameters(std::vector< double > &initpar)
Inputs the vars in a vector.
virtual edm::EDLooper::Status MuScleFit::duringLoop ( const edm::Event ,
const edm::EventSetup  
)
virtual

Called after all event modules have had a chance to process the edm::Event.

Implements edm::EDLooper.

edm::EDLooper::Status MuScleFit::duringLoop ( const edm::Event ,
const edm::EventSetup  
)
overridevirtual

Called after all event modules have had a chance to process the edm::Event.

Implements edm::EDLooper.

Definition at line 744 of file MuScleFit.cc.

References gather_cfg::cout, MuScleFitBase::debug_, duringFastLoop(), fastLoop, edm::Event::getRun(), HltComparatorCreateWorkflow::hltConfig, i, HLTConfigProvider::init(), inputRootTreeFileName_, edm::EDLooperBase::kContinue, loopCounter, negateTrigger_, selectMuons(), edm::TriggerNames::size(), findQualityFiles::size, AlCaHLTBitMon_QueryRunRegistry::string, totalEvents_, HLTConfigProvider::triggerIndex(), edm::TriggerNames::triggerName(), edm::TriggerNames::triggerNames(), triggerPath_, triggerResults, triggerResultsLabel_, and triggerResultsProcess_.

745 {
747  event.getByLabel(edm::InputTag(triggerResultsLabel_.c_str(), "", triggerResultsProcess_.c_str()), triggerResults);
748  //event.getByLabel(InputTag(triggerResultsLabel_),triggerResults);
749  bool isFired = false;
750 
751  if(triggerPath_[0] == "")
752  isFired = true;
753  else if(triggerPath_[0] == "All"){
754  isFired =triggerResults->accept();
755  if(debug_>0)
756  std::cout<<"Trigger "<<isFired<<std::endl;
757  }
758  else{
759  bool changed;
761  hltConfig.init(event.getRun(), eventSetup, triggerResultsProcess_, changed);
762 
763 
764  const edm::TriggerNames triggerNames = event.triggerNames(*triggerResults);
765 
766  for (unsigned i=0; i<triggerNames.size(); i++) {
767  std::string hltName = triggerNames.triggerName(i);
768 
769  // match the path in the pset with the true name of the trigger
770  for ( unsigned int ipath=0; ipath<triggerPath_.size(); ipath++ ) {
771  if ( hltName.find(triggerPath_[ipath]) != std::string::npos ) {
772  unsigned int triggerIndex( hltConfig.triggerIndex(hltName) );
773 
774  // triggerIndex must be less than the size of HLTR or you get a CMSException: _M_range_check
775  if (triggerIndex < triggerResults->size()) {
776  isFired = triggerResults->accept(triggerIndex);
777  if(debug_>0)
778  std::cout << triggerPath_[ipath] <<" "<< hltName << " " << isFired<<std::endl;
779  }
780  } // end if (matching the path in the pset with the true trigger name
781  }
782  }
783 
784  }
785 
786  if( negateTrigger_ && isFired ) return kContinue;
787  else if( !(negateTrigger_) && !isFired ) return kContinue;
788 
789 #ifdef USE_CALLGRIND
790  CALLGRIND_START_INSTRUMENTATION;
791 #endif
792 
793  if (debug_>0) {
794  std::cout << "[MuScleFit-duringLoop]: loopCounter = " << loopCounter
795  << " Run: " << event.id().run() << " Event: " << event.id().event() << std::endl;
796  }
797 
798  // On the first iteration we read the bank, otherwise we fetch the information from the muon tree
799  // ------------------------------------ Important Note --------------------------------------- //
800  // The fillMuonCollection method applies any smearing or bias to the muons, so we NEVER use
801  // unbiased muons.
802  // ----------------------------------------------------------------------------------------------
803  if( loopCounter == 0 ) {
804 
805  if( !fastLoop || inputRootTreeFileName_.empty() ) {
806  if( debug_ > 0 ) std::cout << "Reading from edm event" << std::endl;
808  duringFastLoop();
809  ++totalEvents_;
810  }
811  }
812 
813  return kContinue;
814 
815 #ifdef USE_CALLGRIND
816  CALLGRIND_STOP_INSTRUMENTATION;
817  CALLGRIND_DUMP_STATS;
818 #endif
819 }
int i
Definition: DBlmapReader.cc:9
void selectMuons(const edm::Event &event)
Definition: MuScleFit.cc:821
unsigned int loopCounter
Definition: MuScleFit.cc:271
int totalEvents_
Definition: MuScleFit.cc:281
std::string triggerResultsProcess_
Definition: MuScleFit.cc:296
virtual void duringFastLoop()
Definition: MuScleFit.cc:962
Strings::size_type size() const
Definition: TriggerNames.cc:39
Strings const & triggerNames() const
Definition: TriggerNames.cc:24
std::vector< std::string > triggerPath_
Definition: MuScleFit.cc:297
unsigned int triggerIndex(const std::string &triggerName) const
slot position of trigger path in trigger table (0 to size-1)
static std::string const triggerResults
Definition: EdmProvDump.cc:41
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool fastLoop
Definition: MuScleFit.cc:273
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:27
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
std::string triggerResultsLabel_
Definition: MuScleFit.cc:295
std::string inputRootTreeFileName_
Definition: MuScleFit.cc:289
tuple cout
Definition: gather_cfg.py:121
tuple size
Write out results.
bool negateTrigger_
Definition: MuScleFit.cc:298
virtual void MuScleFit::endOfFastLoop ( const unsigned int  iLoop)
virtual
void MuScleFit::endOfFastLoop ( const unsigned int  iLoop)
virtual

Definition at line 708 of file MuScleFit.cc.

References MuScleFitBase::clearHistoMap(), gather_cfg::cout, loopCounter, MuScleFitUtils::minimizeLikelihood(), plotter, MuScleFitBase::theFiles_, and MuScleFitBase::writeHistoMap().

Referenced by endOfLoop().

709 {
710  // std::cout<< "Inside endOfFastLoop, iLoop = " << iLoop << " and loopCounter = " << loopCounter << std::endl;
711 
712  if( loopCounter == 0 ) {
713  // plotter->writeHistoMap();
714  // The destructor will call the writeHistoMap after the cd to the output file
715  delete plotter;
716  }
717 
718  std::cout << "Ending loop # " << iLoop << std::endl;
719 
720  // Write the histos to file
721  // ------------------------
722  // theFiles_[iLoop]->cd();
723  writeHistoMap(iLoop);
724 
725  // Likelihood minimization to compute corrections
726  // ----------------------------------------------
727  // theFiles_[iLoop]->cd();
728  TDirectory * likelihoodDir = theFiles_[iLoop]->mkdir("likelihood");
729  likelihoodDir->cd();
731 
732  // ATTENTION, this was put BEFORE the minimizeLikelihood. Check for problems.
733  theFiles_[iLoop]->Close();
734  // ATTENTION: Check that this delete does not give any problem
735  delete theFiles_[iLoop];
736 
737  // Clear the histos
738  // ----------------
739  clearHistoMap();
740 }
static void minimizeLikelihood()
unsigned int loopCounter
Definition: MuScleFit.cc:271
void clearHistoMap()
Clean the histograms map.
void writeHistoMap(const unsigned int iLoop)
Save the histograms map to file.
std::vector< TFile * > theFiles_
The files were the histograms are saved.
Definition: MuScleFitBase.h:74
tuple cout
Definition: gather_cfg.py:121
MuScleFitPlotter * plotter
Definition: MuScleFit.cc:275
virtual void MuScleFit::endOfJob ( )
virtual

Reimplemented from edm::EDLooperBase.

void MuScleFit::endOfJob ( )
overridevirtual

Reimplemented from edm::EDLooperBase.

Definition at line 628 of file MuScleFit.cc.

References gather_cfg::cout, and MuScleFitBase::debug_.

628  {
629  if (debug_>0) std::cout << "[MuScleFit]: endOfJob" << std::endl;
630 }
tuple cout
Definition: gather_cfg.py:121
virtual edm::EDLooper::Status MuScleFit::endOfLoop ( const edm::EventSetup ,
unsigned int  iCounter 
)
virtual

Called after the system has finished one loop over the events. Thar argument is a count of how many loops have been processed before this loo. For the first time through the events the argument will be 0.

Implements edm::EDLooperBase.

edm::EDLooper::Status MuScleFit::endOfLoop ( const edm::EventSetup ,
unsigned int  iCounter 
)
overridevirtual

Called after the system has finished one loop over the events. Thar argument is a count of how many loops have been processed before this loo. For the first time through the events the argument will be 0.

Implements edm::EDLooperBase.

Definition at line 661 of file MuScleFit.cc.

References gather_cfg::cout, duringFastLoop(), endOfFastLoop(), fastLoop, iev, inputRootTreeFileName_, edm::EDLooperBase::kContinue, edm::EDLooperBase::kStop, maxEventsFromRootTree_, maxLoopNumber, MuScleFitUtils::SavedPair, selectMuons(), startingNewLoop(), and totalEvents_.

662 {
663  unsigned int iFastLoop = 1;
664 
665  // Read the events from the root tree if requested
666  if( !(inputRootTreeFileName_.empty()) ) {
668  // When reading from local file all the loops are done here
670  iFastLoop = 0;
671  }
672  else {
673  endOfFastLoop(iLoop);
674  }
675 
676  // If a fastLoop is required we do all the remaining iterations here
677  if( fastLoop == true ) {
678  for( ; iFastLoop<maxLoopNumber; ++iFastLoop ) {
679 
680  std::cout << "Starting fast loop number " << iFastLoop << std::endl;
681 
682  // In the first loop is called by the framework
683  // if( iFastLoop > 0 ) {
684  startingNewLoop(iFastLoop);
685  // }
686 
687  // std::vector<std::pair<lorentzVector,lorentzVector> >::const_iterator it = MuScleFitUtils::SavedPair.begin();
688  // for( ; it != SavedPair.end(); ++it ) {
689  while( iev<totalEvents_ ) {
690  if( iev%50000 == 0 ) {
691  std::cout << "Fast looping on event number " << iev << std::endl;
692  }
693  // This reads muons from SavedPair using iev to keep track of the event
694  duringFastLoop();
695  }
696  std::cout << "End of fast loop number " << iFastLoop << ". Ran on " << iev << " events" << std::endl;
697  endOfFastLoop(iFastLoop);
698  }
699  }
700 
701  if (iFastLoop>=maxLoopNumber-1) {
702  return kStop;
703  } else {
704  return kContinue;
705  }
706 }
void selectMuons(const edm::Event &event)
Definition: MuScleFit.cc:821
int totalEvents_
Definition: MuScleFit.cc:281
virtual void duringFastLoop()
Definition: MuScleFit.cc:962
virtual void startingNewLoop(unsigned int iLoop) override
Definition: MuScleFit.cc:634
unsigned int maxLoopNumber
Definition: MuScleFit.cc:270
static std::vector< std::pair< lorentzVector, lorentzVector > > SavedPair
bool fastLoop
Definition: MuScleFit.cc:273
std::string inputRootTreeFileName_
Definition: MuScleFit.cc:289
int maxEventsFromRootTree_
Definition: MuScleFit.cc:293
tuple cout
Definition: gather_cfg.py:121
virtual void endOfFastLoop(const unsigned int iLoop)
Definition: MuScleFit.cc:708
void MuScleFit::fillComparisonHistograms ( const reco::Particle::LorentzVector genMu,
const reco::Particle::LorentzVector recoMu,
const std::string &  inputName,
const int  charge 
)
protected

Fill the reco vs gen and reco vs sim comparison histograms.

void MuScleFit::fillComparisonHistograms ( const reco::Particle::LorentzVector genMu,
const reco::Particle::LorentzVector recoMu,
const std::string &  inputName,
const int  charge 
)
protected

Fill the reco vs gen and reco vs sim comparison histograms.

Definition at line 1230 of file MuScleFit.cc.

References DeDxDiscriminatorTools::charge(), funct::cos(), MuScleFitUtils::deltaPhiNoFabs(), MuScleFitBase::mapHisto_, mergeVDriftHistosByStation::name, funct::sin(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by duringFastLoop().

1232 {
1233  std::string name(inputName + "VSMu");
1234  mapHisto_["hResolPt"+name]->Fill(recMu, (-genMu.Pt()+recMu.Pt())/genMu.Pt(), charge);
1235  mapHisto_["hResolTheta"+name]->Fill(recMu, (-genMu.Theta()+recMu.Theta()), charge);
1236  mapHisto_["hResolCotgTheta"+name]->Fill(recMu,(-cos(genMu.Theta())/sin(genMu.Theta())
1237  +cos(recMu.Theta())/sin(recMu.Theta())), charge);
1238  mapHisto_["hResolEta"+name]->Fill(recMu, (-genMu.Eta()+recMu.Eta()),charge);
1239  mapHisto_["hResolPhi"+name]->Fill(recMu, MuScleFitUtils::deltaPhiNoFabs(recMu.Phi(), genMu.Phi()), charge);
1240 
1241  // Fill only if it was matched to a genMu and this muon is valid
1242  if( (genMu.Pt() != 0) && (recMu.Pt() != 0) ) {
1243  mapHisto_["hPtRecoVsPt"+inputName]->Fill(genMu.Pt(), recMu.Pt());
1244  }
1245 }
static double deltaPhiNoFabs(const double &phi1, const double &phi2)
Without fabs at the end, used to have a symmetric distribution for the resolution fits and variance c...
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
std::map< std::string, Histograms * > mapHisto_
The map of histograms.
Definition: MuScleFitBase.h:77
double charge(const std::vector< uint8_t > &Ampls)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
template<typename T >
std::vector<reco::LeafCandidate> MuScleFit::fillMuonCollection ( const std::vector< T > &  tracks)
template<typename T >
std::vector< reco::LeafCandidate > MuScleFit::fillMuonCollection ( const std::vector< T > &  tracks)

Definition at line 305 of file MuScleFit.cc.

References applyBias(), applySmearing(), gather_cfg::cout, MuScleFitBase::debug_, MuScleFitUtils::goodmuon, MuScleFitUtils::mMu2, RPCpg::mu, metsig::muon, patZpeak::muons, and mathSSE::sqrt().

306 {
307  std::vector<reco::LeafCandidate> muons;
308  typename std::vector<T>::const_iterator track;
309  for( track = tracks.begin(); track != tracks.end(); ++track ) {
311  mu = reco::Particle::LorentzVector(track->px(),track->py(),track->pz(),
312  sqrt(track->p()*track->p() + MuScleFitUtils::mMu2));
313  // Apply smearing if needed, and then bias
314  // ---------------------------------------
316  if (debug_>0)
317  std::cout <<std::setprecision(9)<< "Muon #" << MuScleFitUtils::goodmuon
318  << ": initial value Pt = " << mu.Pt() << std::endl;
319 
320  applySmearing(mu);
321  applyBias(mu, track->charge());
322 
323  reco::LeafCandidate muon(track->charge(),mu);
324  // Store modified muon
325  // -------------------
326  muons.push_back (muon);
327  }
328  return muons;
329 }
T sqrt(T t)
Definition: SSEVec.h:48
const int mu
Definition: Constants.h:22
void applySmearing(reco::Particle::LorentzVector &mu)
Apply the smearing if needed using the function in MuScleFitUtils.
Definition: MuScleFit.cc:1247
tuple tracks
Definition: testEve_cfg.py:39
static int goodmuon
static const double mMu2
tuple muons
Definition: patZpeak.py:38
tuple cout
Definition: gather_cfg.py:121
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:27
void applyBias(reco::Particle::LorentzVector &mu, const int charge)
Apply the bias if needed using the function in MuScleFitUtils.
Definition: MuScleFit.cc:1256
void MuScleFit::selectMuons ( const edm::Event event)
protected

Selects the muon pairs and fills the SavedPair and (if needed) the genPair vector. This version reads the events from the edm root file and performs a selection of the muons according to the parameters in the cfg.

void MuScleFit::selectMuons ( const int  maxEvents,
const TString &  treeFileName 
)
protected

Selects the muon pairs and fills the SavedPair and (if needed) the genPair vector. This version reads the events from a tree in the file specified in the cfg. The tree only contains one muon pair per event. This means that no selection is performed and we use preselected muons.

void MuScleFit::selectMuons ( const edm::Event event)
protected

Selects the muon pairs and fills the SavedPair and (if needed) the genPair vector. This version reads the events from the edm root file and performs a selection of the muons according to the parameters in the cfg.

Definition at line 821 of file MuScleFit.cc.

References prof2calltree::back, gather_cfg::cout, MuScleFitBase::debug_, MuScleFitUtils::findBestRecoRes(), first, MuScleFitBase::genMuonPairs_, MuScleFitUtils::genPair, MuScleFitBase::muonPairs_, patZpeak::muons, muonSelector_, plotter, reco::tau::disc::Pt(), recMu1, recMu2, MuScleFitUtils::ResFound, edm::Event::run(), MuScleFitUtils::SavedPair, edm::second(), MuScleFitUtils::simPair, and MuScleFitUtils::speedup.

Referenced by duringLoop(), and endOfLoop().

822 {
825 
826  std::vector<reco::LeafCandidate> muons;
827  muonSelector_->selectMuons(event, muons, genMuonPairs_, MuScleFitUtils::simPair, plotter);
828  // plotter->fillRec(muons); // @EM method already invoked inside MuScleFitMuonSelector::selectMuons()
829 
830  // Find the two muons from the resonance, and set ResFound bool
831  // ------------------------------------------------------------
832  std::pair<reco::Particle::LorentzVector, reco::Particle::LorentzVector> recMuFromBestRes =
834 
836  if (debug_>0) {
837  std::cout <<std::setprecision(9)<< "Pt after findbestrecores: " << (recMuFromBestRes.first).Pt() << " "
838  << (recMuFromBestRes.second).Pt() << std::endl;
839  std::cout << "recMu1 = " << recMu1 << std::endl;
840  std::cout << "recMu2 = " << recMu2 << std::endl;
841  }
842  recMu1 = recMuFromBestRes.first;
843  recMu2 = recMuFromBestRes.second;
844  if (debug_>0) {
845  std::cout << "after recMu1 = " << recMu1 << std::endl;
846  std::cout << "after recMu2 = " << recMu2 << std::endl;
847  std::cout << "mu1.pt = " << recMu1.Pt() << std::endl;
848  std::cout << "mu2.pt = " << recMu2.Pt() << std::endl;
849  }
850  MuScleFitUtils::SavedPair.push_back( std::make_pair( recMu1, recMu2 ) );
851  } else {
852  MuScleFitUtils::SavedPair.push_back( std::make_pair( lorentzVector(0.,0.,0.,0.), lorentzVector(0.,0.,0.,0.) ) );
853  }
854  // Save the events also in the external tree so that it can be saved late
855 
856  // std::cout << "SavedPair->size() " << MuScleFitUtils::SavedPair.size() << std::endl;
859  event.run(), event.id().event()));
860  // Fill the internal genPair tree from the external one
861  if( MuScleFitUtils::speedup == false ) {
862  MuScleFitUtils::genPair.push_back(std::make_pair( genMuonPairs_.back().mu1, genMuonPairs_.back().mu2 ));
863  }
864 }
static std::vector< std::pair< lorentzVector, lorentzVector > > simPair
std::vector< GenMuonPair > genMuonPairs_
Stores the genMuon pairs and the motherId prior to the creation of the internal tree.
Definition: MuScleFitBase.h:82
static bool speedup
static bool ResFound
reco::Particle::LorentzVector lorentzVector
Definition: GenMuonPair.h:8
U second(std::pair< T, U > const &p)
static std::vector< std::pair< lorentzVector, lorentzVector > > genPair
reco::Particle::LorentzVector recMu2
Definition: MuScleFit.cc:279
reco::Particle::LorentzVector recMu1
Definition: MuScleFit.cc:279
RunNumber_t run() const
Definition: Event.h:88
static std::vector< std::pair< lorentzVector, lorentzVector > > SavedPair
bool first
Definition: L1TdeRCT.cc:79
tuple muons
Definition: patZpeak.py:38
std::auto_ptr< MuScleFitMuonSelector > muonSelector_
Definition: MuScleFit.cc:301
std::vector< MuonPair > muonPairs_
Used to store the muon pairs plus run and event number prior to the creation of the internal tree...
Definition: MuScleFitBase.h:80
tuple cout
Definition: gather_cfg.py:121
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:27
static std::pair< lorentzVector, lorentzVector > findBestRecoRes(const std::vector< reco::LeafCandidate > &muons)
MuScleFitPlotter * plotter
Definition: MuScleFit.cc:275
void MuScleFit::selectMuons ( const int  maxEvents,
const TString &  treeFileName 
)
protected

Selects the muon pairs and fills the SavedPair and (if needed) the genPair vector. This version reads the events from a tree in the file specified in the cfg. The tree only contains one muon pair per event. This means that no selection is performed and we use preselected muons.

Definition at line 866 of file MuScleFit.cc.

References applyBias(), applySmearing(), MuScleFitUtils::BiasType, gather_cfg::cout, SiPixelRawToDigiRegional_cfi::deltaPhi, MuScleFitUtils::deltaPhi(), MuScleFitUtils::deltaPhiMaxCut_, MuScleFitUtils::deltaPhiMinCut_, MuScleFitPlotter::fillTreeGen(), MuScleFitPlotter::fillTreeRec(), MuScleFitBase::genMuonPairs_, MuScleFitUtils::genPair, inputRootTreeFileName_, MuScleFitUtils::maxMuonEtaFirstRange_, MuScleFitUtils::maxMuonEtaSecondRange_, MuScleFitUtils::maxMuonPt_, MuScleFitUtils::minMuonEtaFirstRange_, MuScleFitUtils::minMuonEtaSecondRange_, MuScleFitUtils::minMuonPt_, MuScleFitBase::muonPairs_, plotter, RootTreeHandler::readTree(), MuScleFitUtils::SavedPair, MuScleFitUtils::separateRanges_, MuScleFitUtils::SmearType, MuScleFitUtils::speedup, and MuScleFitBase::theMuonType_.

867 {
868  std::cout << "Reading muon pairs from Root Tree in " << treeFileName << std::endl;
869  RootTreeHandler rootTreeHandler;
870  std::vector<std::pair<int, int> > evtRun;
873  }
874  else {
876  }
877  // Now loop on all the pairs and apply any smearing and bias if needed
878  std::vector<std::pair<int, int> >::iterator evtRunIt = evtRun.begin();
879  std::vector<std::pair<lorentzVector,lorentzVector> >::iterator it = MuScleFitUtils::SavedPair.begin();
880  std::vector<std::pair<lorentzVector,lorentzVector> >::iterator genIt;
881  if(MuScleFitUtils::speedup == false) genIt = MuScleFitUtils::genPair.begin();
882  for( ; it != MuScleFitUtils::SavedPair.end(); ++it, ++evtRunIt ) {
883 
884  // Apply any cut if requested
885  // Note that cuts here are only applied to already selected muons. They should not be used unless
886  // you are sure that the difference is negligible (e.g. the number of events with > 2 muons is negligible).
887  double pt1 = it->first.pt();
888  // std::cout << "pt1 = " << pt1 << std::endl;
889  double pt2 = it->second.pt();
890  // std::cout << "pt2 = " << pt2 << std::endl;
891  double eta1 = it->first.eta();
892  // std::cout << "eta1 = " << eta1 << std::endl;
893  double eta2 = it->second.eta();
894  // std::cout << "eta2 = " << eta2 << std::endl;
895  // If they don't pass the cuts set to null vectors
896  bool dontPass = false;
897  bool eta1InFirstRange;
898  bool eta2InFirstRange;
899  bool eta1InSecondRange;
900  bool eta2InSecondRange;
901 
907 
908  // This is my logic, which should be erroneous, but certainly simpler...
911  eta1InFirstRange && eta2InSecondRange ) ) {
912  dontPass = true;
913  }
914  }
915  else {
916  eta1 = fabs(eta1);
917  eta2 = fabs(eta2);
924  ( ((eta1InFirstRange && !eta2InFirstRange) && (eta2InSecondRange && !eta1InSecondRange)) ||
925  ((eta2InFirstRange && !eta1InFirstRange) && (eta1InSecondRange && !eta2InSecondRange)) )) ) {
926  dontPass = true;
927  }
928  }
929 
930  // Additional check on deltaPhi
931  double deltaPhi = MuScleFitUtils::deltaPhi(it->first.phi(), it->second.phi());
932  if( (deltaPhi <= MuScleFitUtils::deltaPhiMinCut_) || (deltaPhi >= MuScleFitUtils::deltaPhiMaxCut_) ) dontPass = true;
933 
934  if( dontPass ) {
935  // std::cout << "removing muons not passing cuts" << std::endl;
936  it->first = reco::Particle::LorentzVector(0,0,0,0);
937  it->second = reco::Particle::LorentzVector(0,0,0,0);
938  }
939 
940  // First is always mu-, second mu+
941  if( (MuScleFitUtils::SmearType != 0) || (MuScleFitUtils::BiasType != 0) ) {
942  applySmearing(it->first);
943  applyBias(it->first, -1);
944  applySmearing(it->second);
945  applyBias(it->second, 1);
946  }
947  muonPairs_.push_back(MuonPair(it->first, it->second,
948  evtRunIt->second, evtRunIt->first));
949 
950  // Fill the internal genPair tree from the external one
951  if( MuScleFitUtils::speedup == false ) {
952  genMuonPairs_.push_back(GenMuonPair(genIt->first, genIt->second, 0));
953  ++genIt;
954  }
955  }
957  if( !(MuScleFitUtils::speedup) ) {
959  }
960 }
void readTree(const int maxEvents, const TString &fileName, MuonPairVector *savedPair, const int muonType, std::vector< std::pair< int, int > > *evtRun, MuonPairVector *genPair=0)
std::vector< GenMuonPair > genMuonPairs_
Stores the genMuon pairs and the motherId prior to the creation of the internal tree.
Definition: MuScleFitBase.h:82
static double maxMuonEtaSecondRange_
static double deltaPhiMaxCut_
static bool speedup
void fillTreeRec(const std::vector< std::pair< reco::Particle::LorentzVector, reco::Particle::LorentzVector > > &savedPairs)
Used when running on the root tree containing preselected muon pairs.
static double minMuonEtaFirstRange_
static int BiasType
static double maxMuonPt_
static std::vector< std::pair< lorentzVector, lorentzVector > > genPair
static int SmearType
static std::vector< std::pair< lorentzVector, lorentzVector > > SavedPair
void applySmearing(reco::Particle::LorentzVector &mu)
Apply the smearing if needed using the function in MuScleFitUtils.
Definition: MuScleFit.cc:1247
void fillTreeGen(const std::vector< std::pair< reco::Particle::LorentzVector, reco::Particle::LorentzVector > > &genPairs)
static double deltaPhiMinCut_
static bool separateRanges_
static double minMuonEtaSecondRange_
std::string inputRootTreeFileName_
Definition: MuScleFit.cc:289
std::vector< MuonPair > muonPairs_
Used to store the muon pairs plus run and event number prior to the creation of the internal tree...
Definition: MuScleFitBase.h:80
static double deltaPhi(const double &phi1, const double &phi2)
tuple cout
Definition: gather_cfg.py:121
static double minMuonPt_
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:27
static double maxMuonEtaFirstRange_
void applyBias(reco::Particle::LorentzVector &mu, const int charge)
Apply the bias if needed using the function in MuScleFitUtils.
Definition: MuScleFit.cc:1256
MuScleFitPlotter * plotter
Definition: MuScleFit.cc:275
bool MuScleFit::selGlobalMuon ( const pat::Muon aMuon)
protected

Function for onia selections.

bool MuScleFit::selGlobalMuon ( const pat::Muon aMuon)
protected

Function for onia selections.

Definition at line 1354 of file MuScleFit.cc.

References pat::Muon::globalTrack(), pat::Muon::innerTrack(), pat::Muon::muonID(), reco::HitPattern::numberOfValidMuonHits(), AlCaHLTBitMon_ParallelJobs::p, reco::HitPattern::pixelLayersWithMeasurement(), and lumiQueryAPI::q.

1354  {
1355 
1356  reco::TrackRef iTrack = aMuon->innerTrack();
1357  const reco::HitPattern& p = iTrack->hitPattern();
1358 
1359  reco::TrackRef gTrack = aMuon->globalTrack();
1360  const reco::HitPattern& q = gTrack->hitPattern();
1361 
1362  return (//isMuonInAccept(aMuon) &&// no acceptance cuts!
1363  iTrack->found() > 11 &&
1364  gTrack->chi2()/gTrack->ndof() < 20.0 &&
1365  q.numberOfValidMuonHits() > 0 &&
1366  iTrack->chi2()/iTrack->ndof() < 4.0 &&
1367  aMuon->muonID("TrackerMuonArbitrated") &&
1368  aMuon->muonID("TMLastStationAngTight") &&
1369  p.pixelLayersWithMeasurement() > 1 &&
1370  fabs(iTrack->dxy()) < 3.0 && //should be done w.r.t. PV!
1371  fabs(iTrack->dz()) < 15.0 );//should be done w.r.t. PV!
1372 }
reco::TrackRef innerTrack() const
reference to Track reconstructed in the tracker only (reimplemented from reco::Muon) ...
Definition: Muon.h:72
bool muonID(const std::string &name) const
Definition: Muon.cc:307
int pixelLayersWithMeasurement() const
Definition: HitPattern.h:738
reco::TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector (reimplemented from reco::Muon) ...
Definition: Muon.h:80
int numberOfValidMuonHits() const
Definition: HitPattern.h:590
bool MuScleFit::selTrackerMuon ( const pat::Muon aMuon)
protected
bool MuScleFit::selTrackerMuon ( const pat::Muon aMuon)
protected

Definition at line 1375 of file MuScleFit.cc.

References pat::Muon::innerTrack(), pat::Muon::muonID(), AlCaHLTBitMon_ParallelJobs::p, and reco::HitPattern::pixelLayersWithMeasurement().

1375  {
1376 
1377  reco::TrackRef iTrack = aMuon->innerTrack();
1378  const reco::HitPattern& p = iTrack->hitPattern();
1379 
1380  return (//isMuonInAccept(aMuon) // no acceptance cuts!
1381  iTrack->found() > 11 &&
1382  iTrack->chi2()/iTrack->ndof() < 4.0 &&
1383  aMuon->muonID("TrackerMuonArbitrated") &&
1384  aMuon->muonID("TMLastStationAngTight") &&
1385  p.pixelLayersWithMeasurement() > 1 &&
1386  fabs(iTrack->dxy()) < 3.0 && //should be done w.r.t. PV!
1387  fabs(iTrack->dz()) < 15.0 );//should be done w.r.t. PV!
1388 
1389 }
reco::TrackRef innerTrack() const
reference to Track reconstructed in the tracker only (reimplemented from reco::Muon) ...
Definition: Muon.h:72
bool muonID(const std::string &name) const
Definition: Muon.cc:307
int pixelLayersWithMeasurement() const
Definition: HitPattern.h:738
virtual void MuScleFit::startingNewLoop ( unsigned int  int)
virtual

Called before system starts to loop over the events. The argument is a count of how many loops have been processed. For the first time through the events the argument will be 0.

Implements edm::EDLooperBase.

void MuScleFit::startingNewLoop ( unsigned int  int)
overridevirtual

Called before system starts to loop over the events. The argument is a count of how many loops have been processed. For the first time through the events the argument will be 0.

Implements edm::EDLooperBase.

Definition at line 634 of file MuScleFit.cc.

References MuScleFitUtils::counter_resprob, gather_cfg::cout, MuScleFitBase::debug_, MuScleFitBase::fillHistoMap(), MuScleFitUtils::goodmuon, iev, MuScleFitUtils::iev_, MuScleFitUtils::loopCounter, loopCounter, MuScleFitUtils::oldNormalization_, and MuScleFitBase::theFiles_.

Referenced by endOfLoop().

635 {
636  if (debug_>0) std::cout << "[MuScleFit]: Starting loop # " << iLoop << std::endl;
637 
638  // Number of muons used
639  // --------------------
641 
642  // Counters for problem std::cout-ing
643  // -----------------------------
645 
646  // Create the root file
647  // --------------------
648  fillHistoMap(theFiles_[iLoop], iLoop);
649 
650  loopCounter = iLoop;
652 
653  iev = 0;
655 
657 }
static unsigned int loopCounter
unsigned int loopCounter
Definition: MuScleFit.cc:271
static double oldNormalization_
void fillHistoMap(TFile *outputFile, unsigned int iLoop)
Create the histograms map.
Definition: MuScleFitBase.cc:7
std::vector< TFile * > theFiles_
The files were the histograms are saved.
Definition: MuScleFitBase.h:74
static int goodmuon
static int iev_
tuple cout
Definition: gather_cfg.py:121
static int counter_resprob
template<typename T >
void MuScleFit::takeSelectedMuonType ( const T muon,
std::vector< reco::Track > &  tracks 
)
protected

Template method used to fill the track collection starting from reco::muons or pat::muons.

template<typename T >
void MuScleFit::takeSelectedMuonType ( const T muon,
std::vector< reco::Track > &  tracks 
)
protected

Template method used to fill the track collection starting from reco::muons or pat::muons.

Definition at line 332 of file MuScleFit.cc.

References MuScleFitBase::theMuonType_.

333 {
334  // std::cout<<"muon "<<muon->isGlobalMuon()<<muon->isStandAloneMuon()<<muon->isTrackerMuon()<<std::endl;
335  //NNBB: one muon can be of many kinds at once but with the theMuonType_ we are sure
336  // to avoid double counting of the same muon
337  if(muon->isGlobalMuon() && theMuonType_==1)
338  tracks.push_back(*(muon->globalTrack()));
339  else if(muon->isStandAloneMuon() && theMuonType_==2)
340  tracks.push_back(*(muon->outerTrack()));
341  else if(muon->isTrackerMuon() && theMuonType_==3)
342  tracks.push_back(*(muon->innerTrack()));
343 
344  else if( theMuonType_ == 10 && !(muon->isStandAloneMuon()) ) //particular case!!
345  tracks.push_back(*(muon->innerTrack()));
346  else if( theMuonType_ == 11 && muon->isGlobalMuon() )
347  tracks.push_back(*(muon->innerTrack()));
348  else if( theMuonType_ == 13 && muon->isTrackerMuon() )
349  tracks.push_back(*(muon->innerTrack()));
350 }
tuple tracks
Definition: testEve_cfg.py:39

Member Data Documentation

bool MuScleFit::compareToSimTracks_
protected

Definition at line 283 of file MuScleFit.cc.

Referenced by duringFastLoop(), and MuScleFit().

bool MuScleFit::fastLoop
protected

Definition at line 273 of file MuScleFit.cc.

Referenced by duringLoop(), endOfLoop(), and MuScleFit().

std::string MuScleFit::genParticlesName_
protected

Definition at line 286 of file MuScleFit.cc.

Referenced by MuScleFit().

int MuScleFit::iev
protected

Definition at line 280 of file MuScleFit.cc.

Referenced by duringFastLoop(), endOfLoop(), and startingNewLoop().

bool MuScleFit::ifGenPart
protected

Definition at line 261 of file MuScleFit.cc.

bool MuScleFit::ifHepMC
protected

Definition at line 260 of file MuScleFit.cc.

std::string MuScleFit::inputRootTreeFileName_
protected

Definition at line 289 of file MuScleFit.cc.

Referenced by duringLoop(), endOfLoop(), MuScleFit(), selectMuons(), and ~MuScleFit().

unsigned int MuScleFit::loopCounter
protected

Definition at line 271 of file MuScleFit.cc.

Referenced by duringFastLoop(), duringLoop(), endOfFastLoop(), MuScleFit(), and startingNewLoop().

int MuScleFit::maxEventsFromRootTree_
protected

Definition at line 293 of file MuScleFit.cc.

Referenced by endOfLoop(), and MuScleFit().

unsigned int MuScleFit::maxLoopNumber
protected

Definition at line 270 of file MuScleFit.cc.

Referenced by beginOfJobInConstructor(), checkParameters(), endOfLoop(), and MuScleFit().

double MuScleFit::maxResMass_hwindow
protected

Definition at line 266 of file MuScleFit.cc.

Referenced by MuScleFit().

double MuScleFit::minResMass_hwindow
protected

Definition at line 265 of file MuScleFit.cc.

Referenced by MuScleFit().

std::auto_ptr< MuScleFitMuonSelector > MuScleFit::muonSelector_
protected

Definition at line 301 of file MuScleFit.cc.

Referenced by MuScleFit(), and selectMuons().

bool MuScleFit::negateTrigger_
protected

Definition at line 298 of file MuScleFit.cc.

Referenced by duringLoop(), and MuScleFit().

int MuScleFit::numberOfEwkZ
protected

Definition at line 258 of file MuScleFit.cc.

int MuScleFit::numberOfSimMuons
protected

Definition at line 256 of file MuScleFit.cc.

int MuScleFit::numberOfSimTracks
protected

Definition at line 255 of file MuScleFit.cc.

int MuScleFit::numberOfSimVertices
protected

Definition at line 257 of file MuScleFit.cc.

std::string MuScleFit::outputRootTreeFileName_
protected

Definition at line 291 of file MuScleFit.cc.

Referenced by MuScleFit(), and ~MuScleFit().

bool MuScleFit::PATmuons_
protected

Definition at line 285 of file MuScleFit.cc.

Referenced by MuScleFit().

MuScleFitPlotter * MuScleFit::plotter
protected

Definition at line 275 of file MuScleFit.cc.

Referenced by beginOfJobInConstructor(), endOfFastLoop(), and selectMuons().

reco::Particle::LorentzVector MuScleFit::recMu1
protected

Definition at line 279 of file MuScleFit.cc.

Referenced by duringFastLoop(), and selectMuons().

reco::Particle::LorentzVector MuScleFit::recMu2
protected

Definition at line 279 of file MuScleFit.cc.

Referenced by duringFastLoop(), and selectMuons().

bool MuScleFit::saveAllToTree_
protected

Definition at line 299 of file MuScleFit.cc.

Referenced by MuScleFit(), and ~MuScleFit().

edm::InputTag MuScleFit::simTracksCollection_
protected

Definition at line 284 of file MuScleFit.cc.

Referenced by MuScleFit().

MuonServiceProxy * MuScleFit::theService
protected

Definition at line 251 of file MuScleFit.cc.

int MuScleFit::totalEvents_
protected

Definition at line 281 of file MuScleFit.cc.

Referenced by duringLoop(), endOfLoop(), and ~MuScleFit().

std::string MuScleFit::triggerPath_
protected

Definition at line 164 of file MuScleFit.h.

std::vector<std::string> MuScleFit::triggerPath_
protected

Definition at line 297 of file MuScleFit.cc.

Referenced by duringLoop(), and MuScleFit().

std::string MuScleFit::triggerResultsLabel_
protected

Definition at line 295 of file MuScleFit.cc.

Referenced by duringLoop(), and MuScleFit().

std::string MuScleFit::triggerResultsProcess_
protected

Definition at line 296 of file MuScleFit.cc.

Referenced by duringLoop(), and MuScleFit().