![]() |
![]() |
Public Member Functions | |
virtual void | beginOfJob (AlignableTracker *tracker, AlignableMuon *muon, AlignableExtras *extras) |
virtual unsigned int | derivatives (std::vector< ValuesIndexPair > &outDerivInds, const TransientTrackingRecHit &hit, const TrajectoryStateOnSurface &tsos, const edm::EventSetup &setup, const EventInfo &eventInfo) const |
virtual void | endOfJob () |
virtual double | getParameter (unsigned int index) const |
virtual double | getParameterError (unsigned int index) const |
virtual unsigned int | numParameters () const |
How many parameters does this calibration define? | |
virtual bool | setParameter (unsigned int index, double value) |
virtual bool | setParameterError (unsigned int index, double error) |
SiPixelLorentzAngleCalibration (const edm::ParameterSet &cfg) | |
Constructor. | |
virtual | ~SiPixelLorentzAngleCalibration () |
Destructor. | |
Private Member Functions | |
bool | checkLorentzAngleInput (const edm::EventSetup &setup, const EventInfo &eventInfo) |
SiPixelLorentzAngle * | createFromTree (const char *fileName, const char *treeName) const |
const SiPixelLorentzAngle * | getLorentzAnglesInput () |
double | getParameterForDetId (unsigned int detId, edm::RunNumber_t run) const |
void | writeTree (const SiPixelLorentzAngle *lorentzAngle, const std::map< unsigned int, TreeStruct > &treeInfo, const char *treeName) const |
Private Attributes | |
const std::vector< std::string > | mergeFileNames_ |
const edm::ParameterSet | moduleGroupSelCfg_ |
TkModuleGroupSelector * | moduleGroupSelector_ |
const std::string | outFileName_ |
std::vector< double > | parameters_ |
std::vector< double > | paramUncertainties_ |
const std::string | recordNameDBwrite_ |
const bool | saveToDB_ |
SiPixelLorentzAngle * | siPixelLorentzAngleInput_ |
edm::ESWatcher < SiPixelLorentzAngleRcd > | watchLorentzAngleRcd_ |
Calibration of Lorentz angle for the pixel, integrated in the alignment algorithms.
Note that not all algorithms support this...
(last update by
)
Definition at line 54 of file SiPixelLorentzAngleCalibration.cc.
SiPixelLorentzAngleCalibration::SiPixelLorentzAngleCalibration | ( | const edm::ParameterSet & | cfg | ) | [explicit] |
Constructor.
Definition at line 146 of file SiPixelLorentzAngleCalibration.cc.
: IntegratedCalibrationBase(cfg), saveToDB_(cfg.getParameter<bool>("saveToDB")), recordNameDBwrite_(cfg.getParameter<std::string>("recordNameDBwrite")), outFileName_(cfg.getParameter<std::string>("treeFile")), mergeFileNames_(cfg.getParameter<std::vector<std::string> >("mergeTreeFiles")), siPixelLorentzAngleInput_(0), moduleGroupSelector_(0), moduleGroupSelCfg_(cfg.getParameter<edm::ParameterSet>("LorentzAngleModuleGroups")) { }
SiPixelLorentzAngleCalibration::~SiPixelLorentzAngleCalibration | ( | ) | [virtual] |
Destructor.
Definition at line 160 of file SiPixelLorentzAngleCalibration.cc.
References moduleGroupSelector_, and siPixelLorentzAngleInput_.
{ delete moduleGroupSelector_; // std::cout << "Destroy SiPixelLorentzAngleCalibration named " << this->name() << std::endl; delete siPixelLorentzAngleInput_; }
void SiPixelLorentzAngleCalibration::beginOfJob | ( | AlignableTracker * | tracker, |
AlignableMuon * | muon, | ||
AlignableExtras * | extras | ||
) | [virtual] |
Call at beginning of job: default implementation is dummy, to be overwritten in derived class if useful.
Reimplemented from IntegratedCalibrationBase.
Definition at line 252 of file SiPixelLorentzAngleCalibration.cc.
References TkModuleGroupSelector::getNumberOfParameters(), mergeFileNames_, moduleGroupSelCfg_, moduleGroupSelector_, IntegratedCalibrationBase::name(), TkModuleGroupSelector::numIovs(), numParameters(), outFileName_, parameters_, paramUncertainties_, PixelSubdetector::PixelBarrel, GeomDetEnumerators::PixelEndcap, and saveToDB_.
{ //specify the sub-detectors for which the LA is determined const std::vector<int> sdets = boost::assign::list_of(PixelSubdetector::PixelBarrel)(PixelSubdetector::PixelEndcap); moduleGroupSelector_ = new TkModuleGroupSelector(aliTracker, moduleGroupSelCfg_, sdets); parameters_.resize(moduleGroupSelector_->getNumberOfParameters(), 0.); paramUncertainties_.resize(moduleGroupSelector_->getNumberOfParameters(), 0.); edm::LogInfo("Alignment") << "@SUB=SiPixelLorentzAngleCalibration" << "Created with name " << this->name() << "',\n" << this->numParameters() << " parameters to be determined," << "\n saveToDB = " << saveToDB_ << "\n outFileName = " << outFileName_ << "\n N(merge files) = " << mergeFileNames_.size() << "\n number of IOVs = " << moduleGroupSelector_->numIovs(); if (mergeFileNames_.size()) { edm::LogInfo("Alignment") << "@SUB=SiPixelLorentzAngleCalibration" << "First file to merge: " << mergeFileNames_[0]; } }
bool SiPixelLorentzAngleCalibration::checkLorentzAngleInput | ( | const edm::EventSetup & | setup, |
const EventInfo & | eventInfo | ||
) | [private] |
If called the first time, fill 'siPixelLorentzAngleInput_', later check that LorentzAngle has not changed.
Definition at line 347 of file SiPixelLorentzAngleCalibration.cc.
References edm::ESWatcher< T >::check(), AlignmentAlgorithmBase::EventInfo::eventId_, Exception, edm::EventSetup::get(), SiPixelLorentzAngle::getLorentzAngles(), edm::EventID::run(), siPixelLorentzAngleInput_, and watchLorentzAngleRcd_.
Referenced by derivatives().
{ edm::ESHandle<SiPixelLorentzAngle> lorentzAngleHandle; if (!siPixelLorentzAngleInput_) { setup.get<SiPixelLorentzAngleRcd>().get(lorentzAngleHandle); siPixelLorentzAngleInput_ = new SiPixelLorentzAngle(*lorentzAngleHandle); } else { if (watchLorentzAngleRcd_.check(setup)) { // new IOV of input setup.get<SiPixelLorentzAngleRcd>().get(lorentzAngleHandle); if (lorentzAngleHandle->getLorentzAngles() // but only bad if non-identical values != siPixelLorentzAngleInput_->getLorentzAngles()) { // (comparing maps) // Maps are containers sorted by key, but comparison problems may arise from // 'floating point comparison' problems (FIXME?) throw cms::Exception("BadInput") << "SiPixelLorentzAngleCalibration::checkLorentzAngleInput:\n" << "Content of SiPixelLorentzAngle changed at run " << eventInfo.eventId_.run() << ", but algorithm expects constant input!\n"; return false; // not reached... } } } return true; }
SiPixelLorentzAngle * SiPixelLorentzAngleCalibration::createFromTree | ( | const char * | fileName, |
const char * | treeName | ||
) | const [private] |
Definition at line 467 of file SiPixelLorentzAngleCalibration.cc.
References mergeVDriftHistosByStation::file, SiPixelLorentzAngle::putLorentzAngle(), query::result, diffTreeTool::tree, and relativeConstraints::value.
Referenced by getLorentzAnglesInput().
{ // Check for file existence on your own to work around // https://hypernews.cern.ch/HyperNews/CMS/get/swDevelopment/2715.html: TFile* file = 0; FILE* testFile = fopen(fileName,"r"); if (testFile) { fclose(testFile); file = TFile::Open(fileName, "READ"); } // else not existing, see error below TTree *tree = 0; if (file) file->GetObject(treeName, tree); SiPixelLorentzAngle *result = 0; if (tree) { unsigned int id = 0; float value = 0.; tree->SetBranchAddress("detId", &id); tree->SetBranchAddress("value", &value); result = new SiPixelLorentzAngle; const Long64_t nEntries = tree->GetEntries(); for (Long64_t iEntry = 0; iEntry < nEntries; ++iEntry) { tree->GetEntry(iEntry); result->putLorentzAngle(id, value); } } else { // Warning only since could be parallel job on no events. edm::LogWarning("Alignment") << "@SUB=SiPixelLorentzAngleCalibration::createFromTree" << "Could not get TTree '" << treeName << "' from file '" << fileName << (file ? "'." : "' (file does not exist)."); } delete file; // tree will vanish with file return result; }
unsigned int SiPixelLorentzAngleCalibration::derivatives | ( | std::vector< ValuesIndexPair > & | outDerivInds, |
const TransientTrackingRecHit & | hit, | ||
const TrajectoryStateOnSurface & | tsos, | ||
const edm::EventSetup & | setup, | ||
const EventInfo & | eventInfo | ||
) | const [virtual] |
Return non-zero derivatives for x- and y-measurements with their indices by reference. Return value is their number.
Implements IntegratedCalibrationBase.
Definition at line 175 of file SiPixelLorentzAngleCalibration.cc.
References ecalTB2006H4_GenSimDigiReco_cfg::bField, Surface::bounds(), checkLorentzAngleInput(), TransientTrackingRecHit::det(), AlignmentAlgorithmBase::EventInfo::eventId_, GeomDet::geographicalId(), edm::EventSetup::get(), TkModuleGroupSelector::getParameterIndexFromDetId(), getHLTprescales::index, moduleGroupSelector_, GloballyPositioned< T >::position(), edm::EventID::run(), GeomDet::surface(), Bounds::thickness(), and GloballyPositioned< T >::toLocal().
{ // ugly const-cast: // But it is either only first initialisation or throwing an exception... const_cast<SiPixelLorentzAngleCalibration*>(this)->checkLorentzAngleInput(setup, eventInfo); outDerivInds.clear(); if (hit.det()) { // otherwise 'constraint hit' or whatever const int index = moduleGroupSelector_->getParameterIndexFromDetId(hit.det()->geographicalId(), eventInfo.eventId_.run()); if (index >= 0) { // otherwise not treated edm::ESHandle<MagneticField> magneticField; setup.get<IdealMagneticFieldRecord>().get(magneticField); const GlobalVector bField(magneticField->inTesla(hit.det()->surface().position())); const LocalVector bFieldLocal(hit.det()->surface().toLocal(bField)); const double dZ = hit.det()->surface().bounds().thickness(); // it is a float only... // shift due to LA: dx = tan(LA) * dz/2 = mobility * B_y * dz/2, // '-' since we have derivative of the residual r = trk -hit const double xDerivative = bFieldLocal.y() * dZ * -0.5; // parameter is mobility! // FIXME: Have to treat that for FPIX yDerivative != 0., due to higher order effects! if (xDerivative) { // If field is zero, this is zero: do not return it const Values derivs(xDerivative, 0.); // yDerivative = 0. outDerivInds.push_back(ValuesIndexPair(derivs, index)); } } } else { edm::LogWarning("Alignment") << "@SUB=SiPixelLorentzAngleCalibration::derivatives2" << "Hit without GeomDet, skip!"; } return outDerivInds.size(); }
void SiPixelLorentzAngleCalibration::endOfJob | ( | ) | [virtual] |
Called at end of a the job of the AlignmentProducer. Write out determined parameters.
Implements IntegratedCalibrationBase.
Definition at line 279 of file SiPixelLorentzAngleCalibration.cc.
References TkModuleGroupSelector::firstRunOfIOV(), SiPixelLorentzAngle::getLorentzAngles(), getLorentzAnglesInput(), getParameterError(), getParameterForDetId(), TkModuleGroupSelector::getParameterIndexFromDetId(), LaserDQM_cfg::input, edm::Service< T >::isAvailable(), moduleGroupSelector_, IntegratedCalibrationBase::name(), TkModuleGroupSelector::numIovs(), dbtoconf::out, convertSQLitetoXML_cfg::output, parameters_, paramUncertainties_, SiPixelLorentzAngle::putLorentzAngle(), recordNameDBwrite_, saveToDB_, AlCaHLTBitMon_QueryRunRegistry::string, relativeConstraints::value, and writeTree().
{ // loginfo output std::ostringstream out; out << "Parameter results\n"; for (unsigned int iPar = 0; iPar < parameters_.size(); ++iPar) { out << iPar << ": " << parameters_[iPar] << " +- " << paramUncertainties_[iPar] << "\n"; } edm::LogInfo("Alignment") << "@SUB=SiPixelLorentzAngleCalibration::endOfJob" << out.str(); std::map<unsigned int, TreeStruct> treeInfo; // map of TreeStruct for each detId // now write 'input' tree const SiPixelLorentzAngle *input = this->getLorentzAnglesInput(); // never NULL const std::string treeName(this->name() + '_'); this->writeTree(input, treeInfo, (treeName + "input").c_str()); // empty treeInfo for input... if (input->getLorentzAngles().empty()) { edm::LogError("Alignment") << "@SUB=SiPixelLorentzAngleCalibration::endOfJob" << "Input Lorentz angle map is empty, skip writing output!"; return; } const unsigned int nonZeroParamsOrErrors = // Any determined value? count_if (parameters_.begin(), parameters_.end(), std::bind2nd(std::not_equal_to<double>(),0.)) + count_if(paramUncertainties_.begin(), paramUncertainties_.end(), std::bind2nd(std::not_equal_to<double>(), 0.)); for (unsigned int iIOV = 0; iIOV < moduleGroupSelector_->numIovs(); ++iIOV) { // for (unsigned int iIOV = 0; iIOV < 1; ++iIOV) { // For writing out the modified values cond::Time_t firstRunOfIOV = moduleGroupSelector_->firstRunOfIOV(iIOV); SiPixelLorentzAngle *output = new SiPixelLorentzAngle; // Loop on map of values from input and add (possible) parameter results for (auto iterIdValue = input->getLorentzAngles().begin(); iterIdValue != input->getLorentzAngles().end(); ++iterIdValue) { // type of (*iterIdValue) is pair<unsigned int, float> const unsigned int detId = iterIdValue->first; // key of map is DetId const double param = this->getParameterForDetId(detId, firstRunOfIOV); // put result in output, i.e. sum of input and determined parameter, but the nasty // putLorentzAngle(..) takes float by reference - not even const reference: float value = iterIdValue->second + param; output->putLorentzAngle(detId, value); const int paramIndex = moduleGroupSelector_->getParameterIndexFromDetId(detId,firstRunOfIOV); treeInfo[detId] = TreeStruct(param, this->getParameterError(paramIndex), paramIndex); } if (saveToDB_ || nonZeroParamsOrErrors != 0) { // Skip writing mille jobs... this->writeTree(output, treeInfo, (treeName + Form("result_%lld", firstRunOfIOV)).c_str()); } if (saveToDB_) { // If requested, write out to DB edm::Service<cond::service::PoolDBOutputService> dbService; if (dbService.isAvailable()) { dbService->writeOne(output, firstRunOfIOV, recordNameDBwrite_.c_str()); // no 'delete output;': writeOne(..) took over ownership } else { delete output; edm::LogError("BadConfig") << "@SUB=SiPixelLorentzAngleCalibration::endOfJob" << "No PoolDBOutputService available, but saveToDB true!"; } } else { delete output; } } // end loop on IOVs }
const SiPixelLorentzAngle * SiPixelLorentzAngleCalibration::getLorentzAnglesInput | ( | ) | [private] |
Input LorentzAngle values:
Definition at line 374 of file SiPixelLorentzAngleCalibration.cc.
References createFromTree(), SiPixelLorentzAngle::getLorentzAngles(), mergeFileNames_, IntegratedCalibrationBase::name(), siPixelLorentzAngleInput_, and AlCaHLTBitMon_QueryRunRegistry::string.
Referenced by endOfJob().
{ // For parallel processing in Millepede II, create SiPixelLorentzAngle // from info stored in files of parallel jobs and check that they are identical. // If this job has run on data, still check that LA is identical to the ones // from mergeFileNames_. const std::string treeName(this->name() + "_input"); for (auto iFile = mergeFileNames_.begin(); iFile != mergeFileNames_.end(); ++iFile) { SiPixelLorentzAngle* la = this->createFromTree(iFile->c_str(), treeName.c_str()); // siPixelLorentzAngleInput_ could be non-null from previous file of this loop // or from checkLorentzAngleInput(..) when running on data in this job as well if (!siPixelLorentzAngleInput_ || siPixelLorentzAngleInput_->getLorentzAngles().empty()) { delete siPixelLorentzAngleInput_; // NULL or empty siPixelLorentzAngleInput_ = la; } else { // FIXME: about comparison of maps see comments in checkLorentzAngleInput if (la && !la->getLorentzAngles().empty() && // single job might not have got events la->getLorentzAngles() != siPixelLorentzAngleInput_->getLorentzAngles()) { // Throw exception instead of error? edm::LogError("NoInput") << "@SUB=SiPixelLorentzAngleCalibration::getLorentzAnglesInput" << "Different input values from tree " << treeName << " in file " << *iFile << "."; } delete la; } } if (!siPixelLorentzAngleInput_) { // no files nor ran on events siPixelLorentzAngleInput_ = new SiPixelLorentzAngle; edm::LogError("NoInput") << "@SUB=SiPixelLorentzAngleCalibration::getLorentzAnglesInput" << "No input, create an empty one!"; } else if (siPixelLorentzAngleInput_->getLorentzAngles().empty()) { edm::LogError("NoInput") << "@SUB=SiPixelLorentzAngleCalibration::getLorentzAnglesInput" << "Empty result!"; } return siPixelLorentzAngleInput_; }
double SiPixelLorentzAngleCalibration::getParameter | ( | unsigned int | index | ) | const [virtual] |
Return current value of parameter identified by index. Return 0. if index out-of-bounds.
Implements IntegratedCalibrationBase.
Definition at line 237 of file SiPixelLorentzAngleCalibration.cc.
References getHLTprescales::index, and parameters_.
{ return (index >= parameters_.size() ? 0. : parameters_[index]); }
double SiPixelLorentzAngleCalibration::getParameterError | ( | unsigned int | index | ) | const [virtual] |
Return current value of parameter identified by index. Returns 0. if index out-of-bounds or if errors undetermined.
Implements IntegratedCalibrationBase.
Definition at line 243 of file SiPixelLorentzAngleCalibration.cc.
References getHLTprescales::index, and paramUncertainties_.
Referenced by endOfJob().
{ return (index >= paramUncertainties_.size() ? 0. : paramUncertainties_[index]); }
double SiPixelLorentzAngleCalibration::getParameterForDetId | ( | unsigned int | detId, |
edm::RunNumber_t | run | ||
) | const [private] |
Determined parameter value for this detId (detId not treated => 0.) and the given run.
Definition at line 415 of file SiPixelLorentzAngleCalibration.cc.
References TkModuleGroupSelector::getParameterIndexFromDetId(), getHLTprescales::index, moduleGroupSelector_, and parameters_.
Referenced by endOfJob().
{ const int index = moduleGroupSelector_->getParameterIndexFromDetId(detId, run); return (index < 0 ? 0. : parameters_[index]); }
unsigned int SiPixelLorentzAngleCalibration::numParameters | ( | ) | const [virtual] |
How many parameters does this calibration define?
Implements IntegratedCalibrationBase.
Definition at line 168 of file SiPixelLorentzAngleCalibration.cc.
References parameters_.
Referenced by beginOfJob().
{ return parameters_.size(); }
bool SiPixelLorentzAngleCalibration::setParameter | ( | unsigned int | index, |
double | value | ||
) | [virtual] |
Setting the determined parameter identified by index, returns false if out-of-bounds, true otherwise.
Implements IntegratedCalibrationBase.
Definition at line 215 of file SiPixelLorentzAngleCalibration.cc.
References getHLTprescales::index, parameters_, and relativeConstraints::value.
{ if (index >= parameters_.size()) { return false; } else { parameters_[index] = value; return true; } }
bool SiPixelLorentzAngleCalibration::setParameterError | ( | unsigned int | index, |
double | error | ||
) | [virtual] |
Setting the determined parameter uncertainty identified by index, returns false if out-of-bounds, true otherwise.
Implements IntegratedCalibrationBase.
Definition at line 226 of file SiPixelLorentzAngleCalibration.cc.
References error, getHLTprescales::index, and paramUncertainties_.
{ if (index >= paramUncertainties_.size()) { return false; } else { paramUncertainties_[index] = error; return true; } }
void SiPixelLorentzAngleCalibration::writeTree | ( | const SiPixelLorentzAngle * | lorentzAngle, |
const std::map< unsigned int, TreeStruct > & | treeInfo, | ||
const char * | treeName | ||
) | const [private] |
Definition at line 423 of file SiPixelLorentzAngleCalibration.cc.
References mergeVDriftHistosByStation::file, TkModuleGroupSelector::firstRunOfIOV(), SiPixelLorentzAngle::getLorentzAngles(), TkModuleGroupSelector::getParameterIndexFromDetId(), TreeStruct::LeafList(), moduleGroupSelector_, outFileName_, diffTreeTool::tree, and relativeConstraints::value.
Referenced by endOfJob().
{ if (!lorentzAngle) return; TFile* file = TFile::Open(outFileName_.c_str(), "UPDATE"); if (!file) { edm::LogError("BadConfig") << "@SUB=SiPixelLorentzAngleCalibration::writeTree" << "Could not open file '" << outFileName_ << "'."; return; } TTree *tree = new TTree(treeName, treeName); unsigned int id = 0; float value = 0.; TreeStruct treeStruct; tree->Branch("detId", &id, "detId/i"); tree->Branch("value", &value, "value/F"); tree->Branch("treeStruct", &treeStruct, TreeStruct::LeafList()); for (auto iterIdValue = lorentzAngle->getLorentzAngles().begin(); iterIdValue != lorentzAngle->getLorentzAngles().end(); ++iterIdValue) { // type of (*iterIdValue) is pair<unsigned int, float> id = iterIdValue->first; // key of map is DetId value = iterIdValue->second; // type of (*treeStructIter) is pair<unsigned int, TreeStruct> auto treeStructIter = treeInfo.find(id); // find info for this id if (treeStructIter != treeInfo.end()) { treeStruct = treeStructIter->second; // info from input map } else { // if none found, fill at least parameter index (using 1st IOV...) const cond::Time_t run1of1stIov = moduleGroupSelector_->firstRunOfIOV(0); const int ind = moduleGroupSelector_->getParameterIndexFromDetId(id, run1of1stIov); treeStruct = TreeStruct(ind); } tree->Fill(); } tree->Write(); delete file; // tree vanishes with the file... (?) }
const std::vector<std::string> SiPixelLorentzAngleCalibration::mergeFileNames_ [private] |
Definition at line 130 of file SiPixelLorentzAngleCalibration.cc.
Referenced by beginOfJob(), and getLorentzAnglesInput().
const edm::ParameterSet SiPixelLorentzAngleCalibration::moduleGroupSelCfg_ [private] |
Definition at line 140 of file SiPixelLorentzAngleCalibration.cc.
Referenced by beginOfJob().
Definition at line 139 of file SiPixelLorentzAngleCalibration.cc.
Referenced by beginOfJob(), derivatives(), endOfJob(), getParameterForDetId(), writeTree(), and ~SiPixelLorentzAngleCalibration().
const std::string SiPixelLorentzAngleCalibration::outFileName_ [private] |
Definition at line 129 of file SiPixelLorentzAngleCalibration.cc.
Referenced by beginOfJob(), and writeTree().
std::vector<double> SiPixelLorentzAngleCalibration::parameters_ [private] |
Definition at line 136 of file SiPixelLorentzAngleCalibration.cc.
Referenced by beginOfJob(), endOfJob(), getParameter(), getParameterForDetId(), numParameters(), and setParameter().
std::vector<double> SiPixelLorentzAngleCalibration::paramUncertainties_ [private] |
Definition at line 137 of file SiPixelLorentzAngleCalibration.cc.
Referenced by beginOfJob(), endOfJob(), getParameterError(), and setParameterError().
const std::string SiPixelLorentzAngleCalibration::recordNameDBwrite_ [private] |
Definition at line 128 of file SiPixelLorentzAngleCalibration.cc.
Referenced by endOfJob().
const bool SiPixelLorentzAngleCalibration::saveToDB_ [private] |
Definition at line 127 of file SiPixelLorentzAngleCalibration.cc.
Referenced by beginOfJob(), and endOfJob().
Definition at line 135 of file SiPixelLorentzAngleCalibration.cc.
Referenced by checkLorentzAngleInput(), getLorentzAnglesInput(), and ~SiPixelLorentzAngleCalibration().
edm::ESWatcher<SiPixelLorentzAngleRcd> SiPixelLorentzAngleCalibration::watchLorentzAngleRcd_ [private] |
Definition at line 132 of file SiPixelLorentzAngleCalibration.cc.
Referenced by checkLorentzAngleInput().