FEDRA emulsion software from the OPERA Collaboration
scan2db.cpp File Reference
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <TEnv.h>
#include <TString.h>
#include <TSystem.h>
#include "TOracleServerE2WX.h"
#include "EdbScanProc.h"
#include "EdbLog.h"
Include dependency graph for scan2db.cpp:

Functions

int AddBrick (EdbScan2DB &s2d, int BRICK, const char *dir, TEnv &cenv)
 
void CheckBrick (TEnv &cenv, int brick)
 
bool InitDB (EdbScan2DB &s2d, TEnv &cenv, int do_commit)
 
bool LoadEventBrick (TEnv &cenv, int do_commit, const char *file)
 
int main (int argc, char *argv[])
 
void MakeSets (TEnv &cenv, const char *file)
 
int ParseFileName (const char *filename, ULong64_t &brick, ULong64_t &event)
 
int ParseFileName (const char *filename, ULong64_t &brick, ULong64_t &event, TString &dir)
 
void print_help_message ()
 
void PublicateBrick (TEnv &cenv, int brick)
 
void PublicateBrick (TEnv &cenv, Int_t brick)
 
void set_default (TEnv &cenv)
 
void set_default_NA (TEnv &cenv)
 

Function Documentation

◆ AddBrick()

int AddBrick ( EdbScan2DB s2d,
int  BRICK,
const char *  dir,
TEnv &  cenv 
)

◆ CheckBrick()

void CheckBrick ( TEnv &  cenv,
int  brick 
)
211{
212 EdbScan2DB s2d;
213 if( InitDB( s2d, cenv, 0))
214 {
216 }
217}
BRICK brick
Definition: RecDispMC.C:103
Definition: TOracleServerE2WX.h:98
TOracleServerE2WX * eDB
Definition: TOracleServerE2WX.h:102
void PrintBrickInfoFull(Long_t id_eventbrick, int level)
Definition: TOracleServerE2.cxx:1364
TEnv cenv("emrec")
bool InitDB(EdbScan2DB &s2d, TEnv &cenv, int do_commit)
Definition: scan2db.cpp:408

◆ InitDB()

bool InitDB ( EdbScan2DB s2d,
TEnv &  cenv,
int  do_commit 
)
409{
410 const char *dbname = cenv.GetValue("scan2db.dbname" , "connection_string");
411 const char *username = cenv.GetValue("scan2db.username" , "username");
412 const char *password = cenv.GetValue("scan2db.password" , "password");
413 const char *rdb = cenv.GetValue("scan2db.rdb" , "");
414
415 Log(2,"InitDB","Init database \t\t%s%s", dbname, rdb);
416 if( s2d.InitDB( dbname, username, password) )
417 {
418 s2d.eDB->eLab = cenv.GetValue("scan2db.labName" , "NAPOLI");
419 s2d.eDB->eLa = cenv.GetValue("scan2db.labN" , "NA");
420 s2d.eDB->SetCommit(do_commit);
421 return 1;
422 }
423 return 0;
424}
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
int InitDB(const char *conn, const char *user, const char *pwd)
Definition: TOracleServerE2WX.cxx:1025
TString eLa
as "NAPOLI"
Definition: TOracleServerE2WX.h:24
TString eLab
Definition: TOracleServerE2WX.h:23
void SetCommit(bool i)
Definition: TOracleServerE2WX.h:33

◆ LoadEventBrick()

bool LoadEventBrick ( TEnv &  cenv,
int  do_commit,
const char *  file 
)
314{
315 time_t ti = time(NULL);
316 EdbScan2DB s2d;
317 if( !InitDB( s2d, cenv, do_commit)) return 0;
318
319 if( cenv.GetValue("scan2db.TestLoad",0) ) {
320 s2d.eDB->SetTestLoad( cenv.GetValue("scan2db.NTestLoad",0));
321 Log(1,"LoadEventBrick","TestLoad mode followed by ROLLBACK is active! NTestLoad = %d",
322 cenv.GetValue("scan2db.NTestLoad",0) );
323 }
324
325 ULong64_t br=0, ev=0;
326 TString dir;
327 ParseFileName( fname, br, ev , dir );
328 TEnv cardenv("eventscan2db");
329 if( cardenv.ReadFile( fname ,kEnvLocal) <0 )
330 {
331 Log(1,"LoadEventBrick","card file %s not found! exit", fname);
332 return false;
333 }
334 printf("\n--------------------------------------------------------------------\n");
335 printf( "----------------------- scan2db ------------------------------------\n");
336 printf( "Process file: %s\n",fname);
337 printf( "--------------------------------------------------------------------\n");
338 cardenv.Print();
339 printf( "--------------------------------------------------------------------\n");
340
341 int id = br>1000000? br: 1000000+br;
342 s2d.eBrick = br;
343 s2d.eEventBrick = id;
344 s2d.eEvent = ev;
345 s2d.eIsBlackCS = cardenv.GetValue("scan2db.BlackCS", 0);
346
347 s2d.eX_marks= cardenv.GetValue("scan2db.X_MARKS" , 1);
348 // 2=in case lateral X-rays marks, followed by a calibration scan;
349 // 1=in case lateral X-rays marks only;
350 // 0=calibration scan only
351
352 s2d.eID_SET = cenv.GetValue("scan2db.BS_ID" , "'OPERA NA SET 01'");
353 sscanf( cenv.GetValue("scan2db.HeaderProgramsettings", "0000000000000000"),"%lld", &(s2d.eHeaderProgramsettings));
354 sscanf( cenv.GetValue("scan2db.CalibrationProgramsettings", "0000000000000000"),"%lld", &(s2d.eCalibrationProgramsettings));
355 sscanf( cenv.GetValue("scan2db.PredictionProgramsettings", "0000000000000000"),"%lld", &(s2d.ePredictionProgramsettings));
356 sscanf( cenv.GetValue("scan2db.VolumeProgramsettings", "0000000000000000"),"%lld", &(s2d.eVolumeProgramsettings));
357 sscanf( cenv.GetValue("scan2db.IdMachine", "0000000000000000"),"%lld", &(s2d.eIdMachine));
358 sscanf( cenv.GetValue("scan2db.IdRequester", "0000000000000000"),"%lld", &(s2d.eIdRequester));
359
360 if(gEDBDEBUGLEVEL>0) s2d.Print();
361
364
365 s2d.AddBrick( sproc );
366
367 if(cardenv.Lookup("scan2db.CALIBRATION") && (s2d.eDB->GetDBErrors()==0 || s2d.eDB->TestLoad()))
368 {
369 printf( "scan2db CALIBRATION ......\n");
370 time_t ti_c = time(NULL);
371 EdbID idcal = cardenv.GetValue("scan2db.CALIBRATION", "0.0.0.0");
372 s2d.eWriteRawCalibrationData = cardenv.GetValue("scan2db.CALIBRATION.raw", 0);
373 s2d.LoadCalibration(sproc, idcal);
374 time_t tf_c = time(NULL);
375 printf( "scan2db CALIBRATION finished, Elapsed time = %ld s\n", tf_c-ti_c);
376 }
377 if(cardenv.Lookup("scan2db.PREDICTION") && (s2d.eDB->GetDBErrors()==0 || s2d.eDB->TestLoad()))
378 {
379 printf( "scan2db PREDICTION ......\n");
380 time_t ti_p = time(NULL);
381 EdbID idpred = cardenv.GetValue("scan2db.PREDICTION", "0.0.0.0");
382 s2d.LoadPrediction(sproc, idpred);
383 time_t tf_p = time(NULL);
384 printf( "scan2db PREDICTION finished, Elapsed time = %ld s\n", tf_p-ti_p);
385 }
386 if(cardenv.Lookup("scan2db.VOLUME") && (s2d.eDB->GetDBErrors()==0 || s2d.eDB->TestLoad()))
387 {
388 printf( "scan2db VOLUME ......\n");
389 time_t ti_v = time(NULL);
390 EdbID idvol = cardenv.GetValue("scan2db.VOLUME" , "0.0.0.0");
391 EdbID idpred = cardenv.GetValue("scan2db.PREDICTION" , "0.0.0.0");
392 s2d.eIDPATH = cardenv.GetValue("scan2db.VOLUME.IDPATH", -1);
393 s2d.LoadVolume(sproc, idvol, idpred);
394 time_t tf_v = time(NULL);
395 printf( "scan2db VOLUME finished, Elapsed time = %ld s\n", tf_v-ti_v);
396 }
397
398 s2d.eDB->FinishTransaction();
399
400 time_t tf = time(NULL);
401 fprintf(stdout,"LoadEventBrick completed\n");
402 fprintf(stdout,"Elapsed time = %ld seconds\n",tf-ti);
403 return 1;
404}
EdbTrackP * ti[10]
Definition: RecDispMC_Profiles.C:54
FILE * stdout
Definition: EdbID.h:7
ULong64_t eCalibrationProgramsettings
Definition: TOracleServerE2WX.h:113
void AddBrick(EdbScanProc &sproc)
Definition: TOracleServerE2WX.cxx:1578
Bool_t eWriteRawCalibrationData
Definition: TOracleServerE2WX.h:124
ULong64_t eEvent
Definition: TOracleServerE2WX.h:106
Int_t eX_marks
Definition: TOracleServerE2WX.h:121
ULong64_t eHeaderProgramsettings
Definition: TOracleServerE2WX.h:112
void Print()
Definition: TOracleServerE2WX.cxx:999
ULong64_t eIdRequester
Definition: TOracleServerE2WX.h:111
TString eID_SET
Definition: TOracleServerE2WX.h:109
ULong64_t eBrick
Definition: TOracleServerE2WX.h:104
Int_t eIsBlackCS
Definition: TOracleServerE2WX.h:107
ULong64_t eIdMachine
Definition: TOracleServerE2WX.h:110
ULong64_t eEventBrick
Definition: TOracleServerE2WX.h:105
ULong64_t eVolumeProgramsettings
Definition: TOracleServerE2WX.h:115
void LoadCalibration(EdbScanProc &sproc, EdbID edbid)
Definition: TOracleServerE2WX.cxx:1417
void LoadVolume(EdbScanProc &sproc, EdbID edbid, EdbID idstop)
Definition: TOracleServerE2WX.cxx:1473
Int_t eIDPATH
Definition: TOracleServerE2WX.h:108
void LoadPrediction(EdbScanProc &sproc, EdbID edbid)
Definition: TOracleServerE2WX.cxx:1102
ULong64_t ePredictionProgramsettings
Definition: TOracleServerE2WX.h:114
scanned data processing
Definition: EdbScanProc.h:12
TString eProcDirClient
directory path for root data
Definition: EdbScanProc.h:14
void FinishTransaction()
Definition: TOracleServerE2WX.cxx:45
int GetDBErrors()
Definition: TOracleServerE2WX.h:31
void SetTestLoad(int n)
Definition: TOracleServerE2WX.h:32
Bool_t TestLoad()
Definition: TOracleServerE2WX.h:34
EdbScanProc * sproc
Definition: comptonmap.cpp:29
gEDBDEBUGLEVEL
Definition: energy.C:7
const char * fname
Definition: mc2raw.cxx:41
UInt_t id
Definition: tlg2couples.C:117
#define NULL
Definition: nidaqmx.h:84
int ParseFileName(const char *filename, ULong64_t &brick, ULong64_t &event)
Definition: scan2db.cpp:427

◆ main()

int main ( int  argc,
char *  argv[] 
)
126{
127 if (argc < 2) { print_help_message(); return 0; }
128
129 TEnv cenv("scan2db");
131 cenv.ReadFile( "scan2db.rootrc" ,kEnvLocal);
132
133 gEDBDEBUGLEVEL = cenv.GetValue("scan2db.EdbDebugLevel" , 1);
134
135 int do_checkbrick=0;
136 int brick=0;
137 char *dir=0;
138 char *lab=0;
139
140 int do_addeventbrick=0;
141 char *fname=0;
142
143 char *listfile=0;
144 int do_commit=0;
145 int do_makesets=0;
146 int do_publicate=0;
147
148 for(int i=1; i<argc; i++ ) {
149
150 char *key = argv[i];
151
152 if(!strncmp(key,"-file=",6))
153 {
154 do_addeventbrick=1;
155 if(strlen(key)>6) fname=key+6;
156 }
157 else if(!strncmp(key,"-checkbrick=",12))
158 {
159 if(strlen(key)>12) {
160 brick = atoi(key+12);
161 do_checkbrick=1;
162 }
163 }
164 else if(!strncmp(key,"-commit",7))
165 {
166 do_commit=1;
167 }
168 else if(!strncmp(key,"-publicate=",11))
169 {
170 if(strlen(key)>11) {
171 brick = atoi(key+11);
172 do_publicate=1;
173 }
174 }
175 else if(!strncmp(key,"-makesets",9))
176 {
177 do_makesets=1;
178 }
179 else if(!strncmp(key,"-v=",3))
180 {
181 gEDBDEBUGLEVEL = atoi(key+3);
182 }
183 }
184
185 cenv.WriteFile("scan2db.save.rootrc");
186
187 if(do_makesets)
188 {
190 }
191 else
192 {
193 if(do_addeventbrick)
194 {
195 LoadEventBrick( cenv, do_commit, fname );
196 }
197 if(do_checkbrick)
198 {
200 }
201 if(do_publicate)
202 {
204 }
205 }
206 return 1;
207}
void set_default(TEnv &cenv)
Definition: scan2db.cpp:88
void CheckBrick(TEnv &cenv, int brick)
Definition: scan2db.cpp:210
void MakeSets(TEnv &cenv, const char *file)
Definition: scan2db.cpp:234
void print_help_message()
Definition: scan2db.cpp:25
void PublicateBrick(TEnv &cenv, Int_t brick)
bool LoadEventBrick(TEnv &cenv, int do_commit, const char *file)
Definition: scan2db.cpp:313

◆ MakeSets()

void MakeSets ( TEnv &  cenv,
const char *  file 
)
235{
236 TEnv cardenv("eventscan2db");
237 if( cardenv.ReadFile( fname ,kEnvLocal) <0 )
238 {
239 Log(1,"MakeSets","card file %s not found! exit", fname);
240 return;
241 }
242 ULong64_t br=0, ev=0;
243 TString dir;
244 ParseFileName( fname, br, ev , dir );
247 int from_plate = 57;
248 int to_plate = 1;
249 float z0 = 0;
250 float dz = -1300;
251 float dzbase = 210;
252
253 if(cardenv.Lookup("scan2db.CALIBRATION"))
254 {
255 EdbID id = cardenv.GetValue("scan2db.CALIBRATION", "0.0.0.0");
256 if(id.eBrick != br)
257 Log(1,"MakeSets","ERROR! Calibration set id: %s is not consistent with path %s", id.AsString(), fname);
258 else
259 {
260 EdbScanSet sc(id);
261 sc.MakeNominalSet(id,from_plate, to_plate, z0, dz, 1, dzbase);
262 sproc.MakeScannedIDList( id, sc, from_plate, to_plate, "raw.root");
263 sproc.WriteScanSet(id,sc);
265 sproc.UpdateSetWithAff(id,id);
266 if(gEDBDEBUGLEVEL>1) {
268 ss->Print();
269 }
270 }
271 }
272 if(cardenv.Lookup("scan2db.PREDICTION"))
273 {
274 EdbID id = cardenv.GetValue("scan2db.PREDICTION", "0.0.0.0");
275 if(id.eBrick != br)
276 Log(1,"MakeSets","ERROR! Prediction set id: %s is not consistent with path %s", id.AsString(), fname);
277 else
278 {
279 EdbScanSet sc(id);
280 sc.MakeNominalSet(id,from_plate, to_plate, z0, dz, 1, dzbase);
281 sproc.MakeScannedIDList( id, sc, from_plate, to_plate, "sbt.root");
282 sproc.WriteScanSet(id,sc);
284 sproc.UpdateSetWithAff(id,id);
285 if(gEDBDEBUGLEVEL>1) {
287 ss->Print();
288 }
289 }
290 }
291 if(cardenv.Lookup("scan2db.VOLUME"))
292 {
293 EdbID id = cardenv.GetValue("scan2db.VOLUME", "0.0.0.0");
294 if(id.eBrick != br)
295 Log(1,"MakeSets","ERROR! Volume set id: %s is not consistent with path %s", id.AsString(), fname);
296 else
297 {
298 EdbScanSet sc(id);
299 sc.MakeNominalSet(id,from_plate, to_plate, z0, dz, 1, dzbase);
300 sproc.MakeScannedIDList( id, sc, from_plate, to_plate, "raw.root");
301 sproc.WriteScanSet(id,sc);
303 sproc.UpdateSetWithAff(id,id);
304 if(gEDBDEBUGLEVEL>1) {
306 ss->Print();
307 }
308 }
309 }
310}
brick z0
Definition: RecDispMC.C:106
brick dz
Definition: RecDispMC.C:107
void UpdateSetWithAff(EdbID idset, EdbAffine2D aff)
Definition: EdbScanProc.cxx:2730
int WriteScanSet(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1428
void UpdateSetWithPlatePar(EdbID id)
Definition: EdbScanProc.cxx:2765
void MakeScannedIDList(EdbID id0, EdbScanSet &sc, int pl_from, int pl_to, const char *suffix)
Definition: EdbScanProc.cxx:646
EdbScanSet * ReadScanSet(EdbID id)
Definition: EdbScanProc.cxx:1482
Definition: EdbScanSet.h:11
ss
Definition: energy.C:62

◆ ParseFileName() [1/2]

int ParseFileName ( const char *  filename,
ULong64_t &  brick,
ULong64_t &  event 
)
428{
429 if( gSystem->AccessPathName(fname) ) {
430 Log(1,"fb2db::ParseFileName","ERROR: can not access file: %s", fname);
431 return 0;
432 }
433 if(2 != sscanf(gSystem->BaseName(fname),"b%lld_e%lld.scan2db.rootrc",&brickid,&eventid)) {
434 Log(1,"Error parsing filename (expected bXXXX_eXXXXX.scan2db.rootrc): %s", fname);
435 return 0;
436 }
437 return 1;
438}

◆ ParseFileName() [2/2]

int ParseFileName ( const char *  filename,
ULong64_t &  brick,
ULong64_t &  event,
TString &  dir 
)
442{
443 if(ParseFileName( fname, brickid, eventid) ) {
444 const char *dir1 = gSystem->DirName(fname);
445 if(!dir1) return 0;
446 const char *dir = gSystem->DirName(dir1);
447 if(!dir) return 0;
448 if( strlen(dir1) < 2 ) return 0;
449 onlinedir=dir;
450 return 1;
451 }
452 return 0;
453}

◆ print_help_message()

void print_help_message ( )
26{
27 cout<< "\nUsage: \n\t scan2db -file=bXXX_eYYY.scan2db.rootrc [-commit -v=V]\n";
28 cout<< "\t\t Assumed that feedbackfile name is like bBBBB_eEEEE.feedback as b010234_e11293015645.feedback\n";
29 cout<< "\t\t brick id and event id extracted from the file name are used for data insertion into db\n";
30
31 cout<< "\n\t scan2db -file=bXXX_eYYY.scan2db.rootrc -makesets \n";
32 cout<< "\t\t make *.set.root files for the involved datasets (use default OPERA geometry settings)\n";
33
34 cout<< "\n\t scan2db -checkbrick=BRICK \n";
35 cout<< "\t\t check if the brick structure was already loaded";
36
37 cout<< "\n\t scan2db -publicate=BRICK \n";
38 cout<< "\t\t replicate brick in opfra";
39
40 cout<< "\n\n\t-----------------------------------------------------------------------------------------";
41 cout<< "\n\t By default the application is started in test mode and does not commit transactions";
42 cout<< "\n\t TO LOAD DATA USE -commit OPTION";
43 cout<< "\n\t-------------------------------------------------------------------------------------------";
44
45 cout<< "\n\n\t If the input parameters file (scan2db.rootrc) is not present in the current dir - the default";
46 cout<< "\n\t parameters used. After the execution them are saved into scan2db.save.rootrc file\n";
47
48 cout<< "\n\t Options: \n";
49 cout<< "\t\t -v=V verbosity level (0-4) \n";
50
51 cout <<"\nExample of b010234_e11293015645.feedback file:\n";
52 cout <<"\
53##-------------------------------------------------------------\n\
54## - EventBrick operations and datasets definitions\n\
55## - Used by scan2db as the input cards\n\
56## - To be placed into the brick folder as\n\
57## \"bXXXXXX_eYYYYYYYYYYY.scan2db.rootrc\" (b102143_e12186044883.scan2db.rootrc)\n\
58## - All datasets should be correctly assembled using\n\
59## the \"makescanset\" application before scan2db starts (*.set.root)\n\
60##\n\
61## scan2db.X_MARKS:\n\
62## 2=in case lateral X-rays marks, followed by a calibration scan;\n\
63## 1=in case lateral X-rays marks only;\n\
64## 0=calibration scan only\n\
65##\n\
66## scan2db.BlackCS:\n\
67## 1 - fill TB_SCANBACK_PATHS only\n\
68## 0 - try to fill also TB_B_CSCANDS_SBPATHS\n\
69##\n\
70## scan2db.VOLUME.IDPATH:\n\
71## <0 - (default) do not connect path and volume (table TB_B_SBPATHS_VOLUMES). This is useful when volume\n\
72## was scanned because of a vertex hunting and not because it's related to a SB track\n\
73## >=0 - is prediction path id to be connected\n\
74##\n\
75##-------------------------------------------------------------\n\
76scan2db.X_MARKS: 1\n\
77scan2db.BlackCS: 1\n\
78scan2db.CALIBRATION: 76735.0.1.1000\n\
79scan2db.CALIBRATION.raw: 0\n\
80scan2db.PREDICTION: 76735.0.1.100\n\
81scan2db.VOLUME: 76735.0.1.1000\n\
82scan2db.VOLUME.IDPATH: 1\n";
83
84 cout<<endl;
85}

◆ PublicateBrick() [1/2]

void PublicateBrick ( TEnv &  cenv,
int  brick 
)
221{
222 const char *labN = cenv.GetValue("scan2db.labN" , " ");
223 Int_t eventbrick = brick>1000000? brick: 1000000+brick;
224 EdbScan2DB s2d;
225 if( InitDB( s2d, cenv, 1) )
226 {
227 s2d.eDB->MyQuery(
228 Form("call operapub.xp_replicate_%s(0,%d)",labN,eventbrick)
229 );
230 }
231}
Int_t MyQuery(const char *sqlquery)
Definition: TOracleServerE2WX.cxx:57

◆ PublicateBrick() [2/2]

void PublicateBrick ( TEnv &  cenv,
Int_t  brick 
)

◆ set_default()

void set_default ( TEnv &  cenv)
89{
90 cenv.SetValue("scan2db.dbname" , "oracle://mysrv/MYDB");
91 cenv.SetValue("scan2db.username" , "username");
92 cenv.SetValue("scan2db.password" , "password");
93 cenv.SetValue("scan2db.rdb" , "");
94 cenv.SetValue("scan2db.X_MARKS" , 1);
95 cenv.SetValue("scan2db.labName" , "LAB");
96 cenv.SetValue("scan2db.labN" , "LA");
97 cenv.SetValue("scan2db.BS_ID" , "'OPERA LA SET XX'");
98 cenv.SetValue("scan2db.IdMachine" , "0000000000000000");
99 cenv.SetValue("scan2db.IdRequester" , "0000000000000000");
100 cenv.SetValue("scan2db.HeaderProgramsettings" , "0000000000000000");
101 cenv.SetValue("scan2db.CalibrationProgramsettings" , "0000000000000000");
102 cenv.SetValue("scan2db.PredictionProgramsettings" , "0000000000000000");
103 cenv.SetValue("scan2db.VolumeProgramsettings" , "0000000000000000");
104 cenv.SetValue("scan2db.FeedbackProgramsettings" , "0000000000000000");
105 cenv.SetValue("scan2db.TestLoad" , 0);
106 cenv.SetValue("scan2db.TestLoadN" , 10);
107 cenv.SetValue("scan2db.EdbDebugLevel" , 1);
108}

◆ set_default_NA()

void set_default_NA ( TEnv &  cenv)
112{
113 cenv.SetValue("scan2db.labName" , "NAPOLI");
114 cenv.SetValue("scan2db.labN" , "NA");
115 cenv.SetValue("scan2db.BS_ID" , "'OPERA NA SET 01'");
116 cenv.SetValue("scan2db.IdMachine" , "6000000000010002");
117 cenv.SetValue("scan2db.IdRequester" , "6000000000100379");
118 cenv.SetValue("scan2db.HeaderProgramsettings" , "6000000000700006");
119 cenv.SetValue("scan2db.CalibrationProgramsettings" , "6000000000700004");
120 cenv.SetValue("scan2db.PredictionProgramsettings" , "6000000000700005");
121 cenv.SetValue("scan2db.VolumeProgramsettings" , "6000000000100374");
122}