CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
DQMGenericTnPClient Class Reference
Inheritance diagram for DQMGenericTnPClient:
edm::EDAnalyzer

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 ()
 
- Public Member Functions inherited from edm::EDAnalyzer
 EDAnalyzer ()
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 

Private Attributes

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

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
typedef WorkerT< EDAnalyzerWorkerType
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDAnalyzer
CurrentProcessingContext const * currentContext () const
 

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.

41  :
42  subDirs( pset.getUntrackedParameter<vstring>("subDirs", vstring()) ),
43  myDQMrootFolder( pset.getUntrackedParameter<string>("MyDQMrootFolder", "") ),
44  verbose( pset.getUntrackedParameter<bool>("Verbose",false) ),
45  efficiencies( pset.getUntrackedParameter<VParameterSet>("Efficiencies") )
46 {
47  TString savePlotsInRootFileName = pset.getUntrackedParameter<string>("SavePlotsInRootFileName","");
48  plots = savePlotsInRootFileName!="" ? new TFile(savePlotsInRootFileName,"recreate") : 0;
51 }
T getUntrackedParameter(std::string const &, T const &) const
GaussianPlusLinearFitter * GPLfitter
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:30
VoigtianPlusExponentialFitter * VPEfitter
std::vector< std::string > vstring
const VParameterSet efficiencies
DQMGenericTnPClient::~DQMGenericTnPClient ( )
virtual

Definition at line 178 of file DQMGenericTnPClient.cc.

References GPLfitter, and plots.

178  {
179  delete GPLfitter;
180  if(plots){
181  plots->Close();
182  }
183 }
GaussianPlusLinearFitter * GPLfitter

Member Function Documentation

virtual void DQMGenericTnPClient::analyze ( const edm::Event event,
const edm::EventSetup eventSetup 
)
inlinevirtual

Implements edm::EDAnalyzer.

Definition at line 26 of file DQMGenericTnPClient.cc.

26 {};
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::AbstractFitter::setup(), dqmTnP::VoigtianPlusExponentialFitter::setup(), and VPEfitter.

Referenced by endRun().

96  {
97  //get hold of numerator and denominator histograms
98  string allMEname = dirName+"/"+pset.getUntrackedParameter<string>("DenominatorMEname");
99  string passMEname = dirName+"/"+pset.getUntrackedParameter<string>("NumeratorMEname");
100  MonitorElement *allME = dqmStore->get(allMEname);
101  MonitorElement *passME = dqmStore->get(passMEname);
102  if(allME==0 || passME==0){
103  LogDebug("DQMGenericTnPClient")<<"Could not find MEs: "<<allMEname<<" or "<<passMEname<<endl;
104  return;
105  }
106  TH1 *all = allME->getTH1();
107  TH1 *pass = passME->getTH1();
108  //setup the fitter
109  string fitFunction = pset.getUntrackedParameter<string>("FitFunction");
110  AbstractFitter *fitter = 0;
111  if(fitFunction=="GaussianPlusLinear"){
112  GPLfitter->setup(
113  pset.getUntrackedParameter<double>("ExpectedMean"),
114  pset.getUntrackedParameter<double>("FitRangeLow"),
115  pset.getUntrackedParameter<double>("FitRangeHigh"),
116  pset.getUntrackedParameter<double>("ExpectedSigma")
117  );
118  fitter = GPLfitter;
119  }else if(fitFunction=="VoigtianPlusExponential"){
120  VPEfitter->setup(
121  pset.getUntrackedParameter<double>("ExpectedMean"),
122  pset.getUntrackedParameter<double>("FitRangeLow"),
123  pset.getUntrackedParameter<double>("FitRangeHigh"),
124  pset.getUntrackedParameter<double>("ExpectedSigma"),
125  pset.getUntrackedParameter<double>("FixedWidth")
126  );
127  fitter = VPEfitter;
128  }else{
129  LogError("DQMGenericTnPClient")<<"Fit function: "<<fitFunction<<" does not exist"<<endl;
130  return;
131  }
132  //check dimensions
133  int dimensions = all->GetDimension();
134  int massDimension = pset.getUntrackedParameter<int>("MassDimension");
135  if(massDimension>dimensions){
136  LogError("DQMGenericTnPClient")<<"Monitoring Element "<<allMEname<<" has smaller dimension than "<<massDimension<<endl;
137  return;
138  }
139  //figure out directory and efficiency names
140  string effName = pset.getUntrackedParameter<string>("EfficiencyMEname");
141  string effDir = dirName;
142  string::size_type slashPos = effName.rfind('/');
143  if ( string::npos != slashPos ) {
144  effDir += "/"+effName.substr(0, slashPos);
145  effName.erase(0, slashPos+1);
146  }
147  dqmStore->setCurrentFolder(effDir);
148  TString prefix(effDir.c_str());
149  prefix.ReplaceAll('/','_');
150  //calculate and book efficiency
151  if(dimensions==2){
152  TProfile* eff = 0;
153  TProfile* effChi2 = 0;
154  TString error = fitter->calculateEfficiency((TH2*)pass, (TH2*)all, massDimension, eff, effChi2, plots?prefix+effName.c_str():"");
155  if(error!=""){
156  LogError("DQMGenericTnPClient")<<error<<endl;
157  return;
158  }
159  dqmStore->bookProfile(effName,eff);
160  dqmStore->bookProfile(effName+"Chi2",effChi2);
161  delete eff;
162  delete effChi2;
163  }else if(dimensions==3){
164  TProfile2D* eff = 0;
165  TProfile2D* effChi2 = 0;
166  TString error = fitter->calculateEfficiency((TH3*)pass, (TH3*)all, massDimension, eff, effChi2, plots?prefix+effName.c_str():"");
167  if(error!=""){
168  LogError("DQMGenericTnPClient")<<error<<endl;
169  return;
170  }
171  dqmStore->bookProfile2D(effName,eff);
172  dqmStore->bookProfile2D(effName+"Chi2",effChi2);
173  delete eff;
174  delete effChi2;
175  }
176 }
#define LogDebug(id)
T getUntrackedParameter(std::string const &, T const &) const
GaussianPlusLinearFitter * GPLfitter
void setup(double expectedMean_, double massLow, double massHigh, double expectedSigma_)
uint16_t size_type
void setup(double expectedMean_, double massLow, double massHigh, double expectedSigma_, double width_)
VoigtianPlusExponentialFitter * VPEfitter
TH1 * getTH1(void) const
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
Definition: DQMStore.cc:828
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1265
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:232
MonitorElement * bookProfile2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, int nchZ, double lowZ, double highZ, const char *option="s")
Definition: DQMStore.cc:972
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, MultipleCompare::pset, DQMStore::setCurrentFolder(), and subDirs.

53  {
54 
55  TPRegexp metacharacters("[\\^\\$\\.\\*\\+\\?\\|\\(\\)\\{\\}\\[\\]]");
56 
58  if( !dqmStore ){
59  LogError("DQMGenericTnPClient")<<"Could not find DQMStore service\n";
60  return;
61  }
63 
64  set<string> subDirSet;
65 
66  if (myDQMrootFolder != "")
67  subDirSet.insert(myDQMrootFolder);
68  else {
69  for(vstring::const_iterator iSubDir = subDirs.begin();
70  iSubDir != subDirs.end(); ++iSubDir) {
71  string subDir = *iSubDir;
72  if ( subDir[subDir.size()-1] == '/' ) subDir.erase(subDir.size()-1);
73  if ( TString(subDir).Contains(metacharacters) ) {
74  const string::size_type shiftPos = subDir.rfind('/');
75  const string searchPath = subDir.substr(0, shiftPos);
76  const string pattern = subDir.substr(shiftPos + 1, subDir.length());
77  findAllSubdirectories (searchPath, &subDirSet, pattern);
78  }
79  else {
80  subDirSet.insert(subDir);
81  }
82  }
83  }
84 
85  for(set<string>::const_iterator iSubDir = subDirSet.begin();
86  iSubDir != subDirSet.end(); ++iSubDir) {
87  const string& dirName = *iSubDir;
88  for(VParameterSet::const_iterator pset = efficiencies.begin();
89  pset != efficiencies.end(); ++pset) {
90  calculateEfficiency(dirName, *pset);
91  }
92  }
93 
94 }
TPRegexp metacharacters("[\\^\\$\\.\\*\\+\\?\\|\\(\\)\\{\\}\\[\\]]")
uint16_t size_type
void calculateEfficiency(std::string dirName, const ParameterSet &pset)
const VParameterSet efficiencies
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:232
void findAllSubdirectories(std::string dir, std::set< std::string > *myList, TString pattern)
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().

185  {
186 
187  if (!dqmStore->dirExists(dir)) {
188  LogError("DQMGenericTnPClient") << " DQMGenericTnPClient::findAllSubdirectories ==> Missing folder " << dir << " !!!";
189  return;
190  }
191  TPRegexp nonPerlWildcard("\\w\\*|^\\*");
192  if (pattern != "") {
193  if (pattern.Contains(nonPerlWildcard)) pattern.ReplaceAll("*",".*");
194  TPRegexp regexp(pattern);
195  dqmStore->cd(dir);
196  vector <string> foundDirs = dqmStore->getSubdirs();
197  for(vector<string>::const_iterator iDir = foundDirs.begin();
198  iDir != foundDirs.end(); ++iDir) {
199  TString dirName = iDir->substr(iDir->rfind('/') + 1, iDir->length());
200  if (dirName.Contains(regexp))
201  findAllSubdirectories ( *iDir, myList);
202  }
203  }
204  else if (dqmStore->dirExists(dir)){
205  myList->insert(dir);
206  dqmStore->cd(dir);
208  } else {
209 
210  LogInfo ("DQMGenericClient") << "Trying to find sub-directories of " << dir
211  << " failed because " << dir << " does not exist";
212 
213  }
214  return;
215 }
std::vector< std::string > getSubdirs(void) const
Definition: DQMStore.cc:1216
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:209
bool dirExists(const std::string &path) const
true if directory exists
Definition: DQMStore.cc:296
TPRegexp nonPerlWildcard("\\w\\*|^\\*")
dbl *** dir
Definition: mlp_gen.cc:35
void findAllSubdirectories(std::string dir, std::set< std::string > *myList, TString pattern)

Member Data Documentation

DQMStore* DQMGenericTnPClient::dqmStore
private

Definition at line 31 of file DQMGenericTnPClient.cc.

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

const VParameterSet DQMGenericTnPClient::efficiencies
private

Definition at line 36 of file DQMGenericTnPClient.cc.

Referenced by endRun().

GaussianPlusLinearFitter* DQMGenericTnPClient::GPLfitter
private
string DQMGenericTnPClient::myDQMrootFolder
private

Definition at line 34 of file DQMGenericTnPClient.cc.

Referenced by endRun().

TFile* DQMGenericTnPClient::plots
private
vstring DQMGenericTnPClient::subDirs
private

Definition at line 33 of file DQMGenericTnPClient.cc.

Referenced by endRun().

bool DQMGenericTnPClient::verbose
private
VoigtianPlusExponentialFitter* DQMGenericTnPClient::VPEfitter
private

Definition at line 38 of file DQMGenericTnPClient.cc.

Referenced by calculateEfficiency(), and DQMGenericTnPClient().