ATLAS Offline Software
Public Types | Public Member Functions | Private Attributes | List of all members
MuonCalib::TubeDataFromFile Class Reference

#include <TubeDataFromFile.h>

Collaboration diagram for MuonCalib::TubeDataFromFile:

Public Types

using TubeData = std::vector< const MdtTubeFitContainer * >
 

Public Member Functions

 TubeDataFromFile ()=default
 
 ~TubeDataFromFile ()=default
 
unsigned int nRegions () const
 return number of regions More...
 
const MdtTubeFitContainergetTubes (unsigned int regionId) const
 retrieve MdtTubeFitContainer for a give regionId More...
 
void setNRegions (unsigned int n)
 set total number of regions More...
 
bool addTubes (int regionId, const MdtTubeFitContainer *tubes)
 TubeDataFromFile takes ownership of the MdtTubeFitContainer. More...
 
std::ostream & write (std::ostream &os) const
 
std::ostream & write_forDB (std::ostream &ftube, int mdt_head, int lowrun, int uprun) const
 

Private Attributes

unsigned int m_regions {0}
 total number of regions More...
 
TubeData m_tubeData
 data More...
 

Detailed Description

Manage the I/O of MdtTubeFitContainer objects.

Author
domiz.nosp@m.ia.o.nosp@m.resta.nosp@m.no@c.nosp@m.ern.c.nosp@m.h
Date
july 2005

Definition at line 24 of file TubeDataFromFile.h.

Member Typedef Documentation

◆ TubeData

Definition at line 26 of file TubeDataFromFile.h.

Constructor & Destructor Documentation

◆ TubeDataFromFile()

MuonCalib::TubeDataFromFile::TubeDataFromFile ( )
default

◆ ~TubeDataFromFile()

MuonCalib::TubeDataFromFile::~TubeDataFromFile ( )
default

Member Function Documentation

◆ addTubes()

bool MuonCalib::TubeDataFromFile::addTubes ( int  regionId,
const MdtTubeFitContainer tubes 
)
inline

TubeDataFromFile takes ownership of the MdtTubeFitContainer.

Definition at line 53 of file TubeDataFromFile.h.

53  {
54  if (regionId < 0 || regionId >= (int)m_regions) {
55  MsgStream log(Athena::getMessageSvc(), "MdtTubeFitContainer");
56  log << MSG::WARNING << "TubeDataFromFile::addTubes: <regionId out of range> " << regionId << " size " << m_regions
57  << endmsg;
58  return false;
59  }
60  if (m_tubeData[regionId] != 0) {
61  MsgStream log(Athena::getMessageSvc(), "MdtTubeFitContainer");
62  log << MSG::WARNING << "TubeDataFromFile::addTubes: <tubes already set>" << endmsg;
63  return false;
64  }
65 
66  m_tubeData[regionId] = tubes;
67 
68  return true;
69  }

◆ getTubes()

const MdtTubeFitContainer* MuonCalib::TubeDataFromFile::getTubes ( unsigned int  regionId) const
inline

retrieve MdtTubeFitContainer for a give regionId

Definition at line 36 of file TubeDataFromFile.h.

36  {
37  if (regionId >= (unsigned int)m_regions) {
38  MsgStream log(Athena::getMessageSvc(), "MdtTubeFitContainer");
39  log << MSG::WARNING << "TubeDataFromFile::getTubes: <regionId out of range> " << regionId << " size " << m_regions
40  << endmsg;
41  return nullptr;
42  }
43  return m_tubeData[regionId];
44  }

◆ nRegions()

unsigned int MuonCalib::TubeDataFromFile::nRegions ( ) const
inline

return number of regions

Definition at line 33 of file TubeDataFromFile.h.

33 { return m_regions; }

◆ setNRegions()

void MuonCalib::TubeDataFromFile::setNRegions ( unsigned int  n)
inline

set total number of regions

Definition at line 47 of file TubeDataFromFile.h.

47  {
48  m_regions = n;
49  m_tubeData.resize(n);
50  }

◆ write()

std::ostream & MuonCalib::TubeDataFromFile::write ( std::ostream &  os) const

Definition at line 18 of file TubeDataFromFile.cxx.

18  {
19  if (m_regions != m_tubeData.size()) {
20  MsgStream log(Athena::getMessageSvc(), "MdtTubeFitContainer");
21  log << MSG::WARNING << "TubeDataFromFile::write: <inconsistent count>" << endmsg;
22  }
23 
24  os << "v0.0 " << m_regions << " ";
25  unsigned int counter{0};
26  for (const MdtTubeFitContainer* container : m_tubeData) {
27  if (!container) continue;
28  const unsigned int nml = container->numMultilayers();
29  const unsigned int nl = container->numLayers();
30  const unsigned int nt = container->numTubes();
31  const std::string datatype = container->name();
32  const std::string implementation = container->implementation();
33  const int stnEta = container->idHelperSvc()->stationEta(container->identify());
34  const int stnPhi = container->idHelperSvc()->stationPhi(container->identify());
35  const std::string stnName = container->idHelperSvc()->stationNameString(container->identify());
36  os << datatype << " " << implementation << " " << counter << " " << container->size() << std::endl;
37  ++counter;
38  const MdtIdHelper& id_helper{container->idHelperSvc()->mdtIdHelper()};
39  for (unsigned int km = 1; km <= nml; ++km) {
40  for (unsigned int kl = 1; kl <= nl; ++kl) {
41  for (unsigned int kt = 1; kt <= nt; ++kt) {
42  const Identifier chId{id_helper.channelID(container->identify(),km ,kl ,kt)};
43  const MdtTubeFitContainer::SingleTubeCalib* stc = container->getCalib(chId);
44  const MdtTubeFitContainer::SingleTubeFit* stf = container->getFit(chId);
45  double t0 = 999.;
46  if (stc) {
47  t0 = stc->t0;
48  if (std::isnan(t0) != 0) t0 = -99999.;
49  }
50  constexpr int technology = 0;
51  os << " " << stnName << " " << stnPhi << " " << stnEta
52  << " " << technology << " " << km << " " << kl << " " << kt;
53  if (stc) {
54  os << " " << t0 << " " << stc->adcCal << " " << stc->statusCode;
55  } else{
56  os << " " << 0 << " " << 0 << " " << 0;
57 
58  }
59  if (stf)
60  os << " " << stf->statistics << " " << stf->chi2Tdc << " " << stf->cov[4] // stf->t0Err
61  << " " << stf->par[5] // stf->tMax
62  << " " << stf->cov[5] // stf->tMaxErr
63  << " " << stf->par[0] // stf->noise
64  << " " << stf->cov[0] // stf->noiseErr
65  << " " << stf->par[6] // stf->slope
66  << " " << stf->cov[6]; // stf->slopeErr;
67  else {
68  os << " " << -1 << " " << 0 << " " << 0 << " " << 0 << " "
69  << 0 << " " << 0 << " " << 0 << " " << 0 << " "
70  << 0;
71  }
72  os << std::endl;
73  }
74  }
75  }
76  }
77  return os;
78  }

◆ write_forDB()

std::ostream & MuonCalib::TubeDataFromFile::write_forDB ( std::ostream &  ftube,
int  mdt_head,
int  lowrun,
int  uprun 
) const

Definition at line 81 of file TubeDataFromFile.cxx.

81  {
83  // write out ascii files for Calibration DB //
85  if (m_regions != m_tubeData.size()) {
86  MsgStream log(Athena::getMessageSvc(), "MdtTubeFitContainer");
87  log << MSG::WARNING << "TubeDataFromFile::write_forDB: <inconsistent count>" << endmsg;
88  }
89 
90  for (const MdtTubeFitContainer* container : m_tubeData) {
91  if (!container) continue;
92  const unsigned int nml = container->numMultilayers();
93  const unsigned int nl = container->numLayers();
94  const unsigned int nt = container->numTubes();
95  const std::string datatype = container->name();
96  const std::string implementation = container->implementation();
97  const int stnEta = container->idHelperSvc()->stationEta(container->identify());
98  const int stnPhi = container->idHelperSvc()->stationPhi(container->identify());
99  const std::string stnName = container->idHelperSvc()->stationNameString(container->identify());
100 
101  const MdtIdHelper& id_helper{container->idHelperSvc()->mdtIdHelper()};
102  for (unsigned int km = 1; km <= nml; ++km) {
103  for (unsigned int kl = 1; kl <= nl; ++kl) {
104  for (unsigned int kt = 1; kt <= nt; ++kt) {
105  const Identifier chId{id_helper.channelID(container->identify(),km ,kl ,kt)};
106  const MdtTubeFitContainer::SingleTubeCalib* stc = container->getCalib(chId);
107  const MdtTubeFitContainer::SingleTubeFit* stf = container->getFit(chId);
108  constexpr int technology = 0;
109 
110  MuonFixedId fixId{};
111  int sc{0}, stat{-1};
112  double t0{0.}, adcm{0.}, chi2tdc{0.}, t0err{0.},
113  tmax{0.}, tmaxerr{0.}, noise{0.}, noiseerr{0.},
114  slope{0.}, sloperr{0.};
115  int tube_id{0}, runflag{0}, validflag{0};
116 
117  if (!fixId.setTechnology(technology) ||
118  !fixId.setStationName(fixId.stationStringToFixedStationNumber(stnName)) ||
119  !fixId.setStationEta(stnEta) ||
120  !fixId.setStationPhi(stnPhi) ||
121  !fixId.setMdtTube(kt) ||
122  !fixId.setMdtTubeLayer(kl) ||
123  !fixId.setMdtMultilayer(km)) {
124  std::stringstream except{};
125  except<<__FILE__<<":"<<__LINE__<<"nTubeDataFromFile::write_forDB() - Setting identifier failed!";
126  throw std::runtime_error(except.str());
127  }
128  tube_id = fixId.getIdInt();
129 
130  if (stc) {
131  t0 = stc->t0;
132  adcm = stc->adcCal;
133  sc = stc->statusCode;
134  }
135  if (stf) {
136  stat = stf->statistics;
137  chi2tdc = stf->chi2Tdc;
138  t0err = stf->cov[4];
139  tmax = stf->par[5];
140  tmaxerr = stf->cov[5];
141  noise = stf->par[0];
142  noiseerr = stf->cov[0];
143  slope = stf->par[6];
144  sloperr = stf->cov[6];
145  }
146 
147  if (std::isnan(t0) != 0) t0 = -99999.;
148 
149  ftube<<mdt_head<<","<<tube_id<<","<<fixId.mdtChamberId().getIdInt()<<","
150  <<","<<lowrun<<","<<uprun<<","<<runflag<<","<<sc
151  <<validflag<<","<<stat<<",";
152 
153  for (int ii = -2; ii < 35; ii++) {
154  if (ii == -2) {
155  ftube<<chi2tdc<<",";
156  } else if (ii == 0) {
157  ftube<<noise<<",";
158  } else if (ii == 4) {
159  ftube<<t0<<",";
160  } else if (ii == 5) {
161  ftube<<tmax<<",";
162  } else if (ii == 6) {
163  ftube<<slope<<",";
164  } else if (ii == 10) {
165  ftube<<t0err<<",";
166  } else if (ii == 11) {
167  ftube<<tmaxerr<<",";
168  } else if (ii == 12) {
169  ftube<<noiseerr<<",";
170  } else if (ii == 13) {
171  ftube<<sloperr<<",";
172  } else if (ii == 14) {
173  ftube<<adcm<<",";
174  } else {
175  ftube<<0.0<<",";
176  }
177  }
178  ftube<<"0,0,algoflag,tubegrpgr"<<std::endl;
179  }
180  }
181  }
182  }
183  return ftube;
184  }

Member Data Documentation

◆ m_regions

unsigned int MuonCalib::TubeDataFromFile::m_regions {0}
private

total number of regions

Definition at line 77 of file TubeDataFromFile.h.

◆ m_tubeData

TubeData MuonCalib::TubeDataFromFile::m_tubeData
private

data

Definition at line 80 of file TubeDataFromFile.h.


The documentation for this class was generated from the following files:
MuonCalib::TubeDataFromFile::m_regions
unsigned int m_regions
total number of regions
Definition: TubeDataFromFile.h:77
SingleTubeCalib
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib SingleTubeCalib
Definition: MdtCalibrationTool.cxx:30
MuonCalib::SingleTubeFit
MdtTubeFitContainer::SingleTubeFit SingleTubeFit
Definition: MdtTubeFitContainer.cxx:7
ALFA_EventTPCnv_Dict::t0
std::vector< ALFA_RawData_p1 > t0
Definition: ALFA_EventTPCnvDict.h:42
ParticleJetParams::kt
@ kt
Definition: ParticleJetParamDefs.h:43
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
keylayer_zslicemap.kl
kl
Definition: keylayer_zslicemap.py:109
calibdata.tube_id
tube_id
Definition: calibdata.py:30
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
beamspotman.n
n
Definition: beamspotman.py:731
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
calibdata.uprun
uprun
Definition: calibdata.py:34
MdtIdHelper
Definition: MdtIdHelper.h:61
beamspotman.stat
stat
Definition: beamspotman.py:266
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
MuonCalib::TubeDataFromFile::m_tubeData
TubeData m_tubeData
data
Definition: TubeDataFromFile.h:80
calibdata.lowrun
lowrun
Definition: calibdata.py:33
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
calibdata.implementation
implementation
Definition: calibdata.py:43
beamspotnt.nt
def nt
Definition: bin/beamspotnt.py:1063
test_pyathena.counter
counter
Definition: test_pyathena.py:15
python.SystemOfUnits.km
int km
Definition: SystemOfUnits.py:95
WriteCellNoiseToCool.noise
noise
Definition: WriteCellNoiseToCool.py:380