9 #include "CLHEP/Units/PhysicalConstants.h" 10 using namespace CLHEP;
21 for(map<string, string>::iterator it=sims.begin(); it!=sims.end(); it++)
23 data.push_back(it->first +
": " + it->second +
" ");
29 output->
pchan->write(*conditionsBank);
30 delete conditionsBank;
38 event =
new evioDOMTree(1, 0);
40 evioDOMNodeP headerBank = evioDOMNode::createEvioDOMNode(
HEADER_BANK_TAG, 0);
46 for(map<string, double> :: iterator it = data.begin(); it != data.end(); it++)
48 int bankId = bank.
getVarId(it->first);
54 if(it->first ==
"evn")
65 double SAVE_ALL_MOTHERS = output->
gemcOpt.
optMap[
"SAVE_ALL_MOTHERS"].arg ;
78 for(
unsigned i=0; i<MAXP && i<MGP.size(); i++)
80 pid.push_back(MGP[i].PID);
81 px.push_back(MGP[i].momentum.getX()/MeV);
82 py.push_back(MGP[i].momentum.getY()/MeV);
83 pz.push_back(MGP[i].momentum.getZ()/MeV);
84 vx.push_back(MGP[i].vertex.getX()/mm);
85 vy.push_back(MGP[i].vertex.getY()/mm);
86 vz.push_back(MGP[i].vertex.getZ()/mm);
102 vector<string> dname;
108 for(
unsigned int i=0; i<MAXP && i<MGP.size(); i++)
112 for(
unsigned d=0; d<MGP[i].pSum.size(); d++)
114 dname.push_back(MGP[i].pSum[d].dname);
115 stat.push_back(MGP[i].pSum[d].stat);
116 etot.push_back(MGP[i].pSum[d].etot);
117 nphe.push_back(MGP[i].pSum[d].nphe);
118 time.push_back(MGP[i].pSum[d].t);
129 *generatedp << summaryBank;
132 *
event << generatedp;
144 insideRawIntBank.clear();
145 insideDgtIntBank.clear();
146 insideRawAllBank.clear();
150 if(!insideBank[thisHitBank.
bankName])
154 *
event << detectorBank;
155 insideBank[thisHitBank.
bankName] = 1;
161 detectorRawIntBank[thisHitBank.
bankName] = evioDOMNode::createEvioDOMNode(thisHitBank.
idtag +
RAWINT_ID, 0);
162 *detectorBank << detectorRawIntBank[thisHitBank.
bankName];
163 insideRawIntBank[thisHitBank.
bankName] = 1;
169 detectorDgtIntBank[thisHitBank.
bankName] = evioDOMNode::createEvioDOMNode(thisHitBank.
idtag +
DGTINT_ID, 0);
170 *detectorBank << detectorDgtIntBank[thisHitBank.
bankName];
171 insideDgtIntBank[thisHitBank.
bankName] = 1;
178 *detectorBank << detectorRawAllBank[thisHitBank.
bankName];
179 insideRawAllBank[thisHitBank.
bankName] = 1;
190 initBank(output, thisHitBank,
RAWINT_ID);
194 int bankId = rawBank.
getVarId(it->second);
198 map<string, double> raws = HO[0].getRaws();
200 if(raws.find(it->second) != raws.end() && bankId > 0 && bankType ==
RAWINT_ID)
202 vector<double> thisVar;
203 for(
unsigned int nh=0; nh<HO.size(); nh++)
205 map<string, double> theseRaws = HO[nh].getRaws();
206 thisVar.push_back(theseRaws[it->second]);
220 initBank(output, thisHitBank,
DGTINT_ID);
224 int bankId = dgtBank.
getVarId(it->second);
228 map<string, double> dgts = HO[0].getDgtz();
230 if(dgts.find(it->second) != dgts.end() && bankId > 0 && bankType ==
DGTINT_ID)
232 vector<double> thisVar;
233 for(
unsigned int nh=0; nh<HO.size(); nh++)
235 map<string, double> theseDgts = HO[nh].getDgtz();
236 thisVar.push_back(theseDgts[it->second]);
254 int bankId = allRawsBank.
getVarId(it->second);
258 map<string, vector<double> > allRaws = HO[0].getAllRaws();
260 if(allRaws.find(it->second) != allRaws.end() && bankId > 0 && bankType ==
RAWSTEP_ID)
262 vector<double> thisVar;
263 for(
unsigned int nh=0; nh<HO.size(); nh++)
265 map<string, vector<double> > theseRaws = HO[nh].getAllRaws();
267 vector<double> theseRawsSteps = theseRaws[it->second];
269 for(
unsigned s=0; s<theseRawsSteps.size(); s++)
270 thisVar.push_back(theseRawsSteps[s]);
283 evioDOMNodeP
addVariable(
int tag,
int num,
string type,
double value)
287 return evioDOMNode::createEvioDOMNode(tag, num, &value, 1);
292 int varI = (int) value;
293 return evioDOMNode::createEvioDOMNode(tag, num, &varI, 1);
297 return evioDOMNode::createEvioDOMNode(tag, num, &value, 1);
302 evioDOMNodeP
addVariable(
int tag,
int num,
string type,
int value)
304 return evioDOMNode::createEvioDOMNode(tag, num, &value, 1);
307 evioDOMNodeP
addVariable(
int tag,
int num,
string type,
string value)
309 return evioDOMNode::createEvioDOMNode(tag, num, &value, 1);
313 evioDOMNodeP
addVector(
int tag,
int num,
string type, vector<double> value)
317 return evioDOMNode::createEvioDOMNode(tag, num, value);
323 for(
unsigned i=0; i<value.size(); i++)
324 VI.push_back(value[i]);
325 return evioDOMNode::createEvioDOMNode(tag, num, VI);
328 return evioDOMNode::createEvioDOMNode(tag, num, value);
333 evioDOMNodeP
addVector(
int tag,
int num,
string type, vector<int> value)
335 return evioDOMNode::createEvioDOMNode(tag, num, value);
339 evioDOMNodeP
addVector(
int tag,
int num,
string type, vector<string> value)
341 return evioDOMNode::createEvioDOMNode(tag, num, value);
349 output->
pchan->write(*event);
void writeGenerated(outputContainer *, vector< generatedParticle >, map< string, gBank > *banksMap)
string getVarType(string)
void recordSimConditions(outputContainer *, map< string, string >)
gBank getDgtBankFromMap(string name, map< string, gBank > *banksMap)
int idtag
unique id for the bank
int getVarBankType(string)
void writeHeader(outputContainer *, map< string, double >, gBank)
#define GENERATED_PARTICLES_BANK_TAG
void writeG4RawIntegrated(outputContainer *, vector< hitOutput >, string, map< string, gBank > *)
void writeG4DgtIntegrated(outputContainer *, vector< hitOutput >, string, map< string, gBank > *)
void writeEvent(outputContainer *)
evioDOMNodeP addVariable(int tag, int num, string type, double value)
gBank getBankFromMap(string name, map< string, gBank > *banksMap)
map< string, aopt > optMap
Options map.
evioDOMNodeP addVector(int tag, int num, string type, vector< double > value)
string bankName
name of the bank, it's also key in the map but we store it here as well
map< int, string > orderedNames
#define GENERATED_SUMMARY_BANK_TAG
#define SIMULATION_CONDITIONS_BANK_TAG
virtual void writeG4RawAll(outputContainer *, vector< hitOutput >, string, map< string, gBank > *)
void initBank(outputContainer *, gBank, int what)