FEDRA emulsion software from the OPERA Collaboration
EdbScanClientPav Class Reference

#include <EdbScanClientPav.h>

Inheritance diagram for EdbScanClientPav:
Collaboration diagram for EdbScanClientPav:

Public Member Functions

virtual void AsyncScanAreaS (int id1, int id2, int id3, int id4, float x1, float x2, float y1, float y2, const char *fname)
 
virtual void AsyncScanPreloadAreaS (int id1, int id2, int id3, int id4, float x1, float x2, float y1, float y2, const char *fname, float x1n, float x2n, float y1n, float y2n)
 
virtual void AsyncStartScan ()
 
virtual int AsyncWaitForScanResult ()
 
 EdbScanClientPav ()
 
virtual int LoadPlate (int BRICK, int PLATE, const char *mapext, int nAttempts=1)
 
virtual void Print ()
 
virtual int ScanAreas (ScanType st, int id[4], EdbPattern &areas, EdbRun *run, const char *options="")
 
virtual bool ScanFromPrediction (int id1, int id2, int id3, int id4, float dx, float dy)
 
virtual bool ServerCreatesTarget ()
 
virtual void SetClusterThresholds (int TOP, int BOT)
 
virtual int SetFragmentSize (int X, int Y)
 
virtual void SetOdysseyThresholds (int itop, int ibottom, int size, int TOP, int BOT)
 
virtual void SetParameter (const char *Object, const char *Parameter, const char *Value)
 
void SetPathLib (const char *lib_)
 
void SetPathName (const char *name_)
 
virtual int UnloadPlate ()
 
virtual ~EdbScanClientPav ()
 
- Public Member Functions inherited from EdbScanClientCommon
virtual int AddRWC_ (EdbRun *run, char *rwcname, int bAddRWD=true, const char *options="")
 
void CloseSocket ()
 
virtual int ConvertAreas (int id[4], EdbPattern &areas, EdbRun &run, const char *options="")
 
 EdbScanClientCommon ()
 
const char * GetCmd ()
 
int GetMaxAttempts ()
 
int GetMaxFails ()
 
const char * GetMess ()
 
const char * GetMess1 ()
 
float GetNXView ()
 
float GetNYView ()
 
int GetPort ()
 
const char * GetProcPthServer ()
 
const char * GetProcTgtServer ()
 
const char * GetRawDirClient ()
 
const char * GetRawDirServer ()
 
const char * GetServer ()
 
const char * GetServerCreatedRunName ()
 
float GetXstep ()
 
float GetYstep ()
 
virtual int InitializeSocket ()
 
virtual int ScanPreloadAreaS (int id1, int id2, int id3, int id4, float x1, float x2, float y1, float y2, const char *fname, float x1n, float x2n, float y1n, float y2n)
 
void SetCmd (const char *cmd_)
 
void SetMaxAttempts (int attempts_)
 
void SetMaxFails (int fails_)
 
void SetMess (const char *mess_)
 
void SetMess1 (const char *mess_)
 
void SetNXview (float nxview_)
 
void SetNYview (float nyview_)
 
void SetPort (int port_)
 
void SetProcPthServer (const char *prcpthserver_)
 
void SetProcTgtServer (const char *prctgtserver_)
 
void SetRawDirClient (const char *rawdirclient_)
 
void SetRawDirServer (const char *rawdirserver_)
 
void SetServer (const char *server_)
 
void SetXstep (float xstep_)
 
void SetYstep (float ystep_)
 
virtual Short_t ShortBrick (Int_t brick)
 
virtual ~EdbScanClientCommon ()
 
- Public Member Functions inherited from EdbScanClientBase
 EdbScanClientBase ()
 
virtual ~EdbScanClientBase ()
 

Protected Member Functions

void SetServerTarget ()
 

Protected Attributes

bool m_createdTarget
 
std::vector< uint8m_inbuf
 
uint32 m_insize
 
MessageManager m_mm
 
MessageReader m_mr
 
std::string m_pathLib
 
std::string m_pathName
 
std::string m_predPathName
 
bool m_scanningStarted
 
- Protected Attributes inherited from EdbScanClientCommon
char eCMD [CMD_LEN]
 
int eMAXFAILS
 
int eMAXSCANATTEMPTS
 
char eMess [CMD_LEN]
 
char eMess1 [CMD_LEN]
 
float eNXview
 
float eNYview
 
int ePORT
 
TString eProcPthServer
 
TString eProcTgtServer
 
TString eRawDirClient
 
TString eRawDirServer
 
TString eServer
 
TString eServerCreatedRunName
 
TSocket * eSock
 
float eXstep
 
float eYstep
 

Additional Inherited Members

- Public Types inherited from EdbScanClientBase
enum  ScanType { stPred , stVolume }
 

Constructor & Destructor Documentation

◆ EdbScanClientPav()

EdbScanClientPav::EdbScanClientPav ( )
inline
11  {
13  };
14  virtual ~EdbScanClientPav(){};
MessageManager m_mm
Definition: EdbScanClientPav.h:45
virtual ~EdbScanClientPav()
Definition: EdbScanClientPav.h:15
void CreateMessage()
Definition: MessageManager.cpp:10

◆ ~EdbScanClientPav()

virtual EdbScanClientPav::~EdbScanClientPav ( )
inlinevirtual
35 { m_pathLib=lib_; };
std::string m_pathLib
Definition: EdbScanClientPav.h:50

Member Function Documentation

◆ AsyncScanAreaS()

void EdbScanClientPav::AsyncScanAreaS ( int  id1,
int  id2,
int  id3,
int  id4,
float  x1,
float  x2,
float  y1,
float  y2,
const char *  fname 
)
virtual

Implements EdbScanClientCommon.

125 {
126  printf("AsyncScanAreaS: not implemented yet, use AsyncScanPreloadAreaS\n");
127 }

◆ AsyncScanPreloadAreaS()

void EdbScanClientPav::AsyncScanPreloadAreaS ( int  id1,
int  id2,
int  id3,
int  id4,
float  x1,
float  x2,
float  y1,
float  y2,
const char *  fname,
float  x1n,
float  x2n,
float  y1n,
float  y2n 
)
virtual

Implements EdbScanClientCommon.

133 {
134  if(!eSock)
136  if(!eSock)
137  return;
138 
139 
140  char area[100];
141  sprintf(area, "%f %f %f %f", x1, y1, x2, y2); // here goes xmin, ymin, xmax, ymax
142  m_mm.AddSetPathParamsNode(m_pathLib.c_str(), m_pathName.c_str(), "area", area, NULL_TRM);
143 
144  SetServerTarget();
145 
146  m_mm.AddStartNode(m_pathLib.c_str(), m_pathName.c_str(), "");
147  m_mm.FillBuff();
148 
149  AsyncStartScan();
150 }
#define NULL_TRM
Definition: MessageManager.h:11
virtual int InitializeSocket()
Definition: EdbScanClientBase.cxx:48
TSocket * eSock
Definition: EdbScanClientBase.h:57
virtual void AsyncStartScan()
Definition: EdbScanClientPav.cxx:184
std::string m_pathName
Definition: EdbScanClientPav.h:51
void SetServerTarget()
Definition: EdbScanClientPav.cxx:283
void FillBuff()
Definition: MessageManager.cpp:124
void AddStartNode(const char *lib_, const char *path_, const char *comment_)
Definition: MessageManager.cpp:25
void AddSetPathParamsNode(const char *lib_, const char *path_,...)
Definition: MessageManager.cpp:100

◆ AsyncStartScan()

void EdbScanClientPav::AsyncStartScan ( )
virtual
185 {
186  uint32 len = m_mm.GetBufSize();
187 
188  int res;
189  if(eSock && eSock->IsValid()){
190  eSock->SendRaw(&len, sizeof(len));
191  eSock->SendRaw(m_mm.GetBuf(), len);
193 
194  int recvBytes = eSock->RecvRaw(&m_insize, sizeof(m_insize));
195  if(recvBytes<=0){
196  CloseSocket();
197  return;
198  }
199  if(m_inbuf.size()<m_insize)
200  m_inbuf.resize(m_insize);
201  recvBytes = eSock->RecvRaw(&m_inbuf[0], m_insize);
202  if(recvBytes<=0){
203  CloseSocket();
204  return;
205  }
206  if(m_insize>0 && m_inbuf.size()){
207  printf("msg='%s'\n", &m_inbuf[8]);
208  bool res1 = m_mr.Load(&m_inbuf[0], m_insize);
209  if(!res1){
210  CloseSocket();
211  return;
212  }
213  m_mr.Process();
214  }
215 
216  };
217 
218  std::string startkey = PAVPROT_NODE_START;
219  startkey += "R";
220  int startcode;
221  const char *startstr = m_mr.GetValueForKey(startkey).c_str();
222  res = sscanf(startstr, "%d", &startcode);
223  if(!strlen(startstr))
224  startcode = PAVPROT_OK;
225  else if(res != 1){
226  printf("bad server response, stopping\n");
227  return;
228  };
229  switch(startcode){
230  case PAVPROT_OK:
231  printf("scanning started, waiting it to finish...\n");
232  m_scanningStarted = true;
233  break;
234 
235  case PAVPROT_BUSY:
236  printf("Scanning not started: server is busy\n");
237  m_scanningStarted = false;
238  break;
239 
240  case PAVPROT_ERROR:
241  default:
242  printf("scanning not started, some error occurred\n");
243  m_scanningStarted = false;
244  break;
245 
246  }
247 }
#define PAVPROT_BUSY
Definition: PAVProtocolDef.h:40
#define PAVPROT_ERROR
Definition: PAVProtocolDef.h:39
#define PAVPROT_OK
Definition: PAVProtocolDef.h:38
uint32_t uint32
Definition: PAVProtocolDef.h:90
#define PAVPROT_NODE_START
Definition: PAVProtocolDef.h:56
void CloseSocket()
Definition: EdbScanClientBase.cxx:40
uint32 m_insize
Definition: EdbScanClientPav.h:48
MessageReader m_mr
Definition: EdbScanClientPav.h:46
std::vector< uint8 > m_inbuf
Definition: EdbScanClientPav.h:49
bool m_scanningStarted
Definition: EdbScanClientPav.h:53
uint8 * GetBuf()
Definition: MessageManager.h:44
uint32 GetBufSize()
Definition: MessageManager.h:45
std::string GetValueForKey(const char *key_)
Definition: MessageReader.h:38
void Process()
Definition: MessageReader.cpp:65
bool Load(uint8 *buf_, uint32 size_)
Definition: MessageReader.cpp:3

◆ AsyncWaitForScanResult()

int EdbScanClientPav::AsyncWaitForScanResult ( )
virtual

Implements EdbScanClientCommon.

250 {
251  if(!m_scanningStarted)
252  return 0;
253  if(eSock) if(eSock->IsValid()){
254  int recvBytes = eSock->RecvRaw(&m_insize, sizeof(m_insize));
255  if(recvBytes<=0){
256  CloseSocket();
257  return 0;
258  }
259 
260  if(m_inbuf.size()<m_insize)
261  m_inbuf.resize(m_insize);
262  recvBytes = eSock->RecvRaw(&m_inbuf[0], m_insize);
263  if(recvBytes<=0){
264  CloseSocket();
265  return 0;
266  }
267 
268  if(m_insize>0 && m_inbuf.size()){
269  printf("msg='%s'\n", &m_inbuf[8]);
270  bool res = m_mr.Load(&m_inbuf[0], m_insize);
271  if(!res){
272  CloseSocket();
273  return 0;
274  }
275  m_mr.Process();
276  }
277  };
278  m_scanningStarted = false;
279 
280  return 1;
281 }

◆ LoadPlate()

int EdbScanClientPav::LoadPlate ( int  BRICK,
int  PLATE,
const char *  mapext,
int  nAttempts = 1 
)
virtual

Implements EdbScanClientCommon.

34 {
35  m_mm.AddMarksNode(BRICK, PLATE, mapext);
36  return 1;
37 }
void AddMarksNode(int brick_, int plate_, const char *mapext_)
Definition: MessageManager.cpp:34
int PLATE
Definition: shower_btr.C:18
Definition: RecDispMC.C:95

◆ Print()

virtual void EdbScanClientPav::Print ( )
virtual

Implements EdbScanClientCommon.

◆ ScanAreas()

int EdbScanClientPav::ScanAreas ( EdbScanClientBase::ScanType  st,
int  id[4],
EdbPattern areas,
EdbRun run,
const char *  options = "" 
)
virtual

Implements EdbScanClientCommon.

72 {
73  // this function scans the FIRST area from the list. Saving is done by server-side
74  // for propper interaction the run filename should be set in EdbScanProc::SetServerRunName fn
75  // returns 1 if scan was successful
76 
77  int n = areas.N();
78  printf("ScanAreas: %d \n",n);
79  if(n == 0){
80  printf("Nothing to scan.\n");
81  return 0;
82  }
83  int scanned=0, failed=0;
84  EdbSegP *s = 0;
85  char str[256];
86  if(st == stVolume){
87  if(n!=1)
88  printf("WARNING! Only first prediction is scanned in Volume mode");
89  s = areas.GetSegment(0);
90  printf("ScanAreas: scan progress: 0 out of 1\n");
91  sprintf(str,"%s/raw.%d.%d.%d.%d",eRawDirServer.Data(),ShortBrick(id[0]), id[1], id[2], s->ID());
92  while( !ScanPreloadAreaS( id[0], id[1], id[2], s->ID(),
93  s->X()-s->SX(), s->X()+s->SX(), s->Y()-s->SY(), s->Y()+s->SY(),
94  str,s->X()-s->SX(), s->X()+s->SX(), s->Y()-s->SY(), s->Y()+s->SY() ) && failed < eMAXFAILS)
95  failed++;
96  if(failed >= eMAXFAILS)
97  printf("EdbScanClient::ScanAreas: ERROR!!! too many failures - stop scanning!\n");
98  else
99  scanned = 1;
100  }else{
101  s = areas.GetSegment(0);
102  float dx = s->SX(), dy = s->SY();
103  for(int i=1; i<n; i++){
104  s = areas.GetSegment(1);
105  if(s->SX() > dx)
106  dx = s->SX();
107  if(s->SY() > dy)
108  dy = s->SY();
109  }
110  while( !ScanFromPrediction( id[0], id[1], id[2], id[3], dx, dy) && failed < eMAXFAILS)
111  failed++;
112  if(failed >= eMAXFAILS)
113  printf("EdbScanClient::ScanAreas: ERROR!!! too many failures - stop scanning!\n");
114  else
115  scanned = n;
116  }
117 
118  return scanned;
119 }
@ stVolume
Definition: EdbScanClientBase.h:16
virtual int ScanPreloadAreaS(int id1, int id2, int id3, int id4, float x1, float x2, float y1, float y2, const char *fname, float x1n, float x2n, float y1n, float y2n)
Definition: EdbScanClientBase.cxx:61
virtual Short_t ShortBrick(Int_t brick)
Definition: EdbScanClientBase.h:93
int eMAXFAILS
Definition: EdbScanClientBase.h:66
TString eRawDirServer
Definition: EdbScanClientBase.h:70
virtual bool ScanFromPrediction(int id1, int id2, int id3, int id4, float dx, float dy)
Definition: EdbScanClientPav.cxx:153
Definition: EdbSegP.h:18
Int_t ID() const
Definition: EdbSegP.h:144
Float_t SY() const
Definition: EdbSegP.h:160
Float_t X() const
Definition: EdbSegP.h:170
Float_t Y() const
Definition: EdbSegP.h:171
Float_t SX() const
Definition: EdbSegP.h:159
Int_t N() const
Definition: EdbPattern.h:89
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66
EdbSegP * s
Definition: tlg2pattern.C:32

◆ ScanFromPrediction()

bool EdbScanClientPav::ScanFromPrediction ( int  id1,
int  id2,
int  id3,
int  id4,
float  dx,
float  dy 
)
virtual
153  {
154  if(!eSock)
156  if(!eSock)
157  return false;
158 
159 
160  char pars[200];
161  sprintf(pars, "%f %f", dx, dy);
162  m_mm.AddSetPathParamsNode(m_pathLib.c_str(), m_predPathName.c_str(), "pred_sigma", pars, NULL_TRM);
163 
164  if(eProcPthServer.Length() != 0)//only if proc path is set, i.e. path to processing directory as seen from scanning srv
165  m_mm.AddSetPathParamsNode(m_pathLib.c_str(), m_predPathName.c_str(), "pred_list", eProcPthServer.Data(), NULL_TRM);
166 
167  sprintf(pars, "%u %u %u %u", id1, id2, id3, id4);
168  m_mm.AddSetPathParamsNode(m_pathLib.c_str(), m_predPathName.c_str(), "pred_id", pars, NULL_TRM);
169 
170  SetServerTarget();
171 
172  m_mm.AddStartNode(m_pathLib.c_str(), m_predPathName.c_str(), "");
173  m_mm.FillBuff();
174 
175  AsyncStartScan();
176 
177  if(AsyncWaitForScanResult()==1)
178  return true;
179  else
180  return false;
181 }
TString eProcPthServer
Definition: EdbScanClientBase.h:73
std::string m_predPathName
Definition: EdbScanClientPav.h:52
virtual int AsyncWaitForScanResult()
Definition: EdbScanClientPav.cxx:249

◆ ServerCreatesTarget()

virtual bool EdbScanClientPav::ServerCreatesTarget ( )
inlinevirtual

Implements EdbScanClientCommon.

40 :

◆ SetClusterThresholds()

void EdbScanClientPav::SetClusterThresholds ( int  TOP,
int  BOT 
)
virtual

Implements EdbScanClientCommon.

51 {
52  printf("Default values are used from PAVICOM config.\n");
53 }

◆ SetFragmentSize()

int EdbScanClientPav::SetFragmentSize ( int  X,
int  Y 
)
virtual

Implements EdbScanClientCommon.

66 {
67  return 1;
68 }

◆ SetOdysseyThresholds()

void EdbScanClientPav::SetOdysseyThresholds ( int  itop,
int  ibottom,
int  size,
int  TOP,
int  BOT 
)
virtual

Implements EdbScanClientCommon.

57 {
58  char val[20];
59  sprintf(val, "%d %d", BOT, TOP);
60  printf("only TOP and BOT thresholds are used in PAVICOM.\n");
61  SetParameter("processor", "clz_thres", val);
62 }
virtual void SetParameter(const char *Object, const char *Parameter, const char *Value)
Definition: EdbScanClientPav.cxx:40
@ TOP
Definition: tlg2pattern.C:37
@ BOT
Definition: tlg2pattern.C:37

◆ SetParameter()

void EdbScanClientPav::SetParameter ( const char *  Object,
const char *  Parameter,
const char *  Value 
)
virtual

Implements EdbScanClientCommon.

41 {
42  if(!strcmp(Object, "VertigoScanner"))
43  return;
44  //prevent too many fake sysal stuff
45  printf("%s[%s]=%s\n", Object, Parameter, Value);
46  m_mm.AddSetModuleParamsNode(Object, Parameter, Value, NULL_TRM);
47 }
void AddSetModuleParamsNode(const char *module_,...)
Definition: MessageManager.cpp:58

◆ SetPathLib()

void EdbScanClientPav::SetPathLib ( const char *  lib_)
inline
36 { m_pathName=name_; };

◆ SetPathName()

void EdbScanClientPav::SetPathName ( const char *  name_)
inline
38 { return m_createdTarget;};
bool m_createdTarget
Definition: EdbScanClientPav.h:54

◆ SetServerTarget()

void EdbScanClientPav::SetServerTarget ( )
protected
283  {
284  std::string path(eProcTgtServer.Data()); // /opera/ONLINE/b800000/p009/asd.root
285  if(eProcPthServer.Length() != 0){
286  m_mm.AddSetModuleParamsNode("processor", "clprc.output_file", path.c_str(), NULL_TRM);
287  }else{
288  m_createdTarget = false;
289  std::string spath = eRawDirServer.Data();
290  std::string cpath = eRawDirClient.Data();
291  char buf[500];
292  unsigned int tid=static_cast<unsigned int>(time(0));
293  sprintf(buf, "/tracks_%u.raw.root", tid);
294  spath += buf;
295  cpath += buf;
296 
297  eServerCreatedRunName = cpath.c_str();
298  m_mm.AddSetModuleParamsNode("processor", "clprc.output_file", spath.c_str(), NULL_TRM);
299  printf("Server proc dir not set. Please set for speedup.\n");
300  return;
301  }
302 
303  m_mm.AddGetModuleParamsNode("processor", "clprc.output_file", NULL_TRM);
304  m_mm.FillBuff();
305 
306  uint32 len = m_mm.GetBufSize();
307 
308  //int res;
309  if(eSock && eSock->IsValid()){
310  eSock->SendRaw(&len, sizeof(len));
311  eSock->SendRaw(m_mm.GetBuf(), len);
313 
314  int recvBytes = eSock->RecvRaw(&m_insize, sizeof(m_insize));
315  if(recvBytes<=0){
316  CloseSocket();
317  return;
318  }
319  if(m_inbuf.size()<m_insize)
320  m_inbuf.resize(m_insize);
321  recvBytes = eSock->RecvRaw(&m_inbuf[0], m_insize);
322  if(recvBytes<=0){
323  CloseSocket();
324  return;
325  }
326  if(m_insize>0 && m_inbuf.size()){
327  printf("msg='%s'\n", &m_inbuf[8]);
328  bool res1 = m_mr.Load(&m_inbuf[0], m_insize);
329  if(!res1){
330  CloseSocket();
331  return;
332  }
333  m_mr.Process();
334  }
335  };
336 
337  std::string key = PAVPROT_NODE_GMP;
338  key += "R.processor.clprc.output_file";
339  if(m_mr.GetValueForKey(key).length() != 0){
340  printf("Server creates target file.\n");
341  m_createdTarget = true;
342  }else{
343  m_createdTarget = false;
344  printf("Server doesn't create target file. Please update to speedup.\n");
345  }
346 };
#define PAVPROT_NODE_GMP
Definition: PAVProtocolDef.h:52
TString eProcTgtServer
Definition: EdbScanClientBase.h:72
TString eRawDirClient
Definition: EdbScanClientBase.h:71
TString eServerCreatedRunName
Definition: EdbScanClientBase.h:75
void AddGetModuleParamsNode(const char *module_,...)
Definition: MessageManager.cpp:42

◆ UnloadPlate()

int EdbScanClientPav::UnloadPlate ( )
virtual

Implements EdbScanClientCommon.

27 {
28  printf("UnloadPlate: not implemented yet.\n");
29  return 1;
30 }

Member Data Documentation

◆ m_createdTarget

bool EdbScanClientPav::m_createdTarget
protected

◆ m_inbuf

std::vector<uint8> EdbScanClientPav::m_inbuf
protected

◆ m_insize

uint32 EdbScanClientPav::m_insize
protected

◆ m_mm

MessageManager EdbScanClientPav::m_mm
protected

◆ m_mr

MessageReader EdbScanClientPav::m_mr
protected

◆ m_pathLib

std::string EdbScanClientPav::m_pathLib
protected

◆ m_pathName

std::string EdbScanClientPav::m_pathName
protected

◆ m_predPathName

std::string EdbScanClientPav::m_predPathName
protected

◆ m_scanningStarted

bool EdbScanClientPav::m_scanningStarted
protected

The documentation for this class was generated from the following files: