CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalTBWriter.cc
Go to the documentation of this file.
1 #include <TFile.h>
2 #include <TTree.h>
8 #include <unistd.h>
9 #include <boost/cstdint.hpp>
11 
12 
14  namePattern_(pset.getUntrackedParameter<std::string>("FilenamePattern","/tmp/HTB_%06d.root")),
15  fedRawDataCollectionTag_(pset.getParameter<edm::InputTag>("fedRawDataCollectionTag"))
16 {
17 
18  std::vector<edm::ParameterSet> names=pset.getUntrackedParameter<std::vector<edm::ParameterSet> >("ChunkNames");
19  std::vector<edm::ParameterSet>::iterator j;
20  for (j=names.begin(); j!=names.end(); j++) {
21  std::string name=j->getUntrackedParameter<std::string>("Name");
22  int num=j->getUntrackedParameter<int>("Number");
24  }
25 
26  file_=0;
27  tree_=0;
28  eventInfo_=0;
29 }
30 
32  char buffer[1024];
33  if (file_!=0) {
34  file_->Write();
35 
36  ri_.setInfo("DAQSofwareRelease","UNKNOWN -- HcalTBWriter");
37  gethostname(buffer,1024);
38  ri_.setInfo("WriterHostname",buffer);
39  ri_.store(file_);
40 
41  file_->Close();
42  file_=0;
43  tree_=0;
44  chunkMap_.clear();
45  eventInfo_=0;
46  }
47 }
48 
52 
53  if (file_==0) {
54  char fname[4096];
55  snprintf(fname,4096, namePattern_.c_str(),e.id().run());
56  edm::LogInfo("HCAL") << "Opening " << fname << " for writing HCAL-format file.";
57  file_=new TFile(fname,"RECREATE");
58  ri_.setInfo("OriginalFile",fname);
59  buildTree(*raw);
60  }
61 
62  // adopt the buffers for writing
63  for (std::map<int,int>::const_iterator i=chunkMap_.begin(); i!=chunkMap_.end(); i++) {
64  CDFChunk* c=chunkList_[i->second];
65  const FEDRawData& frd=raw->FEDData(i->first);
66  c->adoptBuffer((ULong64_t*)frd.data(),frd.size()/8);
67  }
68 
69  // copy the event info bits
70  extractEventInfo(*raw,e.id());
71 
72  // fill the tree
73  tree_->Fill();
74  // release all the buffers
75  for (std::map<int,int>::const_iterator i=chunkMap_.begin(); i!=chunkMap_.end(); i++) {
76  CDFChunk* c=chunkList_[i->second];
77  c->releaseBuffer();
78  }
79 
80 }
81 
83  tree_=new TTree("CMSRAW","CMS Common Data Format Tree");
84  chunkMap_.clear();
85  trigChunk_=-1;
86  int j=0;
87  for (int i=0; i<2048; i++) {
88  const FEDRawData& frd=raw.FEDData(i);
89  if (frd.size()<16) continue; // it's empty... like
90 
92  if (blockToName_.find(i)!=blockToName_.end()) name=blockToName_[i];
93  else {
94  char sname[64];
95  snprintf(sname,64,"Chunk%03d",i);
96  name=sname;
97  }
98 
99  CDFChunk* c=new CDFChunk(name.c_str());
100  chunkList_[j]=c;
101  tree_->Branch(name.c_str(),"CDFChunk",&(chunkList_[j]));
102  chunkMap_[i]=j;
103 
104  if (name=="HCAL_Trigger" || name=="SliceTest_Trigger") trigChunk_=j;
105 
106  j++;
107  }
108  eventInfo_=new CDFEventInfo();
109  tree_->Branch("CDFEventInfo","CDFEventInfo",&eventInfo_,16000,2);
110 }
111 
112 typedef struct StandardTrgMsgBlkStruct {
113  uint32_t orbitNumber;
114  uint32_t eventNumber;
115  uint32_t flags_daq_ttype;
116  uint32_t algo_bits_3;
117  uint32_t algo_bits_2;
118  uint32_t algo_bits_1;
119  uint32_t algo_bits_0;
120  uint32_t tech_bits;
121  uint32_t gps_1234;
122  uint32_t gps_5678;
124 
127  uint32_t triggerWord;
130  uint32_t spillNumber;
131  uint32_t runNumber;
133  uint32_t eventStatus;
135 
137  int runno=id.run();
138  const char* seqid="";
139  int eventNo=id.event();
140  int l1aNo=eventNo;
141  int orbitNo=0;
142  int bunchNo=0;
143 
144  if (trigChunk_>=0) {
145  const newExtendedTrgMsgBlk* tinfo=(const newExtendedTrgMsgBlk*)(chunkList_[trigChunk_]->getData()+2); // assume 2 64-bit words for the CDF header
146  orbitNo=tinfo->stdBlock.orbitNumber;
147  seqid=tinfo->runNumberSequenceId;
148  FEDHeader head((const unsigned char*)chunkList_[trigChunk_]->getData());
149  bunchNo=head.bxID();
150  l1aNo=head.lvl1ID();
151  }
152 
153  eventInfo_->Set(runno,seqid,eventNo,l1aNo,orbitNo,bunchNo);
154 }
RunNumber_t run() const
Definition: EventID.h:42
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
edm::InputTag fedRawDataCollectionTag_
Definition: HcalTBWriter.h:45
StandardTrgMsgBlk stdBlock
static const HistoName names[]
CDFEventInfo * eventInfo_
Definition: HcalTBWriter.h:40
void releaseBuffer()
Definition: CDFChunk.h:11
struct StandardTrgMsgBlkStruct StandardTrgMsgBlk
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:49
void setInfo(const char *key, const char *value)
add some information to the run info
Definition: CDFRunInfo.cc:46
void store(TFile *toFile)
Definition: CDFRunInfo.cc:66
void Set(UInt_t runNo, const char *seqid, ULong64_t eventNo, UInt_t l1aNo, ULong64_t orbitNo, UInt_t bunchNo)
setter routine
Definition: CDFEventInfo.h:24
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
TTree * tree_
Definition: HcalTBWriter.h:39
HcalTBWriter(const edm::ParameterSet &pset)
Definition: HcalTBWriter.cc:13
void adoptBuffer(ULong64_t *buffer, Int_t length)
Definition: CDFChunk.h:10
int j
Definition: DBlmapReader.cc:9
Global information about an event such as event number and run number.
Definition: CDFEventInfo.h:8
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
CDFRunInfo ri_
Definition: HcalTBWriter.h:41
std::string namePattern_
Definition: HcalTBWriter.h:33
std::map< int, int > chunkMap_
Definition: HcalTBWriter.h:42
CDFChunk * chunkList_[1024]
Definition: HcalTBWriter.h:43
int bxID()
The bunch crossing number.
Definition: FEDHeader.cc:26
long long int num
Definition: procUtils.cc:71
void buildTree(const FEDRawDataCollection &raw)
Definition: HcalTBWriter.cc:82
string fname
main script
void extractEventInfo(const FEDRawDataCollection &raw, const edm::EventID &id)
edm::EventID id() const
Definition: EventBase.h:56
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:29
struct newExtendedTrgMsgBlkStruct newExtendedTrgMsgBlk
int lvl1ID()
Level-1 event number generated by the TTC system.
Definition: FEDHeader.cc:22
TFile * file_
Definition: HcalTBWriter.h:38
std::map< int, std::string > blockToName_
Definition: HcalTBWriter.h:35
virtual void analyze(const edm::Event &e, const edm::EventSetup &es)
Definition: HcalTBWriter.cc:49
virtual void endJob()
Definition: HcalTBWriter.cc:31