HYDRA_development_version
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
nextEvent.C
Go to the documentation of this file.
1 #ifndef __NEXTEVENT__
2 #define __NEXTEVENT__
3 
4 
5 //---------- hades etc -------------
6 #include "hades.h"
7 #include "hrecevent.h"
8 #include "heventheader.h"
9 #include "hcategory.h"
10 #include "hphysicsconstants.h"
11 
12 #include "hgeomtransform.h"
13 #include "hmdcsizescells.h"
14 
15 //---------- detector def ----------
16 #include "hgeantdef.h"
17 #include "hmdcdef.h"
18 #include "hmdctrackddef.h"
19 #include "hmdctrackgdef.h"
20 #include "richdef.h"
21 #include "tofdef.h"
22 #include "walldef.h"
23 #include "showerdef.h"
24 #include "emcdef.h"
25 #include "rpcdef.h"
26 #include "hparticledef.h"
27 //--------- data objects -----------
28 #include "hmetamatch2.h"
29 #include "hmdccal1sim.h"
30 #include "hmdcseg.h"
31 #include "hmdcsegsim.h"
32 #include "hmdctrkcand.h"
33 #include "hsplinetrack.h"
34 #include "hrktrackB.h"
35 #include "hshowerhitsim.h"
36 #include "hemcclustersim.h"
37 #include "hwallhit.h"
38 #include "hwallhitsim.h"
39 #include "htofhit.h"
40 #include "htofhitsim.h"
41 #include "htofcluster.h"
42 #include "htofclustersim.h"
43 #include "hrichhit.h"
44 #include "hrichhitsim.h"
45 #include "hrichcalsim.h"
46 #include "hrichtrack.h"
47 #include "hrpccluster.h"
48 #include "hrpcclustersim.h"
49 #include "hparticlecand.h"
50 #include "hparticlecandsim.h"
51 #include "hgeantkine.h"
52 #include "hgeantmdc.h"
53 #include "hgeantrich.h"
54 #include "hgeantwall.h"
55 
56 //--------- helpers -----------
57 #include "hgeomvector.h"
58 #include "hcategorymanager.h"
59 #include "hparticletracksorter.h"
60 
61 
62 #include "TROOT.h"
63 #include "TString.h"
64 #include "TSystem.h"
65 #include "TRandom.h"
66 #include "TStopwatch.h"
67 #include "TApplication.h"
68 
69 #include "TEveManager.h"
70 #include "TEveScene.h"
71 #include "TEveElement.h"
72 #include "TEveLine.h"
73 #include "TEvePointSet.h"
74 #include "TEveQuadSet.h"
75 #include "TEveViewer.h"
76 
77 #include "TEveTrackPropagator.h"
78 #include "TEveTrack.h"
79 #include "TEveVSDStructs.h"
80 //#include "TEvePathMark.h" // 5.28
81 
82 #include "TGLabel.h"
83 #include "TGLViewer.h"
84 #include "TGLSAViewer.h"
85 #include "TGFrame.h"
86 #include "TGButton.h"
87 #include "TGNumberEntry.h"
88 #include "TGButtonGroup.h"
89 #include "TGNumberEntry.h"
90 #include "TGWindow.h"
91 #include "TGLayout.h"
92 #include "TMarker.h"
93 
94 #include <iostream>
95 #include <iomanip>
96 #include <vector>
97 #include <map>
98 #include <algorithm>
99 
100 #include "hedhelpers.h"
101 #include "hedfield.h"
102 #include "hedhitobjects.h"
103 #include "hedgui.h"
104 
105 #include "userFunc.C" // selectLeptonsBeta(), rejectEvent() , isGoodEvent() is defined here
106 
107 using namespace std;
108 
109 //---------------------------------------------------------
110 // NEXT EVENT
111 // This macro will load a new event into memory.
112 // It performs a call to Hades event loop. After
113 // running the event loop the full event is available
114 // in memory. The different detector hits can be selected
115 // by the user, tranformed and added to the event scene of
116 // Eve. All objects of the previous event scene will be
117 // destroyed.
118 //
119 //
120 // Class HEDEvtNavHandler : event handler connect to GUI
121 //
122 // this Class keeps provides selectEvent() function connected
123 // to the "next Event" button. The function then calls
124 // nextEventLoop() or nextEvent() depending if the the loop
125 // box is checked.
126 // HEDEvtNavHandler holds the user defined TEveElementLists
127 // which are inserted in the Event Scene of TEveManager. The
128 // user has to clean and fill this lists inside nextEvent().
129 // The lists appear in "Eve" tab of the GUI in "Scenes/Event scene".
130 // The regions to be modified are marked \"## USER ACTION ##\"
131 //---------------------------------------------------------
133 {
134 public:
136 
137  static Bool_t isRealData;
138 
139  //################## USER ACTION ##########################
140  // declare all list of elements
141  // add as many as you need
142  TEveElementList* vertexlist;
152 
159  TEveElementList* wallHits;
160  TEveElementList* wallPlane;
161 
162  TEveElementList* geantRichList;
163  TEveElementList* geantRichDirectList;
164 
165  TEveElementList* geantList;
166  TEveElementList* primList;
167  TEveElementList* secoList;
168 
169 
170  TEveTrackList* simTrackList;
171  TEveTrackList* simTrackListPrim;
172  TEveTrackList* simTrackListSeco;
173 
174  map<Int_t, TEveTrackList*> mapPrim;
175  map<Int_t, TEveTrackList*> mapSeco;
176 
177  static TEveTrackPropagator* g_prop ;
178 
179  Int_t eventCt;
180  //#########################################################
181 
182 private:
184  gEDEvtNavHandler = this;
185 
186 
187  //################## USER ACTION ##########################
188 
189  // create all list of elements
190  // which have been declared. They
191  // have to added to event scene
192  // cleared in ech event
193 
194 
195  vertexlist = new TEveElementList("vertex","vertex");
196  sectors = new HEDGroup ("sectors" ,"sectors" ,6 ,"Sector");
197  particlecandNoLep = new HEDGroup ("particlecandNoLep" ,"particlecandNoLep" ,6 ,"particlecandNoLep");
198  particlecandLep = new HEDGroup ("particlecandLep" ,"particlecandLep" ,6 ,"particlecandLep");
199  particlecandHad = new HEDGroup ("particlecandHad" ,"particlecandHad" ,6 ,"particlecandHad");
200  richpadplane = new HEDGroup ("richpadplane" ,"richpadplane" ,6 ,"richpadplane");
201  richpadplanecleaned = new HEDGroup ("richpadplanecleaned","richpadplanecleaned",6 ,"richpadplanecleaned");
202  richhitpadplane = new HEDGroup ("richhitpadplane" ,"richhitpadplane" ,6 ,"richhitpadplane");
203  allMdcWires = new HEDGroup2D ("allMdcwires" ,"allMdcwires" ,6,4,"Sector","Module");
204  allMdcWiresNotUsed = new HEDGroup2D ("allMdcwiresNotUsed" ,"allMdcwiresNotUsed" ,6,4,"Sector","Module");
205 
206  tofClusters = new HEDGroup ("tofclusters" ,"tofclusters" ,6,"tofclusters");
207  rpcClusters = new HEDGroup ("rpcclusters" ,"rpcclusters" ,6,"rpcclusters");
208  showerHits = new HEDGroup ("showerHits" ,"showerHits" ,6,"showerHits");
209  emcClusters = new HEDGroup ("emcClusters" ,"emcClusters" ,6,"emcClusters");
210  mdcSegments = new HEDGroup ("mdcSegments" ,"mdcSegments" ,6,"mdcSegments");
211  wallHits = new TEveElementList("wallHits" ,"wallHits");
212  wallPlane = new TEveElementList("wallPane" ,"wallPlane");
213 
214  wires = new HEDMdcWireManager();
215 
216  //---------------------------------------------------------
217  // track list for simulated particles for HGeantKine
218  // propagated by Eve
219 
221  HPhysicsConstants::setGraphic(14,kGray ,1); // proton
222  HPhysicsConstants::setGraphic(13,kGreen-2 ,1); // neutron
223  HPhysicsConstants::setGraphic(8 ,kRed-9 ,1); // pi+
224  HPhysicsConstants::setGraphic(9 ,kBlue-9 ,1); // pi-
225  HPhysicsConstants::setGraphic(7 ,kYellow ,1); // pi0
226 
227  HPhysicsConstants::setGraphic(5 ,kRed ,1); // mu-
228  HPhysicsConstants::setGraphic(6 ,kBlue ,1); // mu+
229 
230  HPhysicsConstants::setGraphic(2 ,kRed ,1); // e+
231  HPhysicsConstants::setGraphic(3 ,kBlue ,1); // e-
232  HPhysicsConstants::setGraphic(1 ,kWhite ,1); // gamma
233 
234  HPhysicsConstants::setGraphic(10,kGreen ,1); // K0L
235  HPhysicsConstants::setGraphic(11,kGreen-7 ,1); // K+
236  HPhysicsConstants::setGraphic(12,kGreen-6 ,1); // K-
237  HPhysicsConstants::setGraphic(16,kGreen-5 ,1); // KOS
238 
239  HPhysicsConstants::setGraphic(45,kOrange ,1); // d
240  HPhysicsConstants::setGraphic(46,kOrange-3,1); // t
241 
242 
243 
244  geantList = new TEveElementList("Geant","Geant");
245  primList = new TEveElementList("Primaries","Primaries");
246  secoList = new TEveElementList("Secondaries","Secondaries");
247 
248  simTrackList = new TEveTrackList();
249  TEveTrackPropagator* prop = simTrackList->GetPropagator();
250  prop->SetFitDaughters(kTRUE);
251  prop->SetRnrDaughters(kTRUE);
252  prop->SetFitReferences(kTRUE);
253  prop->SetRnrReferences(kTRUE);
254  prop->SetStepper(TEveTrackPropagator::kRungeKutta);
255  prop->SetMaxZ(700); // max dist in z [cm]
256  prop->SetMaxR(300); // max dist in R [cm]
257  prop->SetMaxOrbs(3); // max number of loops (low momenta particles can spiral almost for ever)
258 
259 
260  // REpresentation of Reference points
261  (prop->RefPMAtt()).SetMarkerStyle(20);
262  (prop->RefPMAtt()).SetMarkerColor(kRed);
263  (prop->RefPMAtt()).SetMarkerSize(1.0);
264 
265  simTrackList->SetName("RK Propagator");
266  simTrackList->SetLineColor(kMagenta);
267  prop->SetMagFieldObj(gEDField);
268  g_prop = prop;
269 
270  simTrackListPrim = new TEveTrackList();
271  simTrackListPrim->SetName("others");
272  simTrackListPrim->SetLineColor(kMagenta);
273 
274  simTrackListSeco = new TEveTrackList();
275  simTrackListSeco->SetName("others");
276  simTrackListSeco->SetLineColor(kMagenta);
277 
278 
279  Int_t pidPrim[] = {2,3, 7,8,9, 10,11,12,16, 13,14};
280  for(UInt_t i = 0; i< sizeof(pidPrim)/sizeof(Int_t); i++){
281  mapPrim[pidPrim[i]] = new TEveTrackList(HPhysicsConstants::pid(pidPrim[i]));
282  mapPrim[pidPrim[i]]->SetLineColor(HPhysicsConstants::lineColor(pidPrim[i]));
283  }
284  Int_t pidSeco[] = {1, 2,3, 5,6, 7,8,9, 10,11,12,16, 13,14, 45,46};
285 
286  for(UInt_t i = 0; i < sizeof(pidSeco)/sizeof(Int_t); i++){
287  mapSeco[pidSeco[i]] = new TEveTrackList(HPhysicsConstants::pid(pidSeco[i]));
288  mapSeco[pidSeco[i]]->SetLineColor(HPhysicsConstants::lineColor(pidSeco[i]));
289  }
290 
291  geantRichList = new TEveElementList("geantRich" ,"geantRich");
292  geantRichDirectList = new TEveElementList("geantDirectRich","geantDirectRich");
293 
294 
295 
296  //---------------------------------------------------------
297 
298 
299  TEveScene* eveEv = gEve->GetEventScene();
300 
301  // add all list of elements to event scene
302  // they will appear in "Eve" tab of the GUI
303  // in "Scenes/Event scene" with the defined
304  // names.
305  Bool_t sectorsTopLevel = kFALSE; // kTRUE = add gropups that they appear under sector top level
306 
307  gEve->AddElement(vertexlist ,eveEv);
308 
309  if(sectorsTopLevel) {
310  gEve->AddElement(sectors ,eveEv);
311 
312  for(Int_t s = 0;s < 6; s ++){
313  sectors->getList(s)->AddElement(particlecandLep ->getList(s));
314  sectors->getList(s)->AddElement(particlecandNoLep ->getList(s));
315  sectors->getList(s)->AddElement(particlecandHad ->getList(s));
316  sectors->getList(s)->AddElement(richpadplane ->getList(s));
317  sectors->getList(s)->AddElement(richpadplanecleaned ->getList(s));
318  sectors->getList(s)->AddElement(richhitpadplane ->getList(s));
319  }
320  } else {
321  gEve->AddElement(particlecandLep ,eveEv);
322  gEve->AddElement(particlecandNoLep ,eveEv);
323  gEve->AddElement(particlecandHad ,eveEv);
324  gEve->AddElement(richpadplane ,eveEv);
325  gEve->AddElement(richpadplanecleaned ,eveEv);
326  gEve->AddElement(richhitpadplane ,eveEv);
327  }
328  gEve->AddElement(allMdcWires ,eveEv);
329  gEve->AddElement(allMdcWiresNotUsed,eveEv);
330  allMdcWires ->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
331  allMdcWiresNotUsed->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
332 
333  gEve->AddElement(tofClusters ,eveEv);
334  gEve->AddElement(rpcClusters ,eveEv);
335  if(!HEDTransform::isEmc()) gEve->AddElement(showerHits ,eveEv);
336  else gEve->AddElement(emcClusters ,eveEv);
337  gEve->AddElement(mdcSegments ,eveEv);
338  gEve->AddElement(wallHits ,eveEv);
339  gEve->AddElement(wallPlane ,eveEv);
340  tofClusters->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
341  rpcClusters->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
342  showerHits->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
343  emcClusters->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
344  mdcSegments->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
345  //wallHits->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
346 
347  //---------------------------------------------------------
348  // GEANT part
349  gEve->AddElement(geantList,eveEv); // main list
350  gEve->AddElement(primList,geantList); // main primary list
351  gEve->AddElement(secoList,geantList); // main secondary list
352 
353  // add all primary lists
354  for(UInt_t i = 0; i < sizeof(pidPrim)/sizeof(Int_t); i++){
355  gEve->AddElement(mapPrim[pidPrim[i]] ,primList);
356  }
357  gEve->AddElement(simTrackListPrim,primList);
358 
359  // add all secondaries lists
360  for(UInt_t i = 0; i < sizeof(pidSeco)/sizeof(Int_t); i++){
361  gEve->AddElement(mapSeco[pidSeco[i]] ,secoList);
362  }
363  gEve->AddElement(simTrackListSeco,secoList);
364 
365  mapPrim[13]->SetRnrSelfChildren(kFALSE,kFALSE); // do not show by default
366 
367  gEve->AddElement(geantRichList ,eveEv);
368  gEve->AddElement(geantRichDirectList,eveEv);
369  //---------------------------------------------------------
370 
371  //#########################################################
372  eventCt=0;
373  }
374 public:
376  // Singleton
377  if(gEDEvtNavHandler == 0){
378  gEDEvtNavHandler = new HEDEvtNavHandler();
379  }
380  return gEDEvtNavHandler;
381  }
382  void selectEvent(){
383  // this function is connected to "next Event" button
384  // calls nextEventLoop() or nextEvent() depending
385  // if the loop checkbox has been set
386  HEDSetup* setup = HEDSetup::getEDSetup();
387  if(setup->fCheckTimed->IsOn() ){ // loop events
388  nextEventLoop();
389  } else {
390  nextEvent(); // one event
391  }
392  }
393 
394  Int_t nextEvent()
395  {
396  // this function loads one event into memory and
397  // fills the graphics objects which should be
398  // displayed in the GUI. This is the "User playground"
399 
400  //-----------------------------------------------------
401  if(isRealData)
402  {
403  if(eventCt == 0) { // in real data the first event is empty
404  gHades->eventLoop(2);
405  eventCt++;
406  return 0;
407  }
408 
409  while( isGoodEvent() == kFALSE ) { // get the next high mult trigger (userFunc.C)
410  cout<<"######### skipped event "<<gHades->getCurrentEvent()->getHeader()->getEventSeqNumber()<<endl;
411  gHades->eventLoop(1);
412  }
413  }
414  //-----------------------------------------------------
415 
416  TStopwatch timer;
417  timer.Reset();
418  timer.Start();
419 
420  Bool_t drawParticleCand = kTRUE;
421  Bool_t drawRichPadPlane = kTRUE;
422  Bool_t drawRichCompound = kTRUE;
423  Bool_t drawMdcWires = kTRUE;
424  Bool_t drawKine = kTRUE;
425 
426  Bool_t drawTofClusters = kTRUE;
427  Bool_t drawRpcClusters = kTRUE;
428  Bool_t drawShowerHits = kTRUE;
429  Bool_t drawEmcClusters = kTRUE;
430  Bool_t drawMdcSegments = kTRUE;
431  Bool_t drawWallHits = kTRUE;
432  Bool_t drawWallPlane = kTRUE;
433 
434  Bool_t savePics = kFALSE; // to work over ssh : put the line OpenGL.SavePicturesViaFBO: off to your .rootrc
435  TString picturepath = "./auto_pics";
436  TString picturemask = "event_%i.png"; // convert -delay 500 -loop 0 *.png animation.gif (~ 5 sec per pic, endless)
437 
438  // ROOT 5.26 : clear annotions (if any at all)
439  //gEve->GetViewers()->DeleteAnnotations();
440 
441  TEveScene* eveEv = gEve->GetEventScene();
442  if(eveEv){
443  // clean up last event
444 
445 
446  //################## USER ACTION ##########################
447  // cleanup all list of elements
448  // don't destroy sectors !
449  vertexlist ->DestroyElements();
450  particlecandNoLep ->DestroyElements();
451  particlecandLep ->DestroyElements();
452  particlecandHad ->DestroyElements();
453  richpadplane ->DestroyElements();
454  richpadplanecleaned->DestroyElements();
455  richhitpadplane ->DestroyElements();
456  allMdcWires ->DestroyElements();
457  allMdcWiresNotUsed ->DestroyElements();
458  tofClusters ->DestroyElements();
459  rpcClusters ->DestroyElements();
460  showerHits ->DestroyElements();
461  emcClusters ->DestroyElements();
462  mdcSegments ->DestroyElements();
463  wallHits ->DestroyElements();
464  wallPlane ->DestroyElements();
465 
466 
467  //---------------------------------------------------------
468  // GEANT part
469 
470  map<Int_t,TEveTrackList*>::iterator iter;
471  for( iter = mapPrim.begin(); iter != mapPrim.end(); ++iter ) {
472  iter->second->DestroyElements();
473  }
474  simTrackListPrim->DestroyElements();
475 
476  for( iter = mapSeco.begin(); iter != mapSeco.end(); ++iter ) {
477  iter->second->DestroyElements();
478  }
479  simTrackListSeco->DestroyElements();
480 
481 
482  geantRichList ->DestroyElements();
483  geantRichDirectList->DestroyElements();
484  //---------------------------------------------------------
485 
486  //#########################################################
487 
488  }
489 
490  Int_t seqNumber;
491  Int_t runNumber;
492 
493  if(gHades)
494  {
495  //----------break if last event is reached-------------
496  if(!gHades->eventLoop(1)) return -1;
497  //----------------looping data-------------------------
498  Bool_t isSimulation = kFALSE;
499  Bool_t badEvent = kTRUE;
500  Int_t nCandLep = -1;
501  Int_t nCandLepBest = -1;
502  Int_t nCandHad = -1;
503  Int_t nCandHadBest = -1;
504 
505  //--------------------------CONFIGURATION PARTICLE SORTER----------------------
506  //At begin of the program (outside the event loop)
507  HParticleTrackSorter sorter;
508  sorter.init(); // get catgegory pointers etc...
509  //--------------------------END CONFIGURATION PARTICLE SORTER-------------------
510 
511  while (badEvent==kTRUE){
512 
513  sorter.cleanUp();
514 
515  sorter.resetFlags(kTRUE,kTRUE,kTRUE,kTRUE); // reset all flags for flags (0-28) ,reject,used,lepton
516  nCandLep = sorter.fill(selectLeptonsBeta); // fill only good leptons selectLeptonsSharp2Mom(
518  nCandHad = sorter.fill(selectHadrons); // fill only good hadrons (already marked good leptons will be skipped)
519  nCandHadBest = sorter.selectBest(HParticleTrackSorter::kIsBestRKRKMETA,HParticleTrackSorter::kIsHadron);
520 
521  badEvent = rejectEvent(); // userFunc.C
522  if (badEvent) if(!gHades->eventLoop(1)) return -1;
523  }
524 
525 
526 
527  //################## USER ACTION ##########################
528  HCategory* mdcSegCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catMdcSeg);
529  HCategory* mdcCal1Cat = (HCategory*) gHades->getCurrentEvent()->getCategory(catMdcCal1);
530  HCategory* wallHitCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catWallHit);
531  HCategory* tofHitCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catTofHit);
532  HCategory* tofClustCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catTofCluster);
533  HCategory* rpcClustCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catRpcCluster);
534  HCategory* emcClusterCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catEmcCluster);
535  HCategory* showerHitCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catShowerHit);
536  HCategory* richHitCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catRichHit);
537  HCategory* richTrackCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catRichTrack);
538  HCategory* particleCandCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catParticleCand);
539  HCategory* kineCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catGeantKine);
540  HCategory* geantWallCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catWallGeantRaw);
541  HCategory* geantMdcCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catMdcGeantRaw);
542  HCategory* geantRichMirrorCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catRichGeantRaw+2);
543  HCategory* geantRichDirectCat = (HCategory*) gHades->getCurrentEvent()->getCategory(catRichGeantRaw+1);
544 
545  if(kineCat) isSimulation = kTRUE;
546 
547  seqNumber = gHades->getCurrentEvent()->getHeader()->getEventSeqNumber();
548  runNumber = gHades->getCurrentEvent()->getHeader()->getEventRunNumber();
549 
550  //---------------------------------------------------------
551  HGeomVector pVertex;
552  HEDTransform::calcVertexPoint(pVertex); // for print later
553  vertexlist->AddElement(new HEDVertex());
554  //---------------------------------------------------------
555 
556  //---------------------------------------------------------
557  // RICH
558  if(!HEDTransform::isNewRich()&&drawRichPadPlane){
559  for(Int_t s = 0 ; s < 6; s ++){
560  // clean : 0 (all pads), 1 : cleaned (removed pads), 2 : kept pads after cleaning
561  richpadplane ->AddElement(s,new HEDRichPadPlane(s,2)); // rich pads fired on cal level
562  richpadplanecleaned->AddElement(s,new HEDRichPadPlane(s,1)); // rich pads fired on cal level but cleanded
563  }
564  } else {
565  richpadplane ->AddElement(0,new HEDRich700PadPlane()); // rich pads fired on cal level
566  }
567  if(drawRichCompound && richHitCat){
568  HRichHitSim* richhit;
569  HEDRichCompound* edrichcompound;
570  Int_t size = richHitCat->getEntries();
571  if(size>0){
572  cout<<"-----------------------------------------------------------------"<<endl;
573  cout<<"reconstruted RICH Hits :"<<endl;
574  }
575  for(Int_t i = 0; i < size; i ++){
576  richhit = HCategoryManager::getObject(richhit,richHitCat,i);
577  if(richhit){
578  Int_t s = richhit->getSector();
579  edrichcompound = new HEDRichCompound(richhit);
580  edrichcompound ->SetLineColor(kRed); // ring
581  edrichcompound ->SetColorMirrorHit(kMagenta); // line to mirror
582  edrichcompound ->SetColorPadPlaneHit(kYellow);// hit marker
583  if(richhit->getRadius() < 0) edrichcompound ->SetLineStyle(7);
584  richhitpadplane->AddElement(s,edrichcompound);
585  Int_t tracks[3] = {-1,-1,-1};
586  Int_t weight[3] = {-1,-1,-1};
587 
588  if(isSimulation) {
589  tracks[0] = richhit->track1;
590  tracks[1] = richhit->track2;
591  tracks[2] = richhit->track3;
592  weight[0] = richhit->weigTrack1;
593  weight[1] = richhit->weigTrack2;
594  weight[2] = richhit->weigTrack3;
595 
596  }
597 
598  cout<<"index "<<i<<" sector "<<s<<" ("<<setw(3)<<right<<tracks[0]<<","<<weight[0] <<") ("<<setw(3)<<right<<tracks[1]<<","<<weight[1]<<") ("<<setw(3)<<right<<tracks[2]<<","<<weight[2]<<")"<<endl;
599  }
600  }
601  if(size>0){
602  cout<<"-----------------------------------------------------------------"<<endl;
603  }
604  }
605  //---------------------------------------------------------
606 
607  //---------------------------------------------------------
608  if(drawMdcWires && mdcCal1Cat){
609  HMdcCal1Sim* cal;
610  HEDMdcWire* edmdcwire;
611  Int_t s,m,l,c;
612  Int_t size = mdcCal1Cat->getEntries();
613 
614  wires->fill(); // make wire usage statistics for this event
615 
616  for(Int_t i = 0; i < size; i ++){
617  cal = HCategoryManager::getObject(cal,mdcCal1Cat,i);
618  if(cal){
619  cal->getAddress(s,m,l,c);
620  Int_t ntimes = wires->isUsedNtimes(s,m,l,c);
621 
622 
623  if(ntimes >= 1) {
624  edmdcwire = new HEDMdcWire(cal);
625  //if(ntimes == 0) edmdcwire ->SetLineColor(kOrange); // changed unused by segment fitter
626  //if(ntimes == 0) edmdcwire ->SetLineColor(kRed-2); // unused by segment fitter
627  if(ntimes == 1) edmdcwire ->SetLineColor(kBlue); // unique wire
628  if(ntimes > 1 ) edmdcwire ->SetLineColor(kMagenta); // multiple used
629  allMdcWires->AddElement(s,m,edmdcwire);
630  }
631  if(ntimes == 0) {
632  edmdcwire = new HEDMdcWire(cal);
633  edmdcwire ->SetLineColor(kOrange); // changed unused by segment fitter
634  allMdcWiresNotUsed->AddElement(s,m,edmdcwire);
635  }
636  }
637  }
638  }
639  //---------------------------------------------------------
640 
641  //---------------------------------------------------------
642  if(drawTofClusters && tofClustCat){
643  HTofClusterSim* clust;
644  HEDTofCluster* edtofcluster;
645  Int_t size = tofClustCat->getEntries();
646 
647  for(Int_t i = 0; i < size; i ++){
648  clust = HCategoryManager::getObject(clust,tofClustCat,i);
649  if(clust){
650  edtofcluster = new HEDTofCluster(clust);
651  //edtofcluster ->SetMarkerColor(kRed-2);
652  tofClusters->AddElement(clust->getSector(),edtofcluster);
653  }
654  }
655  }
656  //---------------------------------------------------------
657 
658  //---------------------------------------------------------
659  if(drawRpcClusters && rpcClustCat){
660  HRpcClusterSim* clust;
661  HEDRpcCluster* edrpccluster;
662  Int_t size = rpcClustCat->getEntries();
663 
664  for(Int_t i = 0; i < size; i ++){
665  clust = HCategoryManager::getObject(clust,rpcClustCat,i);
666  if(clust){
667  edrpccluster = new HEDRpcCluster(clust);
668  //edrpccluster ->SetMarkerColor(kRed-2);
669  rpcClusters->AddElement(clust->getSector(),edrpccluster);
670  }
671  }
672  }
673  //---------------------------------------------------------
674 
675  //---------------------------------------------------------
676  if(drawShowerHits && showerHitCat){
678  HEDShowerHit* edshowerhit;
679  Int_t size = showerHitCat->getEntries();
680 
681  for(Int_t i = 0; i < size; i ++){
682  hit = HCategoryManager::getObject(hit,showerHitCat,i);
683  if(hit){
684  edshowerhit = new HEDShowerHit(hit);
685  //edshowerhit ->SetMarkerColor(kRed-2);
686  showerHits->AddElement(hit->getSector(),edshowerhit);
687  }
688  }
689  }
690  //---------------------------------------------------------
691 
692  //---------------------------------------------------------
693  if(drawEmcClusters && emcClusterCat){
695  HEDEmcCluster* edemccluster;
696  Int_t size = emcClusterCat->getEntries();
697 
698  for(Int_t i = 0; i < size; i ++){
699  hit = HCategoryManager::getObject(hit,emcClusterCat,i);
700  if(hit){
701  edemccluster = new HEDEmcCluster(hit);
702  //edemccluster ->SetMarkerColor(kRed-2);
703  emcClusters->AddElement(hit->getSector(),edemccluster);
704  }
705  }
706  }
707  //---------------------------------------------------------
708 
709  //---------------------------------------------------------
710  if(drawWallHits && wallHitCat){
711  HWallHitSim* hit;
712  HEDWallHit* edwallhit;
713  Int_t size = wallHitCat->getEntries();
714 
715  for(Int_t i = 0; i < size; i ++){
716  hit = HCategoryManager::getObject(hit,wallHitCat,i);
717  if(hit){
718  edwallhit = new HEDWallHit(hit);
719  //edwallhit ->SetMarkerColor(kRed-2);
720  wallHits->AddElement(edwallhit);
721  }
722  }
723  }
724  //---------------------------------------------------------
725 
726  //---------------------------------------------------------
727  if(drawWallPlane){
728  wallPlane->AddElement(new HEDWallPlane()); // wall cells fired on hit level
729  }
730  //---------------------------------------------------------
731 
732  //---------------------------------------------------------
733  if(drawMdcSegments && mdcSegCat){
734  HMdcSegSim* seg;
735  HEDSegment* edsegment;
736  Int_t size = mdcSegCat->getEntries();
737 
738  for(Int_t i = 0; i < size; i ++){
739  seg = HCategoryManager::getObject(seg,mdcSegCat,i);
740  if(seg){
741  edsegment = new HEDSegment(seg);
742  //edshowerhit ->SetMarkerColor(kRed-2);
743  mdcSegments->AddElement(seg->getSec(),edsegment);
744  }
745  }
746  }
747  //---------------------------------------------------------
748 
749 
750  //---------------------------------------------------------
751  if(drawParticleCand && particleCandCat){
752 
753  HParticleCandSim* cand;
754  Int_t size = particleCandCat->getEntries();
755  for(Int_t i = 0; i < size; i ++){
756  cand = HCategoryManager::getObject(cand,particleCandCat,i);
757  if(cand){
758  HEDParticleCand* edcand = 0;
759  Int_t s = cand->getSector();
760 
761  // Fill all objects. Group them into different lists
762  // Groups get different colors.
763  /*
764  if( cand->isFlagAND(4,
765  Particle::kIsAcceptedHitInnerMDC,
766  Particle::kIsAcceptedHitOuterMDC,
767  Particle::kIsAcceptedHitMETA,
768  Particle::kIsAcceptedRK
769  ) && cand->getBeta()<0.9) continue; // reject slow fully reconstructed particles
770  */
771  //---------------------------------------------------------
772  // Candidates with matched Ring (wide window),
773  // but not accepted as lepton by HParticleTrackSorter
774  // Includes incomplete tracks (eg. no outer MDC or META)
775  if(cand->getRichInd() >= 0 && !cand->isFlagBit(kIsLepton)){
776  edcand = new HEDParticleCand(cand);
777  edcand->SetLineColor(kMagenta);
778  particlecandNoLep->AddElement(s,edcand);
779  }
780  //---------------------------------------------------------
781 
782  //---------------------------------------------------------
783  // Candidates accepted as leptons by HParticleTrackSorter
784  // Full tracks with RICH and accepted after sorting
785  if(cand->isFlagBit(kIsLepton)){
786  edcand = new HEDParticleCand(cand);
787  edcand->SetLineColor(kRed);
788  particlecandLep->AddElement(s,edcand);
789  }
790  //---------------------------------------------------------
791  // Candidates accepted by HParticleTrackSorter
792  // which do not belong to the groups above
793  // Full tracks, no incomplete tracks here
794  if(!cand->isFlagBit(kIsLepton) &&
795  !(cand->getRichInd() >= 0 && !cand->isFlagBit(kIsLepton)) &&
796  cand->isFlagBit(kIsUsed)){
797  edcand = new HEDParticleCand(cand);
798  // selcted no rings
799  edcand->SetLineColor(kGreen);
800  particlecandHad->AddElement(s,edcand);
801  }
802  //---------------------------------------------------------
803 
804  //---------------------------------------------------------
805  // Ghost tracks get dshed lines
806  if(isSimulation && edcand && cand->isGhostTrack()) edcand->SetLineStyle(7);
807  //---------------------------------------------------------
808  }
809  } // end loop particlecand
810 
811  } // end particlecand
812  //---------------------------------------------------------
813 
814 
815 
816  //---------------------------------------------------------
817  Bool_t doSelectSecondaries=kFALSE;
818  Float_t vertexDistCat = 500;
819  Float_t pzCut = 0;
820  if(drawKine && kineCat){
821  HGeantKine* kine;
822  Int_t size = kineCat->getEntries();
823  for(Int_t i = 0; i < size; i ++){
824  kine = HCategoryManager::getObject(kine,kineCat,i);
825  if(kine){
826  Int_t id = kine->getID();
827 
828  if(doSelectSecondaries&&kine->getParentTrack()>0){
829  Float_t vx,vy,vz;
830  Float_t px,py,pz;
831  kine->getVertex(vx,vy,vz);
832 
833  if(sqrt(vx*vx+vy*vy+vz*vz)>vertexDistCat) continue;
834 
835  kine->getMomentum(px,py,pz);
836 
837  if(pz<pzCut) continue;
838  }
839 
840  TEveTrack* track = HEDTransform::createKineParticle(kine,simTrackList->GetPropagator());
841 
842  track->SetLineColor(simTrackList->GetLineColor()); // default color
843  track->SetLineColor(simTrackList->GetLineColor()); // default color
844 
845  track->SetLineColor(HPhysicsConstants::lineColor(id)); // color settings are done at the beginning of the macro
846  track->SetLineWidth(2);
847  if(kine->getParentTrack() > 0) track->SetLineStyle(7); // secondaries
848 
849  if(kine->getParentTrack() > 0)
850  { // secondaries
851  // if(kine->getPz() > 0 ) continue; // only backward flying particles
852  map<Int_t,TEveTrackList*>::iterator iter;
853  iter = mapSeco.find(id);
854 
855  if(iter != mapSeco.end()) iter->second->AddElement(track);
856  else simTrackListSeco->AddElement(track);
857  }
858  else { // primaries
859 
860  map<Int_t,TEveTrackList*>::iterator iter;
861  iter = mapPrim.find(id);
862 
863  if(iter != mapPrim.end()) iter->second->AddElement(track);
864  else simTrackListPrim->AddElement(track);
865  }
866  track->MakeTrack();
867 
868  if(kine->getFirstRichHit()!=-1){
869  Int_t select = 0; // 0=photon, 1=direct
870  HEDRichGeantPadPlane* richGea = new HEDRichGeantPadPlane(kine,select);
871  richGea->SetMarkerColor(kYellow);
872  richGea->SetMarkerSize(0.2);
873  geantRichList->AddElement(richGea);
874 
875  }
876 
877  }
878  }
879  if(geantRichDirectCat){
880  Int_t select = 1; // 0=photon, 1=direct
881  HGeantRichDirect* direct=0;
882  Int_t size = geantRichDirectCat->getEntries();
883  for(Int_t i = 0; i < size; i ++){
884  direct = HCategoryManager::getObject(direct,geantRichDirectCat,i);
885  if(direct){
886  HEDRichGeantPadPlane* richGea = new HEDRichGeantPadPlane(0,select,direct);
887  richGea->SetMarkerColor(kCyan+1);
888  richGea->SetMarkerStyle(kPlus);
889  richGea->SetMarkerSize(0.2);
890  geantRichDirectList->AddElement(richGea);
891  }
892  }
893  }
894  if(geantRichMirrorCat){
895  HGeantRichMirror* mirror=0;
896  Int_t size = geantRichMirrorCat->getEntries();
897  for(Int_t i = 0; i < size; i ++){
898  mirror = HCategoryManager::getObject(mirror,geantRichMirrorCat,i);
899  if(mirror){
900  HEDRichGeantMirror* richMir = new HEDRichGeantMirror(mirror);
901  richMir->SetMarkerColor(kMagenta);
902  geantRichList->AddElement(richMir);
903  }
904  }
905  }
906  }
907  //---------------------------------------------------------
908 
909 
910 
911  cout<<"-----------------------------------------------------------------"<<endl;
912  cout<<"EventRun Number : "<<runNumber<<endl;
913  cout<<"EventSeq Number : "<<seqNumber<<endl;
914  cout<<"Vertex [cm] = "<<pVertex.X()<<", "<<pVertex.Y()<<", "<<pVertex.Z()<<endl;
915  if(richHitCat) { cout<<setw(5)<<richHitCat->getEntries() <<" RICH HITS " <<endl; }
916  if(mdcSegCat) { cout<<setw(5)<<mdcSegCat->getEntries() <<" MDC SEGMENTS "<<endl; }
917  if(tofHitCat) { cout<<setw(5)<<tofHitCat->getEntries() <<" TOF HITS " <<endl; }
918  if(tofClustCat) { cout<<setw(5)<<tofClustCat->getEntries() <<" TOF CLUSTER " <<endl; }
919  if(rpcClustCat) { cout<<setw(5)<<rpcClustCat->getEntries() <<" RPC CLUSTER " <<endl; }
920  if(showerHitCat){ cout<<setw(5)<<showerHitCat->getEntries()<<" SHOWER HITS " <<endl; }
921  if(emcClusterCat){ cout<<setw(5)<<emcClusterCat->getEntries()<<" EMC CLUSTERS " <<endl; }
922  if(wallHitCat) { cout<<setw(5)<<wallHitCat->getEntries() <<" WALL HITS " <<endl; }
923  cout<<"nCandLep = "<<nCandLep
924  <<"\nnCandLepBest = "<<nCandLepBest
925  <<"\nnCandHad = "<<nCandHad
926  <<"\nnCandHadBest = "<<nCandHadBest
927  <<endl;
928 
929  //#########################################################
930 
931  } // end hades
932  //---------------------------------------------------------
933 
934 
935  gEve->Redraw3D(kFALSE,kFALSE);
936  if(savePics){
937 
938  if(gSystem->AccessPathName(picturepath.Data())) { // create dir if not existing
939  gSystem->MakeDirectory(picturepath.Data());
940  }
941 
942 
943  TGLViewer* viewer = gEve->GetDefaultGLViewer();
944  TEveViewer* eviewer = gEve->GetDefaultViewer();
945  if(viewer){
946  TString format = picturepath + "/" + picturemask;
947  gSystem->ProcessEvents();
948 
949  eviewer->GetGLViewer()->SavePicture(Form(format.Data(),seqNumber));
950  eviewer->GetGLViewer()->SavePicture("viewer.gif+500");
951  cout<<"Saved Picture : for event "<<seqNumber <<", "<< Form(format.Data(),seqNumber) <<endl;
952  }
953  }
954  timer.Stop();
955  cout<<"REAL time="<<timer.RealTime()<<",CPU time="<<timer.CpuTime()<<endl;
956  return 0;
957  }
958 
960  {
961  // loop until loop checkbox is unchecked
962  // or nextEvent() return non ZERO
963  HEDSetup* setup = HEDSetup::getEDSetup();
964  Int_t returnval = 0;
965  while(setup->fCheckTimed->IsOn() && returnval == 0){
966  Int_t sleep = setup->fNumberLoopTime->GetTGNumberEntry()->GetIntNumber();
967  for(Int_t i = 0; i <= 2*sleep; i ++){ // do not freeze GUI (Too lazy to do Threads ...)
968  gSystem->Sleep(500); // 2n time 0.5s
969  gSystem->ProcessEvents();
970  }
971  returnval = nextEvent();
972  gSystem->ProcessEvents();
973  }
974  }
975 
976 };
977 
978 
980 TEveTrackPropagator* HEDEvtNavHandler::g_prop = 0;
981 Bool_t HEDEvtNavHandler::isRealData = kFALSE;
982 #endif // __NEXTEVENT__
983 
Char_t getSector(void)
Definition: htofhit.h:27
void resetFlags(Bool_t flag=kTRUE, Bool_t reject=kTRUE, Bool_t used=kTRUE, Bool_t lepton=kTRUE)
HEDGroup * particlecandHad
Definition: nextEvent.C:146
TEveElementList * geantRichDirectList
Definition: nextEvent.C:163
static TEveTrack * createKineParticle(HGeantKine *, TEveTrackPropagator *)
Definition: hedhelpers.cc:976
UInt_t getEventSeqNumber(void)
Definition: heventheader.h:132
TEveElementList * geantRichList
Definition: nextEvent.C:162
HEDGroup * particlecandNoLep
Definition: nextEvent.C:144
HEDGroup * richpadplane
Definition: nextEvent.C:147
const Cat_t catRichHit
Definition: richdef.h:41
HEDGroup * particlecandLep
Definition: nextEvent.C:145
void cleanUp(Bool_t final=kTRUE)
HEDNumberLabeled * fNumberLoopTime
run nextEvent() with timer
Definition: hedgui.h:197
Double_t & Y()
Definition: hgeomvector.h:20
void nextEventLoop()
Definition: nextEvent.C:959
void getVertex(Float_t &ax, Float_t &ay, Float_t &az)
Definition: hgeantkine.cc:210
Bool_t isFlagBit(eFlagBits bit)
HEDGroup * mdcSegments
Definition: nextEvent.C:158
void AddElement(Int_t i, Int_t j, TEveElement *el)
void SetColorPadPlaneHit(Color_t val)
Double_t & Z()
Definition: hgeomvector.h:21
const Cat_t catMdcCal1
Definition: hmdcdef.h:7
void getAddress(Int_t &s, Int_t &m, Int_t &l, Int_t &c)
Definition: hmdccal1.h:42
void SetLineStyle(Style_t val)
HEDGroup2D * allMdcWires
Definition: nextEvent.C:150
static Bool_t calcVertexPoint(HGeomVector &p)
Definition: hedhelpers.cc:532
TEveTrackList * simTrackListSeco
Definition: nextEvent.C:172
void SetLineColor(Color_t val)
const Cat_t catMdcGeantRaw
Definition: hgeantdef.h:9
TEveElementList * geantList
Definition: nextEvent.C:165
HEvent *& getCurrentEvent(void)
Definition: hades.cc:422
const Cat_t catGeantKine
Definition: hgeantdef.h:8
static HEDEvtNavHandler * getHandler()
Definition: nextEvent.C:375
Int_t getFirstRichHit()
Definition: hgeantkine.h:178
TGNumberEntry * GetTGNumberEntry() const
Definition: hedgui.h:145
Char_t getSector(void) const
Definition: hemccluster.h:64
virtual HEventHeader * getHeader(void) const
Definition: hevent.h:36
static Bool_t isRealData
Definition: nextEvent.C:137
static Bool_t isNewRich()
Definition: hedhelpers.h:44
TEveElementList * getList(Int_t n) const
Int_t track2
Definition: hrichhitsim.h:32
static T * getObject(T *pout, Short_t num=-1, Int_t index=-1, Bool_t silent=kFALSE)
TEveElementList * wallPlane
Definition: nextEvent.C:160
Int_t getID(void) const
Definition: hgeantkine.h:107
static TEveTrackPropagator * g_prop
Definition: nextEvent.C:177
Int_t track3
Definition: hrichhitsim.h:32
Int_t fill(Bool_t(*function)(HParticleCand *))
void selectEvent()
Definition: nextEvent.C:382
HEDGroup * sectors
Definition: nextEvent.C:143
Int_t getParentTrack(void) const
Definition: hgeantkine.h:108
TEveTrackList * simTrackListPrim
Definition: nextEvent.C:171
HEDGroup * emcClusters
Definition: nextEvent.C:157
Int_t getRichInd() const
const Cat_t catTofCluster
Definition: tofdef.h:9
const Cat_t catEmcCluster
Definition: emcdef.h:10
Bool_t selectLeptonsBeta(HParticleCand *pcand)
Definition: userFunc.C:105
static void setGraphic(Short_t pid, Int_t col, Int_t style)
Bool_t isGoodEvent()
Definition: userFunc.C:99
static Bool_t isEmc()
Definition: hedhelpers.h:46
HEDGroup * rpcClusters
Definition: nextEvent.C:155
const Cat_t catWallHit
Definition: walldef.h:9
const Cat_t catTofHit
Definition: tofdef.h:7
HEDGroup2D * allMdcWiresNotUsed
Definition: nextEvent.C:151
Int_t eventLoop(Int_t nEvents=kMaxInt, Int_t firstEvent=0, Double_t timeQuota=1.e+20)
Definition: hades.cc:631
Hades * gHades
Definition: hades.cc:1213
HEDField * gEDField
Definition: hedfield.cc:363
const Cat_t catRichGeantRaw
Definition: hgeantdef.h:10
const Cat_t catRpcCluster
Definition: rpcdef.h:10
TEveElementList * vertexlist
Definition: nextEvent.C:142
void DestroyElements()
map< Int_t, TEveTrackList * > mapPrim
Definition: nextEvent.C:174
Bool_t isGhostTrack() const
void SetLineColor(Color_t val)
static HEDEvtNavHandler * gEDEvtNavHandler
Definition: nextEvent.C:135
const Cat_t catWallGeantRaw
Definition: hgeantdef.h:14
Float_t getRadius()
Definition: hrichhit.h:158
Int_t weigTrack1
Definition: hrichhitsim.h:33
Bool_t rejectEvent()
Definition: userFunc.C:331
Int_t weigTrack3
Definition: hrichhitsim.h:33
Short_t getSector()
Definition: hrpccluster.h:65
TEveElementList * secoList
Definition: nextEvent.C:167
Char_t getSector(void)
Definition: hshowerhit.h:24
Int_t getSec(void) const
Definition: hmdcseg.h:138
TEveTrackList * simTrackList
Definition: nextEvent.C:170
HEDGroup * showerHits
Definition: nextEvent.C:156
Int_t nextEvent()
Definition: nextEvent.C:394
const Cat_t catMdcSeg
Definition: hmdcdef.h:10
Int_t selectBest(Particle::ESwitch byQuality, Int_t byParticle)
static HEDSetup * getEDSetup(const TGWindow *p=0, UInt_t w=0, UInt_t h=0)
Definition: hedgui.h:176
virtual HCategory * getCategory(Cat_t aCat)=0
TGCheckButton * fCheckTimed
call reDraw() on click text button
Definition: hedgui.h:196
HEDGroup * richhitpadplane
Definition: nextEvent.C:149
static Int_t pid(const Char_t *pidName)
HEDMdcWireManager * wires
Definition: nextEvent.C:153
Bool_t init(HRecEvent *evt=0)
Int_t weigTrack2
Definition: hrichhitsim.h:33
Int_t track1
Definition: hrichhitsim.h:32
Short_t getSector() const
HEDGroup * tofClusters
Definition: nextEvent.C:154
void SetColorMirrorHit(Color_t val)
TEveElementList * primList
Definition: nextEvent.C:166
Int_t getSector(void)
Definition: hrichhit.h:108
UInt_t getEventRunNumber(void)
Definition: heventheader.h:131
const Cat_t catShowerHit
Definition: showerdef.h:10
Bool_t selectHadrons(HParticleCand *pcand)
Definition: userFunc.C:256
void getMomentum(Float_t &apx, Float_t &apy, Float_t &apz)
Definition: hgeantkine.cc:227
static Int_t lineColor(const Int_t id)
TEveElementList * wallHits
Definition: nextEvent.C:159
static void setDefaultGraphic(Int_t col, Int_t style)
map< Int_t, TEveTrackList * > mapSeco
Definition: nextEvent.C:175
void AddElement(Int_t n, TEveElement *el)
void DestroyElements()
HEDGroup * richpadplanecleaned
Definition: nextEvent.C:148
const Cat_t catRichTrack
Definition: richdef.h:44
const Cat_t catParticleCand
Definition: hparticledef.h:9
Int_t isUsedNtimes(Int_t s, Int_t m, Int_t l, Int_t c)
Definition: hedhelpers.cc:1330
Double_t & X()
Definition: hgeomvector.h:19