CMS 3D CMS Logo

AlignmentMonitorBase.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: CommonAlignmentMonitor
4 // Class : AlignmentMonitorBase
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Jim Pivarski
10 // Created: Fri Mar 30 12:21:07 CDT 2007
11 // $Id: AlignmentMonitorBase.cc,v 1.11 2010/01/06 15:23:09 mussgill Exp $
12 //
13 
19 
21  : m_beamSpotTag(cfg.getUntrackedParameter<edm::InputTag>("beamSpotTag", edm::InputTag("offlineBeamSpot"))),
22  m_iteration(0),
23  mp_tracker(nullptr),
24  mp_muon(nullptr),
25  mp_store(nullptr) {
26  edm::Service<TFileService> tFileService;
27  m_baseDirMap[std::vector<std::string>()] = new TFileDirectory(tFileService->mkdir(name));
28 }
29 
34  mp_muon = pMuon;
35  mp_store = pStore;
36 
37  if (!pMuon)
38  mp_navigator = new AlignableNavigator(pTracker);
39  else if (!pTracker)
40  mp_navigator = new AlignableNavigator(pMuon);
41  else
42  mp_navigator = new AlignableNavigator(pTracker, pMuon);
43 }
44 
46  m_iteration++;
47 
48  for (std::map<std::vector<std::string>, TFileDirectory *>::const_iterator i = m_iterDirMap.begin();
49  i != m_iterDirMap.end();
50  ++i) {
51  delete i->second;
52  }
53  m_iterDirMap.clear();
54 
55  std::ostringstream dirName;
56  dirName << "iter" << iteration();
57  m_iterDirMap[std::vector<std::string>()] =
58  new TFileDirectory(m_baseDirMap[std::vector<std::string>()]->mkdir(dirName.str()));
59 
60  book();
61 }
62 
64  const edm::EventSetup &iSetup,
65  const ConstTrajTrackPairCollection &iTrajTracks) {
66  event(iEvent, iSetup, iTrajTracks);
67 }
68 
70 
72  std::string::size_type lastPos = dir.find_first_not_of("/", 0);
73  std::string::size_type pos = dir.find_first_of("/", lastPos);
74  std::vector<std::string> dirs;
75 
76  bool isIter = false;
77  if (dir.substr(lastPos, pos - lastPos) == std::string("iterN")) {
78  isIter = true;
79  lastPos = dir.find_first_not_of("/", pos);
80  pos = dir.find_first_of("/", lastPos);
81  }
82 
83  while (std::string::npos != pos || std::string::npos != lastPos) {
84  dirs.push_back(dir.substr(lastPos, pos - lastPos));
85  lastPos = dir.find_first_not_of("/", pos);
86  pos = dir.find_first_of("/", lastPos);
87  }
88 
89  std::map<std::vector<std::string>, TFileDirectory *> *theMap;
90  if (isIter)
91  theMap = &m_iterDirMap;
92  else
93  theMap = &m_baseDirMap;
94 
95  std::vector<std::string> partial;
96  TFileDirectory *last = (*theMap)[partial];
97  for (unsigned int i = 0; i < dirs.size(); i++) {
98  partial.push_back(dirs[i]);
99  if (theMap->find(partial) == theMap->end()) {
100  (*theMap)[partial] = new TFileDirectory(last->mkdir(dirs[i]));
101  }
102  last = (*theMap)[partial];
103  }
104  return last;
105 }
106 
108  std::string dir, std::string name, std::string title, int nchX, double lowX, double highX) {
109  return directory(dir)->make<TH1F>(name.c_str(), title.c_str(), nchX, lowX, highX);
110 }
111 
115  int nchX,
116  double lowX,
117  double highX,
118  int nchY,
119  double lowY,
120  double highY,
121  const char *option) {
122  if (lowY == highY) {
123  return directory(dir)->make<TProfile>(name.c_str(), title.c_str(), nchX, lowX, highX, option);
124  } else {
125  return directory(dir)->make<TProfile>(name.c_str(), title.c_str(), nchX, lowX, highX, lowY, highY, option);
126  }
127 }
128 
132  int nchX,
133  double lowX,
134  double highX,
135  int nchY,
136  double lowY,
137  double highY) {
138  return directory(dir)->make<TH2F>(name.c_str(), title.c_str(), nchX, lowX, highX, nchY, lowY, highY);
139 }
AlignmentParameterStore * pStore()
std::map< std::vector< std::string >, TFileDirectory * > m_baseDirMap
std::map< std::vector< std::string >, TFileDirectory * > m_iterDirMap
virtual void event(const edm::Event &iEvent, const edm::EventSetup &iSetup, const ConstTrajTrackPairCollection &iTrajTracks)
Called for each event (by "run()"): may be reimplemented.
TH2F * book2D(std::string dir, std::string name, std::string title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
AlignmentParameterStore * mp_store
AlignmentMonitorBase(const edm::ParameterSet &cfg, std::string name)
Constructor.
#define nullptr
AlignableTracker * pTracker()
TProfile * bookProfile(std::string dir, std::string name, std::string title, int nchX, double lowX, double highX, int nchY=1, double lowY=0., double highY=0., const char *option="s")
uint16_t size_type
TFileDirectory * directory(std::string dir)
int iEvent
Definition: GenABIO.cc:224
T * make(const Args &...args) const
make new ROOT object
std::vector< ConstTrajTrackPair > ConstTrajTrackPairCollection
TH1F * book1D(std::string dir, std::string name, std::string title, int nchX, double lowX, double highX)
AlignableTracker * mp_tracker
void beginOfJob(AlignableTracker *pTracker, AlignableMuon *pMuon, AlignmentParameterStore *pStore)
Called at beginning of job: don&#39;t reimplement.
virtual void afterAlignment()
AlignableNavigator * mp_navigator
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
HLT enums.
void startingNewLoop()
Called at beginning of loop: don&#39;t reimplement.
void duringLoop(const edm::Event &iEvent, const edm::EventSetup &iSetup, const ConstTrajTrackPairCollection &iTrajTracks)
Called for each event: don&#39;t reimplement.
virtual void book()=0
Book or retrieve histograms; MUST be reimplemented.
Constructor of the full muon geometry.
Definition: AlignableMuon.h:33
void endOfLoop()
Called at end of loop: don&#39;t reimplement.