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 (std::string dirName, const ParameterSet &pset)
 DQMGenericTnPClient (const edm::ParameterSet &pset)
virtual void endRun (const edm::Run &run, const edm::EventSetup &setup)
void findAllSubdirectories (std::string dir, std::set< std::string > *myList, TString pattern)
virtual ~DQMGenericTnPClient ()

Private Attributes

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

Detailed Description

Definition at line 22 of file DQMGenericTnPClient.cc.


Constructor & Destructor Documentation

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

Definition at line 41 of file DQMGenericTnPClient.cc.

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

                                                                   :
  subDirs( pset.getUntrackedParameter<vstring>("subDirs", vstring()) ),
  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 178 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 26 of file DQMGenericTnPClient.cc.

{};
void DQMGenericTnPClient::calculateEfficiency ( std::string  dirName,
const ParameterSet pset 
)

Definition at line 96 of file DQMGenericTnPClient.cc.

References cond::ecalcond::all, DQMStore::bookProfile(), DQMStore::bookProfile2D(), TrackerOfflineValidation_Dqm_cff::dirName, dqmStore, error, DQMStore::get(), MonitorElement::getTH1(), edm::ParameterSet::getUntrackedParameter(), GPLfitter, LogDebug, 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 = dirName+"/"+pset.getUntrackedParameter<string>("DenominatorMEname");
  string passMEname = dirName+"/"+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 = dirName;
  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 53 of file DQMGenericTnPClient.cc.

References calculateEfficiency(), TrackerOfflineValidation_Dqm_cff::dirName, dqmStore, efficiencies, findAllSubdirectories(), metacharacters(), myDQMrootFolder, cmsCodeRules::cppFunctionSkipper::operator, listBenchmarks::pattern, DQMStore::setCurrentFolder(), and subDirs.

                                                                             {

  TPRegexp metacharacters("[\\^\\$\\.\\*\\+\\?\\|\\(\\)\\{\\}\\[\\]]");

  dqmStore = Service<DQMStore>().operator->();
  if( !dqmStore ){
    LogError("DQMGenericTnPClient")<<"Could not find DQMStore service\n";
    return;
  }
  dqmStore->setCurrentFolder(myDQMrootFolder);

  set<string> subDirSet;
  
  if (myDQMrootFolder != "")
    subDirSet.insert(myDQMrootFolder);
  else {
    for(vstring::const_iterator iSubDir = subDirs.begin(); 
        iSubDir != subDirs.end(); ++iSubDir) {
      string subDir = *iSubDir;
      if ( subDir[subDir.size()-1] == '/' ) subDir.erase(subDir.size()-1);
      if ( TString(subDir).Contains(metacharacters) ) {
        const string::size_type shiftPos = subDir.rfind('/');
        const string searchPath = subDir.substr(0, shiftPos);
        const string pattern    = subDir.substr(shiftPos + 1, subDir.length());
        findAllSubdirectories (searchPath, &subDirSet, pattern);
      }
      else {
        subDirSet.insert(subDir);
      }
    }
  }

  for(set<string>::const_iterator iSubDir = subDirSet.begin();
      iSubDir != subDirSet.end(); ++iSubDir) {
    const string& dirName = *iSubDir;
    for(VParameterSet::const_iterator pset = efficiencies.begin(); 
        pset != efficiencies.end(); ++pset) {
      calculateEfficiency(dirName, *pset);
    }
  }

}
void DQMGenericTnPClient::findAllSubdirectories ( std::string  dir,
std::set< std::string > *  myList,
TString  pattern = "" 
)

Definition at line 185 of file DQMGenericTnPClient.cc.

References DQMStore::cd(), DQMStore::dirExists(), TrackerOfflineValidation_Dqm_cff::dirName, dqmStore, DQMStore::getSubdirs(), nonPerlWildcard(), and listBenchmarks::pattern.

Referenced by endRun().

                                                                                                                {

  if (!dqmStore->dirExists(dir)) {
    LogError("DQMGenericTnPClient") << " DQMGenericTnPClient::findAllSubdirectories ==> Missing folder " << dir << " !!!";
    return;
  }
  TPRegexp nonPerlWildcard("\\w\\*|^\\*");
  if (pattern != "") {
    if (pattern.Contains(nonPerlWildcard)) pattern.ReplaceAll("*",".*");
    TPRegexp regexp(pattern);
    dqmStore->cd(dir);
    vector <string> foundDirs = dqmStore->getSubdirs();
    for(vector<string>::const_iterator iDir = foundDirs.begin();
        iDir != foundDirs.end(); ++iDir) {
      TString dirName = iDir->substr(iDir->rfind('/') + 1, iDir->length());
      if (dirName.Contains(regexp))
        findAllSubdirectories ( *iDir, myList);
    }
  }
  else if (dqmStore->dirExists(dir)){
    myList->insert(dir);
    dqmStore->cd(dir);
    findAllSubdirectories (dir, myList, "*");
  } else {
    
    LogInfo ("DQMGenericClient") << "Trying to find sub-directories of " << dir
                                 << " failed because " << dir  << " does not exist";
                                 
  }
  return;
}

Member Data Documentation

Definition at line 31 of file DQMGenericTnPClient.cc.

Referenced by calculateEfficiency(), endRun(), and findAllSubdirectories().

Definition at line 36 of file DQMGenericTnPClient.cc.

Referenced by endRun().

Definition at line 34 of file DQMGenericTnPClient.cc.

Referenced by endRun().

TFile* DQMGenericTnPClient::plots [private]

Definition at line 33 of file DQMGenericTnPClient.cc.

Referenced by endRun().

Definition at line 35 of file DQMGenericTnPClient.cc.

Definition at line 38 of file DQMGenericTnPClient.cc.

Referenced by calculateEfficiency(), and DQMGenericTnPClient().