HARPO  5.1.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HarpoSimReader.cxx
Go to the documentation of this file.
1 //
2 // File HarpoSimReader.cxx
3 //
11 #include "HarpoSimReader.h"
12 #include "HarpoConfig.h"
13 #include "HarpoSimHeader.h"
14 #include "HarpoDccEvent.h"
15 #include "HarpoDccHeader.h"
16 #include "HarpoFeminosEvent.h"
17 #include "HarpoFeminosHeader.h"
18 #include "Pmm2Event.h"
19 #include "Pmm2Header.h"
20 #include "TpcSimMCEvent.h"
21 //#include "HarpoPTEvent.h"
22 #include "HarpoSimEvent.h"
23 #include "HarpoSimElectronics.h"
24 #include "HarpoDet.h"
25 #include <TSystem.h>
26 #include <TRandom3.h>
27 //#include <TTree.h>
28 
29 #include <climits>
30 #include <cstdio>
31 #include <arpa/inet.h>
32 //#include <cstdlib>
33 //#include <cstring>
34 #include <iostream>
35 
36 ClassImp(HarpoSimReader)
37 
38 #define EXPECTED_NB_SIM_FRAGMENTS 18
39 #define NB_FEM_FRAGMENTS 72
40 #define MAX_FEM_DATA_BUFFER 2097152
41 
43 
48 {
49 
50  std::cout << "Create SIM Reader" << std::endl;
51 
52  // fCfg = new HarpoConfig();
53 
54  //fRunNo = 0;
55  fDone = false;
56  fError = false;
57  // fPlane = -1;
58 
59  fIonType = 1;
60  Long64_t iontype;
61  if ( ! gHConfig->Lookup("Sim.IonisationType",iontype) )
62  Info("HarpoSimReader","Use default simulation for ionisation");
63  else
64  fIonType = iontype;
65 
66  Info("HarpoSimReader","fIontype = %d", fIonType);
67 
68  //fInFile = (TString *) NULL;
69  fIn = (FILE *) NULL;
70  //fNevts = 0;
71 
72  //fNewFile = (TFile *) NULL;
73  fNewNb = 0;
74 
75  fEvents = new HarpoDetEvent *[gkNDetectors];
76 
77  //fEvent = (HarpoSimEvent *) NULL;
78  // fRunHeader = (HarpoSimHeader *) NULL;
79  fIonisationChamber = (TpcSimIonisationChamber *) NULL;
80  fDriftChamber = (TpcSimDriftChamber *) NULL;
81  fHarpoChamber = (HarpoSimChamber *) NULL;
82  fEventGenerator = (TpcSimEventGenerator *) NULL;
83  fHarpoReadout = (HarpoSimReadout *) NULL;
84  fDigi = (HarpoSimElectronics *) NULL;
85 
86  fSimAnalyse = (HarpoSimAnalyse *) NULL;
87  fMaxEvents = LONG_MAX;
88  //fPrevTimeStamp = 0;
89  isEventSaved = false;
90 
91  fTimeStamp = 0;
92 
93  // fDoSave = kTRUE;
94 }
95 
97 
102 {
103  // Config Function
104  fDone = false;
105  fError = false;
106 
107  fCfg = cfg;
108 
109  fIonType = 1;
110 
111  Long64_t iontype;
112  if ( ! gHConfig->Lookup("Sim.IonisationType",iontype) )
113  Info("HarpoSimReader","Use default simulation for ionisation");
114  else
115  fIonType = iontype;
116 
117  //fRunNo = cfg->GetRunNo();
118  //fInFile = cfg->GetInFile();
119  fIn = (FILE *) NULL;
120  //fNevts = 0;
121  //fMaxEvents = cfg->GetMaxEvents();
122  if(gHarpoDebug>0) Info("HarpoSimReader","fMaxEvents = %li",fMaxEvents);
123 
124  TString *FileName = cfg->GetOutFile();
125  // Info("HarpoSimReader","Filename = %s",FileName->Data());
126  fNewNb = 0;
127 
128  fEvent = (HarpoSimEvent *) NULL;
130 
131  // fRunHeader = (HarpoSimHeader *) NULL;
132 
133  fSimAnalyse = (HarpoSimAnalyse *) NULL;
134 
137  fHarpoChamber = (HarpoSimChamber *) NULL;
139  fHarpoReadout = (HarpoSimReadout *) NULL;
140  fDigi = (HarpoSimElectronics *) NULL;
141 
142  if ( FileName != (TString *) NULL )
143  SetRootFile(FileName);
144 
145  //fPrevTimeStamp = 0;
146  isEventSaved = false;
147 
148  // fDoSave = kTRUE;
149 }
150 
152 {
153  // std::fclose(fIn);
154 
155  if(fIonType)
156  fStr.close();
157 
158  // if(fSave){
159  // fTree->Write();
160  // fNewFile->Close();
161  // }
162  // delete fRunHeader;
163 }
164 
165 void HarpoSimReader::SetSimFile(TString *name)
166 {
167  fInFile = name;
168 }
169 
170 void HarpoSimReader::SetRootFile(TString *name)
171 {
172 
173  if(gHarpoDebug>0) Info("SetRootFile","%s",name->Data());
174  fNewFileName = name;
175  fSave = kTRUE;
176  fNewFile = new TFile(name->Data(),"RECREATE","HARPO SIM Events");
177 }
178 
180 {
181  fSimAnalyse = func;
182 }
183 
185 {
186 
187  if(gHarpoDebug>1) Info("NextEvent","Generating event %ld",fNevts);
188  // HarpoDccEvent* xdccEvent = new HarpoDccEvent();
189  // HarpoDccEvent* ydccEvent = new HarpoDccEvent();
190  HarpoDetEvent* xdccEvent;// = new HarpoDccEvent();
191  HarpoDetEvent* ydccEvent;// = new HarpoDccEvent();
192 
193 
194 
195  Pmm2Event* pmm2Event = new Pmm2Event();
196  HarpoSimEvent* simEvent = new HarpoSimEvent();
198 
199  Bool_t isDone = GenerateEvent(simEvent);
200  if(!isDone) return isDone;
201 
203  HarpoDccMap* mapX = fDigi->GetDccMapX();
204  Long64_t trdr = gHConfig->GetDetRdrType(static_cast<HarpoDetType>(0));
205  if (trdr == 0 ) {
206  // std::cout << "Det is T2K XDCC" << std::endl;
207  xdccEvent = new HarpoDccEvent();
208  ((HarpoDccEvent*)xdccEvent)->SetMap(mapX);
209  ((HarpoDccEvent*)xdccEvent)->SetHeader(0,fNevts);
210  ((HarpoDccEvent*)xdccEvent)->SetZeroSuppressed(kTRUE);
211  }
212  else if (trdr == 1) {
213  // std::cout << "Det is MINOS XDCC" << std::endl;
214  xdccEvent = new HarpoFeminosEvent();
215  ((HarpoFeminosEvent*)xdccEvent)->SetMap(mapX);
216  ((HarpoFeminosEvent*)xdccEvent)->SetHeader(0,fNevts);
217  ((HarpoFeminosEvent*)xdccEvent)->SetZeroSuppressed(kTRUE);
218  }
219  else {
220  std::cout << "UNKNOWN XDCC" << std::endl;
221  xdccEvent = NULL;
222  }
223 
224 
225  HarpoDccMap* mapY = fDigi->GetDccMapY();
226  trdr = gHConfig->GetDetRdrType(static_cast<HarpoDetType>(1));
227  if (trdr == 0 ) {
228  // std::cout << "Det is T2K YDCC" << std::endl;
229  ydccEvent = new HarpoDccEvent();
230  ((HarpoDccEvent*)ydccEvent)->SetMap(mapY);
231  ((HarpoDccEvent*)ydccEvent)->SetHeader(0,fNevts);
232  ((HarpoDccEvent*)ydccEvent)->SetZeroSuppressed(kTRUE);
233  }
234  else if (trdr == 1) {
235  // std::cout << "Det is MINOS YDCC" << std::endl;
236  ydccEvent = new HarpoFeminosEvent();
237  ((HarpoFeminosEvent*)ydccEvent)->SetMap(mapY);
238  ((HarpoFeminosEvent*)ydccEvent)->SetHeader(0,fNevts);
239  ((HarpoFeminosEvent*)ydccEvent)->SetZeroSuppressed(kTRUE);
240 
241  }
242  else {
243  std::cout << "UNKNOWN YDCC" << std::endl;
244  ydccEvent = NULL;
245  }
246 
247 
248 
249  Int_t nTracks = simEvent->GetMCEvent()->GetNtracks();
250  if(gHarpoDebug>1)
251  Info("NextEvent","Ntracks = %d",nTracks);
252  Int_t pm[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
253  for(Int_t tr = 0; tr<nTracks; tr++){
254  TpcSimMCTrack* track = simEvent->GetMCEvent()->GetTrack(tr);
255 
256  Double_t x[3];
257  x[0] = track->GetX0();
258  x[1] = track->GetY0();
259  x[2] = track->GetZ0();
260  Double_t p[3];
261  p[0] = track->GetPx();
262  p[1] = track->GetPy();
263  p[2] = track->GetPz();
264 
265  if(gHarpoDebug>1) Info("NextEvent","%g %g %g %g %g %g",x[0],x[1],x[2],p[0],p[1],p[2]);
266 
267  Double_t xup[3] = {150,150,300};
268  Double_t xdown[3] = {-150,-150,0};
269 
270  Bool_t scint[6] = {1,1,1,1,1,1};
271 
272  for(Int_t j = 0; j<3; j++){
273  for(Int_t i = 0; i<3; i++){
274  if(i==j) continue;
275  Double_t xtmp = x[i] + p[i]*(xup[j] + 50 - x[j])/p[j];
276  if(gHarpoDebug>1) Info("NextEvent"," %d %d %g",i,j,xtmp);
277  scint[2*j] = scint[2*j] && (xtmp<xup[i] && xtmp>xdown[i]);
278  xtmp = x[i] + p[i]*(xdown[j] - 50 - x[j])/p[j];
279  //std::cout << "xtmp = " << xtmp << std::endl;
280  scint[2*j+1] = scint[2*j+1] && (xtmp<xup[i] && xtmp>xdown[i]);
281  }
282  }
283 
284  // for(Int_t i = 0; i<6; i++){
285  // pm[2*i] = pm[2*i] || scint[i];
286  // pm[2*i+1] = pm[2*i+1] || scint[i];
287  // }
288  pm[0] = pm[0] || scint[3];
289  pm[1] = pm[1] || scint[3];
290  pm[2] = pm[2] || scint[4];
291  pm[3] = pm[3] || scint[4];
292  pm[4] = pm[4] || scint[5];
293  pm[5] = pm[5] || scint[5];
294  pm[6] = pm[6] || scint[1];
295  pm[7] = pm[7] || scint[1];
296  pm[8] = pm[8] || scint[2];
297  pm[9] = pm[9] || scint[2];
298  pm[10] = pm[10] || scint[0];
299  pm[11] = pm[11] || scint[0];
300 
301  }
302 
303 
304  Int_t size = 0;
305  for(Int_t i = 0; i<12; i++){
306  // if(gRandom->Rndm()<0.5) continue;
307  Int_t charge = 800*pm[i];
308  // Int_t charge = Int_t((7*pm[i]+0.)*gRandom->Rndm()*100);
309  if(charge < 50) continue;
310  Pmm2Mes mes;
311  mes._ChannelNum = i+1;
312  mes._Charge = charge;
313  pmm2Event->AddMes(mes);
314  size++;
315  }
316  pmm2Event->SetTriggerType(Int_t(gRandom->Rndm()*6));
317  pmm2Event->SetHeader(size,fNevts);
318 
319  // std::cout << "xdccEvent " << xdccEvent << std::endl;
320  // std::cout << "ydccEvent " << ydccEvent << std::endl;
321  // std::cout << "pmm2Event " << pmm2Event << std::endl;
322 
323  // xdccEvent->SetTimeStamp(100*fNevts);
324  // ydccEvent->SetTimeStamp(100*fNevts);
325  // pmm2Event->SetTimeStamp(100*fNevts);
326  // simEvent->SetTimeStamp(100*fNevts);
327  fEvents[XDCC] = xdccEvent;
328  fEvents[YDCC] = ydccEvent;
329  fEvents[PMM2] = pmm2Event;
330  fEvents[SIMDET] = simEvent;
331 
332  //cout << "Fill Tree" << endl;
333 
334  fNevts++;
335 
336  return isDone;
337 }
338 
339 
341 {
342  if(gHarpoDebug>1) Info("GenerateEvent", "fIonType %d",fIonType);
343  switch(fIonType){
344  case 1:
345  return GenerateEventBasic(simEvent);
346  case 2:
347  return GenerateEventFromText(simEvent, &fStr);
348  default:
349  return GenerateEventBasic(simEvent);
350  }
351 
352  return true;
353 }
354 
355 
357 {
359  simEvent->SetMCEvent(MCEvent);
360  Int_t nTr = MCEvent->GetNtracks();
361  if(gHarpoDebug>1) Info("GenerateEventBasic","%d MC tracks generated",nTr);
362  for(Int_t iTr = 0; iTr<nTr; iTr++){
363  TpcSimMCTrack* mctr = MCEvent->GetTrack(iTr);
365  Info("GenerateEvent", "fIonType %d",fIonType);
366  tr = fIonisationChamber->GenerateTrack(mctr);
367  simEvent->AddIonisationTrack(iTr,tr);
368  fHarpoReadout->Reset();
370  }
371 
372  return true;
373 }
374 
375 
376 Bool_t HarpoSimReader::GenerateEventFromText(HarpoSimEvent* simEvent, std::ifstream *str)
377 {
378  TpcSimMCEvent* MCEvent = new TpcSimMCEvent();
379  //if(!str->good()) return false;
380  Float_t xg = 0, yg = 0, zg = 0, tg = 0, pgx = 0, pgy = 0, pgz = 0, eg = 0, polax = 0, polay = 0, polaz = 0;
381  while(str->good()){
382  Char_t line[256];
383  str->getline(line,256);
384  if(strstr(line,"NEW EVENT") != NULL){
385  sscanf(line," NEW EVENT %f %f %f %f %f %f %f %f %f %f %f", &xg, &yg, &zg, &tg, &pgx, &pgy, &pgz, &eg, &polax, &polay, &polaz);
386  if(gHarpoDebug>1) Info("GenerateEventFromText:","%s",line);
387  break;
388  }
389  // Info("GenerateEventFromText","No data left");
390  // return false;
391  }
392  if(!str->good()) return false;
393 
394  if(zg){
395  Info("GenerateEventFromText","ADDING PHOTON TRACK (%g %g %g %g) Pola (%g %g %g)",pgx,pgy,pgz,eg,polax,polay,polaz);
396  TpcSimMCTrack* mctrack = new TpcSimMCTrack(xg,yg,zg,tg,pgx,pgy,pgz,22);
397  mctrack->SetE(eg);
398  mctrack->SetPolax(polax);
399  mctrack->SetPolay(polay);
400  mctrack->SetPolaz(polaz);
401  MCEvent->AddTrack(mctrack);
402  }
403 
404  Int_t iTr = 0;
405  simEvent->SetMCEvent(MCEvent);
406  while(str->good()){
409  if(!tr) break;
410  simEvent->AddIonisationTrack(iTr,tr);
411  fHarpoReadout->Reset();
413  iTr++;
414  // if(tr)
415  //tr->Delete();
416  }
417 
418  return true;
419 }
420 
421 
422 
424 {
425  return NULL;
426  // return fEvent;
427 }
428 
430 {
431  return fEvents[ndet];
432 }
433 
435 {
436  return fRunHeader[ndet];
437 }
438 
440 
444 {
447 
449 
452  fDigi = new HarpoSimElectronics();
456 
457  Long64_t trdr = gHConfig->GetDetRdrType(static_cast<HarpoDetType>(0));
458  if (trdr == 0 ) {
459  // std::cout << "Det is T2K XDCC" << std::endl;
460  fRunHeader[XDCC] = new HarpoDccHeader();
461  // HarpoPedestal* pX = new HarpoPedestal();
462  // pX->SetMean(0.);
463  // pX->SetSigma(fDigi->GetSigmaNoise());
464  fRunHeader[YDCC] = new HarpoDccHeader();
465  // HarpoPedestal* pY = new HarpoPedestal();
466  // pY->SetMean(0.);
467  // pY->SetSigma(fDigi->GetSigmaNoise());
468  // fRunHeader[1]->SetPedestal(pY);
469  }
470  else if (trdr == 1) {
471  // std::cout << "Det is MINOS XDCC" << std::endl;
473  ((HarpoFeminosHeader*)fRunHeader[XDCC])->SetPedestals(fDigi->GetPedestals(XDCC));
475  ((HarpoFeminosHeader*)fRunHeader[YDCC])->SetPedestals(fDigi->GetPedestals(YDCC));
476  }
477 
478  fRunHeader[PMM2] = new Pmm2Header();
480 
481  fEvent = 0;
482  // if(fSave){
483  // fTree = new TTree("fTree","Simulated HARPO events");
484  // fTree->Bronch("SimEvents", "HarpoSimEvent", &fEvent);
485  // }
486  if(fIonType == 2){
487  TString inputFile = "testrun.dat";
488  TString infile;
489  if ( ! gHConfig->Lookup("Sim.IonisationFile",infile) ){
490  Info("Init","Use default simulation file %s",inputFile.Data());
491  } else
492  inputFile = infile;
493  Info("Init","Reading ionisation points from %s",inputFile.Data());
494  fStr.open(inputFile.Data(), std::ifstream::in);
495  if(!fStr.good()){
496  Warning("Init","Could not read file %s",inputFile.Data());
497  return kFALSE;
498  }
499  }
500 
501  return kTRUE;
502 }
503 
504 
505 Long_t HarpoSimReader::Loop(Long_t maxevents)
506 {
507  Long_t cnt=0;
508  //maxevents = fMaxEvents;
509  if(gHarpoDebug>0) Info("Loop","maxevents = %li",maxevents);
510  // HarpoSimEvent *evt;
511 
512  //fSimAnalyse->Init();
513 
514  // while (NextEvent()) {
515  // // evt = (HarpoSimEvent*)GetEvent();
516  // //fSimAnalyse->ProcessEvent(fEvent);
517  // //delete evt;
518  // if(fDoSave)
519  // fTree->Fill();
520  // fEvent->Delete();
521  // if (++cnt >= maxevents) break;
522  // }
523 
524 
525  for(Int_t i = 0; i<maxevents; i++){
526  Bool_t test = NextEvent();
527  if(!test) break;
528  if(gHarpoDebug>1) Info("Loop","event = %d",i);
529  // if(fSave){
530  // fTree->Fill();
531  DeleteEvent();
532  cnt++;
533  }
534 
535 
536  return cnt;
537 
538  //fSimAnalyse->Save();
539 
540 }
541 
543 {
544  if(gHarpoDebug>0) Info("Loop","fMaxEvents = %li",fMaxEvents);
545  Long_t maxevents = fMaxEvents;
546  return Loop(maxevents);
547 }
548 
550 {
551  if(gHarpoDebug>0) Info("DeleteEvent()"," ");
552  std::cout << fEvents[SIMDET] << std::endl;
553  fEvents[SIMDET]->Delete();
554  std::cout << fEvents[XDCC] << std::endl;
555  fEvents[XDCC]->Delete();
556  std::cout << fEvents[YDCC] << std::endl;
557  fEvents[YDCC]->Delete();
558  std::cout << fEvents[PMM2] << std::endl;
559  fEvents[PMM2]->Delete();
560 
561 }
562 
A class hold HARPO run iformation.
Dcc Plane Y.
Definition: HarpoDet.h:20
HarpoSimReadout * fHarpoReadout
Int_t ProcessTrack(TpcSimIonisationTrack *tr)
HarpoDccMap * GetDccMapX()
Bool_t GenerateEvent(HarpoSimEvent *simEvent)
A class hold HARPO run iformation.
HarpoDetHeader * fRunHeader[gkNDetectors]
Double_t GetY0()
Definition: TpcSimMCEvent.h:24
A virtual class store event data for un detector.
Definition: HarpoDetEvent.h:32
std::ifstream fStr
Double_t GetPz()
Definition: TpcSimMCEvent.h:32
TString * GetOutFile()
Get Output root file name.
Definition: HarpoConfig.h:98
void SetPolaz(Double_t value)
Definition: TpcSimMCEvent.h:56
HarpoSimChamber * fHarpoChamber
void SetDriftChamber(TpcSimDriftChamber *readout)
Double_t GetZ0()
Definition: TpcSimMCEvent.h:25
Dcc Plane X.
Definition: HarpoDet.h:19
Bool_t GenerateEventBasic(HarpoSimEvent *simEvent)
HarpoDetEvent ** fEvents
void SetTriggerType(Int_t val)
Definition: Pmm2Event.h:28
A class hold HARPO run information.
Definition: Pmm2Header.h:17
void SetReadout(HarpoSimReadout *readout)
void SetMCEvent(TpcSimMCEvent *event)
Definition: HarpoSimEvent.h:56
void SetPolay(Double_t value)
Definition: TpcSimMCEvent.h:55
Double_t GetPy()
Definition: TpcSimMCEvent.h:31
HarpoDetHeader * GetDetHeader()
A class which read HARPO sim file from one SIM and creant Sim Events and Sim Headers for SIM Events o...
HarpoSimEvent * GetEvent()
TpcSimEventGenerator * fEventGenerator
A class store HARPO row DCC event data and header. End provide access metods to the row data...
Definition: HarpoSimEvent.h:24
A class store HARPO row FEMINOS event data and header. End provide access metods to the row data...
HarpoSimAnalyse * fSimAnalyse
unpacked dcc data The class contains the data map for DCC or Feminos The data is stored as a 2D TMatr...
Definition: HarpoDccMap.h:29
TpcSimIonisationTrack * GenerateTrack(TpcSimMCTrack *tr)
Int_t AddIonisationTrack(Int_t iTr, TpcSimIonisationTrack *tr)
A virtual base class for all HARPO detectors readers.
UInt_t _Charge
1 bit(40) - TDC Ramp
Definition: Pmm2Mes.h:75
Long_t Loop()
Read errors.
Data from Keller temperuture and pressure sensors.
Definition: HarpoDet.h:22
Int_t GetNtracks()
A class hold HARPO run iformation.
TString * fNewFileName
HarpoSimElectronics * fDigi
virtual ~HarpoSimReader()
TpcSimMCTrack * GetTrack(Int_t i)
Definition: TpcSimMCEvent.h:91
A virtual class which define intrafece between HARPO Reader and Event Analysis code.
void SetE(Double_t value)
Definition: TpcSimMCEvent.h:53
Bool_t GenerateEventFromText(HarpoSimEvent *simEvent, std::ifstream *str)
Double_t GetX0()
Definition: TpcSimMCEvent.h:23
Long64_t gHarpoDebug
Definition: HarpoDebug.cxx:9
Bool_t Init()
Init method : Open in/out files and check run header signature.
Long64_t GetDetRdrType(HarpoDetType nDet)
Return type of reader impementation for given Harpo Detector.
void SetPolax(Double_t value)
Definition: TpcSimMCEvent.h:54
void SetAnalyseFunction(HarpoSimAnalyse *func)
void SetSimFile(TString *name)
Unknown Detector.
Definition: HarpoDet.h:18
HarpoConfig * fCfg
TString * fInFile
A class hold HARPO run iformation.
TpcSimMCEvent * GetMCEvent()
Definition: HarpoSimEvent.h:57
void SetElectronics(HarpoSimElectronics *digi)
Bool_t Lookup(const char *path, Bool_t &val)
Lookup function for scalar values.
A class store HARPO raw PMM2 event buffer and header. End provide access metods to the row data...
Definition: Pmm2Event.h:19
A one channel mesurements for Pmm2v2 card The class is represent one channel data of Pmm2v2 card for ...
Definition: Pmm2Mes.h:16
void AddMes(Pmm2Mes &m)
Ruturn pointer to decoded data vector.
Definition: Pmm2Event.cxx:71
TpcSimIonisationChamber * fIonisationChamber
HarpoDccMap * GetDccMapY()
TpcSimIonisationTrack * GenerateTrackFromText(std::ifstream *str)
void AddTrack(TpcSimMCTrack *tr)
const ULong_t gkNDetectors
Definition: HarpoDet.h:14
void SetHeader(UShort_t *data)
Definition: Pmm2Event.cxx:48
HarpoConfig * gHConfig
HarpoDetEvent * fEvent
TpcSimDriftChamber * fDriftChamber
void SetRootFile(TString *name)
Double_t GetPx()
Definition: TpcSimMCEvent.h:30
A class which keeps track of the entire configuration of the analysis.
Definition: HarpoConfig.h:50
TpcSimMCEvent * GenerateEvent(Int_t seed=0)
A class store HARPO EVENT : header and row data. Its provide also the methods for access to this data...
Definition: HarpoDccEvent.h:22
UInt_t _ChannelNum
Event can access to class varibales.
Definition: Pmm2Mes.h:69
HarpoPedestal * GetPedestals(UInt_t ndet)