-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgetLumiList.cc
More file actions
76 lines (61 loc) · 1.7 KB
/
Copy pathgetLumiList.cc
File metadata and controls
76 lines (61 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "SusyEvent.h"
#include "TObjArray.h"
#include "TChain.h"
#include "TSystem.h"
#include <map>
#include <set>
#include <fstream>
#include <iostream>
void
getLumiList(TString const& _sourceName, TString const& _outputName)
{
TChain input("susyTree");
input.Add(_sourceName);
input.SetBranchStatus("*", 0);
input.SetBranchStatus("runNumber", 1);
input.SetBranchStatus("luminosityBlockNumber", 1);
susy::Event* event(new susy::Event);
event->setInput(input);
std::map<int, std::set<int> > lumiList;
unsigned currentRun(0);
unsigned currentLumi(0);
std::set<int>* currentSet(0);
long iEntry(0);
while(event->getEntry(iEntry++) > 0){
if(currentRun != event->runNumber){
currentRun = event->runNumber;
currentSet = &lumiList[currentRun];
}
else if(currentLumi == event->luminosityBlockNumber) continue;
currentLumi = event->luminosityBlockNumber;
currentSet->insert(currentLumi);
}
std::ofstream output(_outputName.Data());
output << "{";
std::map<int, std::set<int> >::iterator rItr(lumiList.begin());
while(rItr != lumiList.end()){
std::set<int>::iterator lItr(rItr->second.begin());
std::set<int>::iterator lEnd(rItr->second.end());
if(lItr == lEnd) continue;
output << "\"" << rItr->first << "\": [[";
int current(*lItr);
output << current << ", ";
++lItr;
for(; lItr != lEnd; ++lItr){
if(*lItr == current + 1) ++current;
else{
output << current << "], [";
current = *lItr;
output << current << ", ";
}
}
output << current << "]]";
if(++rItr != lumiList.end())
output << ", ";
else
break;
}
output << "}";
output.close();
delete event;
}