1 |
wright |
1.1 |
#include <TSystem.h>
|
2 |
|
|
#include <TFile.h>
|
3 |
|
|
#include <TTree.h>
|
4 |
|
|
|
5 |
|
|
//....for AutoLibraryLoader, requires <use name=FWCore/FWLite> in BuildFile
|
6 |
|
|
#include "FWCore/FWLite/src/AutoLibraryLoader.h"
|
7 |
|
|
|
8 |
|
|
//....for SiPixelDigis, requires <use name=DataFormats/SiPixelDigi> in BuildFile
|
9 |
|
|
#include "DataFormats/Common/interface/DetSetVector.h"
|
10 |
|
|
#include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
|
11 |
|
|
|
12 |
|
|
using namespace std;
|
13 |
|
|
|
14 |
|
|
int main()
|
15 |
|
|
{
|
16 |
|
|
|
17 |
|
|
//....chose data to look at
|
18 |
wright |
1.2 |
string filename1 = "first20.root";
|
19 |
|
|
string branchname1 = "PixelDigiedmDetSetVector_siPixelDigis__RP.";
|
20 |
wright |
1.1 |
|
21 |
wright |
1.2 |
string filename2 = "hlt.root";
|
22 |
|
|
string branchname2 = "PixelDigiedmDetSetVector_siPixelDigis__DigiToRawTest.";
|
23 |
wright |
1.1 |
|
24 |
|
|
//....load FWlite
|
25 |
|
|
gSystem->Load("libFWCoreFWLite");
|
26 |
|
|
AutoLibraryLoader::enable();
|
27 |
|
|
|
28 |
wright |
1.2 |
//....open files
|
29 |
|
|
TFile file1(filename1.data());
|
30 |
|
|
TFile file2(filename2.data());
|
31 |
|
|
|
32 |
|
|
// TTree* events1 = dynamic_cast<TTree *>(file1.Get("Events") );
|
33 |
|
|
// TTree* events2 = dynamic_cast<TTree *>(file2.Get("Events") );
|
34 |
|
|
|
35 |
|
|
TTree* events1 = (TTree*)file1.Get("Events");
|
36 |
|
|
TTree* events2 = (TTree*)file2.Get("Events");
|
37 |
|
|
|
38 |
|
|
//....quit if either file has no data
|
39 |
|
|
assert(events1);
|
40 |
|
|
assert(events2);
|
41 |
|
|
|
42 |
|
|
cout << "Nevents in "
|
43 |
|
|
<< "file1=" << events1->GetEntries() << " "
|
44 |
|
|
<< "file2=" << events2->GetEntries() << " "
|
45 |
|
|
<< endl;
|
46 |
wright |
1.1 |
|
47 |
|
|
//....connect branch to a local variable
|
48 |
wright |
1.2 |
TBranch* branch1 = events1->GetBranch(branchname1.data());
|
49 |
|
|
TBranch* branch2 = events2->GetBranch(branchname2.data());
|
50 |
|
|
|
51 |
|
|
|
52 |
|
|
edm::Wrapper<edm::DetSetVector<PixelDigi> >* pixelvec1=0; //....zero is required
|
53 |
|
|
edm::Wrapper<edm::DetSetVector<PixelDigi> >* pixelvec2=0; //....zero is required
|
54 |
|
|
|
55 |
|
|
branch1->SetAddress(&pixelvec1);
|
56 |
|
|
branch2->SetAddress(&pixelvec2);
|
57 |
wright |
1.1 |
|
58 |
|
|
//....loop over events
|
59 |
wright |
1.2 |
for( int i=0; i<events1->GetEntries(); i++){
|
60 |
|
|
|
61 |
|
|
//...if file2 runs out of events, stop
|
62 |
|
|
if( !(i< events2->GetEntries())){ break;}
|
63 |
wright |
1.1 |
|
64 |
|
|
//....load data for this event
|
65 |
wright |
1.2 |
branch1->GetEntry(i);
|
66 |
|
|
branch2->GetEntry(i);
|
67 |
wright |
1.1 |
|
68 |
|
|
//....get pointer to the pixel data
|
69 |
wright |
1.2 |
const edm::DetSetVector<PixelDigi>* list1=pixelvec1->product();
|
70 |
|
|
const edm::DetSetVector<PixelDigi>* list2=pixelvec2->product();
|
71 |
|
|
|
72 |
|
|
//....loop over DetSetVector lists
|
73 |
|
|
edm::DetSetVector<PixelDigi>::const_iterator iter = list1->begin(), iterEnd =list1->end();
|
74 |
|
|
edm::DetSetVector<PixelDigi>::const_iterator iter2 = list2->begin();
|
75 |
wright |
1.1 |
|
76 |
|
|
for(; iter != iterEnd; iter++){
|
77 |
|
|
//....loop over digis
|
78 |
|
|
edm::DetSet<PixelDigi>::const_iterator digi=iter->data.begin(), digiEnd=iter->data.end();
|
79 |
wright |
1.2 |
edm::DetSet<PixelDigi>::const_iterator digi2=iter2->data.begin();
|
80 |
|
|
|
81 |
wright |
1.1 |
for(; digi != digiEnd; digi++){
|
82 |
wright |
1.2 |
cout << "event#=" << i << " "
|
83 |
|
|
<< "row=" << digi->row() << " " << digi2->row() << " "
|
84 |
|
|
<< "col=" << digi->column() << " " << digi2->column() << " "
|
85 |
|
|
<< "adc=" << digi->adc() << " " << digi2->adc() << " "
|
86 |
|
|
<< endl;
|
87 |
|
|
digi2++;
|
88 |
wright |
1.1 |
}
|
89 |
wright |
1.2 |
iter2++;
|
90 |
wright |
1.1 |
}
|
91 |
|
|
}
|
92 |
|
|
}
|