ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/wright/test/ex1.cc
Revision: 1.3
Committed: Tue Mar 27 05:54:25 2007 UTC (18 years, 1 month ago) by wright
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +12 -3 lines
Error occurred while calculating annotation data.
Log Message:
none

File Contents

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