CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripHistoTitle.cc
Go to the documentation of this file.
1 // Last commit: $Id: SiStripHistoTitle.cc,v 1.7 2009/02/10 21:45:54 lowette Exp $
2 
9 #include <iostream>
10 #include <iomanip>
11 
12 // -----------------------------------------------------------------------------
13 //
15  const sistrip::RunType& run_type,
16  const SiStripKey& key_object,
17  const std::string& extra_info )
18  : title_(""),
19  histoType_(histo_type),
20  runType_(run_type),
21  keyType_(sistrip::UNKNOWN_KEY),
22  keyValue_(sistrip::invalid32_),
23  granularity_(sistrip::UNKNOWN_GRAN),
24  channel_(sistrip::invalid_),
25  extraInfo_(extra_info)
26 {
27  SiStripKey& temp = const_cast<SiStripKey&>(key_object);
28  if ( &dynamic_cast<SiStripFedKey&>(temp) ) {
30  } else if ( &dynamic_cast<SiStripFecKey&>(temp) ) {
32  } else {
34  }
35  if ( &key_object ) {
36  keyValue_ = key_object.key();
37  granularity_ = key_object.granularity();
38  channel_ = key_object.channel();
39  }
40  setTitle();
41 }
42 
43 // -----------------------------------------------------------------------------
44 //
46  const sistrip::RunType& run_type,
47  const sistrip::KeyType& key_type,
48  const uint32_t& key_value,
49  const sistrip::Granularity& gran,
50  const uint16_t& channel,
51  const std::string& extra_info )
52  : title_(""),
53  histoType_(histo_type),
54  runType_(run_type),
55  keyType_(key_type),
56  keyValue_(key_value),
57  granularity_(gran),
58  channel_(channel),
59  extraInfo_(extra_info)
60 {
61  setTitle();
62 }
63 
64 // -----------------------------------------------------------------------------
65 //
66 SiStripHistoTitle::SiStripHistoTitle( const std::string& histo_title )
67  : title_(histo_title),
68  histoType_(sistrip::UNDEFINED_HISTO_TYPE),
69  runType_(sistrip::UNDEFINED_RUN_TYPE),
70  keyType_(sistrip::UNDEFINED_KEY),
71  keyValue_(sistrip::invalid32_),
72  granularity_(sistrip::UNDEFINED_GRAN),
73  channel_(sistrip::invalid_),
74  extraInfo_("")
75 {
76  extractTitle();
77 }
78 
79 // -----------------------------------------------------------------------------
80 //
82 
83  std::stringstream title;
84 
85  // Append HistoType, RunType, KeyType and KeyValue
87  << sistrip::sep_
89  << sistrip::sep_
91  << sistrip::hex_
92  << std::setfill('0') << std::setw(8) << std::hex << keyValue_ << std::dec
93  << sistrip::sep_;
94 
95  // Append Granularity and channel number
97  if ( channel_ ) { title << channel_; }
98 
99  // Append extra info
100  if ( extraInfo_ != "" ) {
101  title << sistrip::sep_ << extraInfo_;
102  }
103 
104  title_ = title.str();
105 
106 }
107 
108 // -----------------------------------------------------------------------------
109 //
111 
112  std::string::size_type length = title_.length();
115  std::string::size_type siz = 0;
116 
117  // Extract HistoType
118  siz = title_.find(sistrip::sep_,position) - position;
119  histoType_ = SiStripEnumsAndStrings::histoType( title_.substr(position,siz) );
120  std::string histo_type = SiStripEnumsAndStrings::histoType( histoType_ );
121  position += title_.substr(position).find( histo_type ) + histo_type.size() + (sizeof(sistrip::sep_) - 1);
122  if ( histoType_ == sistrip::UNKNOWN_HISTO_TYPE ) { position = 0; }
123  else if ( position >= length ) { return; }
124 
125  // Extract RunType
126  siz = title_.find(sistrip::sep_,position) - position;
127  runType_ = SiStripEnumsAndStrings::runType( title_.substr(position,siz) );
128  std::string run_type = SiStripEnumsAndStrings::runType( runType_ );
129  position += title_.substr(position).find( run_type ) + run_type.size() + (sizeof(sistrip::sep_) - 1);
130  if ( position >= length ) { return; }
131 
132  // Extract KeyType
133  siz = title_.find(sistrip::sep_,position) - position;
134  keyType_ = SiStripEnumsAndStrings::keyType( title_.substr(position,siz) );
135  std::string key_type = SiStripEnumsAndStrings::keyType( keyType_ );
136  position += title_.substr(position).find( key_type ) + key_type.size() + (sizeof(sistrip::hex_) - 1);
137  if ( position >= length ) { return; }
138 
139  // Extract KeyValue
140  siz = 8;
141  std::stringstream key;
142  key << title_.substr(position,siz);
143  key >> std::hex >> keyValue_;
144  position += siz + (sizeof(sistrip::sep_) - 1);
145  if ( position >= length ) { return; }
146 
147  // Extract Granularity
148  pos = title_.find(sistrip::sep_,position);
149  if ( pos == std::string::npos || pos < position ) { siz = std::string::npos - position; }
150  else { siz = pos - position; }
151  granularity_ = SiStripEnumsAndStrings::granularity( title_.substr(position,siz) );
153  position += title_.substr(position).find( gran ) + gran.size();
154  if ( position > length ) { return; }
155 
156  // Extract Channel
157  pos = title_.find(sistrip::sep_,position);
158  if ( pos == std::string::npos || pos < position ) { siz = std::string::npos - position; }
159  else { siz = pos - position; }
160  if ( position == length || !siz ) {
163  } else {
164  std::stringstream chan;
165  chan << title_.substr(position,siz);
166  chan >> std::dec >> channel_;
167  }
168  position += siz + (sizeof(sistrip::sep_) - 1);
169  if ( position >= length ) { return; }
170 
171  // Extract ExtraInfo
172  extraInfo_ = title_.substr( position, std::string::npos - position );
173 
174 }
175 
176 // -----------------------------------------------------------------------------
177 //
178 std::ostream& operator<< ( std::ostream& os, const SiStripHistoTitle& title ) {
179  std::stringstream ss;
180  ss << "[SiStripHistoTitle::print]" << std::endl
181  << " Title : " << title.title() << std::endl
182  << " HistoType : " << SiStripEnumsAndStrings::histoType( title.histoType() ) << std::endl
183  << " RunType : " << SiStripEnumsAndStrings::runType( title.runType() ) << std::endl
184  << " KeyType : " << SiStripEnumsAndStrings::keyType( title.keyType() ) << std::endl
185  << " KeyValue (hex) : " << std::hex << std::setfill('0') << std::setw(8) << title.keyValue() << std::dec << std::endl
186  << " Granularity : " << SiStripEnumsAndStrings::granularity( title.granularity() ) << std::endl
187  << " Channel : " << title.channel() << std::endl
188  << " ExtraInfo : ";
189  if ( title.extraInfo() != "" ) { ss << "\"" << title.extraInfo() << "\""; }
190  else { ss << "(none)"; }
191  os << ss.str();
192  return os;
193 }
194 
Utility class that holds histogram title.
const std::string & title() const
static const uint32_t invalid32_
Definition: Constants.h:16
sistrip::Granularity granularity_
sistrip::RunType runType_
static std::string granularity(const sistrip::Granularity &)
const sistrip::Granularity & granularity() const
std::ostream & operator<<(std::ostream &out, const ALILine &li)
Definition: ALILine.cc:187
uint16_t size_type
static int position[TOTALCHAMBERS][3]
Definition: ReadPGInfo.cc:509
const uint32_t & key() const
Definition: SiStripKey.h:126
const sistrip::Granularity & granularity() const
Definition: SiStripKey.h:128
static std::string runType(const sistrip::RunType &)
static const char sep_[]
const std::string & extraInfo() const
sistrip::HistoType histoType_
const sistrip::KeyType & keyType() const
const uint32_t & keyValue() const
static std::string histoType(const sistrip::HistoType &)
Base utility class that identifies a position within a logical structure of the strip tracker...
Definition: SiStripKey.h:24
const sistrip::RunType & runType() const
sistrip::KeyType keyType_
const uint16_t & channel() const
Definition: SiStripKey.h:129
static std::string keyType(const sistrip::KeyType &)
static const uint16_t invalid_
Definition: Constants.h:17
list key
Definition: combine.py:13
static const char hex_[]
const uint16_t & channel() const
const sistrip::HistoType & histoType() const