CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

ResolutionCreator Class Reference

Inheritance diagram for ResolutionCreator:
edm::EDAnalyzer edm::EDConsumerBase

List of all members.

Public Member Functions

 ResolutionCreator (const edm::ParameterSet &)
 ~ResolutionCreator ()

Private Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
virtual void beginJob ()
virtual void endJob ()

Private Attributes

std::vector< double > etabinVals_
int etanrbins
TF1 * fResEtaBin [10][20]
TF1 * fResPtEtaBin [10][20][20]
TH1F * hResEtaBin [10][20]
TH1F * hResPtEtaBin [10][20][20]
std::string labelName_
int matchingAlgo_
double maxDist_
double minDR_
int nrFilled
std::string objectType_
std::vector< double > pTbinVals_
int ptnrbins
TTree * tResVar
bool useDeltaR_
bool useMaxDist_

Detailed Description

Definition at line 38 of file ResolutionCreator.cc.


Constructor & Destructor Documentation

ResolutionCreator::ResolutionCreator ( const edm::ParameterSet iConfig) [explicit]

Definition at line 71 of file ResolutionCreator.cc.

References etabinVals_, edm::ParameterSet::getParameter(), labelName_, minDR_, nrFilled, objectType_, pTbinVals_, and AlCaHLTBitMon_QueryRunRegistry::string.

{
  // input parameters
  objectType_   = iConfig.getParameter< std::string >           ("object");
  labelName_  = iConfig.getParameter< std::string >             ("label");
        if(objectType_ != "met"){
    etabinVals_ = iConfig.getParameter< std::vector<double> >   ("etabinValues");
  }
  pTbinVals_    = iConfig.getParameter< std::vector<double> >   ("pTbinValues");
  minDR_        = iConfig.getParameter< double > ("minMatchingDR");

        nrFilled = 0;

}
ResolutionCreator::~ResolutionCreator ( )

Definition at line 87 of file ResolutionCreator.cc.

{
}

Member Function Documentation

void ResolutionCreator::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
) [private, virtual]

Implements edm::EDAnalyzer.

Definition at line 98 of file ResolutionCreator.cc.

References abs, b, bgen, alignCSCRings::e, HI_PhotonSkim_cff::electrons, reco::LeafCandidate::energy(), etabinVals_, etanrbins, HcalObjRepresent::Fill(), TtGenEvtProducer_cfi::genEvt, edm::Event::getByLabel(), hResPtEtaBin, j, fwrapper::jets, labelName_, m, minDR_, reco::CompositeRefCandidateT< D >::mother(), patZpeak::muons, nrFilled, reco::CompositeRefCandidateT< D >::numberOfMothers(), objectType_, AlCaHLTBitMon_ParallelJobs::p, reco::LeafCandidate::p4(), reco::LeafCandidate::pdgId(), hitfit::phidiff(), pTbinVals_, reco::LeafCandidate::status(), and metsig::tau.

{
   
 // Get the gen and cal object fourvector
   std::vector<reco::Particle *> p4gen, p4rec;
            
   edm::Handle<TtGenEvent> genEvt;
   iEvent.getByLabel ("genEvt",genEvt);

   if(genEvt->particles().size()<10) return;

   if(objectType_ == "electron"){ 
     edm::Handle<std::vector<pat::Electron> >  electrons; //to calculate the ResolutionCreator for the electrons, i used the TopElectron instead of the AOD information
     iEvent.getByLabel(labelName_,electrons);
     for(size_t e=0; e<electrons->size(); e++) { 
       for(size_t p=0; p<genEvt->particles().size(); p++){
         if( (std::abs(genEvt->particles()[p].pdgId()) == 11) && (ROOT::Math::VectorUtil::DeltaR(genEvt->particles()[p].p4(), (*electrons)[e].p4()) < minDR_) ) {
           //p4gen.push_back(new reco::Particle(genEvt->particles()[p]));
           //p4rec.push_back(new reco::Particle((pat::Electron)((*electrons)[e])));
         }
       }
     }
   }
   else if(objectType_ == "muon"){
     edm::Handle<std::vector<pat::Muon> >  muons;
     iEvent.getByLabel(labelName_,muons);
     for(size_t m=0; m<muons->size(); m++) {      
       for(size_t p=0; p<genEvt->particles().size(); p++){
         if( (std::abs(genEvt->particles()[p].pdgId()) == 13) && (ROOT::Math::VectorUtil::DeltaR(genEvt->particles()[p].p4(), (*muons)[m].p4()) < minDR_) ) {
           //p4gen.push_back(new reco::Particle(genEvt->particles()[p]));
           //p4rec.push_back(new reco::Particle((pat::Muon)((*muons)[m])));
         }
       }
     }
   }
   else if(objectType_ == "lJets" ){
     edm::Handle<std::vector<pat::Jet> > jets;
     iEvent.getByLabel(labelName_,jets);         
     if(jets->size()>=4) { 
       for(unsigned int j = 0; j<4; j++){      
         for(size_t p=0; p<genEvt->particles().size(); p++){
           if( (std::abs(genEvt->particles()[p].pdgId()) < 5) && (ROOT::Math::VectorUtil::DeltaR(genEvt->particles()[p].p4(), (*jets)[j].p4())< minDR_) ){
             //p4gen.push_back(new reco::Particle(genEvt->particles()[p]));
             //p4rec.push_back(new reco::Particle((pat::Jet)(*jets)[j]));
           }
         }
       }
     }
   }
   else if(objectType_ == "bJets" ){
     edm::Handle<std::vector<pat::Jet> > jets;
     iEvent.getByLabel(labelName_,jets);
     if(jets->size()>=4) { 
       for(unsigned int j = 0; j<4; j++){      
         for(size_t p=0; p<genEvt->particles().size(); p++){
           if( (std::abs(genEvt->particles()[p].pdgId()) == 5) && (ROOT::Math::VectorUtil::DeltaR(genEvt->particles()[p].p4(), (*jets)[j].p4())< minDR_) ) {
             //p4gen.push_back(new reco::Particle(genEvt->particles()[p]));
             //p4rec.push_back(new reco::Particle((pat::Jet)(*jets)[j]));
           }
         }
       }
     }
   }
   else if(objectType_ == "met"){
     edm::Handle<std::vector<pat::MET> >  mets;
     iEvent.getByLabel(labelName_,mets);
     if(mets->size()>=1) { 
       if( genEvt->isSemiLeptonic() && genEvt->singleNeutrino() != 0 && ROOT::Math::VectorUtil::DeltaR(genEvt->singleNeutrino()->p4(), (*mets)[0].p4()) < minDR_) {
         //p4gen.push_back(new reco::Particle(0,genEvt->singleNeutrino()->p4(),math::XYZPoint()));
         //p4rec.push_back(new reco::Particle((pat::MET)((*mets)[0])));
       }
     }
   } 
   else if(objectType_ == "tau"){
     edm::Handle<std::vector<pat::Tau> > taus; 
     iEvent.getByLabel(labelName_,taus);
     for(std::vector<pat::Tau>::const_iterator tau = taus->begin(); tau != taus->end(); ++tau) {
       // find the tau (if any) that matches a MC tau from W
       reco::GenParticle genLepton = *(tau->genLepton());
       if( std::abs(genLepton.pdgId())==15 && genLepton.status()==2 &&
           genLepton.numberOfMothers()>0 &&
           std::abs(genLepton.mother(0)->pdgId())==15 &&
           genLepton.mother(0)->numberOfMothers()>0 &&
           std::abs(genLepton.mother(0)->mother(0)->pdgId())==24 &&
           ROOT::Math::VectorUtil::DeltaR(genLepton.p4(), tau->p4()) < minDR_  ) {
       }
       //p4gen.push_back(new reco::Particle(genLepton));
       //p4rec.push_back(new reco::Particle(*tau));
     }
   }
   // Fill the object's value
     for(unsigned m=0; m<p4gen.size(); m++){ 
       double Egen     = p4gen[m]->energy(); 
       double Thetagen = p4gen[m]->theta(); 
       double Phigen   = p4gen[m]->phi();
       double Etgen    = p4gen[m]->et();
       double Etagen   = p4gen[m]->eta();
       double Ecal     = p4rec[m]->energy(); 
       double Thetacal = p4rec[m]->theta();
       double Phical   = p4rec[m]->phi();
       double Etcal    = p4rec[m]->et();
       double Etacal   = p4rec[m]->eta();
       double phidiff  = Phical- Phigen;
       if(phidiff>3.14159)  phidiff = 2.*3.14159 - phidiff;
       if(phidiff<-3.14159) phidiff = -phidiff - 2.*3.14159;
   
       // find eta and et bin
       int etabin  =  0;
       if(etanrbins > 1){
         for(unsigned int b=0; b<etabinVals_.size()-1; b++) {
           if(fabs(Etacal) > etabinVals_[b]) etabin = b;
         }
       }
     
       int ptbin  =  0;
       for(unsigned int b=0; b<pTbinVals_.size()-1; b++) {
         if(p4rec[m]->pt() > pTbinVals_[b]) ptbin = b;
       }
     
       // calculate the resolution on "a", "b", "c" & "d" according to the definition (CMS-NOTE-2006-023):
       // p = a*|p_meas|*u_1 + b*u_2 + c*u_3
       // E(fit) = E_meas * d
       //
       // with u_1 = p/|p_meas|
       //      u_3 = (u_z x u_1)/|u_z x u_1|
       //      u_2 = (u_1 x u_3)/|u_1 x u_3|
       //
       // The initial parameters values are chosen like (a, b, c, d) = (1., 0., 0., 1.)

       // 1/ calculate the unitary vectors of the basis u_1, u_2, u_3
       ROOT::Math::SVector<double,3> pcalvec(p4rec[m]->px(),p4rec[m]->py(),p4rec[m]->pz());
       ROOT::Math::SVector<double,3> pgenvec(p4gen[m]->px(),p4gen[m]->py(),p4gen[m]->pz());
       
       ROOT::Math::SVector<double,3> u_z(0,0,1);
       ROOT::Math::SVector<double,3> u_1 = ROOT::Math::Unit(pcalvec);
       ROOT::Math::SVector<double,3> u_3 = ROOT::Math::Cross(u_z,u_1)/ROOT::Math::Mag(ROOT::Math::Cross(u_z,u_1));
       ROOT::Math::SVector<double,3> u_2 = ROOT::Math::Cross(u_1,u_3)/ROOT::Math::Mag(ROOT::Math::Cross(u_1,u_3));
       double acal = 1.;
       double bcal = 0.;
       double ccal = 0.;
       double dcal = 1.;
       double agen = ROOT::Math::Dot(pgenvec,u_1)/ROOT::Math::Mag(pcalvec);
       double bgen = ROOT::Math::Dot(pgenvec,u_2);
       double cgen = ROOT::Math::Dot(pgenvec,u_3);
       double dgen = Egen/Ecal;
                                
       //fill histograms    
       ++nrFilled; 
       hResPtEtaBin[0][etabin][ptbin] -> Fill(acal-agen);
       hResPtEtaBin[1][etabin][ptbin] -> Fill(bcal-bgen);
       hResPtEtaBin[2][etabin][ptbin] -> Fill(ccal-cgen);
       hResPtEtaBin[3][etabin][ptbin] -> Fill(dcal-dgen);
       hResPtEtaBin[4][etabin][ptbin] -> Fill(Thetacal-Thetagen);
       hResPtEtaBin[5][etabin][ptbin] -> Fill(phidiff);
       hResPtEtaBin[6][etabin][ptbin] -> Fill(Etcal-Etgen);
       hResPtEtaBin[7][etabin][ptbin] -> Fill(Etacal-Etagen);

       delete p4gen[m];
       delete p4rec[m];
     }
                 
}
void ResolutionCreator::beginJob ( void  ) [private, virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 264 of file ResolutionCreator.cc.

References b, edm::errors::Configuration, etabinVals_, etanrbins, Exception, fResEtaBin, fResPtEtaBin, hResEtaBin, hResPtEtaBin, objectType_, pTbinVals_, ptnrbins, and tResVar.

{
  edm::Service<TFileService> fs;
  if (!fs) throw edm::Exception(edm::errors::Configuration, "TFileService missing from configuration!");

        // input constants  
  TString         resObsName[8]         = {"_ares","_bres","_cres","_dres","_thres","_phres","_etres","_etares"};
  int             resObsNrBins          = 120;
  if( (objectType_ == "muon") || (objectType_ == "electron") ) resObsNrBins = 80;
  std::vector<double>  resObsMin, resObsMax;
  if(objectType_ == "electron"){ 
    resObsMin.push_back(-0.15);  resObsMin.push_back(-0.2);  resObsMin.push_back(-0.1);  resObsMin.push_back(-0.15);  resObsMin.push_back(-0.0012); resObsMin.push_back(-0.009);  resObsMin.push_back(-16);   resObsMin.push_back(-0.0012);   
    resObsMax.push_back( 0.15);  resObsMax.push_back( 0.2);  resObsMax.push_back( 0.1);  resObsMax.push_back( 0.15);  resObsMax.push_back( 0.0012); resObsMax.push_back( 0.009);  resObsMax.push_back( 16);   resObsMax.push_back( 0.0012);
  } else if(objectType_ == "muon"){
    resObsMin.push_back(-0.15);  resObsMin.push_back(-0.1);  resObsMin.push_back(-0.05);  resObsMin.push_back(-0.15);  resObsMin.push_back(-0.004);  resObsMin.push_back(-0.003);  resObsMin.push_back(-8);    resObsMin.push_back(-0.004);   
    resObsMax.push_back( 0.15);  resObsMax.push_back( 0.1);  resObsMax.push_back( 0.05);  resObsMax.push_back( 0.15);  resObsMax.push_back( 0.004);  resObsMax.push_back( 0.003);  resObsMax.push_back( 8);    resObsMax.push_back( 0.004);
  } else if(objectType_ == "tau"){ 
    resObsMin.push_back(-1.);    resObsMin.push_back(-10.);  resObsMin.push_back(-10);   resObsMin.push_back(-1.);   resObsMin.push_back(-0.1);    resObsMin.push_back(-0.1);    resObsMin.push_back(-80);   resObsMin.push_back(-0.1);   
    resObsMax.push_back( 1.);    resObsMax.push_back( 10.);  resObsMax.push_back( 10);   resObsMax.push_back( 1.);   resObsMax.push_back( 0.1);    resObsMax.push_back( 0.1);    resObsMax.push_back( 50);   resObsMax.push_back( 0.1);
  } else if(objectType_ == "lJets" || objectType_ == "bJets"){
    resObsMin.push_back(-1.);    resObsMin.push_back(-10.);  resObsMin.push_back(-10.);  resObsMin.push_back(-1.);   resObsMin.push_back(-0.4);    resObsMin.push_back(-0.6);    resObsMin.push_back( -80);  resObsMin.push_back(-0.6);   
    resObsMax.push_back( 1.);    resObsMax.push_back( 10.);  resObsMax.push_back( 10.);  resObsMax.push_back( 1.);   resObsMax.push_back( 0.4);    resObsMax.push_back( 0.6);    resObsMax.push_back( 80);   resObsMax.push_back( 0.6);
  } else{
    resObsMin.push_back(-2.);   resObsMin.push_back(-150.); resObsMin.push_back(-150.); resObsMin.push_back(-2.);   resObsMin.push_back(-6);      resObsMin.push_back(-6);      resObsMin.push_back( -180); resObsMin.push_back(-6);   
    resObsMax.push_back( 3.);   resObsMax.push_back( 150.); resObsMax.push_back( 150.); resObsMax.push_back( 3.);   resObsMax.push_back( 6);      resObsMax.push_back( 6);      resObsMax.push_back(  180); resObsMax.push_back( 6);
  }
  
  const char*   resObsVsPtFit[8]        = {     "[0]+[1]*exp(-[2]*x)",
                                          "[0]+[1]*exp(-[2]*x)",
                                          "[0]+[1]*exp(-[2]*x)",
                                          "[0]+[1]*exp(-[2]*x)",
                                                                                                                                                                "[0]+[1]*exp(-[2]*x)",
                                                                                                                                                                "[0]+[1]*exp(-[2]*x)",
                                                                                                                                                                "pol1",
                                                                                                                                                                "[0]+[1]*exp(-[2]*x)"
                                                                                                                                                        };
 
  ptnrbins        = pTbinVals_.size()-1;
  double *ptbins  = new double[pTbinVals_.size()];
  for(unsigned int b=0; b<pTbinVals_.size(); b++)  ptbins[b]  = pTbinVals_[b];
  double *etabins;
  if(objectType_ != "met"){
    etanrbins  = etabinVals_.size()-1;
    etabins    = new double[etabinVals_.size()];
    for(unsigned int b=0; b<etabinVals_.size(); b++) etabins[b] = etabinVals_[b];
  }else{
    etanrbins = 1;
    etabins    = new double[2];
    etabins[0] = 0; etabins[1] = 5.;
  }
        

  //define the histograms booked
  for(Int_t ro=0; ro<8; ro++) {
    for(Int_t etab=0; etab<etanrbins; etab++) { 
      for(Int_t ptb=0; ptb<ptnrbins; ptb++) {
        TString obsName = objectType_; obsName += resObsName[ro]; obsName += "_etabin"; obsName += etab; obsName += "_ptbin";
                                obsName += ptb;
                                hResPtEtaBin[ro][etab][ptb] = fs->make<TH1F>(obsName,obsName,resObsNrBins,resObsMin[ro],resObsMax[ro]);
        fResPtEtaBin[ro][etab][ptb] = fs->make<TF1>("F_"+obsName,"gaus");
      }
      TString obsName2 = objectType_; obsName2 += resObsName[ro]; obsName2 += "_etabin"; obsName2 += etab;
      hResEtaBin[ro][etab] = fs->make<TH1F>(obsName2,obsName2,ptnrbins,ptbins);
      fResEtaBin[ro][etab] = fs->make<TF1>("F_"+obsName2,resObsVsPtFit[ro],pTbinVals_[0],pTbinVals_[pTbinVals_.size()-1]);
    }
  }
        tResVar = fs->make< TTree >("tResVar","Resolution tree");

  delete [] etabins; 
  delete [] ptbins; 

}
void ResolutionCreator::endJob ( void  ) [private, virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 339 of file ResolutionCreator.cc.

References error, eta(), etabinVals_, etanrbins, fResEtaBin, fResPtEtaBin, hResEtaBin, hResPtEtaBin, nrFilled, objectType_, pTbinVals_, ptnrbins, tResVar, and relativeConstraints::value.

                          {
  TString         resObsName2[8]        = {"a","b","c","d","theta","phi","et","eta"};
  Int_t ro=0;
  Double_t pt=0.;
  Double_t eta=0.;
  Double_t value,error;

  tResVar->Branch("Pt",&pt,"Pt/D");
  tResVar->Branch("Eta",&eta,"Eta/D");
  tResVar->Branch("ro",&ro,"ro/I");
  tResVar->Branch("value",&value,"value/D");
  tResVar->Branch("error",&error,"error/D");
  
  for(ro=0; ro<8; ro++) {
    for(int etab=0; etab<etanrbins; etab++) {   
      //CD set eta at the center of the bin
      eta = etanrbins > 1 ? (etabinVals_[etab]+etabinVals_[etab+1])/2. : 2.5 ; 
      for(int ptb=0; ptb<ptnrbins; ptb++) {
                                //CD set pt at the center of the bin
                                pt = (pTbinVals_[ptb]+pTbinVals_[ptb+1])/2.; 
        double maxcontent = 0.;
                                int maxbin = 0;
                                for(int nb=1; nb<hResPtEtaBin[ro][etab][ptb]->GetNbinsX(); nb ++){
                                if (hResPtEtaBin[ro][etab][ptb]->GetBinContent(nb)>maxcontent) {
                                maxcontent = hResPtEtaBin[ro][etab][ptb]->GetBinContent(nb);
                                maxbin = nb;
                                }
                                }
                                int range = (int)(hResPtEtaBin[ro][etab][ptb]->GetNbinsX()/6); //in order that ~1/3 of X-axis range is fitted
                        fResPtEtaBin[ro][etab][ptb] -> SetRange(hResPtEtaBin[ro][etab][ptb]->GetBinCenter(maxbin-range),
                                hResPtEtaBin[ro][etab][ptb]->GetBinCenter(maxbin+range));
                                fResPtEtaBin[ro][etab][ptb] -> SetParameters(hResPtEtaBin[ro][etab][ptb] -> GetMaximum(),
                                                                                hResPtEtaBin[ro][etab][ptb] -> GetMean(),
                                                                                                                                                                                                        hResPtEtaBin[ro][etab][ptb] -> GetRMS());
                                hResPtEtaBin[ro][etab][ptb] -> Fit(fResPtEtaBin[ro][etab][ptb]->GetName(),"RQ");
                        hResEtaBin[ro][etab]        -> SetBinContent(ptb+1,fResPtEtaBin[ro][etab][ptb]->GetParameter(2));
                        hResEtaBin[ro][etab]        -> SetBinError(ptb+1,fResPtEtaBin[ro][etab][ptb]->GetParError(2));
                                //CD: Fill the tree
                                value = fResPtEtaBin[ro][etab][ptb]->GetParameter(2); //parameter value
                                error = fResPtEtaBin[ro][etab][ptb]->GetParError(2);  //parameter error
                                tResVar->Fill();
      }
      //CD: add a fake entry in pt=0 for the NN training
      // for that, use a linear extrapolation.
      pt = 0.;
      value =   ((pTbinVals_[0]+pTbinVals_[1])/2.)*(fResPtEtaBin[ro][etab][0]->GetParameter(2)-fResPtEtaBin[ro][etab][1]->GetParameter(2))/((pTbinVals_[2]-pTbinVals_[0])/2.)+fResPtEtaBin[ro][etab][0]->GetParameter(2);
      error = fResPtEtaBin[ro][etab][0]->GetParError(2)+fResPtEtaBin[ro][etab][1]->GetParError(2);
      tResVar->Fill();
      // standard fit
      hResEtaBin[ro][etab] -> Fit(fResEtaBin[ro][etab]->GetName(),"RQ");
    }
  } 
  if(objectType_ == "lJets" && nrFilled == 0) edm::LogProblem  ("SummaryError") << "No plots filled for light jets \n";    
  if(objectType_ == "bJets" && nrFilled == 0) edm::LogProblem  ("SummaryError") << "No plots filled for bjets \n";    
  if(objectType_ == "muon" && nrFilled == 0) edm::LogProblem  ("SummaryError") << "No plots filled for muons \n";    
  if(objectType_ == "electron" && nrFilled == 0) edm::LogProblem  ("SummaryError") << "No plots filled for electrons \n";    
  if(objectType_ == "tau" && nrFilled == 0) edm::LogProblem  ("SummaryError") << "No plots filled for taus \n";    
  if(objectType_ == "met" && nrFilled == 0) edm::LogProblem  ("SummaryError") << "No plots filled for met \n";    
        
  edm::LogVerbatim ("MainResults") << " \n\n";  
  edm::LogVerbatim ("MainResults") << " ----------------------------------------------";
  edm::LogVerbatim ("MainResults") << " ----------------------------------------------";
  edm::LogVerbatim ("MainResults") << " Resolutions on "<< objectType_ << " with nrfilled: "<<nrFilled;
  edm::LogVerbatim ("MainResults") << " ----------------------------------------------";
  edm::LogVerbatim ("MainResults") << " ----------------------------------------------";
  if(nrFilled != 0 && objectType_ != "met") {
        for(ro=0; ro<8; ro++) {
                        edm::LogVerbatim ("MainResults") << "-------------------- ";
        edm::LogVerbatim ("MainResults") << "\n Resolutions on " << resObsName2[ro] << "\n";
                edm::LogVerbatim ("MainResults") << "-------------------- ";
                        for(int etab=0; etab<etanrbins; etab++) {       
                        if(nrFilled != 0 && ro != 6) {
                                        if(etab == 0){
                                                edm::LogVerbatim   ("MainResults") << "if(fabs(eta)<"<<etabinVals_[etab+1] <<") res = " << 
                                                fResEtaBin[ro][etab]->GetParameter(0) << "+" << fResEtaBin[ro][etab]->GetParameter(1) 
                                                << "*exp(-(" <<fResEtaBin[ro][etab]->GetParameter(2) << "*pt));";  
                                        }else{ 
                                                edm::LogVerbatim   ("MainResults") << "else if(fabs(eta)<"<<etabinVals_[etab+1] <<") res = " << 
                                                fResEtaBin[ro][etab]->GetParameter(0) << "+" << fResEtaBin[ro][etab]->GetParameter(1) 
                                                << "*exp(-(" <<fResEtaBin[ro][etab]->GetParameter(2) << "*pt));";                                       
                                        }
                                }else if(nrFilled != 0 && ro == 6){
                                        if(etab == 0){
                                                edm::LogVerbatim   ("MainResults") << "if(fabs(eta)<"<<etabinVals_[etab+1] <<") res = " << 
                                                fResEtaBin[ro][etab]->GetParameter(0) << "+" << fResEtaBin[ro][etab]->GetParameter(1) 
                                                << "*pt;";
                                        }else{                                          
                                                edm::LogVerbatim   ("MainResults") << "else if(fabs(eta)<"<<etabinVals_[etab+1] <<") res = " << 
                                                fResEtaBin[ro][etab]->GetParameter(0) << "+" << fResEtaBin[ro][etab]->GetParameter(1) 
                                                << "*pt;";

                                        }
                                }
                        }
                }
        }else if(nrFilled != 0 && objectType_ == "met"){
        for(ro=0; ro<8; ro++) {
                        edm::LogVerbatim ("MainResults") << "-------------------- ";
        edm::LogVerbatim ("MainResults") << "\n Resolutions on " << resObsName2[ro] << "\n";
                edm::LogVerbatim ("MainResults") << "-------------------- ";
                        if(nrFilled != 0 && ro != 6) {
                                        edm::LogVerbatim   ("MainResults") << "res = " <<
                                        fResEtaBin[ro][0]->GetParameter(0) << "+" << fResEtaBin[ro][0]->GetParameter(1) 
                                        << "*exp(-(" <<fResEtaBin[ro][0]->GetParameter(2) << "*pt));";                          
                        }else if(nrFilled != 0 && ro == 6){
                                        edm::LogVerbatim   ("MainResults") << "res = " << 
                                        fResEtaBin[ro][0]->GetParameter(0) << "+" << fResEtaBin[ro][0]->GetParameter(1) << "*pt;";
                        }
                }
        }
}

Member Data Documentation

std::vector<double> ResolutionCreator::etabinVals_ [private]

Definition at line 50 of file ResolutionCreator.cc.

Referenced by analyze(), beginJob(), endJob(), and ResolutionCreator().

Definition at line 56 of file ResolutionCreator.cc.

Referenced by analyze(), beginJob(), and endJob().

TF1* ResolutionCreator::fResEtaBin[10][20] [private]

Definition at line 61 of file ResolutionCreator.cc.

Referenced by beginJob(), and endJob().

TF1* ResolutionCreator::fResPtEtaBin[10][20][20] [private]

Definition at line 60 of file ResolutionCreator.cc.

Referenced by beginJob(), and endJob().

TH1F* ResolutionCreator::hResEtaBin[10][20] [private]

Definition at line 63 of file ResolutionCreator.cc.

Referenced by beginJob(), and endJob().

TH1F* ResolutionCreator::hResPtEtaBin[10][20][20] [private]

Definition at line 62 of file ResolutionCreator.cc.

Referenced by analyze(), beginJob(), and endJob().

std::string ResolutionCreator::labelName_ [private]

Definition at line 49 of file ResolutionCreator.cc.

Referenced by analyze(), and ResolutionCreator().

Definition at line 52 of file ResolutionCreator.cc.

double ResolutionCreator::maxDist_ [private]

Definition at line 55 of file ResolutionCreator.cc.

double ResolutionCreator::minDR_ [private]

Definition at line 51 of file ResolutionCreator.cc.

Referenced by analyze(), and ResolutionCreator().

Definition at line 57 of file ResolutionCreator.cc.

Referenced by analyze(), endJob(), and ResolutionCreator().

std::string ResolutionCreator::objectType_ [private]

Definition at line 49 of file ResolutionCreator.cc.

Referenced by analyze(), beginJob(), endJob(), and ResolutionCreator().

std::vector<double> ResolutionCreator::pTbinVals_ [private]

Definition at line 50 of file ResolutionCreator.cc.

Referenced by analyze(), beginJob(), endJob(), and ResolutionCreator().

Definition at line 56 of file ResolutionCreator.cc.

Referenced by beginJob(), and endJob().

TTree* ResolutionCreator::tResVar [private]

Definition at line 64 of file ResolutionCreator.cc.

Referenced by beginJob(), and endJob().

Definition at line 54 of file ResolutionCreator.cc.

Definition at line 53 of file ResolutionCreator.cc.