CMS 3D CMS Logo

MillePedeVariablesIORoot.cc
Go to the documentation of this file.
1 
8 // this class's header
10 
12 
16 
17 #include "TTree.h"
18 
19 // -------------------------------------------------------------------------------------------------
21  : myId(0), myObjId(0), myNumPar(0), myHitsX(0), myHitsY(0), myLabel(0), myName(""), myNamePtr(&myName) {
22  treename = "MillePedeUser";
23  treetxt = "MillePede User Variables";
24  for (unsigned int i = 0; i < kMaxNumPar; i++) {
25  myIsValid[i] = 0;
26  myDiffBefore[i] = 0.;
27  myGlobalCor[i] = 0.;
28  myPreSigma[i] = 0.;
29  myParameter[i] = 0.;
30  mySigma[i] = 0.;
31  }
32 }
33 
34 // -------------------------------------------------------------------------------------------------
36  const align::Alignables &alivec, const char *filename, int iter, bool validCheck, int &ierr) {
37  ierr = 0;
38 
39  int iret = this->open(filename, iter, true);
40  if (iret != 0) {
41  ierr = -1;
42  } else {
43  iret = this->write(alivec, validCheck);
44  tree->BuildIndex("Id", "ObjId");
45  if (iret != 0) {
46  ierr = -2;
47  } else {
48  iret = this->close();
49  if (iret != 0) {
50  ierr = -3;
51  }
52  }
53  }
54 
55  return;
56 }
57 
58 // -------------------------------------------------------------------------------------------------
59 std::vector<AlignmentUserVariables *> MillePedeVariablesIORoot::readMillePedeVariables(const align::Alignables &alivec,
60  const char *filename,
61  int iter,
62  int &ierr) {
63  std::vector<AlignmentUserVariables *> result;
64  ierr = 0;
65  int iret = this->open(filename, iter, false);
66  if (iret != 0) {
67  ierr = -1;
68  } else {
69  result = this->read(alivec, iret);
70  if (iret != 0) {
71  ierr = -2;
72  } else {
73  iret = this->close();
74  if (iret != 0) {
75  ierr = -3;
76  }
77  }
78  }
79 
80  return result;
81 }
82 
83 // -------------------------------------------------------------------------------------------------
85  if (!ali || !ali->alignmentParameters() ||
86  !dynamic_cast<MillePedeVariables *>(ali->alignmentParameters()->userVariables())) {
87  edm::LogError("Alignment") << "@SUB=MillePedeVariablesIORoot::writeOne"
88  << "No MillePedeVariables found!";
89  return -1;
90  }
91 
92  const MillePedeVariables *mpVar = static_cast<MillePedeVariables *>(ali->alignmentParameters()->userVariables());
93  myNumPar = mpVar->size();
94  if (myNumPar >= kMaxNumPar) {
95  edm::LogError("Alignment") << "@SUB=MillePedeVariablesIORoot::writeOne"
96  << "Ignoring parameters " << static_cast<int>(kMaxNumPar) << " to " << myNumPar - 1;
98  }
99 
100  for (unsigned int iPar = 0; iPar < myNumPar; ++iPar) {
101  myIsValid[iPar] = mpVar->isValid()[iPar];
102  myDiffBefore[iPar] = mpVar->diffBefore()[iPar];
103  myGlobalCor[iPar] = mpVar->globalCor()[iPar];
104  myPreSigma[iPar] = mpVar->preSigma()[iPar];
105  myParameter[iPar] = mpVar->parameter()[iPar];
106  mySigma[iPar] = mpVar->sigma()[iPar];
107  }
108  myHitsX = mpVar->hitsX();
109  myHitsY = mpVar->hitsY();
110  myLabel = mpVar->label();
111  myName = mpVar->name();
112 
113  myId = ali->id();
114  myObjId = ali->alignableObjectId();
115 
116  tree->Fill();
117 
118  return 0;
119 }
120 
121 // -------------------------------------------------------------------------------------------------
123  ierr = 0;
124 
125  if (tree->GetEntryWithIndex(ali->id(), ali->alignableObjectId()) < 0) {
126  edm::LogError("Alignment") << "@SUB=MillePedeVariablesIORoot::readOne"
127  << "No index for id/type = (" << ali->id() << "/" << ali->alignableObjectId()
128  << ") found!";
129  ierr = 1;
130  return nullptr;
131  }
132 
134  for (unsigned int iPar = 0; iPar < myNumPar; ++iPar) {
135  mpVar->isValid()[iPar] = myIsValid[iPar];
136  mpVar->diffBefore()[iPar] = myDiffBefore[iPar];
137  mpVar->globalCor()[iPar] = myGlobalCor[iPar];
138  mpVar->preSigma()[iPar] = myPreSigma[iPar];
139  mpVar->parameter()[iPar] = myParameter[iPar];
140  mpVar->sigma()[iPar] = mySigma[iPar];
141  }
142  mpVar->setHitsX(myHitsX);
143  mpVar->setHitsY(myHitsY);
144 
145  return mpVar;
146 }
147 
148 // -------------------------------------------------------------------------------------------------
150  tree->Branch("Id", &myId, "Id/i");
151  tree->Branch("ObjId", &myObjId, "ObjId/I");
152  tree->Branch("NumPar", &myNumPar, "NumPar/i");
153  tree->Branch("IsValid", myIsValid, "IsValid[NumPar]/b");
154  tree->Branch("DiffBefore", myDiffBefore, "DiffBefore[NumPar]/F");
155  tree->Branch("GlobalCor", myGlobalCor, "GlobalCor[NumPar]/F");
156  tree->Branch("PreSigma", myPreSigma, "PreSigma[NumPar]/F");
157  tree->Branch("Par", myParameter, "Par[NumPar]/F"); // name as in AlignmentParametersIORoot
158  tree->Branch("Sigma", mySigma, "Sigma[NumPar]/F");
159  tree->Branch("HitsX", &myHitsX, "HitsX/i");
160  tree->Branch("HitsY", &myHitsY, "HitsY/i");
161  tree->Branch("Label", &myLabel, "Label/i");
162  tree->Branch("Name", &myNamePtr);
163 }
164 
165 // -------------------------------------------------------------------------------------------------
167  tree->SetBranchAddress("Id", &myId);
168  tree->SetBranchAddress("ObjId", &myObjId);
169  tree->SetBranchAddress("NumPar", &myNumPar);
170  tree->SetBranchAddress("IsValid", myIsValid);
171  tree->SetBranchAddress("DiffBefore", myDiffBefore);
172  tree->SetBranchAddress("GlobalCor", myGlobalCor);
173  tree->SetBranchAddress("PreSigma", myPreSigma);
174  tree->SetBranchAddress("Par", myParameter);
175  tree->SetBranchAddress("Sigma", mySigma);
176  tree->SetBranchAddress("HitsX", &myHitsX);
177  tree->SetBranchAddress("HitsY", &myHitsY);
178  tree->SetBranchAddress("Label", &myLabel);
179  tree->SetBranchAddress("Name", &myNamePtr);
180 }
MillePedeVariablesIORoot::myId
unsigned int myId
Definition: MillePedeVariablesIORoot.h:69
MillePedeVariables::setHitsY
void setHitsY(unsigned int hitsY)
Definition: MillePedeVariables.h:85
MillePedeVariablesIORoot::myObjId
int myObjId
Definition: MillePedeVariablesIORoot.h:70
mps_fire.i
i
Definition: mps_fire.py:355
MessageLogger.h
MillePedeVariablesIORoot::close
int close() override
Definition: MillePedeVariablesIORoot.h:58
MillePedeVariablesIORoot::myIsValid
Byte_t myIsValid[kMaxNumPar]
Definition: MillePedeVariablesIORoot.h:73
AlignmentUserVariables
(Abstract) Base class for alignment algorithm user variables
Definition: AlignmentUserVariables.h:6
MillePedeVariables::setHitsX
void setHitsX(unsigned int hitsX)
Definition: MillePedeVariables.h:79
MillePedeVariablesIORoot::myGlobalCor
Float_t myGlobalCor[kMaxNumPar]
Definition: MillePedeVariablesIORoot.h:75
MillePedeVariablesIORoot::kMaxNumPar
Definition: MillePedeVariablesIORoot.h:67
MillePedeVariablesIORoot::myName
std::string myName
Definition: MillePedeVariablesIORoot.h:82
tree
Definition: tree.py:1
Alignable
Definition: Alignable.h:27
MillePedeVariablesIORoot::myParameter
Float_t myParameter[kMaxNumPar]
Definition: MillePedeVariablesIORoot.h:77
AlignmentIORootBase::treename
TString treename
Definition: AlignmentIORootBase.h:39
AlignmentParameters::userVariables
AlignmentUserVariables * userVariables(void) const
Get pointer to user variables.
Definition: AlignmentParameters.cc:101
MillePedeVariablesIORoot::createBranches
void createBranches() override
create root branches
Definition: MillePedeVariablesIORoot.cc:149
MillePedeVariables.h
AlignmentIORootBase::treetxt
TString treetxt
Definition: AlignmentIORootBase.h:40
AlignmentParameters.h
MillePedeVariables::hitsY
unsigned int hitsY() const
get number of hits for y-measurement
Definition: MillePedeVariables.h:82
MillePedeVariablesIORoot::myLabel
UInt_t myLabel
Definition: MillePedeVariablesIORoot.h:81
MillePedeVariables::size
unsigned int size() const
number of parameters
Definition: MillePedeVariables.h:33
MillePedeVariables::label
unsigned int label() const
get alignable label as used by pede
Definition: MillePedeVariables.h:66
MillePedeVariables::isValid
const std::vector< bool > & isValid() const
get valid flag array
Definition: MillePedeVariables.h:36
MillePedeVariablesIORoot.h
MillePedeVariablesIORoot::myDiffBefore
Float_t myDiffBefore[kMaxNumPar]
Definition: MillePedeVariablesIORoot.h:74
Alignable::alignableObjectId
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
corrVsCorr.filename
filename
Definition: corrVsCorr.py:123
MillePedeVariables::hitsX
unsigned int hitsX() const
get number of hits for x-measurement
Definition: MillePedeVariables.h:76
AlignmentUserVariablesIO::write
int write(const align::Alignables &alivec, bool validCheck)
Definition: AlignmentUserVariablesIO.cc:19
edm::LogError
Definition: MessageLogger.h:183
Alignable::id
align::ID id() const
Return the ID of Alignable, i.e. DetId of 'first' component GeomDet(Unit).
Definition: Alignable.h:180
MillePedeVariables::preSigma
const std::vector< float > & preSigma() const
get array of presigmas (<= 0: means fixed)
Definition: MillePedeVariables.h:51
MillePedeVariables::diffBefore
const std::vector< float > & diffBefore() const
get array of differences to start value
Definition: MillePedeVariables.h:41
MillePedeVariablesIORoot::readMillePedeVariables
std::vector< AlignmentUserVariables * > readMillePedeVariables(const align::Alignables &alivec, const char *filename, int iter, int &ierr)
Definition: MillePedeVariablesIORoot.cc:59
MillePedeVariablesIORoot::setBranchAddresses
void setBranchAddresses() override
set root branche addresses
Definition: MillePedeVariablesIORoot.cc:166
MillePedeVariablesIORoot::open
int open(const char *filename, int iteration, bool writemode) override
Definition: MillePedeVariablesIORoot.h:53
align::Alignables
std::vector< Alignable * > Alignables
Definition: Utilities.h:31
MillePedeVariablesIORoot::myPreSigma
Float_t myPreSigma[kMaxNumPar]
Definition: MillePedeVariablesIORoot.h:76
MillePedeVariablesIORoot::myHitsX
UInt_t myHitsX
Definition: MillePedeVariablesIORoot.h:79
MillePedeVariablesIORoot::myNamePtr
std::string * myNamePtr
Definition: MillePedeVariablesIORoot.h:83
MillePedeVariables::parameter
const std::vector< float > & parameter() const
get array of parameters
Definition: MillePedeVariables.h:61
MillePedeVariablesIORoot::writeMillePedeVariables
void writeMillePedeVariables(const align::Alignables &alivec, const char *filename, int iter, bool validCheck, int &ierr)
Definition: MillePedeVariablesIORoot.cc:35
MillePedeVariablesIORoot::myHitsY
UInt_t myHitsY
Definition: MillePedeVariablesIORoot.h:80
Alignable.h
MillePedeVariables::sigma
const std::vector< float > & sigma() const
get array of sigmas
Definition: MillePedeVariables.h:56
MillePedeVariablesIORoot::writeOne
int writeOne(Alignable *ali) override
Definition: MillePedeVariablesIORoot.cc:84
MillePedeVariables::globalCor
const std::vector< float > & globalCor() const
get global correlation array
Definition: MillePedeVariables.h:46
mps_fire.result
result
Definition: mps_fire.py:303
MillePedeVariablesIORoot::readOne
AlignmentUserVariables * readOne(Alignable *ali, int &ierr) override
Definition: MillePedeVariablesIORoot.cc:122
MillePedeVariables
Definition: MillePedeVariables.h:21
MillePedeVariablesIORoot::mySigma
Float_t mySigma[kMaxNumPar]
Definition: MillePedeVariablesIORoot.h:78
MillePedeVariablesIORoot::MillePedeVariablesIORoot
MillePedeVariablesIORoot()
Definition: MillePedeVariablesIORoot.cc:20
Alignable::alignmentParameters
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:58
MillePedeVariablesIORoot::myNumPar
unsigned int myNumPar
Definition: MillePedeVariablesIORoot.h:72
MillePedeVariables::name
const std::string & name() const
get alignable name
Definition: MillePedeVariables.h:71
AlignmentUserVariablesIO::read
std::vector< AlignmentUserVariables * > read(const align::Alignables &alivec, int &ierr)
Definition: AlignmentUserVariablesIO.cc:37