CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Types | Private Attributes
MillePedeVariablesIORoot Class Reference

#include <MillePedeVariablesIORoot.h>

Inheritance diagram for MillePedeVariablesIORoot:
AlignmentIORootBase AlignmentUserVariablesIO

Public Member Functions

 MillePedeVariablesIORoot ()
 
std::vector< AlignmentUserVariables * > readMillePedeVariables (const std::vector< Alignable * > &alivec, const char *filename, int iter, int &ierr)
 
void writeMillePedeVariables (const std::vector< Alignable * > &alivec, const char *filename, int iter, bool validCheck, int &ierr)
 
virtual ~MillePedeVariablesIORoot ()
 

Protected Member Functions

virtual int close ()
 
virtual void createBranches ()
 create root branches More...
 
virtual int open (const char *filename, int iteration, bool writemode)
 
virtual AlignmentUserVariablesreadOne (Alignable *ali, int &ierr)
 
virtual void setBranchAddresses ()
 set root branche addresses More...
 
virtual int writeOne (Alignable *ali)
 
- Protected Member Functions inherited from AlignmentIORootBase
 AlignmentIORootBase ()
 constructor More...
 
int closeRoot (void)
 close IO More...
 
int openRoot (const char *filename, int iteration, bool writemode)
 open IO More...
 
int testFile (const char *filename, const TString &tname)
 test if file is existing and if so, what the highest iteration is More...
 
TString treeName (int iter, const TString &tname)
 compose tree name More...
 
virtual ~AlignmentIORootBase ()
 destructor More...
 
- Protected Member Functions inherited from AlignmentUserVariablesIO
std::vector< AlignmentUserVariables * > read (const align::Alignables &alivec, int &ierr)
 
int write (const align::Alignables &alivec, bool validCheck)
 
virtual ~AlignmentUserVariablesIO ()
 

Private Types

enum  { kMaxNumPar = 20 }
 

Private Attributes

Float_t myDiffBefore [kMaxNumPar]
 
Float_t myGlobalCor [kMaxNumPar]
 
UInt_t myHitsX
 
UInt_t myHitsY
 
unsigned int myId
 
Byte_t myIsValid [kMaxNumPar]
 
UInt_t myLabel
 
unsigned int myNumPar
 
int myObjId
 
Float_t myParameter [kMaxNumPar]
 
Float_t myPreSigma [kMaxNumPar]
 
Float_t mySigma [kMaxNumPar]
 

Additional Inherited Members

- Protected Attributes inherited from AlignmentIORootBase
bool bWrite
 
TTree * tree
 
TString treename
 
TString treetxt
 
- Static Protected Attributes inherited from AlignmentIORootBase
static const int itermax = 1000
 
static const int nParMax = 20
 

Detailed Description

ROOT based IO of MillePedeVariables

Author
: Gero Flucke date : November 2006
Revision
1.3
Date
2007/03/16 17:03:02

(last update by

Author
flucke

)

Definition at line 29 of file MillePedeVariablesIORoot.h.

Member Enumeration Documentation

anonymous enum
private
Enumerator
kMaxNumPar 

Definition at line 66 of file MillePedeVariablesIORoot.h.

66 {kMaxNumPar = 20}; // slighly above 'two bowed surfaces' limit

Constructor & Destructor Documentation

MillePedeVariablesIORoot::MillePedeVariablesIORoot ( )

Definition at line 23 of file MillePedeVariablesIORoot.cc.

References i, kMaxNumPar, myDiffBefore, myGlobalCor, myIsValid, myParameter, myPreSigma, mySigma, AlignmentIORootBase::treename, AlignmentIORootBase::treetxt, and writeMillePedeVariables().

23  :
24  myId(0), myObjId(0), myNumPar(0),
25  myHitsX(0), myHitsY(0), myLabel(0)
26 {
27  treename = "MillePedeUser";
28  treetxt = "MillePede User Variables";
29  for (unsigned int i=0;i<kMaxNumPar;i++) {
30  myIsValid[i] = 0;
31  myDiffBefore[i] = 0.;
32  myGlobalCor[i] = 0.;
33  myPreSigma[i] = 0.;
34  myParameter[i] = 0.;
35  mySigma[i] = 0.;
36  }
37 }
int i
Definition: DBlmapReader.cc:9
virtual MillePedeVariablesIORoot::~MillePedeVariablesIORoot ( )
inlinevirtual

Member Function Documentation

virtual int MillePedeVariablesIORoot::close ( void  )
inlineprotectedvirtual
void MillePedeVariablesIORoot::createBranches ( void  )
protectedvirtual

create root branches

Implements AlignmentIORootBase.

Definition at line 156 of file MillePedeVariablesIORoot.cc.

References myDiffBefore, myGlobalCor, myHitsX, myHitsY, myId, myIsValid, myLabel, myNumPar, myObjId, myParameter, myPreSigma, and mySigma.

Referenced by close().

157 {
158  tree->Branch("Id", &myId, "Id/i");
159  tree->Branch("ObjId", &myObjId, "ObjId/I");
160  tree->Branch("NumPar", &myNumPar, "NumPar/i");
161  tree->Branch("IsValid", myIsValid, "IsValid[NumPar]/b");
162  tree->Branch("DiffBefore", myDiffBefore,"DiffBefore[NumPar]/F");
163  tree->Branch("GlobalCor", myGlobalCor, "GlobalCor[NumPar]/F");
164  tree->Branch("PreSigma", myPreSigma, "PreSigma[NumPar]/F");
165  tree->Branch("Par", myParameter, "Par[NumPar]/F"); // name as in AlignmentParametersIORoot
166  tree->Branch("Sigma", mySigma, "Sigma[NumPar]/F");
167  tree->Branch("HitsX", &myHitsX, "HitsX/i");
168  tree->Branch("HitsY", &myHitsY, "HitsY/i");
169  tree->Branch("Label", &myLabel, "Label/i");
170 }
Definition: tree.py:1
virtual int MillePedeVariablesIORoot::open ( const char *  filename,
int  iteration,
bool  writemode 
)
inlineprotectedvirtual

open IO

Implements AlignmentUserVariablesIO.

Definition at line 53 of file MillePedeVariablesIORoot.h.

References AlignmentIORootBase::openRoot().

Referenced by Vispa.Plugins.ConfigEditor.ConfigEditorTabController.ConfigEditorTabController::importConfig(), readMillePedeVariables(), and writeMillePedeVariables().

54  { return this->openRoot(filename, iteration, writemode);}
int openRoot(const char *filename, int iteration, bool writemode)
open IO
std::vector< AlignmentUserVariables * > MillePedeVariablesIORoot::readMillePedeVariables ( const std::vector< Alignable * > &  alivec,
const char *  filename,
int  iter,
int &  ierr 
)

read user variables (not that their memory is owned by this class!)

Definition at line 66 of file MillePedeVariablesIORoot.cc.

References close(), open(), AlignmentUserVariablesIO::read(), and mps_fire::result.

Referenced by MillePedeAlignmentAlgorithm::addHitStatistics(), writeMillePedeVariables(), and ~MillePedeVariablesIORoot().

67 {
68  std::vector<AlignmentUserVariables*> result;
69  ierr = 0;
70  int iret = this->open(filename, iter, false);
71  if (iret != 0) {
72  ierr = -1;
73  } else {
74  result = this->read(alivec, iret);
75  if (iret != 0) {
76  ierr = -2;
77  } else {
78  iret = this->close();
79  if (iret != 0) {
80  ierr = -3;
81  }
82  }
83  }
84 
85  return result;
86 }
virtual int open(const char *filename, int iteration, bool writemode)
std::vector< AlignmentUserVariables * > read(const align::Alignables &alivec, int &ierr)
AlignmentUserVariables * MillePedeVariablesIORoot::readOne ( Alignable ali,
int &  ierr 
)
protectedvirtual

read MillePedeVariables belonging to one Alignable

Implements AlignmentUserVariablesIO.

Definition at line 128 of file MillePedeVariablesIORoot.cc.

References Alignable::alignableObjectId(), MillePedeVariables::diffBefore(), MillePedeVariables::globalCor(), Alignable::id(), MillePedeVariables::isValid(), myDiffBefore, myGlobalCor, myHitsX, myHitsY, myIsValid, myLabel, myNumPar, myParameter, myPreSigma, mySigma, MillePedeVariables::parameter(), MillePedeVariables::preSigma(), MillePedeVariables::setHitsX(), MillePedeVariables::setHitsY(), and MillePedeVariables::sigma().

Referenced by ~MillePedeVariablesIORoot().

129 {
130  ierr = 0;
131 
132  if (tree->GetEntryWithIndex(ali->id(), ali->alignableObjectId()) < 0) {
133  edm::LogError("Alignment") << "@SUB=MillePedeVariablesIORoot::readOne"
134  << "No index for id/type = (" << ali->id() << "/"
135  << ali->alignableObjectId() << ") found!";
136  ierr = 1;
137  return 0;
138  }
139 
141  for (unsigned int iPar = 0; iPar < myNumPar; ++iPar) {
142  mpVar->isValid()[iPar] = myIsValid[iPar];
143  mpVar->diffBefore()[iPar] = myDiffBefore[iPar];
144  mpVar->globalCor()[iPar] = myGlobalCor[iPar];
145  mpVar->preSigma()[iPar] = myPreSigma[iPar];
146  mpVar->parameter()[iPar] = myParameter[iPar];
147  mpVar->sigma()[iPar] = mySigma[iPar];
148  }
149  mpVar->setHitsX(myHitsX);
150  mpVar->setHitsY(myHitsY);
151 
152  return mpVar;
153 }
const std::vector< float > & globalCor() const
get global correlation array
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:189
const std::vector< float > & parameter() const
get array of parameters
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
void setHitsY(unsigned int hitsY)
const std::vector< float > & preSigma() const
get array of presigmas (<= 0: means fixed)
const std::vector< float > & sigma() const
get array of sigmas
const std::vector< float > & diffBefore() const
get array of differences to start value
const std::vector< bool > & isValid() const
get valid flag array
Definition: tree.py:1
void setHitsX(unsigned int hitsX)
void MillePedeVariablesIORoot::setBranchAddresses ( void  )
protectedvirtual

set root branche addresses

Implements AlignmentIORootBase.

Definition at line 173 of file MillePedeVariablesIORoot.cc.

References myDiffBefore, myGlobalCor, myHitsX, myHitsY, myId, myIsValid, myLabel, myNumPar, myObjId, myParameter, myPreSigma, and mySigma.

Referenced by close().

174 {
175  tree->SetBranchAddress("Id", &myId);
176  tree->SetBranchAddress("ObjId", &myObjId);
177  tree->SetBranchAddress("NumPar", &myNumPar);
178  tree->SetBranchAddress("IsValid", myIsValid);
179  tree->SetBranchAddress("DiffBefore", myDiffBefore);
180  tree->SetBranchAddress("GlobalCor", myGlobalCor);
181  tree->SetBranchAddress("PreSigma", myPreSigma);
182  tree->SetBranchAddress("Par", myParameter);
183  tree->SetBranchAddress("Sigma", mySigma);
184  tree->SetBranchAddress("HitsX", &myHitsX);
185  tree->SetBranchAddress("HitsY", &myHitsY);
186  tree->SetBranchAddress("Label", &myLabel);
187 }
Definition: tree.py:1
void MillePedeVariablesIORoot::writeMillePedeVariables ( const std::vector< Alignable * > &  alivec,
const char *  filename,
int  iter,
bool  validCheck,
int &  ierr 
)

write user variables

Definition at line 41 of file MillePedeVariablesIORoot.cc.

References close(), open(), readMillePedeVariables(), and AlignmentUserVariablesIO::write().

Referenced by MillePedeAlignmentAlgorithm::doIO(), MillePedeVariablesIORoot(), and ~MillePedeVariablesIORoot().

42 {
43  ierr = 0;
44 
45  int iret = this->open(filename, iter, true);
46  if (iret != 0) {
47  ierr = -1;
48  } else {
49  iret = this->write(alivec, validCheck);
50  tree->BuildIndex("Id", "ObjId");
51  if (iret != 0) {
52  ierr = -2;
53  } else {
54  iret = this->close();
55  if (iret != 0) {
56  ierr = -3;
57  }
58  }
59  }
60 
61  return;
62 }
virtual int open(const char *filename, int iteration, bool writemode)
int write(const align::Alignables &alivec, bool validCheck)
Definition: tree.py:1
int MillePedeVariablesIORoot::writeOne ( Alignable ali)
protectedvirtual

write MillePedeVariables attached to AlignmentParameters of one Alignable

Implements AlignmentUserVariablesIO.

Definition at line 89 of file MillePedeVariablesIORoot.cc.

References Alignable::alignableObjectId(), Alignable::alignmentParameters(), MillePedeVariables::diffBefore(), MillePedeVariables::globalCor(), MillePedeVariables::hitsX(), MillePedeVariables::hitsY(), Alignable::id(), MillePedeVariables::isValid(), kMaxNumPar, MillePedeVariables::label(), myDiffBefore, myGlobalCor, myHitsX, myHitsY, myId, myIsValid, myLabel, myNumPar, myObjId, myParameter, myPreSigma, mySigma, MillePedeVariables::parameter(), MillePedeVariables::preSigma(), MillePedeVariables::sigma(), MillePedeVariables::size(), and AlignmentParameters::userVariables().

Referenced by ~MillePedeVariablesIORoot().

90 {
91  if (!ali || !ali->alignmentParameters()
92  || !dynamic_cast<MillePedeVariables*>(ali->alignmentParameters()->userVariables())) {
93  edm::LogError("Alignment") << "@SUB=MillePedeVariablesIORoot::writeOne"
94  << "No MillePedeVariables found!";
95  return -1;
96  }
97 
98  const MillePedeVariables *mpVar =
99  static_cast<MillePedeVariables*>(ali->alignmentParameters()->userVariables());
100  myNumPar = mpVar->size();
101  if (myNumPar >= kMaxNumPar) {
102  edm::LogError("Alignment") << "@SUB=MillePedeVariablesIORoot::writeOne"
103  << "Ignoring parameters " << static_cast<int>(kMaxNumPar) << " to " << myNumPar-1;
105  }
106 
107  for (unsigned int iPar = 0; iPar < myNumPar; ++iPar) {
108  myIsValid[iPar] = mpVar->isValid()[iPar];
109  myDiffBefore[iPar] = mpVar->diffBefore()[iPar];
110  myGlobalCor[iPar] = mpVar->globalCor()[iPar];
111  myPreSigma[iPar] = mpVar->preSigma()[iPar];
112  myParameter[iPar] = mpVar->parameter()[iPar];
113  mySigma[iPar] = mpVar->sigma()[iPar];
114  }
115  myHitsX = mpVar->hitsX();
116  myHitsY = mpVar->hitsY();
117  myLabel = mpVar->label();
118 
119  myId = ali->id();
120  myObjId = ali->alignableObjectId();
121 
122  tree->Fill();
123 
124  return 0;
125 }
unsigned int hitsX() const
get number of hits for x-measurement
unsigned int label() const
get alignable label as used by pede
const std::vector< float > & globalCor() const
get global correlation array
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:189
unsigned int size() const
number of parameters
const std::vector< float > & parameter() const
get array of parameters
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:61
AlignmentUserVariables * userVariables(void) const
Get pointer to user variables.
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
const std::vector< float > & preSigma() const
get array of presigmas (<= 0: means fixed)
unsigned int hitsY() const
get number of hits for y-measurement
const std::vector< float > & sigma() const
get array of sigmas
const std::vector< float > & diffBefore() const
get array of differences to start value
const std::vector< bool > & isValid() const
get valid flag array
Definition: tree.py:1

Member Data Documentation

Float_t MillePedeVariablesIORoot::myDiffBefore[kMaxNumPar]
private
Float_t MillePedeVariablesIORoot::myGlobalCor[kMaxNumPar]
private
UInt_t MillePedeVariablesIORoot::myHitsX
private

Definition at line 78 of file MillePedeVariablesIORoot.h.

Referenced by createBranches(), readOne(), setBranchAddresses(), and writeOne().

UInt_t MillePedeVariablesIORoot::myHitsY
private

Definition at line 79 of file MillePedeVariablesIORoot.h.

Referenced by createBranches(), readOne(), setBranchAddresses(), and writeOne().

unsigned int MillePedeVariablesIORoot::myId
private

Definition at line 68 of file MillePedeVariablesIORoot.h.

Referenced by createBranches(), setBranchAddresses(), and writeOne().

Byte_t MillePedeVariablesIORoot::myIsValid[kMaxNumPar]
private
UInt_t MillePedeVariablesIORoot::myLabel
private

Definition at line 80 of file MillePedeVariablesIORoot.h.

Referenced by createBranches(), readOne(), setBranchAddresses(), and writeOne().

unsigned int MillePedeVariablesIORoot::myNumPar
private

Definition at line 71 of file MillePedeVariablesIORoot.h.

Referenced by createBranches(), readOne(), setBranchAddresses(), and writeOne().

int MillePedeVariablesIORoot::myObjId
private

Definition at line 69 of file MillePedeVariablesIORoot.h.

Referenced by createBranches(), setBranchAddresses(), and writeOne().

Float_t MillePedeVariablesIORoot::myParameter[kMaxNumPar]
private
Float_t MillePedeVariablesIORoot::myPreSigma[kMaxNumPar]
private
Float_t MillePedeVariablesIORoot::mySigma[kMaxNumPar]
private