source: trunk/examples/novice/gemc/src/evio_output.cc@ 1190

Last change on this file since 1190 was 893, checked in by garnier, 17 years ago

make 3.80 added because 3.81 is bad

File size: 4.4 KB
RevLine 
[807]1// %%%%%%%%%%%%%
2// gemc headers
3// %%%%%%%%%%%%%
4#include "evio_output.h"
5
6#include <fstream>
7
8void evio_output :: RecordAndClear(MOutputs* output, MBank mbank)
9{
10 // Need to reorganize the vectors.
11 // First index must be variable index
12 // Second index must be hit number index
13
14 vector<vector<double> > rawinfv;
15 vector<vector<int> > dgtinfv;
16
17 int NHITS = rawinfos.size();
18 if(NHITS)
19 {
20 int NVARSR = rawinfos[0].size();
21 int NVARSD = dgtinfos[0].size();
22
23 // cout << NHITS << " " << NVARSR << " " << NVARSD << endl;
24
25 rawinfv.resize(NVARSR);
26 dgtinfv.resize(NVARSD);
27
28 for(int i=0; i<NVARSR; i++) rawinfv[i].resize(NHITS);
29 for(int i=0; i<NVARSD; i++) dgtinfv[i].resize(NHITS);
30
31
32 for(int nh=0; nh<NHITS; nh++)
33 for(int iv=0; iv<NVARSR; iv++)
34 rawinfv[iv][nh] = rawinfos[nh][iv];
35
36 for(int nh=0; nh<NHITS; nh++)
37 for(int iv=0; iv<NVARSD; iv++)
38 dgtinfv[iv][nh] = dgtinfos[nh][iv];
39
40 // inserting bitId in bankevent >> TAG=bankID NUM=1 <<
41 // hit size should be the same as bitId size
[893]42// if(NHITS != bitId.size()) cout << " Alarm! " << NHITS << " " << bitId.size() << endl;
43// // *bankevent << evioDOMNode::createEvioDOMNode(bankID, 1, bitId);
[807]44
[893]45// // creating dgthitbank, inserting it in bankevent >> TAG=bankID NUM=100 <<
46// if(NVARSD)
47// {
48// // evioDOMNodeP dgtbankhit = evioDOMNode::createEvioDOMNode(bankID, 100);
49// *bankevent << dgtbankhit;
[807]50
[893]51// for(int d=0; d<NVARSD; d++)
52// // *dgtbankhit << evioDOMNode::createEvioDOMNode(bankID, mbank.id[d+NVARSR], dgtinfv[d]);
53// }
[807]54
[893]55// // creating rawhitbank, inserting it in bankevent >> TAG=bankID NUM=200 <<
56// if(NVARSR)
57// {
58// // evioDOMNodeP rawbankhit = evioDOMNode::createEvioDOMNode(bankID, 200);
59// *bankevent << rawbankhit;
[807]60
[893]61// for(int r=0; r<NVARSR; r++)
62// // *rawbankhit << evioDOMNode::createEvioDOMNode(bankID, mbank.id[r], rawinfv[r]);
63// }
[807]64 }
65
66 rawinfos.clear();
67 dgtinfos.clear();
68 bitId.clear();
69}
70void evio_output :: WriteEvent(MOutputs* output)
71{
[893]72// output->pchan->write(*event);
73// delete event;
[807]74}
75
76void evio_output :: SetOutpHeader(int evtn, MOutputs* output)
77{
[893]78 // event = new evioDOMTree(1, 0);
[807]79
80 // creating and inserting head bank >> TAG=1 NUM=1 <<
[893]81 // evioDOMNodeP head = evioDOMNode::createEvioDOMNode(1, 1);
82 // *event << evioDOMNode::createEvioDOMNode(1, 1, &evtn, 1);
[807]83}
84
85
86
87void evio_output :: WriteGenerated(MOutputs* output, vector<MGeneratedParticle> MGP)
88{
89 double MAXP = output->gemcOpt.args["NGENP"].arg;
90 // creating and inserting generated particles bank >> TAG=10 NUM=10 <<
[893]91 // generatedp = evioDOMNode::createEvioDOMNode(10, 10);
[807]92 int NP = MGP.size();
93 vector< vector<double> > gensinfos;
94
95 for(int i=0; i<MAXP && i<MGP.size(); i++)
96 {
97 vector<double> geninfo;
98 geninfo.push_back((double) MGP[i].PID);
99 geninfo.push_back(MGP[i].momentum.getX()/MeV);
100 geninfo.push_back(MGP[i].momentum.getY()/MeV);
101 geninfo.push_back(MGP[i].momentum.getZ()/MeV);
102 geninfo.push_back(MGP[i].vertex.getX()/cm);
103 geninfo.push_back(MGP[i].vertex.getY()/cm);
104 geninfo.push_back(MGP[i].vertex.getZ()/cm);
105
106 gensinfos.push_back(geninfo);
107 }
108
[893]109 // for(int p=0; p<gensinfos.size(); p++) *generatedp << evioDOMNode::createEvioDOMNode(1, 10*(p+1), gensinfos[p]);
110 // *event << generatedp;
[807]111
112}
113
114
115
116void evio_output :: SetBankHeader(int bankid, string SDName, MOutputs* output)
117{
[893]118// bankID = bankid;
119// // bankevent = evioDOMNode::createEvioDOMNode(bankID, 0);
120// *event << bankevent ;
[807]121}
122
123void evio_output :: ProcessOutput(int bitcid, PH_output PHout, MOutputs* output, MBank mbank)
124{
125
126 // check for double/int sizes consistency
127 int nraws, ndigit;
128 nraws=ndigit=0;
129 for(int i=0; i<mbank.name.size(); i++)
130 {
131 if(mbank.type[i] == 0) ndigit++;
132 if(mbank.type[i] == 1) nraws++;
133 }
134 if(PHout.raws.size() != nraws || PHout.dgtz.size() != ndigit)
135 {
136 cout << " Output does not match bank definition. This hit won't be written in the output stream." << endl;
137 cout << " nraws size: " << nraws << " Output nraws: " << PHout.raws.size() << endl;
138 cout << " ndgtz size: " << ndigit << " Output ndgt: " << PHout.dgtz.size() << endl;
139 return;
140 }
141
142 vector<double> rawinf;
143 vector<int> dgtinf;
144
145 for(int r=0; r<nraws; r++)
146 rawinf.push_back(PHout.raws[r]);
147
148 for(int d=0; d<ndigit; d++)
149 dgtinf.push_back(PHout.dgtz[d]);
150
151 bitId.push_back(bitcid);
152 rawinfos.push_back(rawinf);
153 dgtinfos.push_back(dgtinf);
154}
155
156
157
Note: See TracBrowser for help on using the repository browser.