CMS 3D CMS Logo

Public Member Functions | Private Attributes

DQMGenericTnPClient Class Reference

Inheritance diagram for DQMGenericTnPClient:
edm::EDAnalyzer

List of all members.

Public Member Functions

virtual void analyze (const edm::Event &event, const edm::EventSetup &eventSetup)
void calculateEfficiency (const ParameterSet &pset)
 DQMGenericTnPClient (const edm::ParameterSet &pset)
virtual void endRun (const edm::Run &run, const edm::EventSetup &setup)
virtual ~DQMGenericTnPClient ()

Private Attributes

DQMStoredqmStore
const VParameterSet efficiencies
GaussianPlusLinearFitterGPLfitter
string myDQMrootFolder
TFile * plots
bool verbose
VoigtianPlusExponentialFitterVPEfitter

Detailed Description

Definition at line 17 of file DQMGenericTnPClient.cc.


Constructor & Destructor Documentation

DQMGenericTnPClient::DQMGenericTnPClient ( const edm::ParameterSet pset)

Definition at line 34 of file DQMGenericTnPClient.cc.

References edm::ParameterSet::getUntrackedParameter(), GPLfitter, plots, and VPEfitter.

                                                                   :
  myDQMrootFolder( pset.getUntrackedParameter<string>("MyDQMrootFolder") ),
  verbose( pset.getUntrackedParameter<bool>("Verbose",false) ),
  efficiencies( pset.getUntrackedParameter<VParameterSet>("Efficiencies") )
{
  TString savePlotsInRootFileName = pset.getUntrackedParameter<string>("SavePlotsInRootFileName","");
  plots = savePlotsInRootFileName!="" ? new TFile(savePlotsInRootFileName,"recreate") : 0;
  GPLfitter = new GaussianPlusLinearFitter(verbose);
  VPEfitter = new VoigtianPlusExponentialFitter(verbose);
}
DQMGenericTnPClient::~DQMGenericTnPClient ( ) [virtual]

Definition at line 140 of file DQMGenericTnPClient.cc.

References GPLfitter, and plots.

                                         {
  delete GPLfitter;
  if(plots){
    plots->Close();
  }
}

Member Function Documentation

virtual void DQMGenericTnPClient::analyze ( const edm::Event event,
const edm::EventSetup eventSetup 
) [inline, virtual]

Implements edm::EDAnalyzer.

Definition at line 21 of file DQMGenericTnPClient.cc.

{};
void DQMGenericTnPClient::calculateEfficiency ( const ParameterSet pset)

Definition at line 58 of file DQMGenericTnPClient.cc.

References cond::ecalcond::all, DQMStore::bookProfile(), DQMStore::bookProfile2D(), dqmStore, error, DQMStore::get(), MonitorElement::getTH1(), edm::ParameterSet::getUntrackedParameter(), GPLfitter, LogDebug, myDQMrootFolder, plots, prof2calltree::prefix, DQMStore::setCurrentFolder(), dqmTnP::VoigtianPlusExponentialFitter::setup(), dqmTnP::AbstractFitter::setup(), and VPEfitter.

Referenced by endRun().

                                                                     {
  //get hold of numerator and denominator histograms
  string allMEname = myDQMrootFolder+"/"+pset.getUntrackedParameter<string>("DenominatorMEname");
  string passMEname = myDQMrootFolder+"/"+pset.getUntrackedParameter<string>("NumeratorMEname");
  MonitorElement *allME = dqmStore->get(allMEname);
  MonitorElement *passME = dqmStore->get(passMEname);
  if(allME==0 || passME==0){
    LogDebug("DQMGenericTnPClient")<<"Could not find MEs: "<<allMEname<<" or "<<passMEname<<endl;
    return;
  }
  TH1 *all = allME->getTH1();
  TH1 *pass = passME->getTH1();
  //setup the fitter  
  string fitFunction = pset.getUntrackedParameter<string>("FitFunction");
  AbstractFitter *fitter = 0;
  if(fitFunction=="GaussianPlusLinear"){
    GPLfitter->setup(
      pset.getUntrackedParameter<double>("ExpectedMean"),
      pset.getUntrackedParameter<double>("FitRangeLow"),
      pset.getUntrackedParameter<double>("FitRangeHigh"),
      pset.getUntrackedParameter<double>("ExpectedSigma")
    );
    fitter = GPLfitter;
  }else if(fitFunction=="VoigtianPlusExponential"){
    VPEfitter->setup(
      pset.getUntrackedParameter<double>("ExpectedMean"),
      pset.getUntrackedParameter<double>("FitRangeLow"),
      pset.getUntrackedParameter<double>("FitRangeHigh"),
      pset.getUntrackedParameter<double>("ExpectedSigma"),
      pset.getUntrackedParameter<double>("FixedWidth")
    );
    fitter = VPEfitter;
  }else{
    LogError("DQMGenericTnPClient")<<"Fit function: "<<fitFunction<<" does not exist"<<endl;
    return;
  }
  //check dimensions
  int dimensions = all->GetDimension();
  int massDimension = pset.getUntrackedParameter<int>("MassDimension");
  if(massDimension>dimensions){
    LogError("DQMGenericTnPClient")<<"Monitoring Element "<<allMEname<<" has smaller dimension than "<<massDimension<<endl;
    return;
  }
  //figure out directory and efficiency names  
  string effName = pset.getUntrackedParameter<string>("EfficiencyMEname");
  string effDir = myDQMrootFolder;
  string::size_type slashPos = effName.rfind('/');
  if ( string::npos != slashPos ) {
    effDir += "/"+effName.substr(0, slashPos);
    effName.erase(0, slashPos+1);
  }
  dqmStore->setCurrentFolder(effDir);
  TString prefix(effDir.c_str());
  prefix.ReplaceAll('/','_');
  //calculate and book efficiency
  if(dimensions==2){
    TProfile* eff = 0;
    TProfile* effChi2 = 0;
    TString error = fitter->calculateEfficiency((TH2*)pass, (TH2*)all, massDimension, eff, effChi2, plots?prefix+effName.c_str():"");
    if(error!=""){
      LogError("DQMGenericTnPClient")<<error<<endl;
      return;
    }
    dqmStore->bookProfile(effName,eff);
    dqmStore->bookProfile(effName+"Chi2",effChi2);
    delete eff;
    delete effChi2;
  }else if(dimensions==3){
    TProfile2D* eff = 0;
    TProfile2D* effChi2 = 0;
    TString error = fitter->calculateEfficiency((TH3*)pass, (TH3*)all, massDimension, eff, effChi2, plots?prefix+effName.c_str():"");
    if(error!=""){
      LogError("DQMGenericTnPClient")<<error<<endl;
      return;
    }
    dqmStore->bookProfile2D(effName,eff);
    dqmStore->bookProfile2D(effName+"Chi2",effChi2);
    delete eff;
    delete effChi2;
  }
}
void DQMGenericTnPClient::endRun ( const edm::Run run,
const edm::EventSetup setup 
) [virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 45 of file DQMGenericTnPClient.cc.

References calculateEfficiency(), dqmStore, efficiencies, myDQMrootFolder, cmsCodeRules::cppFunctionSkipper::operator, CrabTask::pset, and DQMStore::setCurrentFolder().

                                                                             {
  dqmStore = Service<DQMStore>().operator->();
  if( !dqmStore ){
    LogError("DQMGenericTnPClient")<<"Could not find DQMStore service\n";
    return;
  }
  dqmStore->setCurrentFolder(myDQMrootFolder);
  //loop over all efficiency tasks
  for(VParameterSet::const_iterator pset = efficiencies.begin(); pset!=efficiencies.end(); pset++){
    calculateEfficiency(*pset);
  }
}

Member Data Documentation

Definition at line 25 of file DQMGenericTnPClient.cc.

Referenced by calculateEfficiency(), and endRun().

Definition at line 29 of file DQMGenericTnPClient.cc.

Referenced by endRun().

Definition at line 27 of file DQMGenericTnPClient.cc.

Referenced by calculateEfficiency(), and endRun().

TFile* DQMGenericTnPClient::plots [private]

Definition at line 28 of file DQMGenericTnPClient.cc.

Definition at line 31 of file DQMGenericTnPClient.cc.

Referenced by calculateEfficiency(), and DQMGenericTnPClient().