CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Public Attributes
MuonRadiationCorrWeightProducer::lutEntryType Struct Reference

Public Member Functions

double getP (const reco::Candidate::LorentzVector &genMuonPlusP4_beforeRad, const reco::Candidate::LorentzVector &genMuonPlusP4_afterRad, const reco::Candidate::LorentzVector &genMuonMinusP4_beforeRad, const reco::Candidate::LorentzVector &genMuonMinusP4_afterRad)
 
bool isWithinBounds (double muPlusEn, double muMinusEn)
 
 lutEntryType (TFile &inputFile, const std::string &directory, double minMuPlusEn, double maxMuPlusEn, double minMuMinusEn, double maxMuMinusEn)
 
 ~lutEntryType ()
 

Public Attributes

TH2 * lut_
 
double maxMuMinusEn_
 
double maxMuPlusEn_
 
double minMuMinusEn_
 
double minMuPlusEn_
 

Detailed Description

Definition at line 47 of file MuonRadiationCorrWeightProducer.h.

Constructor & Destructor Documentation

MuonRadiationCorrWeightProducer::lutEntryType::lutEntryType ( TFile &  inputFile,
const std::string &  directory,
double  minMuPlusEn,
double  maxMuPlusEn,
double  minMuMinusEn,
double  maxMuMinusEn 
)
inline

Definition at line 49 of file MuonRadiationCorrWeightProducer.h.

References python.multivaluedict::append(), createBeamHaloJobs::directory, Exception, lumiPlot::lut, lut_, maxMuMinusEn_, maxMuPlusEn_, minMuMinusEn_, minMuPlusEn_, and AlCaHLTBitMon_QueryRunRegistry::string.

50  : minMuPlusEn_(minMuPlusEn),
51  maxMuPlusEn_(maxMuPlusEn),
52  minMuMinusEn_(minMuMinusEn),
53  maxMuMinusEn_(maxMuMinusEn),
54  lut_(0)
55  {
56  TString lutName = directory;
57  if ( lutName.Length() > 0 && !lutName.EndsWith("/") ) lutName.Append("/");
58  lutName.Append(directory); // CV: repeat directory, as it is done by GenMuonRadCorrAnalyzer
59  if ( lutName.Length() > 0 && !lutName.EndsWith("/") ) lutName.Append("/");
60  lutName.Append("genMuonRadCorr");
61  if ( minMuPlusEn_ < 0. && maxMuPlusEn_ < 0. ) lutName.Append("");
62  else if ( maxMuPlusEn_ < 0. ) lutName.Append(Form("_muPlusEnGt%1.0f", minMuPlusEn_));
63  else if ( minMuPlusEn_ < 0. ) lutName.Append(Form("_muPlusEnLt%1.0f", maxMuPlusEn_));
64  else lutName.Append(Form("_muPlusEn%1.0fto%1.0f", minMuPlusEn_, maxMuPlusEn_));
65  if ( minMuMinusEn_ < 0. && maxMuMinusEn_ < 0. ) lutName.Append("");
66  else if ( maxMuMinusEn_ < 0. ) lutName.Append(Form("_muMinusEnGt%1.0f", minMuMinusEn_));
67  else if ( minMuMinusEn_ < 0. ) lutName.Append(Form("_muMinusEnLt%1.0f", maxMuMinusEn_));
68  else lutName.Append(Form("_muMinusEn%1.0fto%1.0f", minMuMinusEn_, maxMuMinusEn_));
69  TH2* lut = dynamic_cast<TH2*>(inputFile.Get(lutName.Data()));
70  if ( !lut )
71  throw cms::Exception("MuonRadiationCorrWeightProducer")
72  << " Failed to load LUT = " << lutName << " from file = " << inputFile.GetName() << " !!\n";
73  lut_ = (TH2*)lut->Clone(std::string(lut->GetName()).append("_cloned").data());
74  if ( !lut_->GetSumw2N() ) lut_->Sumw2();
75  if ( lut_->Integral() != 0. ) lut_->Scale(1./lut_->Integral());
76  }
tuple lut
Definition: lumiPlot.py:244
MuonRadiationCorrWeightProducer::lutEntryType::~lutEntryType ( )
inline

Definition at line 77 of file MuonRadiationCorrWeightProducer.h.

References lut_.

Member Function Documentation

double MuonRadiationCorrWeightProducer::lutEntryType::getP ( const reco::Candidate::LorentzVector genMuonPlusP4_beforeRad,
const reco::Candidate::LorentzVector genMuonPlusP4_afterRad,
const reco::Candidate::LorentzVector genMuonMinusP4_beforeRad,
const reco::Candidate::LorentzVector genMuonMinusP4_afterRad 
)
inline

Definition at line 90 of file MuonRadiationCorrWeightProducer.h.

References lut_, x, and y.

92  {
93  TAxis* xAxis = lut_->GetXaxis();
94  double x = (genMuonPlusP4_beforeRad.E() - genMuonPlusP4_afterRad.E())/genMuonPlusP4_beforeRad.E();
95  int binX = xAxis->FindBin(x);
96  if ( binX < 1 ) binX = 1;
97  int numBinsX = xAxis->GetNbins();
98  if ( binX > numBinsX ) binX = numBinsX;
99 
100  TAxis* yAxis = lut_->GetYaxis();
101  double y = (genMuonMinusP4_beforeRad.E() - genMuonMinusP4_afterRad.E())/genMuonMinusP4_beforeRad.E();
102  int binY = yAxis->FindBin(y);
103  if ( binY < 1 ) binY = 1;
104  int numBinsY = yAxis->GetNbins();
105  if ( binY > numBinsY ) binY = numBinsY;
106 
107  return lut_->GetBinContent(binX, binY);
108  }
bool MuonRadiationCorrWeightProducer::lutEntryType::isWithinBounds ( double  muPlusEn,
double  muMinusEn 
)
inline

Definition at line 82 of file MuonRadiationCorrWeightProducer.h.

References maxMuMinusEn_, maxMuPlusEn_, minMuMinusEn_, and minMuPlusEn_.

83  {
84  if ( (minMuPlusEn_ <= 0. || muPlusEn > minMuPlusEn_ ) &&
85  (maxMuPlusEn_ <= 0. || muPlusEn < maxMuPlusEn_ ) &&
86  (minMuMinusEn_ <= 0. || muMinusEn > minMuMinusEn_ ) &&
87  (maxMuMinusEn_ <= 0. || muMinusEn < maxMuMinusEn_ ) ) return true;
88  else return false;
89  }

Member Data Documentation

TH2* MuonRadiationCorrWeightProducer::lutEntryType::lut_

Definition at line 115 of file MuonRadiationCorrWeightProducer.h.

Referenced by getP(), lutEntryType(), and ~lutEntryType().

double MuonRadiationCorrWeightProducer::lutEntryType::maxMuMinusEn_

Definition at line 113 of file MuonRadiationCorrWeightProducer.h.

Referenced by isWithinBounds(), and lutEntryType().

double MuonRadiationCorrWeightProducer::lutEntryType::maxMuPlusEn_

Definition at line 111 of file MuonRadiationCorrWeightProducer.h.

Referenced by isWithinBounds(), and lutEntryType().

double MuonRadiationCorrWeightProducer::lutEntryType::minMuMinusEn_

Definition at line 112 of file MuonRadiationCorrWeightProducer.h.

Referenced by isWithinBounds(), and lutEntryType().

double MuonRadiationCorrWeightProducer::lutEntryType::minMuPlusEn_

Definition at line 110 of file MuonRadiationCorrWeightProducer.h.

Referenced by isWithinBounds(), and lutEntryType().