hpstr
The Heavy Photon Search Toolkit for Reconstruction (hpstr) provides an interface to physics data from the HPS experiment saved in the LCIO format and converts it into an ROOT based format.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
NTupplizer.cxx
Go to the documentation of this file.
1#include "NTupplizer.h"
2#include <iomanip>
3#include <set>
4#include "utilities.h"
5
6NTupplizer::NTupplizer(const std::string& name, Process& process)
7 : Processor(name, process) {
9 }
10
13
14void NTupplizer::configure(const ParameterSet& parameters) {
15
16 std::cout << "Configuring TrackPerformance" << std::endl;
17 try
18 {
19 debug_ = parameters.getInteger("debug",debug_);
20 trkCollName_ = parameters.getString("trkCollName",trkCollName_);
21 fspCollName_ = parameters.getString("fspCollName",fspCollName_);
22 eclusCollName_ = parameters.getString("eclusCollName",eclusCollName_);
23 sclusCollName_ = parameters.getString("sclusCollName",sclusCollName_);
24 baselineFile_ = parameters.getString("baselineFile");
25 timeProfiles_ = parameters.getString("timeProfiles");
26 outPutCsv_ = parameters.getInteger("outPutCsv");
27 }
28 catch (std::runtime_error& error)
29 {
30 std::cout << error.what() << std::endl;
31 }
32}
33
34void NTupplizer::initialize(TTree* tree) {
35 if(outPutCsv_==1){
36 csvFile_=std::ofstream("outputCSV.csv");
37 csvFile_<<"EventNum,TrackNo";
38 for(int i = 0; i<12;i++){
39 for(int j = 0; j<14;j++){
40 csvFile_<<",track_"+std::to_string(i)+"_lay_"+std::to_string(j)+"_lambkink";
41 csvFile_<<",track_"+std::to_string(i)+"_lay_"+std::to_string(j)+"_phikink";
42 csvFile_<<",track_"+std::to_string(i)+"_d0";
43 csvFile_<<",track_"+std::to_string(i)+"_phi0";
44 csvFile_<<",track_"+std::to_string(i)+"_omega";
45 csvFile_<<",track_"+std::to_string(i)+"_tanlambda";
46 csvFile_<<",tracl_"+std::to_string(i)+"_z0";
47 csvFile_<<",tracl_"+std::to_string(i)+"_chi2";
48 csvFile_<<",tracl_"+std::to_string(i)+"_ndf";
49 csvFile_<<",tracl_"+std::to_string(i)+"_time";
50 csvFile_<<",tracl_"+std::to_string(i)+"_x";
51 csvFile_<<",tracl_"+std::to_string(i)+"_y";
52 csvFile_<<",tracl_"+std::to_string(i)+"_z";
53 csvFile_<<",tracl_"+std::to_string(i)+"_px";
54 csvFile_<<",tracl_"+std::to_string(i)+"_py";
55 csvFile_<<",tracl_"+std::to_string(i)+"_pz";
56 }
57 }
58 csvFile_<<"\n";
59 }
60 std::cout<<"I GOT HERE 3"<<std::endl;
61 tree_= tree;
62 tree_->SetBranchAddress(trkCollName_.c_str(),&tracks_, &btracks_);
63 tree_->SetBranchAddress(fspCollName_.c_str(),&fsps_, &bfsps_);
64 tree_->SetBranchAddress(eclusCollName_.c_str(),&eclusters_,&beclusters_);
65 tree_->SetBranchAddress(sclusCollName_.c_str(),&sclusters_,&bsclusters_);
66 tree_->SetBranchAddress("EventHeader",&evH_,&bevH_);
67 Tracks_ = new TH1F("Tracks","Tracks",10,0,10);
68 for(int i=0;i<12;i++){
69 for(int j=0;j<14;j++){
70 std::string title1="track_"+std::to_string(i)+"_layer_"+std::to_string(j)+"_lamdba";
71 std::string title2="track_"+std::to_string(i)+"_layer_"+std::to_string(j)+"_phi";
72 Track_Lambda[i][j]=new TH1F(title1.c_str(),"Tracks",100,-1.0,1.0);
73 Track_Phi[i][j]=new TH1F(title2.c_str(),"Tracks",100,-1.0,1.0);
74 }
75 Track_D0[i]=new TH1F();
76 Track_PHI[i]=new TH1F();
77 Track_OMEGA[i]=new TH1F();
78 Track_TANLAMBDA[i]=new TH1F();
79 Track_Z0[i]=new TH1F();
80 Track_CHI2[i]=new TH1F();
81 Track_NDF[i]=new TH1F();
82 Track_TIME[i]=new TH1F();
83 Track_POSX[i]=new TH1F();
84 Track_POSY[i]=new TH1F();
85 Track_POSZ[i]=new TH1F();
86 Track_MOMX[i]=new TH1F();
87 Track_MOMY[i]=new TH1F();
88 Track_MOMZ[i]=new TH1F();
89 }
90 return;
91}
92
94 int STRIPNUM = 0;
95 int STRIP = -1;
96 long eventTime = evH_->getEventTime();
97 int eventNum = evH_->getEventNumber();
98 int trigPhase = (int)((eventTime%24)/4);
99 //std::cout<<"I GOT HERE 1"<<std::endl;
100 //HERE IS WHERE WE PUT ALL THE CSV TITLES. FIRST UP IS ALL THE LAMBDA KINKS FOR 12 TRACKS IN ORDER
101 std::string helper=std::to_string(eventNum)+","+std::to_string(tracks_->size());
102 Tracks_->Fill(tracks_->size());
103 //I AM GOING TO ORDER THE TRACKS THEIR ORDER; ONE MAY USE ERROR TO DO A DIFFERENT ORDERING, AND GOING TO CAP AT 12
104 for (int itrack = 0; itrack < 12; ++itrack) {
105 Track* track{nullptr};
106 if(itrack<tracks_->size()){
107 track = tracks_->at(itrack);
108 for(int j=0;j<14;j++){
109 helper+=","+std::to_string(track->getLambdaKink(j));
110 helper+=","+std::to_string(track->getPhiKink(j));
111
112 Track_Lambda[itrack][j]->Fill(track->getLambdaKink(j));
113 Track_Phi[itrack][j]->Fill(track->getPhiKink(j));
114 }
115 helper+=","+std::to_string(track->getD0());
116 helper+=","+std::to_string(track->getPhi());
117 helper+=","+std::to_string(track->getOmega());
118 helper+=","+std::to_string(track->getTanLambda());
119 helper+=","+std::to_string(track->getZ0());
120 helper+=","+std::to_string(track->getChi2());
121 helper+=","+std::to_string(track->getNdf());
122 helper+=","+std::to_string(track->getTrackTime());
123 std::vector<double> position=track->getPosition();
124 helper+=","+std::to_string(position[0]);
125 helper+=","+std::to_string(position[1]);
126 helper+=","+std::to_string(position[2]);
127 std::vector<double> momentum=track->getMomentum();
128 helper+=","+std::to_string(momentum[0]);
129 helper+=","+std::to_string(momentum[1]);
130 helper+=","+std::to_string(momentum[2]);
131
132 Track_D0[itrack]->Fill(track->getD0());
133 Track_PHI[itrack]->Fill(track->getPhi());
134 Track_OMEGA[itrack]->Fill(track->getOmega());
135 Track_TANLAMBDA[itrack]->Fill(track->getTanLambda());
136 Track_Z0[itrack]->Fill(track->getZ0());
137 Track_CHI2[itrack]->Fill(track->getChi2());
138 Track_NDF[itrack]->Fill(track->getNdf());
139 Track_TIME[itrack]->Fill(track->getTrackTime());
140 Track_POSX[itrack]->Fill(position[0]);
141 Track_POSY[itrack]->Fill(position[1]);
142 Track_POSZ[itrack]->Fill(position[2]);
143 Track_MOMX[itrack]->Fill(momentum[0]);
144 Track_MOMY[itrack]->Fill(momentum[1]);
145 Track_MOMZ[itrack]->Fill(momentum[2]);
146 }else{
147 for(int j=0;j<14;j++){
148 helper+=","+std::to_string(-1000.0);
149 Track_Lambda[itrack][j]->Fill(-1000.0);
150 Track_Phi[itrack][j]->Fill(-1000.0);
151 }
152 //HERE 14 IS THE NUMBER OF VARIABLES THAT ARE BLANK AND ARENT THE KINKS
153 for(int I=0;I<14;I++){
154 helper+=","+std::to_string(-1000.0);
155 }
156 Track_D0[itrack]->Fill(-1000.0);
157 Track_PHI[itrack]->Fill(-1000.0);
158 Track_OMEGA[itrack]->Fill(-1000.0);
159 Track_TANLAMBDA[itrack]->Fill(-1000.0);
160 Track_Z0[itrack]->Fill(-1000.0);
161 Track_CHI2[itrack]->Fill(-1000.0);
162 Track_NDF[itrack]->Fill(-1000.0);
163 Track_TIME[itrack]->Fill(-1000.0);
164 Track_POSX[itrack]->Fill(-1000.0);
165 Track_POSY[itrack]->Fill(-1000.0);
166 Track_POSZ[itrack]->Fill(-1000.0);
167 Track_MOMX[itrack]->Fill(-1000.0);
168 Track_MOMY[itrack]->Fill(-1000.0);
169 Track_MOMZ[itrack]->Fill(-1000.0);
170 }
171 }
172 helper+="\n";
173 if(outPutCsv_=1){
174 csvFile_<<helper;
175 }
176 return true;
177}
178
179
180float NTupplizer::str_to_float(std::string token){
181 std::string top1=token.substr(0,token.find("."));
182 const char *top=top1.c_str();
183 std::string bot1=token.substr(token.find(".")+1);
184 const char *bottom=bot1.c_str();
185 float base = 0.0;
186 for(int J=0;J<std::strlen(top);J++){
187 base+=((float)((int)top[J]-48))*pow(10.0,(float)(std::strlen(top)-J-1));
188 }
189 for(int J=0;J<std::strlen(bottom);J++){
190 base+=((float)((int)bottom[J]-48))*pow(10.0,-1*((float)J+1.0));
191 }
192 return base;
193}
194
196 if(outPutCsv_==1){
197 csvFile_.close();
198 }
199 if(outPutCsv_==0){
200 TFile *outputFile;
201 outputFile = new TFile("outputRoot.root","RECREATE");
202 Tracks_->Write();
203 for(int i=0;i<12;i++){
204 for(int j=0;j<14;j++){
205 Track_Lambda[i][j]->Write();
206 Track_Phi[i][j]->Write();
207 }
208 Track_D0[i]->Write();
209 Track_PHI[i]->Write();
210 Track_OMEGA[i]->Write();
211 Track_TANLAMBDA[i]->Write();
212 Track_Z0[i]->Write();
213 Track_CHI2[i]->Write();
214 Track_NDF[i]->Write();
215 Track_TIME[i]->Write();
216 Track_POSX[i]->Write();
217 Track_POSY[i]->Write();
218 Track_POSZ[i]->Write();
219 Track_MOMX[i]->Write();
220 Track_MOMY[i]->Write();
221 Track_MOMZ[i]->Write();
222 }
223 outputFile->Close();
224 }
225 return;
226}
227
229 WriteRoot();
230 return;
231}
232
#define DECLARE_PROCESSOR(CLASS)
Macro which allows the framework to construct a producer given its name during configuration.
Definition Processor.h:139
int getEventNumber() const
Definition EventHeader.h:50
long getEventTime() const
Definition EventHeader.h:61
Definition IEvent.h:7
Insert description here. more details.
Definition NTupplizer.h:53
TBranch * bfsps_
Definition NTupplizer.h:135
TH1F * Track_Phi[12][14]
Definition NTupplizer.h:106
TH1F * Track_OMEGA[12]
Definition NTupplizer.h:109
int debug_
debug level
Definition NTupplizer.h:169
std::string trkCollName_
Track Collection name.
Definition NTupplizer.h:158
std::string timeProfiles_
Definition NTupplizer.h:128
std::vector< TrackerHit * > * sclusters_
Definition NTupplizer.h:140
virtual void configure(const ParameterSet &parameters)
Configure the Ana Processor.
TH1F * Track_POSX[12]
Definition NTupplizer.h:115
virtual void finalize()
Callback for the Processor to take any necessary action when the processing of events finishes.
TH1F * Track_Lambda[12][14]
Definition NTupplizer.h:105
std::string baselineFile_
Definition NTupplizer.h:127
TH1F * Track_POSY[12]
Definition NTupplizer.h:116
TH1F * Track_D0[12]
Definition NTupplizer.h:107
TH1F * Track_TANLAMBDA[12]
Definition NTupplizer.h:110
std::vector< Particle * > * fsps_
Definition NTupplizer.h:134
virtual void initialize(TTree *tree)
Callback for the Processor to take any necessary action when the processing of events starts.
virtual void WriteRoot()
TH1F * Track_POSZ[12]
Definition NTupplizer.h:117
std::string fspCollName_
Definition NTupplizer.h:159
TTree * tree_
Definition NTupplizer.h:102
std::string sclusCollName_
Definition NTupplizer.h:162
TH1F * Tracks_
Definition NTupplizer.h:104
TBranch * bsclusters_
Definition NTupplizer.h:141
std::ofstream csvFile_
Definition NTupplizer.h:122
TH1F * Track_NDF[12]
Definition NTupplizer.h:113
TH1F * Track_MOMY[12]
Definition NTupplizer.h:119
virtual float str_to_float(std::string word)
std::string eclusCollName_
description
Definition NTupplizer.h:160
TBranch * bevH_
Definition NTupplizer.h:149
TH1F * Track_MOMX[12]
Definition NTupplizer.h:118
TH1F * Track_MOMZ[12]
Definition NTupplizer.h:120
TBranch * beclusters_
Definition NTupplizer.h:138
TBranch * btracks_
description
Definition NTupplizer.h:132
TH1F * Track_CHI2[12]
Definition NTupplizer.h:112
std::vector< CalCluster * > * eclusters_
Definition NTupplizer.h:137
NTupplizer(const std::string &name, Process &process)
Class constructor.
Definition NTupplizer.cxx:6
TH1F * Track_Z0[12]
Definition NTupplizer.h:111
ModuleMapper * mmapper_
Definition NTupplizer.h:129
TH1F * Track_PHI[12]
Definition NTupplizer.h:108
TH1F * Track_TIME[12]
Definition NTupplizer.h:114
EventHeader * evH_
Definition NTupplizer.h:150
std::vector< Track * > * tracks_
Definition NTupplizer.h:131
description
Base class for all event processing components.
Definition Processor.h:34
virtual bool process()
Process the histograms and generate analysis output.
Definition Processor.h:95
Definition Track.h:32