FEDRA emulsion software from the OPERA Collaboration
EdbEDAUtil.h
Go to the documentation of this file.
1 #ifndef __EDAUtil_H__
2 #define __EDAUtil_H__
3 
4 #include "RVersion.h"
5 #if ROOT_VERSION_CODE < ROOT_VERSION(5,22,0)
6 #define __BEFORE_ROOT_5_22__
7 #endif
8 
9 #include<stdio.h>
10 #include<iostream>
11 #include<fstream>
12 #include<string>
13 #include<sstream>
14 #include<math.h>
15 
16 #include<TROOT.h>
17 #include<TSystem.h>
18 #include<TRint.h>
19 #include<TStyle.h>
20 #include<TObject.h>
21 #include<TTree.h>
22 #include<TCanvas.h>
23 #include<TText.h>
24 #include<TLine.h>
25 #include<TH2I.h>
26 #include<TColor.h>
27 #include<TString.h>
28 #include<TApplication.h>
29 #include<TGLViewer.h>
30 #include<TGeoManager.h>
31 #include<TGedEditor.h>
32 #include<TEveManager.h>
33 #include<TEveEventManager.h>
34 #include<TEveElement.h>
35 #include<TEveLine.h>
36 #include<TEveText.h>
37 #include<TEveCompound.h>
38 #include<TEveBrowser.h>
39 #include<TEveSelection.h> // To enforce auto-loading of libEve.
40 #include<TEveBoxSet.h>
41 #include<TEveTrans.h>
42 #include<TEveWindow.h>
43 #include<TEveViewer.h>
44 #include<TGTab.h>
45 #ifndef __BEFORE_ROOT_5_22__
46 #include<TEveWindowManager.h>
47 #endif
48 
49 #include<TRootEmbeddedCanvas.h>
50 #include<TGLFontManager.h>
51 #include<TGNumberEntry.h>
52 #include<TGFileDialog.h>
53 #include<TGSlider.h>
54 #include<TGLabel.h>
55 #include<TGListBox.h>
56 #include<TGTextEditor.h>
57 #include<TGMsgBox.h>
58 #include<TGInputDialog.h>
59 #include<TGColorSelect.h>
60 #include<TGComboBox.h>
61 
62 //#ifndef __CINT__
63 #include<EdbVertex.h>
64 #include<EdbPattern.h>
65 #include<EdbDataSet.h>
66 #include<EdbPVRec.h>
67 #include<EdbMomentumEstimator.h>
68 #include<EdbScanSet.h>
69 #include<EdbScanProc.h>
70 #include<EdbBrick.h>
71 
72 //#endif
73 
74 
75 #define CHECK printf("check %15s %5d\n",__FILE__,__LINE__)
76 
77 
78 namespace EdbEDAUtil{
79 
80  enum EDACOLOR{
85  kCOLOR_BY_PARTICLE, // to be done
87  };
88 
95 
96  int IsVertex(TObject *o);
97  int IsVertex(TEveElement *e);
98  int IsTrack(TObject *o);
99  int IsTrack(TEveElement *e);
100  int IsSegment(TObject *o);
101  int IsSegment(TEveElement *e);
102  int IsIncludeCouples(EdbPattern *pat);
103  TEveCompound * GetTrackElement ( EdbTrackP * t);
104  TEvePointSet * GetVertexElement ( EdbVertex * v);
105  double CalcIP(EdbSegP *s, double x, double y, double z);
106  double CalcIP(EdbSegP *s, EdbVertex *v);
107  double CalcDmin(EdbSegP *seg1, EdbSegP *seg2, double *dminz = NULL);
108 
109  double CalcMinimumKinkAngle( TVector3 vertex, TVector3 daupos, TVector3 daumom);
110  double CalcMinimumKinkAngle( EdbVertex *v1ry, EdbSegP *tdaughter, int z_is_middle_of_base=1);
111  double CalcMinimumKinkAngle( EdbSegP *t1ry, EdbSegP *tdaughter, int z_is_middle_of_base=1);
112  double CalcPtmin( TVector3 vertex, TVector3 daupos, TVector3 daumom);
113  double CalcPtmin( EdbVertex *v1ry, EdbSegP *tdaughter, int z_is_middle_of_base=1);
114  double CalcPtmin( EdbSegP *t1ry, EdbSegP *tdaughter, int z_is_middle_of_base=1);
115  double CalcKinkAngle(EdbSegP *tparent, EdbSegP *tdaughter);
116  double CalcPt(EdbSegP *tparent, EdbSegP *tdaughter);
117  double CalcEMCSelectron(EdbTrackP *t);
118 
119  EdbVertex * CalcVertex(TObjArray *segments); // calc vertex from the segments array (EdbSegP*)
120  EdbMomentumEstimator *CalcP(EdbTrackP *t, double& p, double& pmin, double& pmax, bool print=kTRUE);
121 // void CalcP2(EdbTrackP *t, double& p, double& pmin, double& pmax);
122 // void CalcP3(EdbTrackP *t, double& p, double& pmin, double& pmax);
123  void CalcPPartial(EdbTrackP *t, EdbSegP *s1st, EdbSegP *slast, double& p, double& pmin, double& pmax, bool print=kTRUE);
124  double CalcDistance(EdbSegP *s1,EdbSegP *s2, double z);
125 
126  void CalcDTTransLongi(EdbSegP *s1, EdbSegP *s2, double *dtTransverse, double *dtLongitudinal);
127  void CalcDTTransLongi(double tx1, double ty1, double tx2, double ty2, double *dtTransverse, double *dtLongitudinal);
128  void CalcDXTransLongi(EdbSegP *s1, EdbSegP *s2, double *dxt, double *dxl);
129 
130  double DTRMS(EdbTrackP *t);
131  double DTRMSelectron(EdbTrackP *t);
132  double DTRMS1Kink(EdbTrackP *t, int *NKinkAngleUsed=NULL);
133  double DTRMSTL(EdbTrackP *t, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *ndata=NULL);
134  double DTRMSTL1Kink(EdbTrackP *t, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *NKinkAngleUsed=NULL);
135  double DTRMSTLGiven1Kink(EdbTrackP *t, int iKink, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *NKinkAngleUsed=NULL);
137 
138  void ErrorMessage(const char *title, const char *message);
139  void ErrorMessage(const char *message);
140  bool AskYesNo(const char *message);
141  int InputNumberInteger(const char *message, int idefault=0);
142  double InputNumberReal(const char *message, double default_num=0.0, TGNumberFormat::EStyle es=TGNumberFormat::kNESReal);
143  int InputID(const char *message, EdbID &id);
144 
145  char * FindProcDirClient();
146  int FindBrickIDFromPath();
147 
148  EdbPVRec * ReadFeedbackPVR(const char *filename = NULL);
149  EdbPVRec * ReadMxxPVR(const char *filename = NULL);
150  void WritePVRMxx(EdbPVRec *pvr, const char *filename = NULL);
151  void WriteTracksMxx(TObjArray *pvr, const char *filename = NULL);
152 
153  void MakePVRFromTracksArray(TObjArray *tracks_or_segments, EdbPVRec& pvr);
154  void FillTracksFromPatterns(EdbPVRec *pvr);
155 };
156 
157 
158 
159 
160 
161 class EdbIDDialog : public TGTransientFrame {
162  private:
163  TGNumberEntryField *eNumberEntry1;
164  TGNumberEntryField *eNumberEntry2;
165  TGNumberEntryField *eNumberEntry3;
166  TGNumberEntryField *eNumberEntry4;
168  int *eRetVal;
169  public:
170 
171  EdbIDDialog(const char *message, EdbID& id, int *retval = NULL) :
172  TGTransientFrame(gClient->GetRoot(), gEve?gEve->GetMainWindow():0,200,100,kMainFrame | kVerticalFrame), eID(id), eRetVal(retval){
173  SetLayoutBroken(kTRUE);
174  SetWindowName("EdbIDDialog");
175  SetCleanup(kDeepCleanup);
176 
177  CenterOnParent();
178 
179  unsigned int wsize = 250;
180  if(strlen(message)*6>wsize) wsize=strlen(message)*6;
181 
182  int posy=10;
183 
184  TGLabel *fLabel = new TGLabel(this, message);
185  fLabel->MoveResize(20,posy,wsize-40,20);
186  AddFrame(fLabel, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));
187  posy+=30;
188  int posx=10;
189  int dx = 50;
190  eNumberEntry1 = new TGNumberEntryField(this, -1, eID.eBrick, TGNumberFormat::kNESInteger);
191  AddFrame(eNumberEntry1, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));
192  eNumberEntry1->MoveResize(posx,posy,dx,20);
193  eNumberEntry2 = new TGNumberEntryField(this, -1, eID.ePlate, TGNumberFormat::kNESInteger);
194  AddFrame(eNumberEntry2, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));
195  eNumberEntry2->MoveResize(posx+=dx+5,posy,dx,20);
196  eNumberEntry3 = new TGNumberEntryField(this, -1, eID.eMajor, TGNumberFormat::kNESInteger);
197  AddFrame(eNumberEntry3, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));
198  eNumberEntry3->MoveResize(posx+=dx+5,posy,dx,20);
199  eNumberEntry4 = new TGNumberEntryField(this, -1, eID.eMinor, TGNumberFormat::kNESInteger);
200  AddFrame(eNumberEntry4, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));
201  eNumberEntry4->MoveResize(posx+=dx+5,posy,dx,20);
202 
203  posy+=30;
204  TGTextButton *fb = new TGTextButton(this,"OK");
205  AddFrame(fb, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));
206  fb->MoveResize((wsize-50)/2,posy,50,20);
207 
208  SetMWMHints(kMWMDecorAll, kMWMFuncAll, kMWMInputModeless);
209  MapSubwindows();
210  MapWindow();
211  Resize(wsize,100);
212  eNumberEntry4->RequestFocus();
213  gClient->WaitFor(this);
214  }
215  virtual ~EdbIDDialog(){
216  Cleanup();
217  }
218 
219  virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t){
220  // Process message dialog box event.
221  switch (GET_MSG(msg)) {
222  case kC_COMMAND:
223  switch (GET_SUBMSG(msg)) {
224  case kCM_BUTTON:
225  //printf("%d\n", msg);
226  //if (fRetCode) *fRetCode = (Int_t) parm1;
227  eID.eBrick = eNumberEntry1->GetIntNumber();
228  eID.ePlate = eNumberEntry2->GetIntNumber();
229  eID.eMajor = eNumberEntry3->GetIntNumber();
230  eID.eMinor = eNumberEntry4->GetIntNumber();
231  if(eRetVal) *eRetVal = kTRUE;
232  delete this;
233  break;
234  default:
235  break;
236  }
237  break;
238  default:
239  break;
240  }
241  return kTRUE;
242  }
243 
244  virtual void CloseWindow() {
245  if(eRetVal) *eRetVal = kFALSE;
246  delete this;
247  }
248 
249  ClassDef(EdbIDDialog, 0) // Input GUI for integer number.
250 };
251 
252 
253 #endif //__EDAUtil_H__
TTree * t
Definition: check_shower.C:4
Definition: EdbEDAUtil.h:161
TGNumberEntryField * eNumberEntry1
Definition: EdbEDAUtil.h:163
int * eRetVal
Definition: EdbEDAUtil.h:168
TGNumberEntryField * eNumberEntry2
Definition: EdbEDAUtil.h:164
EdbIDDialog(const char *message, EdbID &id, int *retval=NULL)
Definition: EdbEDAUtil.h:171
EdbID & eID
Definition: EdbEDAUtil.h:167
TGNumberEntryField * eNumberEntry4
Definition: EdbEDAUtil.h:166
virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t)
Definition: EdbEDAUtil.h:219
TGNumberEntryField * eNumberEntry3
Definition: EdbEDAUtil.h:165
virtual ~EdbIDDialog()
Definition: EdbEDAUtil.h:215
virtual void CloseWindow()
Definition: EdbEDAUtil.h:244
Definition: EdbID.h:7
Int_t eBrick
Definition: EdbID.h:10
Int_t eMinor
Definition: EdbID.h:13
Int_t ePlate
Definition: EdbID.h:11
Int_t eMajor
Definition: EdbID.h:12
Definition: EdbMomentumEstimator.h:20
Definition: EdbPVRec.h:148
Definition: EdbPattern.h:280
Definition: EdbSegP.h:18
Definition: EdbPattern.h:118
Definition: EdbVertex.h:68
string filename
Definition: emthickness.cpp:34
AcqOdyssey * o
Definition: hwinit.C:2
Definition: EdbEDAUtil.h:78
EDACOLOR
Definition: EdbEDAUtil.h:80
@ kCOLOR_BY_MCID
Definition: EdbEDAUtil.h:84
@ kBLACKWHITE
Definition: EdbEDAUtil.h:86
@ kCOLOR_BY_ID
Definition: EdbEDAUtil.h:83
@ kCOLOR_BY_PH
Definition: EdbEDAUtil.h:82
@ kCOLOR_BY_PARTICLE
Definition: EdbEDAUtil.h:85
@ kCOLOR_BY_PLATE
Definition: EdbEDAUtil.h:81
void CalcDXTransLongi(EdbSegP *s1, EdbSegP *s2, double *dxt, double *dxl)
Definition: EdbEDAUtil.C:665
EdbPVRec * ReadMxxPVR(const char *filename=NULL)
Definition: EdbEDAUtil.C:1051
double CalcEMCSelectron(EdbTrackP *t)
Definition: EdbEDAUtil.C:201
int IsTrack(TObject *o)
Definition: EdbEDAUtil.C:17
double CalcKinkAngle(EdbSegP *tparent, EdbSegP *tdaughter)
Definition: EdbEDAUtil.C:186
double DTRMS1Kink(EdbTrackP *t, int *NKinkAngleUsed=NULL)
Definition: EdbEDAUtil.C:583
TEvePointSet * GetVertexElement(EdbVertex *v)
Definition: EdbEDAUtil.C:56
double DTRMSTLGiven1Kink(EdbTrackP *t, int iKink, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *NKinkAngleUsed=NULL)
Definition: EdbEDAUtil.C:790
void CalcDTTransLongi(EdbSegP *s1, EdbSegP *s2, double *dtTransverse, double *dtLongitudinal)
Definition: EdbEDAUtil.C:648
int FindBrickIDFromPath()
Definition: EdbEDAUtil.C:900
void FillTracksFromPatterns(EdbPVRec *pvr)
Definition: EdbEDAUtil.C:1351
double CalcPtmin(TVector3 vertex, TVector3 daupos, TVector3 daumom)
Definition: EdbEDAUtil.C:171
void WriteTracksMxx(TObjArray *pvr, const char *filename=NULL)
Definition: EdbEDAUtil.C:1231
int IsSegment(TObject *o)
Definition: EdbEDAUtil.C:29
char * FindProcDirClient()
Definition: EdbEDAUtil.C:882
int InputID(const char *message, EdbID &id)
Definition: EdbEDAUtil.C:872
bool AskYesNo(const char *message)
Definition: EdbEDAUtil.C:484
void ErrorMessage(const char *title, const char *message)
Definition: EdbEDAUtil.C:479
EdbTrackP * CleanTrack(EdbTrackP *t)
Definition: EdbEDAUtil.C:499
int InputNumberInteger(const char *message, int idefault=0)
Definition: EdbEDAUtil.C:846
double CalcDistance(EdbSegP *s1, EdbSegP *s2, double z)
Definition: EdbEDAUtil.C:422
EDAEXTENDMODE
Definition: EdbEDAUtil.h:89
@ kExtendUpDown
Definition: EdbEDAUtil.h:91
@ kExtendAuto
Definition: EdbEDAUtil.h:90
@ kExtendUp
Definition: EdbEDAUtil.h:93
@ kExtendDown
Definition: EdbEDAUtil.h:92
@ kExtendNo
Definition: EdbEDAUtil.h:94
double InputNumberReal(const char *message, double default_num=0.0, TGNumberFormat::EStyle es=TGNumberFormat::kNESReal)
Definition: EdbEDAUtil.C:858
int IsVertex(TObject *o)
Definition: EdbEDAUtil.C:4
EdbMomentumEstimator * CalcP(EdbTrackP *t, double &p, double &pmin, double &pmax, bool print=kTRUE)
Definition: EdbEDAUtil.C:369
void WritePVRMxx(EdbPVRec *pvr, const char *filename=NULL)
Definition: EdbEDAUtil.C:1168
EdbVertex * CalcVertex(TObjArray *segments)
Definition: EdbEDAUtil.C:282
EdbPVRec * ReadFeedbackPVR(const char *filename=NULL)
Definition: EdbEDAUtil.C:914
double DTRMSTL(EdbTrackP *t, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *ndata=NULL)
Definition: EdbEDAUtil.C:686
int IsIncludeCouples(EdbPattern *pat)
Definition: EdbEDAUtil.C:41
double CalcDmin(EdbSegP *seg1, EdbSegP *seg2, double *dminz=NULL)
Definition: EdbEDAUtil.C:239
void MakePVRFromTracksArray(TObjArray *tracks_or_segments, EdbPVRec &pvr)
Definition: EdbEDAUtil.C:1312
double CalcIP(EdbSegP *s, double x, double y, double z)
Definition: EdbEDAUtil.C:85
TEveCompound * GetTrackElement(EdbTrackP *t)
Definition: EdbEDAUtil.C:69
double DTRMSTL1Kink(EdbTrackP *t, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *NKinkAngleUsed=NULL)
Definition: EdbEDAUtil.C:745
double CalcMinimumKinkAngle(TVector3 vertex, TVector3 daupos, TVector3 daumom)
Definition: EdbEDAUtil.C:120
double DTRMS(EdbTrackP *t)
Definition: EdbEDAUtil.C:431
void CalcPPartial(EdbTrackP *t, EdbSegP *s1st, EdbSegP *slast, double &p, double &pmin, double &pmax, bool print=kTRUE)
Definition: EdbEDAUtil.C:344
double CalcPt(EdbSegP *tparent, EdbSegP *tdaughter)
Definition: EdbEDAUtil.C:194
double DTRMSelectron(EdbTrackP *t)
Definition: EdbEDAUtil.C:447
UInt_t id
Definition: tlg2pattern.C:118
#define NULL
Definition: nidaqmx.h:84
p
Definition: testBGReduction_AllMethods.C:8
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31
EdbSegP * s
Definition: tlg2pattern.C:32