CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
SiStripDaqInfo Class Reference

#include <DQM/SiStripMonitorCluster/interface/SiStripDaqInfo.h>

Inheritance diagram for SiStripDaqInfo:
edm::EDAnalyzer edm::EDConsumerBase

Classes

struct  SubDetMEs
 

Public Member Functions

 SiStripDaqInfo (const edm::ParameterSet &ps)
 Constructor. More...
 
virtual ~SiStripDaqInfo ()
 Destructor. More...
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

void analyze (edm::Event const &, edm::EventSetup const &)
 Analyze. More...
 
void beginJob ()
 BeginJob. More...
 
void beginRun (edm::Run const &run, edm::EventSetup const &eSetup)
 Begin Run. More...
 
void bookStatus ()
 
void endLuminosityBlock (edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &iSetup)
 End Of Luminosity. More...
 
void endRun (edm::Run const &run, edm::EventSetup const &eSetup)
 EndRun. More...
 
void fillDummyStatus ()
 
void findExcludedModule (unsigned short fed_id, const TrackerTopology *tTopo)
 
void readFedIds (const edm::ESHandle< SiStripFedCabling > &fedcabling, edm::EventSetup const &iSetup)
 
void readSubdetFedFractions (std::vector< int > &fed_ids, edm::EventSetup const &iSetup)
 

Private Attributes

bool bookedStatus_
 
MonitorElementDaqFraction_
 
DQMStoredqmStore_
 
edm::ESHandle< SiStripFedCablingfedCabling_
 
unsigned long long m_cacheID_
 
int nFedTotal
 
std::map< std::string,
std::vector< unsigned short > > 
subDetFedMap
 
std::map< std::string, SubDetMEsSubDetMEsMap
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Description: Checks the # of SiStrip FEDs from DAQ Usage: <usage>

Definition at line 41 of file SiStripDaqInfo.h.

Constructor & Destructor Documentation

SiStripDaqInfo::SiStripDaqInfo ( const edm::ParameterSet ps)

Constructor.

Definition at line 34 of file SiStripDaqInfo.cc.

References bookedStatus_, dqmStore_, nFedTotal, and cppFunctionSkipper::operator.

34  :
35  m_cacheID_(0) {
36 
37  // Create MessageSender
38  edm::LogInfo( "SiStripDaqInfo") << "SiStripDaqInfo::Deleting SiStripDaqInfo ";
39 
40  // get back-end interface
42  nFedTotal = 0;
43  bookedStatus_ = false;
44 }
DQMStore * dqmStore_
unsigned long long m_cacheID_
SiStripDaqInfo::~SiStripDaqInfo ( )
virtual

Destructor.

Definition at line 45 of file SiStripDaqInfo.cc.

45  {
46  edm::LogInfo("SiStripDaqInfo") << "SiStripDaqInfo::Deleting SiStripDaqInfo ";
47 
48 }

Member Function Documentation

void SiStripDaqInfo::analyze ( edm::Event const &  event,
edm::EventSetup const &  eSetup 
)
privatevirtual

Analyze.

Implements edm::EDAnalyzer.

Definition at line 162 of file SiStripDaqInfo.cc.

162  {
163 }
void SiStripDaqInfo::beginJob ( void  )
privatevirtual

BeginJob.

Reimplemented from edm::EDAnalyzer.

Definition at line 52 of file SiStripDaqInfo.cc.

52  {
53 
54 }
void SiStripDaqInfo::beginRun ( edm::Run const &  run,
edm::EventSetup const &  eSetup 
)
privatevirtual

Begin Run.

Reimplemented from edm::EDAnalyzer.

Definition at line 113 of file SiStripDaqInfo.cc.

References bookedStatus_, bookStatus(), DaqFraction_, fedCabling_, MonitorElement::Fill(), fillDummyStatus(), edm::EventSetup::find(), edm::eventsetup::heterocontainer::HCTypeTag::findType(), edm::EventSetup::get(), edm::ESHandleBase::isValid(), m_cacheID_, FEDNumbering::MAXSiStripFEDID, FEDNumbering::MINSiStripFEDID, nFedTotal, readFedIds(), readSubdetFedFractions(), and MonitorElement::Reset().

113  {
114  edm::LogInfo ("SiStripDaqInfo") <<"SiStripDaqInfo:: Begining of Run";
115 
116  // Check latest Fed cabling and create TrackerMapCreator
117  unsigned long long cacheID = eSetup.get<SiStripFedCablingRcd>().cacheIdentifier();
118  if (m_cacheID_ != cacheID) {
119  m_cacheID_ = cacheID;
120 
121  eSetup.get<SiStripFedCablingRcd>().get(fedCabling_);
122 
123  readFedIds(fedCabling_, eSetup);
124  }
125  if (!bookedStatus_) bookStatus();
126  if (nFedTotal == 0) {
127  fillDummyStatus();
128  edm::LogInfo ("SiStripDaqInfo") <<" SiStripDaqInfo::No FEDs Connected!!!";
129  return;
130  }
131 
132  float nFEDConnected = 0.0;
133  const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID;
134  const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID;
135 
137  if( eSetup.find( recordKey ) != 0) {
138 
139  edm::ESHandle<RunInfo> sumFED;
140  eSetup.get<RunInfoRcd>().get(sumFED);
141 
142  if ( sumFED.isValid() ) {
143  std::vector<int> FedsInIds= sumFED->m_fed_in;
144  for(unsigned int it = 0; it < FedsInIds.size(); ++it) {
145  int fedID = FedsInIds[it];
146 
147  if(fedID>=siStripFedIdMin && fedID<=siStripFedIdMax) ++nFEDConnected;
148  }
149  edm::LogInfo ("SiStripDaqInfo") <<" SiStripDaqInfo::Total # of FEDs " << nFedTotal
150  << " Connected FEDs " << nFEDConnected;
151  if (nFEDConnected > 0) {
152  DaqFraction_->Reset();
153  DaqFraction_->Fill(nFEDConnected/nFedTotal);
154  readSubdetFedFractions(FedsInIds,eSetup);
155  }
156  }
157  }
158 }
void readFedIds(const edm::ESHandle< SiStripFedCabling > &fedcabling, edm::EventSetup const &iSetup)
void Fill(long long x)
edm::ESHandle< SiStripFedCabling > fedCabling_
void readSubdetFedFractions(std::vector< int > &fed_ids, edm::EventSetup const &iSetup)
void fillDummyStatus()
MonitorElement * DaqFraction_
bool isValid() const
Definition: ESHandle.h:47
unsigned long long m_cacheID_
void Reset(void)
reset ME (ie. contents, errors, etc)
static HCTypeTag findType(char const *iTypeName)
find a type based on the types name, if not found will return default HCTypeTag
Definition: HCTypeTag.cc:125
void SiStripDaqInfo::bookStatus ( )
private

Definition at line 58 of file SiStripDaqInfo.cc.

References bookedStatus_, DQMStore::bookFloat(), DQMStore::cd(), SiStripDaqInfo::SubDetMEs::ConnectedFeds, DaqFraction_, SiStripDaqInfo::SubDetMEs::DaqFractionME, dqmStore_, SiStripUtility::getTopFolderPath(), DQMStore::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, and SubDetMEsMap.

Referenced by beginRun(), and fillDummyStatus().

58  {
59  edm::LogInfo( "SiStripDcsInfo") << " SiStripDaqInfo::bookStatus " << bookedStatus_;
60  if (!bookedStatus_) {
61  dqmStore_->cd();
62  std::string strip_dir = "";
63  SiStripUtility::getTopFolderPath(dqmStore_, "SiStrip", strip_dir);
64  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo");
65  else dqmStore_->setCurrentFolder("SiStrip/EventInfo");
66 
67 
68  DaqFraction_= dqmStore_->bookFloat("DAQSummary");
69 
70  dqmStore_->cd();
71  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo/DAQContents");
72  else dqmStore_->setCurrentFolder("SiStrip/EventInfo/DAQContents");
73 
74  std::vector<std::string> det_type;
75  det_type.push_back("TIB");
76  det_type.push_back("TOB");
77  det_type.push_back("TIDF");
78  det_type.push_back("TIDB");
79  det_type.push_back("TECF");
80  det_type.push_back("TECB");
81 
82  for ( std::vector<std::string>::iterator it = det_type.begin(); it != det_type.end(); it++) {
83  std::string det = (*it);
84 
85  SubDetMEs local_mes;
86  std::string me_name;
87  me_name = "SiStrip_" + det;
88  local_mes.DaqFractionME = dqmStore_->bookFloat(me_name);
89  local_mes.ConnectedFeds = 0;
90  SubDetMEsMap.insert(make_pair(det, local_mes));
91  }
92  bookedStatus_ = true;
93  dqmStore_->cd();
94  }
95 }
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:684
MonitorElement * bookFloat(const char *name)
Book float.
Definition: DQMStore.cc:931
DQMStore * dqmStore_
std::map< std::string, SubDetMEs > SubDetMEsMap
MonitorElement * DaqFraction_
static void getTopFolderPath(DQMStore *dqm_store, std::string top_dir, std::string &path)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:707
void SiStripDaqInfo::endLuminosityBlock ( edm::LuminosityBlock const &  lumiSeg,
edm::EventSetup const &  iSetup 
)
privatevirtual

End Of Luminosity.

Reimplemented from edm::EDAnalyzer.

Definition at line 168 of file SiStripDaqInfo.cc.

168  {
169  edm::LogInfo( "SiStripDaqInfo") << "SiStripDaqInfo::endLuminosityBlock";
170 }
void SiStripDaqInfo::endRun ( edm::Run const &  run,
edm::EventSetup const &  eSetup 
)
privatevirtual

EndRun.

Reimplemented from edm::EDAnalyzer.

Definition at line 174 of file SiStripDaqInfo.cc.

174  {
175  edm::LogInfo ("SiStripDaqInfo") <<"SiStripDaqInfo::EndRun";
176 }
void SiStripDaqInfo::fillDummyStatus ( )
private

Definition at line 99 of file SiStripDaqInfo.cc.

References bookedStatus_, bookStatus(), DaqFraction_, MonitorElement::Fill(), MonitorElement::Reset(), and SubDetMEsMap.

Referenced by beginRun().

99  {
100  if (!bookedStatus_) bookStatus();
101  if (bookedStatus_) {
102  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
103  it->second.DaqFractionME->Reset();
104  it->second.DaqFractionME->Fill(-1.0);
105  }
106  DaqFraction_->Reset();
107  DaqFraction_->Fill(-1.0);
108  }
109 }
void Fill(long long x)
std::map< std::string, SubDetMEs > SubDetMEsMap
MonitorElement * DaqFraction_
void Reset(void)
reset ME (ie. contents, errors, etc)
void SiStripDaqInfo::findExcludedModule ( unsigned short  fed_id,
const TrackerTopology tTopo 
)
private

Definition at line 259 of file SiStripDaqInfo.cc.

References DQMStore::bookInt(), DQMStore::cd(), DQMStore::dirExists(), dqmStore_, fedCabling_, MonitorElement::Fill(), DQMStore::get(), MonitorElement::getIntValue(), SiStripFolderOrganizer::getSubDetFolder(), SiStripUtility::goToDir(), DQMStore::pwd(), MonitorElement::Reset(), SiStripUtility::setBadModuleFlag(), DQMStore::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, and GlobalPosition_Frontier_DevDB_cff::tag.

Referenced by readSubdetFedFractions().

259  {
260  dqmStore_->cd();
261  std::string mdir = "MechanicalView";
262  if (!SiStripUtility::goToDir(dqmStore_, mdir)) {
263  dqmStore_->setCurrentFolder("SiStrip/"+mdir);
264  }
265  std::string mechanical_dir = dqmStore_->pwd();
266  auto fedChannels = fedCabling_->fedConnections(fed_id);
267  int ichannel = 0;
268  std::string tag = "ExcludedFedChannel";
269  std::string bad_module_folder;
270  for (std::vector<FedChannelConnection>::const_iterator iconn = fedChannels.begin();
271  iconn < fedChannels.end(); iconn++){
272  if (!iconn->isConnected()) continue;
273  uint32_t detId = iconn->detId();
274  if (detId == 0 || detId == 0xFFFFFFFF) continue;
275 
276  ichannel++;
277  if (ichannel == 1) {
278  std::string subdet_folder ;
279  SiStripFolderOrganizer folder_organizer;
280  folder_organizer.getSubDetFolder(detId,tTopo,subdet_folder);
281  if (!dqmStore_->dirExists(subdet_folder)) {
282  subdet_folder = mechanical_dir + subdet_folder.substr(subdet_folder.find(mdir)+mdir.size());
283  }
284  bad_module_folder = subdet_folder + "/" + "BadModuleList";
285  dqmStore_->setCurrentFolder(bad_module_folder);
286  }
287  std::ostringstream detid_str;
288  detid_str << detId;
289  std::string full_path = bad_module_folder + "/" + detid_str.str();
290  MonitorElement* me = dqmStore_->get(full_path);
291  uint16_t flag = 0;
292  if (me) {
293  flag = me->getIntValue();
294  me->Reset();
295  } else me = dqmStore_->bookInt(detid_str.str());
297  me->Fill(flag);
298  }
299  dqmStore_->cd();
300 }
static void setBadModuleFlag(std::string &hname, uint16_t &flg)
void getSubDetFolder(const uint32_t &detid, const TrackerTopology *tTopo, std::string &folder_name)
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:684
void Fill(long long x)
edm::ESHandle< SiStripFedCabling > fedCabling_
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1748
DQMStore * dqmStore_
bool dirExists(const std::string &path) const
true if directory exists
Definition: DQMStore.cc:772
int64_t getIntValue(void) const
MonitorElement * bookInt(const char *name)
Book int.
Definition: DQMStore.cc:901
void Reset(void)
reset ME (ie. contents, errors, etc)
static bool goToDir(DQMStore *dqm_store, std::string name)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:707
const std::string & pwd(void) const
Definition: DQMStore.cc:679
void SiStripDaqInfo::readFedIds ( const edm::ESHandle< SiStripFedCabling > &  fedcabling,
edm::EventSetup const &  iSetup 
)
private

Definition at line 180 of file SiStripDaqInfo.cc.

References fedCabling_, HcalMonitorModule_cfi::feds, edm::EventSetup::get(), SiStripUtility::getSubDetectorTag(), nFedTotal, edm::ESHandle< class >::product(), AlCaHLTBitMon_QueryRunRegistry::string, xuti::subdet_tag(), and subDetFedMap.

Referenced by beginRun().

180  {
181 
182  //Retrieve tracker topology from geometry
183  edm::ESHandle<TrackerTopology> tTopoHandle;
184  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
185  const TrackerTopology* const tTopo = tTopoHandle.product();
186 
187  auto feds = fedCabling_->fedIds();
188 
189  nFedTotal = feds.size();
190  for(std::vector<unsigned short>::const_iterator ifed = feds.begin(); ifed != feds.end(); ifed++){
191  auto fedChannels = fedCabling_->fedConnections( *ifed );
192  for (auto iconn = fedChannels.begin(); iconn < fedChannels.end(); iconn++){
193  if (!iconn->isConnected()) continue;
194  uint32_t detId = iconn->detId();
195  if (detId == 0 || detId == 0xFFFFFFFF) continue;
197  SiStripUtility::getSubDetectorTag(detId,subdet_tag,tTopo);
198  subDetFedMap[subdet_tag].push_back(*ifed);
199  break;
200  }
201  }
202 }
edm::ESHandle< SiStripFedCabling > fedCabling_
const std::string subdet_tag("SubDet")
std::map< std::string, std::vector< unsigned short > > subDetFedMap
T const * product() const
Definition: ESHandle.h:86
static void getSubDetectorTag(uint32_t det_id, std::string &subdet_tag, const TrackerTopology *tTopo)
void SiStripDaqInfo::readSubdetFedFractions ( std::vector< int > &  fed_ids,
edm::EventSetup const &  iSetup 
)
private

Definition at line 206 of file SiStripDaqInfo.cc.

References findExcludedModule(), edm::EventSetup::get(), python.multivaluedict::map(), FEDNumbering::MAXSiStripFEDID, FEDNumbering::MINSiStripFEDID, mergeVDriftHistosByStation::name, edm::ESHandle< class >::product(), AlCaHLTBitMon_QueryRunRegistry::string, subDetFedMap, and SubDetMEsMap.

Referenced by beginRun().

206  {
207 
208  //Retrieve tracker topology from geometry
209  edm::ESHandle<TrackerTopology> tTopoHandle;
210  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
211  const TrackerTopology* const tTopo = tTopoHandle.product();
212 
213  const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID;
214  const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID;
215 
216  // initialiase
217  for (std::map<std::string, std::vector<unsigned short> >::const_iterator it = subDetFedMap.begin();
218  it != subDetFedMap.end(); it++) {
219  std::string name = it->first;
220  std::map<std::string, SubDetMEs>::iterator iPos = SubDetMEsMap.find(name);
221  if (iPos == SubDetMEsMap.end()) continue;
222  iPos->second.ConnectedFeds = 0;
223  }
224  // count sub detector feds
225 
226 
227  for (std::map<std::string, std::vector<unsigned short> >::const_iterator it = subDetFedMap.begin();
228  it != subDetFedMap.end(); it++) {
229  std::string name = it->first;
230  std::vector<unsigned short> subdetIds = it->second;
231  std::map<std::string, SubDetMEs>::iterator iPos = SubDetMEsMap.find(name);
232  if (iPos == SubDetMEsMap.end()) continue;
233  iPos->second.ConnectedFeds = 0;
234  for (std::vector<unsigned short>::iterator iv = subdetIds.begin();
235  iv != subdetIds.end(); iv++) {
236  bool fedid_found = false;
237  for(unsigned int it = 0; it < fed_ids.size(); ++it) {
238  unsigned short fedID = fed_ids[it];
239  if(fedID < siStripFedIdMin || fedID > siStripFedIdMax) continue;
240  if ((*iv) == fedID) {
241  fedid_found = true;
242  iPos->second.ConnectedFeds++;
243  break;
244  }
245  }
246  if (!fedid_found) findExcludedModule((*iv),tTopo);
247  }
248  int nFedsConnected = iPos->second.ConnectedFeds;
249  int nFedSubDet = subdetIds.size();
250  if (nFedSubDet > 0) {
251  iPos->second.DaqFractionME->Reset();
252  iPos->second.DaqFractionME->Fill(nFedsConnected*1.0/nFedSubDet);
253  }
254  }
255 }
void findExcludedModule(unsigned short fed_id, const TrackerTopology *tTopo)
std::map< std::string, SubDetMEs > SubDetMEsMap
std::map< std::string, std::vector< unsigned short > > subDetFedMap
T const * product() const
Definition: ESHandle.h:86

Member Data Documentation

bool SiStripDaqInfo::bookedStatus_
private

Definition at line 91 of file SiStripDaqInfo.h.

Referenced by beginRun(), bookStatus(), fillDummyStatus(), and SiStripDaqInfo().

MonitorElement* SiStripDaqInfo::DaqFraction_
private

Definition at line 80 of file SiStripDaqInfo.h.

Referenced by beginRun(), bookStatus(), and fillDummyStatus().

DQMStore* SiStripDaqInfo::dqmStore_
private

Definition at line 79 of file SiStripDaqInfo.h.

Referenced by bookStatus(), findExcludedModule(), and SiStripDaqInfo().

edm::ESHandle< SiStripFedCabling > SiStripDaqInfo::fedCabling_
private

Definition at line 93 of file SiStripDaqInfo.h.

Referenced by beginRun(), findExcludedModule(), and readFedIds().

unsigned long long SiStripDaqInfo::m_cacheID_
private

Definition at line 89 of file SiStripDaqInfo.h.

Referenced by beginRun().

int SiStripDaqInfo::nFedTotal
private

Definition at line 90 of file SiStripDaqInfo.h.

Referenced by beginRun(), readFedIds(), and SiStripDaqInfo().

std::map<std::string,std::vector<unsigned short> > SiStripDaqInfo::subDetFedMap
private

Definition at line 77 of file SiStripDaqInfo.h.

Referenced by readFedIds(), and readSubdetFedFractions().

std::map<std::string, SubDetMEs> SiStripDaqInfo::SubDetMEsMap
private

Definition at line 87 of file SiStripDaqInfo.h.

Referenced by bookStatus(), fillDummyStatus(), and readSubdetFedFractions().