| 3092 |
pkt1 = ph1->GetCounter(); |
pkt1 = ph1->GetCounter(); |
| 3093 |
fromtime = this->GetAbsTime(ph1->GetOrbitalTime()); |
fromtime = this->GetAbsTime(ph1->GetOrbitalTime()); |
| 3094 |
// |
// |
| 3095 |
valid = 1; |
// valid = 1; |
| 3096 |
// |
// // |
| 3097 |
if ( caltrk1->unpackError != 0 && caltrk1->good0 == 0 ) valid = 0;// CONDITIONS ON THE GOODNESS OF THE CALIBRATION PKT1 |
// if ( caltrk1->unpackError != 0 && caltrk1->good0 == 0 ) valid = 0;// CONDITIONS ON THE GOODNESS OF THE CALIBRATION PKT1 |
| 3098 |
// |
// |
| 3099 |
// |
// |
| 3100 |
if ( this->PKT(pkt1) >= this->PKT(pktfirst) && this->OBT(obt1) >= this->OBT(obtfirst) ){ |
if ( this->PKT(pkt1) >= this->PKT(pktfirst) && this->OBT(obt1) >= this->OBT(obtfirst) ){ |
| 3101 |
// |
// |
| 3102 |
if ( IsDebug() ) printf(" Trk calibration1 at time %i obt %i pkt %i \n",fromtime,obt1,pkt1); |
if ( IsDebug() ) printf(" Trk calibration1 at time %i obt %i pkt %i \n",fromtime,obt1,pkt1); |
| 3103 |
|
// |
| 3104 |
|
valid = ValidateTrkCalib( caltrk1, eh1 ); |
| 3105 |
|
if ( IsDebug() ) cout << " pkt1 validation --> "<<valid<<endl; |
| 3106 |
// |
// |
| 3107 |
// Do we have the second calibration packet? |
// Do we have the second calibration packet? |
| 3108 |
// |
// |
| 3119 |
obt2 = ph2->GetOrbitalTime(); |
obt2 = ph2->GetOrbitalTime(); |
| 3120 |
pkt2 = ph2->GetCounter(); |
pkt2 = ph2->GetCounter(); |
| 3121 |
// |
// |
| 3122 |
if ( caltrk2->unpackError != 0 || caltrk2->good0 == 0 ) valid = 0; // CONDITIONS ON THE GOODNESS OF THE CALIBRATION PKT2 |
// if ( caltrk2->unpackError != 0 || caltrk2->good0 == 0 ) valid = 0; // CONDITIONS ON THE GOODNESS OF THE CALIBRATION PKT2 |
| 3123 |
// |
// |
| 3124 |
} else { |
} else { |
| 3125 |
// |
// |
| 3150 |
// |
// |
| 3151 |
if ( IsDebug() ) printf(" The trk calibration2 at obt %i pkt %i t2 is %i is good \n",obt2,pkt2,t2); |
if ( IsDebug() ) printf(" The trk calibration2 at obt %i pkt %i t2 is %i is good \n",obt2,pkt2,t2); |
| 3152 |
// |
// |
| 3153 |
|
UInt_t valid2 = ValidateTrkCalib( caltrk2, eh2 ); |
| 3154 |
|
if ( IsDebug() ) cout << " pkt2 validation --> "<<valid2<<endl; |
| 3155 |
|
valid = valid & valid2; |
| 3156 |
|
// |
| 3157 |
// Handle good calib |
// Handle good calib |
| 3158 |
// |
// |
| 3159 |
this->HandleTRK_CALIB(true,true); |
this->HandleTRK_CALIB(true,true); |
| 4422 |
// |
// |
| 4423 |
}; |
}; |
| 4424 |
}; |
}; |
| 4425 |
|
/** |
| 4426 |
|
* |
| 4427 |
|
* Rearrange calibration tables |
| 4428 |
|
* |
| 4429 |
|
**/ |
| 4430 |
|
UInt_t PamelaDBOperations::ValidateTrkCalib( CalibTrk1Event* caltrk, EventHeader *eh ){ |
| 4431 |
|
|
| 4432 |
|
Int_t vorder[]={5,5,3,3,4,4,2,2,1,1,0,0}; |
| 4433 |
|
UInt_t timeaftercalib=120000; //2000; |
| 4434 |
|
// ---------- |
| 4435 |
|
// Check CRCs |
| 4436 |
|
// ---------- |
| 4437 |
|
for(Int_t ipkt=0; ipkt<6; ipkt++){ |
| 4438 |
|
if( caltrk->crc_hcal[ipkt] )return 0; // :-( |
| 4439 |
|
for(Int_t ilad=0; ilad<3; ilad++)if( caltrk->crc_cal[ipkt][ilad] )return 0; // :-( |
| 4440 |
|
} |
| 4441 |
|
// ----------------------- |
| 4442 |
|
// Check missing packets: |
| 4443 |
|
// ----------------------- |
| 4444 |
|
// Readout order: |
| 4445 |
|
// ------------------ |
| 4446 |
|
// DSP packet board |
| 4447 |
|
// ------------------ |
| 4448 |
|
// 12 0 1 |
| 4449 |
|
// 10 1 1 |
| 4450 |
|
// 8 2 1 |
| 4451 |
|
// 4 3 1 |
| 4452 |
|
// 6 4 1 |
| 4453 |
|
// 2 5 1 |
| 4454 |
|
// ------------------ |
| 4455 |
|
// 11 0 2 |
| 4456 |
|
// 9 1 2 |
| 4457 |
|
// 7 2 2 |
| 4458 |
|
// 3 3 2 |
| 4459 |
|
// 5 4 2 |
| 4460 |
|
// 1 5 2 |
| 4461 |
|
// ------------------ |
| 4462 |
|
// ------------------------------------------------- |
| 4463 |
|
// Check if it is first or second calibration packet |
| 4464 |
|
// ------------------------------------------------- |
| 4465 |
|
UInt_t build=0; |
| 4466 |
|
TString classname = caltrk->GetName(); |
| 4467 |
|
UInt_t base=0; |
| 4468 |
|
UInt_t mask=0; |
| 4469 |
|
if(classname.Contains("CalibTrk1Event")){ |
| 4470 |
|
base=12; |
| 4471 |
|
mask=0x03F000; |
| 4472 |
|
} |
| 4473 |
|
if(classname.Contains("CalibTrk2Event")){ |
| 4474 |
|
base=18; |
| 4475 |
|
mask=0xFC0000; |
| 4476 |
|
} |
| 4477 |
|
// ------------------------------------------------- |
| 4478 |
|
// Count number of packets and set build variable |
| 4479 |
|
// ------------------------------------------------- |
| 4480 |
|
Int_t npkts=0; |
| 4481 |
|
for(Int_t ipkt=0; ipkt<6; ipkt++){ |
| 4482 |
|
if(caltrk->DSPnumber[ipkt]>0 && caltrk->DSPnumber[ipkt]<=12){ |
| 4483 |
|
npkts++; |
| 4484 |
|
build = build | ( 1<<(base+vorder[caltrk->DSPnumber[ipkt]-1]) ); |
| 4485 |
|
} |
| 4486 |
|
} |
| 4487 |
|
// if( npkts==6 )return 1; // :-) |
| 4488 |
|
|
| 4489 |
|
// cout << classname << " "<<eh->GetPscuHeader()->GetOrbitalTime()<<endl; |
| 4490 |
|
|
| 4491 |
|
// ----------------------------------------------- |
| 4492 |
|
// If missing packets: check the acq configuration |
| 4493 |
|
// (some DSPs might be excluded from acquisition) |
| 4494 |
|
// ----------------------------------------------- |
| 4495 |
|
|
| 4496 |
|
// ----------------------------------------------- |
| 4497 |
|
// retrieve the first run header after calib |
| 4498 |
|
// ----------------------------------------------- |
| 4499 |
|
PacketType *pctp; |
| 4500 |
|
EventCounter *cod; |
| 4501 |
|
cod = eh->GetCounter(); |
| 4502 |
|
Int_t irun = cod->Get(pctp->RunHeader); |
| 4503 |
|
TTree *rh=(TTree*)file->Get("RunHeader"); |
| 4504 |
|
if ( !rh || rh->IsZombie() ) throw -17; |
| 4505 |
|
if( rh->GetEntries() == irun ){ |
| 4506 |
|
if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) no runs after calib (1) -- cannot validate :-( "<<endl; |
| 4507 |
|
return 0; // :-( |
| 4508 |
|
} |
| 4509 |
|
|
| 4510 |
|
RunHeaderEvent *run = 0; |
| 4511 |
|
EventHeader *hrun = 0; |
| 4512 |
|
rh->SetBranchAddress("RunHeader", &run); |
| 4513 |
|
rh->SetBranchAddress("Header", &hrun); |
| 4514 |
|
rh->GetEntry(irun); |
| 4515 |
|
// cout << classname << " "<<eh->GetPscuHeader()->GetOrbitalTime() << " Run " << hrun->GetPscuHeader()->GetOrbitalTime() <<endl; |
| 4516 |
|
|
| 4517 |
|
if( OBT(hrun->GetPscuHeader()->GetOrbitalTime()) < OBT(eh->GetPscuHeader()->GetOrbitalTime())){ |
| 4518 |
|
if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) no runs after calib (2) -- cannot validate :-( "<<endl; |
| 4519 |
|
return 0; // :-( |
| 4520 |
|
} |
| 4521 |
|
|
| 4522 |
|
if( !run->RM_ACQ_AFTER_CALIB ){ |
| 4523 |
|
if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) RM_ACQ_AFTER_CALIB=0 -- cannot validate :-( "<<endl; |
| 4524 |
|
return 0; // :-( |
| 4525 |
|
} |
| 4526 |
|
|
| 4527 |
|
UInt_t dtime = OBT(hrun->GetPscuHeader()->GetOrbitalTime()) - OBT(eh->GetPscuHeader()->GetOrbitalTime()); |
| 4528 |
|
if( dtime > timeaftercalib ){ |
| 4529 |
|
if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) run after calib too far ( "<<dtime<<"ms ) -- cannot validate :-( "<<endl; |
| 4530 |
|
return 0; // :-( |
| 4531 |
|
} |
| 4532 |
|
|
| 4533 |
|
|
| 4534 |
|
|
| 4535 |
|
if( (run->ACQ_BUILD_INFO & mask) != build ){ |
| 4536 |
|
if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) ACQ_BUILD_INFO= >>> "<<hex << (run->ACQ_BUILD_INFO&mask) << " != "<< build << dec<<endl; |
| 4537 |
|
return 0; // :-( |
| 4538 |
|
} |
| 4539 |
|
return 1; // :-) |
| 4540 |
|
|
| 4541 |
|
} |