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>
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
78namespace EdbEDAUtil{
79
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);
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);
118
119 EdbVertex * CalcVertex(TObjArray *segments);
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(char *title, char *message);
139 void ErrorMessage(char *message);
140 bool AskYesNo(char *message);
141 int InputNumberInteger(char *message, int idefault=0);
142 double InputNumberReal(char *message, double default_num=0.0, TGNumberFormat::EStyle es=TGNumberFormat::kNESReal);
143 int InputID(char *message, EdbID &id);
144
145 char * FindProcDirClient();
147
149 EdbPVRec * ReadMxxPVR(char *filename = NULL);
150 void WritePVRMxx(EdbPVRec *pvr, char *filename = NULL);
151 void WriteTracksMxx(TObjArray *pvr, char *filename = NULL);
152
153 void MakePVRFromTracksArray(TObjArray *tracks_or_segments, EdbPVRec& pvr);
155};
156
157
158
159
160
161class EdbIDDialog : public TGTransientFrame {
162 private:
163 TGNumberEntryField *eNumberEntry1;
164 TGNumberEntryField *eNumberEntry2;
165 TGNumberEntryField *eNumberEntry3;
166 TGNumberEntryField *eNumberEntry4;
169 public:
170
171 EdbIDDialog(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){
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__
const char filename[256]
Definition: RecDispNU.C:83
Definition: EdbEDAUtil.h:161
TGNumberEntryField * eNumberEntry1
Definition: EdbEDAUtil.h:163
int * eRetVal
Definition: EdbEDAUtil.h:168
TGNumberEntryField * eNumberEntry2
Definition: EdbEDAUtil.h:164
EdbID & eID
Definition: EdbEDAUtil.h:167
TGNumberEntryField * eNumberEntry4
Definition: EdbEDAUtil.h:166
EdbIDDialog(char *message, EdbID &id, int *retval=NULL)
Definition: EdbEDAUtil.h:171
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:21
Definition: EdbPVRec.h:148
Definition: EdbPattern.h:273
Definition: EdbSegP.h:21
Definition: EdbPattern.h:113
Definition: EdbVertex.h:69
AcqOdyssey * o
Definition: hwinit.C:2
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
EdbSegP * s1
Definition: tlg2couples.C:29
EdbSegP * s2
Definition: tlg2couples.C:30
Definition: EDACint.cxx:53
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
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
void WriteTracksMxx(TObjArray *pvr, char *filename=NULL)
Definition: EdbEDAUtil.C:1231
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
EdbPVRec * ReadFeedbackPVR(char *filename=NULL)
Definition: EdbEDAUtil.C:914
int IsSegment(TObject *o)
Definition: EdbEDAUtil.C:29
bool AskYesNo(char *message)
Definition: EdbEDAUtil.C:484
char * FindProcDirClient()
Definition: EdbEDAUtil.C:882
void ErrorMessage(char *title, char *message)
Definition: EdbEDAUtil.C:479
void WritePVRMxx(EdbPVRec *pvr, char *filename=NULL)
Definition: EdbEDAUtil.C:1168
EdbTrackP * CleanTrack(EdbTrackP *t)
Definition: EdbEDAUtil.C:499
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
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
double InputNumberReal(char *message, double default_num=0.0, TGNumberFormat::EStyle es=TGNumberFormat::kNESReal)
Definition: EdbEDAUtil.C:858
EdbVertex * CalcVertex(TObjArray *segments)
calc vertex from the segments array (EdbSegP*)
Definition: EdbEDAUtil.C:282
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
int InputNumberInteger(char *message, int idefault=0)
Definition: EdbEDAUtil.C:846
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
int InputID(char *message, EdbID &id)
Definition: EdbEDAUtil.C:872
double DTRMSelectron(EdbTrackP *t)
Definition: EdbEDAUtil.C:447
EdbPVRec * ReadMxxPVR(char *filename=NULL)
Definition: EdbEDAUtil.C:1051
UInt_t id
Definition: tlg2couples.C:117
#define NULL
Definition: nidaqmx.h:84
p
Definition: testBGReduction_AllMethods.C:8