CMS 3D CMS Logo

AlcaBeamSpotHarvester.cc
Go to the documentation of this file.
1 
2 /*
3  * See header file for a description of this class.
4  *
5  * \author L. Uplegger F. Yumiceva - Fermilab
6  */
7 
21 
23 
27 //#include "CondCore/Utilities/bin/cmscond_export_iov.cpp"
28 //#include "CondCore/Utilities/interface/Utilities.h"
29 // #include "FWCore/MessageLogger/interface/JobReport.h"
30 
31 #include <iostream>
32 #include <cstring>
33 
34 using namespace edm;
35 using namespace reco;
36 //using namespace std;
37 
38 //--------------------------------------------------------------------------------------------------
40  beamSpotOutputBase_ (iConfig.getParameter<ParameterSet>("AlcaBeamSpotHarvesterParameters").getUntrackedParameter<std::string>("BeamSpotOutputBase")),
41  outputrecordName_ (iConfig.getParameter<ParameterSet>("AlcaBeamSpotHarvesterParameters").getUntrackedParameter<std::string>("outputRecordName", "BeamSpotObjectsRcd")),
42  sigmaZValue_ (iConfig.getParameter<ParameterSet>("AlcaBeamSpotHarvesterParameters").getUntrackedParameter<double>("SigmaZValue")),
43  sigmaZCut_ (iConfig.getParameter<ParameterSet>("AlcaBeamSpotHarvesterParameters").getUntrackedParameter<double>("SigmaZCut")),
44  dumpTxt_ (iConfig.getParameter<ParameterSet>("AlcaBeamSpotHarvesterParameters").getUntrackedParameter<bool>("DumpTxt")),
45  outTxtFileName_ (iConfig.getParameter<ParameterSet>("AlcaBeamSpotHarvesterParameters").getUntrackedParameter<std::string>("TxtFileName")),
46  theAlcaBeamSpotManager_(iConfig, consumesCollector()) {
47 }
48 
49 //--------------------------------------------------------------------------------------------------
51 
52 //--------------------------------------------------------------------------------------------------
54 
55 //--------------------------------------------------------------------------------------------------
57 
58 //--------------------------------------------------------------------------------------------------
60 // edm::LogInfo("AlcaBeamSpotHarvester")
61 // << "Lumi: " << iEvent.luminosityBlock()
62 // << " Time: " << iEvent.time().unixTime()
63 // << std::endl;
64 }
65 
66 //--------------------------------------------------------------------------------------------------
69 }
70 
71 //--------------------------------------------------------------------------------------------------
74  std::map<edm::LuminosityBlockNumber_t,std::pair<edm::Timestamp,reco::BeamSpot>> beamSpotMap = theAlcaBeamSpotManager_.getPayloads();
76 // cond::ExportIOVUtilities utilities;
77 
78  std::string outTxt = Form("%s_Run%d.txt", outTxtFileName_.c_str(), iRun.id().run());
79  std::ofstream outFile;
80  outFile.open(outTxt.c_str(),std::ios::app);
81 
82  if(poolDbService.isAvailable() ) {
83  for(AlcaBeamSpotManager::bsMap_iterator it=beamSpotMap.begin(); it!=beamSpotMap.end();it++){
84  BeamSpotObjects *aBeamSpot = new BeamSpotObjects();
85  aBeamSpot->SetType(it->second.second.type());
86  aBeamSpot->SetPosition(it->second.second.x0(),it->second.second.y0(),it->second.second.z0());
87  if(sigmaZValue_ == -1){
88  aBeamSpot->SetSigmaZ(it->second.second.sigmaZ());
89  }
90  else{
91  aBeamSpot->SetSigmaZ(sigmaZValue_);
92  }
93  aBeamSpot->Setdxdz(it->second.second.dxdz());
94  aBeamSpot->Setdydz(it->second.second.dydz());
95  aBeamSpot->SetBeamWidthX(it->second.second.BeamWidthX());
96  aBeamSpot->SetBeamWidthY(it->second.second.BeamWidthY());
97  aBeamSpot->SetEmittanceX(it->second.second.emittanceX());
98  aBeamSpot->SetEmittanceY(it->second.second.emittanceY());
99  aBeamSpot->SetBetaStar(it->second.second.betaStar() );
100 
101  for (int i=0; i<7; ++i) {
102  for (int j=0; j<7; ++j) {
103  aBeamSpot->SetCovariance(i,j,it->second.second.covariance(i,j));
104  }
105  }
106 
107  if(sigmaZValue_ > 0){
108  aBeamSpot->SetCovariance(3,3,0.000025);
109  }
110 
111  cond::Time_t thisIOV = 1;
112 
113  beamspot::BeamSpotContainer currentBS;
114 
115 
116  // run based
117  if (beamSpotOutputBase_ == "runbased" ) {
118  thisIOV = (cond::Time_t) iRun.id().run();
119  }
120  // lumi based
121  else if (beamSpotOutputBase_ == "lumibased" ) {
122  edm::LuminosityBlockID lu(iRun.id().run(),it->first);
123  thisIOV = (cond::Time_t)(lu.value());
124 
125  currentBS.beamspot = it -> second.second;
126  currentBS.run = iRun.id().run() ;
127  currentBS.beginLumiOfFit = it->first;
128  currentBS.endLumiOfFit = it->first; // endLumi = initLumi
129 
130  std::time_t lumi_t_begin = it -> second.first.unixTime();
131  std::time_t lumi_t_end = it -> second.first.unixTime(); // begin time == end time
132  strftime(currentBS.beginTimeOfFit, sizeof currentBS.beginTimeOfFit, "%Y.%m.%d %H:%M:%S GMT", gmtime(&lumi_t_begin));
133  strftime(currentBS.endTimeOfFit, sizeof currentBS.endTimeOfFit, "%Y.%m.%d %H:%M:%S GMT", gmtime(&lumi_t_end));
134 
135  currentBS.reftime[0] = lumi_t_begin;
136  currentBS.reftime[1] = lumi_t_end;
137 
138  }
139  if (poolDbService->isNewTagRequest(outputrecordName_) ) {
140  edm::LogInfo("AlcaBeamSpotHarvester")
141  << "new tag requested" << std::endl;
142  //poolDbService->createNewIOV<BeamSpotObjects>(aBeamSpot, poolDbService->beginOfTime(),poolDbService->endOfTime(),"BeamSpotObjectsRcd");
143  //poolDbService->createNewIOV<BeamSpotObjects>(aBeamSpot, poolDbService->currentTime(), poolDbService->endOfTime(),"BeamSpotObjectsRcd");
144  poolDbService->writeOne<BeamSpotObjects>(aBeamSpot, thisIOV, outputrecordName_);
145  if (dumpTxt_ && beamSpotOutputBase_ == "lumibased"){
146  beamspot::dumpBeamSpotTxt(outFile, currentBS);
147 
149  if (jr.isAvailable()) {
150  std::map<std::string, std::string> jrInfo;
151  jrInfo["Source"] = std::string("AlcaHarvesting");
152  jrInfo["FileClass"] = std::string("ALCATXT");
153  jr->reportAnalysisFile(outTxt, jrInfo);
154  }
155 
156  }
157  }
158  else {
159  edm::LogInfo("AlcaBeamSpotHarvester")
160  << "no new tag requested, appending IOV" << std::endl;
161  //poolDbService->appendSinceTime<BeamSpotObjects>(aBeamSpot, poolDbService->currentTime(),"BeamSpotObjectsRcd");
162  poolDbService->writeOne<BeamSpotObjects>(aBeamSpot, thisIOV, outputrecordName_);
163  if (dumpTxt_ && beamSpotOutputBase_ == "lumibased"){
164  beamspot::dumpBeamSpotTxt(outFile, currentBS);
165  }
166  }
167 
168 
169 
170 /*
171  int argc = 15;
172  const char* argv[] = {"endRun"
173  ,"-d","sqlite_file:combined.db"
174  ,"-s","sqlite_file:testbs2.db"
175  ,"-l","sqlite_file:log.db"
176  ,"-i","TestLSBasedBS"
177  ,"-t","TestLSBasedBS"
178  ,"-b","1"
179  ,"-e","10"
180  };
181 
182  edm::LogInfo("AlcaBeamSpotHarvester")
183  << "Running utilities!"
184  << utilities.run(argc,(char**)argv);
185  edm::LogInfo("AlcaBeamSpotHarvester")
186  << "Run utilities!"
187  << std::endl;
188 */
189  }
190 
191  }
192 
193  outFile.close();
194 
195 }
196 
197 //--------------------------------------------------------------------------------------------------
199 
200 //--------------------------------------------------------------------------------------------------
203 }
204 
205 
RunID const & id() const
Definition: RunBase.h:39
RunNumber_t run() const
Definition: RunID.h:39
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void beginRun(const edm::Run &, const edm::EventSetup &) override
void SetSigmaZ(double val)
set sigma Z, RMS bunch length
void analyze(const edm::Event &, const edm::EventSetup &) override
void endRun(const edm::Run &, const edm::EventSetup &) override
void SetCovariance(int i, int j, double val)
set i,j element of the full covariance matrix 7x7
void Setdydz(double val)
set dydz slope, crossing angle in XZ
std::map< edm::LuminosityBlockNumber_t, std::pair< edm::Timestamp, reco::BeamSpot > >::iterator bsMap_iterator
AlcaBeamSpotHarvester(const edm::ParameterSet &)
Constructor.
U second(std::pair< T, U > const &p)
void endJob(void) override
int iEvent
Definition: GenABIO.cc:230
unsigned long long Time_t
Definition: Time.h:16
bool isNewTagRequest(const std::string &recordName)
void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
void SetEmittanceX(double val)
set emittance
~AlcaBeamSpotHarvester() override
Destructor.
bool isAvailable() const
Definition: Service.h:46
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
void Setdxdz(double val)
set dxdz slope, crossing angle
void endLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
void SetBetaStar(double val)
set beta star
void readLumi(const edm::LuminosityBlock &)
void SetType(int type)
set beam type
void SetEmittanceY(double val)
set emittance
void SetBeamWidthX(double val)
set average transverse beam width X
void SetBeamWidthY(double val)
set average transverse beam width Y
void beginJob(void) override
AlcaBeamSpotManager theAlcaBeamSpotManager_
fixed size matrix
HLT enums.
void reportAnalysisFile(std::string const &fileName, std::map< std::string, std::string > const &fileData)
Definition: JobReport.cc:507
void dumpBeamSpotTxt(std::ofstream &outFile, BeamSpotContainer const &bsContainer)
const std::map< edm::LuminosityBlockNumber_t, std::pair< edm::Timestamp, reco::BeamSpot > > & getPayloads(void)
Definition: Run.h:43
void SetPosition(double x, double y, double z)
set XYZ position