Int_t id_up = s1->Vid(0)*100000 + s1->Vid(1); Int_t id_down = s2->Vid(0)*100000 + s2->Vid(1); !! the above convention used by VT should always work but probably some service is lost (to check) !! the below convention used by L.Scotto but it's rely on eNviewsPerArea which not always defined correctly
Int_t id_up = s1->Vid(0)*100000 + s1->Vid(1)%100000; Int_t id_down = s2->Vid(0)*100000 + s2->Vid(1)%100000;
456{
457
458
459
460
461
462 if(!tree) return(0);
463
465 TBranch *b_s=0, *b_s1=0, *b_s2=0;
466 b_s = tree->GetBranch("s.");
467 b_s1 = tree->GetBranch("s1.");
468 b_s2 = tree->GetBranch("s2.");
469 b_s->SetAddress( &
s );
471 b_s1->SetAddress( &
s2 );
472 b_s2->SetAddress( &
s1 );
473
474 int nentr = (int)(tree->GetEntries());
476
477 if (!usebuffer) {
478 for(int i=0; i<nentr; i++ ) {
479 b_s->GetEntry(i);
480 b_s1->GetEntry(i);
481 b_s2->GetEntry(i);
482
487
488 int id_view_up = (
s1->
Aid(0))*nvpa+
s1->
Aid(1);
489 int id_view_down = (
s2->
Aid(0))*nvpa+
s2->
Aid(1);
490 int id_up = id_view_up *100000 + 10000*2 +
s1->
Vid(1)%100000;
491 int id_down = id_view_down*100000 + 10000*1 +
s2->
Vid(1)%100000;
492
494 INSERT INTO OPERA.TB_MIPBASETRACKS(\
495 ID_EVENTBRICK, ID_ZONE, ID, POSX, POSY, SLOPEX, SLOPEY, GRAINS, AREASUM,\
496 SIGMA, ID_DOWNSIDE, ID_DOWNTRACK, ID_UPSIDE, ID_UPTRACK) \
497 VALUES \
498 (%s, %s, %d, %2f, %2f, %2f, %2f, %2f, %2f, %2f, %d, %d, %d, %d)",
501 i,
s->X(),
s->Y(),
s->TX(),
s->TY(),
s->W(),
s->Volume(),
s->Chi2(),
502 1, id_down, 2, id_up
503 ));
504 }
505
506 Log(2,
"AddBaseTracks",
"Basetracks added (without buffering): %d basetracks added assuming microtracks previously added",nentr);
507
508 } else {
509
510 try{
513
514 char ID_EVENTBRICK[10000][50],ID_ZONE[10000][50];
515 int ID[10000];
516 float POSX[10000],POSY[10000],SLOPEX[10000],SLOPEY[10000];
517 int GRAINS[10000],AREASUM[10000];
518 float SIGMA[10000];
519 int ID_DOWNSIDE[10000],ID_DOWNTRACK[10000],ID_UPSIDE[10000],ID_UPTRACK[10000];
520 ub2 SINT[10000],SFLOAT[10000],SID_EVENTBRICK[10000],SID_ZONE[10000];
521
522 int nstep = nentr/10000+1;
523 for(int istep=0; istep<nstep; istep++ ) {
524
525 char query[2048];
526 sprintf(query,"\
527 INSERT INTO OPERA.TB_MIPBASETRACKS \
528 (ID_EVENTBRICK, ID_ZONE, ID, POSX, POSY, SLOPEX, SLOPEY, GRAINS, AREASUM, SIGMA, ID_DOWNSIDE, ID_DOWNTRACK, ID_UPSIDE, ID_UPTRACK) \
529 VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14)");
530 fStmt->setSQL(query);
531
532 int ibt=0;
533
534 for(int ibasetrack=10000*istep; (ibasetrack<nentr && ibasetrack<10000*(istep+1)); ibasetrack++ ) {
535
536 b_s->GetEntry(ibasetrack);
537 b_s1->GetEntry(ibasetrack);
538 b_s2->GetEntry(ibasetrack);
539
542
543 int id_view_up = (
s1->
Aid(0))*nvpa+
s1->
Aid(1);
544 int id_view_down = (
s2->
Aid(0))*nvpa+
s2->
Aid(1);
545 int id_up = id_view_up *100000 + 10000*2 +
s1->
Vid(1)%100000;
546 int id_down = id_view_down*100000 + 10000*1 +
s2->
Vid(1)%100000;
547
548 sprintf(ID_EVENTBRICK[ibt],
"%s%c",
Ostr(id_eventbrick),0);
549 sprintf(ID_ZONE[ibt],
"%s%c",
Ostr(id_zone),0);
550 ID[ibt]=ibasetrack;
555 GRAINS[ibt]=(int)
s->W();
556 AREASUM[ibt]=(int)
s->Volume();
557 SIGMA[ibt]=
s->Chi2();
558 ID_DOWNSIDE[ibt]=1;
559 ID_DOWNTRACK[ibt]=id_down;
560 ID_UPSIDE[ibt]=2;
561 ID_UPTRACK[ibt]=id_up;
562
563 SID_EVENTBRICK[ibt]=strlen(ID_EVENTBRICK[ibt])+1;
564 SID_ZONE[ibt]=strlen(ID_ZONE[ibt])+1;
565 SINT[ibt]=sizeof(int);
566 SFLOAT[ibt]=sizeof(float);
567 ibt++;
568 }
569 fStmt->setDataBuffer( 1, ID_EVENTBRICK, OCCI_SQLT_STR,
sizeof(ID_EVENTBRICK[0]), (
unsigned short *) &SID_EVENTBRICK);
570 fStmt->setDataBuffer( 2, ID_ZONE, OCCI_SQLT_STR,
sizeof(ID_ZONE[0]), (
unsigned short *) &SID_ZONE);
571 fStmt->setDataBuffer( 3, ID, OCCIINT,
sizeof(
int), (
unsigned short *) &SINT);
572 fStmt->setDataBuffer( 4, POSX, OCCIFLOAT,
sizeof(
float), (
unsigned short *) &SFLOAT);
573 fStmt->setDataBuffer( 5, POSY, OCCIFLOAT,
sizeof(
float), (
unsigned short *) &SFLOAT);
574 fStmt->setDataBuffer( 6, SLOPEX, OCCIFLOAT,
sizeof(
float), (
unsigned short *) &SFLOAT);
575 fStmt->setDataBuffer( 7, SLOPEY, OCCIFLOAT,
sizeof(
float), (
unsigned short *) &SFLOAT);
576 fStmt->setDataBuffer( 8, GRAINS, OCCIINT,
sizeof(
int), (
unsigned short *) &SINT);
577 fStmt->setDataBuffer( 9, AREASUM, OCCIINT,
sizeof(
int), (
unsigned short *) &SINT);
578 fStmt->setDataBuffer(10, SIGMA, OCCIFLOAT,
sizeof(
float), (
unsigned short *) &SFLOAT);
579 fStmt->setDataBuffer(11, ID_DOWNSIDE, OCCIINT,
sizeof(
int), (
unsigned short *) &SINT);
580 fStmt->setDataBuffer(12, ID_DOWNTRACK, OCCIINT,
sizeof(
int), (
unsigned short *) &SINT);
581 fStmt->setDataBuffer(13, ID_UPSIDE, OCCIINT,
sizeof(
int), (
unsigned short *) &SINT);
582 fStmt->setDataBuffer(14, ID_UPTRACK, OCCIINT,
sizeof(
int), (
unsigned short *) &SINT);
583 fStmt->executeArrayUpdate(ibt);
584 }
585
586 } catch (SQLException &oraex) {
587 Error("TOracleServerE2WX", "AddBaseTracksWithBuffer; failed: (error: %s)", (oraex.getMessage()).c_str());
588 }
589
590 Log(2,
"AddBaseTracksWithBuffer",
"Basetracks added (with buffering): %d basetracks added assuming microtracks previously added",nentr);
591
592 }
593
594 return nentr;
595}
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
Int_t Aid(int i) const
Definition: EdbSegP.h:169
Int_t Vid(int i) const
Definition: EdbSegP.h:168
Connection * fConn
Definition: TOracleServer.h:48
oracle::occi::Statement * fStmt
Definition: TOracleServer.h:52
EdbSegP * s1
Definition: tlg2couples.C:29
EdbSegP * s2
Definition: tlg2couples.C:30