00001
00002
00003
00004
00005
00006
00007 #include <cmath>
00008 #include <map>
00009 #include "CalDetSI/AlgCalDetSI.h"
00010 #include "CalDetSI/CandCalDetSIHandle.h"
00011 #include "CalDetSI/Helpers.h"
00012 #include "Candidate/CandContext.h"
00013 #include "CandData/CandRecord.h"
00014 #include "CandData/CandHeader.h"
00015 #include "Conventions/Munits.h"
00016 #include "MessageService/MsgService.h"
00017 #include "MinosObjectMap/MomNavigator.h"
00018 #include "RawData/RawChannelId.h"
00019 #include "RawData/RawDigit.h"
00020 #include "RawData/RawHeader.h"
00021 #include "RawData/RawRecord.h"
00022 #include "RawData/RawSnarlHeaderBlock.h"
00023 #include "RawData/RawDaqSnarlHeader.h"
00024 #include "RawData/RawDeadChipBlock.h"
00025 #include "RawData/RawDigitDataBlock.h"
00026 #include "RawData/RawOvershootBlock.h"
00027 #include "RawData/RawVarcErrorInTfBlock.h"
00028 #include "RawData/RawTOFBlock.h"
00029 #include "RawData/RawTOFDigit.h"
00030 #include "RawData/RawVaDigit.h"
00031 #include "Validity/VldContext.h"
00032 #include "OnlineUtil/mdBlockDefinitions.h"
00033 #include "MessageService/MsgService.h"
00034 #include "Plex/PlexHandle.h"
00035
00036 ClassImp(AlgCalDetSI)
00037 CVSID("$Id: AlgCalDetSI.cxx,v 1.9 2005/04/12 21:09:05 kordosky Exp $");
00038
00039
00040
00041 Int_t AlgCalDetSI::fLastSnarlTick = 0;
00042 Int_t AlgCalDetSI::fLastSnarlSec = 0;
00043 Int_t AlgCalDetSI::fTimeFrame = 0;
00044 set<Int_t> AlgCalDetSI::fVarcErrSet;
00045
00046
00047
00048 RawChannelId AlgCalDetSI::kCerenkovChannel1;
00049 RawChannelId AlgCalDetSI::kCerenkovChannel2;
00050 RawChannelId AlgCalDetSI::kCerenkovChannel3;
00051 RawChannelId AlgCalDetSI::kTriggerPMTChannel;
00052 RawChannelId AlgCalDetSI::kTofADCChannel0;
00053 RawChannelId AlgCalDetSI::kTofADCChannel1;
00054 RawChannelId AlgCalDetSI::kTofADCChannel2;
00055 RawChannelId AlgCalDetSI::kTofTimeStampChannel;
00056 std::vector<RawChannelId> AlgCalDetSI::kTriggerORs;
00057 UInt_t AlgCalDetSI::kGoodTriggerORBits=0;
00058 const Int_t AlgCalDetSI::kNTIMEBLOCKS=40;
00059
00060 AlgCalDetSI::AlgCalDetSI():
00061 fRunNumber(0),
00062 fRawDDB(0),
00063 fRawDCB(0),
00064 fRawOSB(0),
00065 fRawTOFB(0),
00066 fRawSDB(0),
00067 fRawDSH(0),
00068 fRawVErrB(0)
00069
00070
00071 {}
00072
00073
00074
00075 AlgCalDetSI::~AlgCalDetSI() {}
00076
00077
00078
00079 void AlgCalDetSI::RunAlg(AlgConfig & , CandHandle &ch, CandContext &cx)
00080 {
00081
00082
00083
00084 CandRecord *cr = dynamic_cast<CandRecord *>
00085 (cx.GetMom()->GetFragment("CandRecord"));
00086
00087 const CandHeader *chead = cr->GetCandHeader();
00088 if(chead->GetRun()!=fRunNumber){
00089 const VldContext *vc = cr->GetVldContext();
00090 MSG("AlgCalDetSI",Msg::kDebug)<<" Validity context "<<*vc<<endl;
00091 VldTimeStamp sanity(1990,0,0,0,0,0);
00092 if(vc->GetTimeStamp()<sanity){
00093 MSG("AlgCalDetSI",Msg::kWarning)<<" Skipping silly record with "
00094 <<"silly timestamp <1990 "<<endl
00095 <<" vc is "<<*vc<<endl;
00096 return;
00097 }
00098 PlexHandle ph(*vc,kTRUE);
00099 kCerenkovChannel1=ph.GetSpecialChannelContains("DSCER");
00100 kCerenkovChannel2=ph.GetSpecialChannelContains("MIDCER");
00101 kCerenkovChannel3=ph.GetSpecialChannelContains("USCER");
00102 kTriggerPMTChannel=ph.GetSpecialChannelContains("FlashTrigPMT");
00103 kTofADCChannel0=ph.GetSpecialChannelContains("TADC0");
00104 kTofADCChannel1=ph.GetSpecialChannelContains("TTAG");
00105 if(kTofADCChannel1==0){
00106 kTofADCChannel1=ph.GetSpecialChannelContains("TADC1");
00107 }
00108 kTofADCChannel2=ph.GetSpecialChannelContains("TimingFid");
00109 if(kTofADCChannel2==0){
00110 kTofADCChannel2=ph.GetSpecialChannelContains("TADC2");
00111 }
00112 kTofTimeStampChannel=ph.GetSpecialChannelContains("TTIME");
00113
00114
00115
00116
00117
00118
00119
00120 const std::map<RawChannelId, std::string>& spec_chan_map
00121 = ph.GetSpecialDescriptMap();
00122 std::map<RawChannelId, std::string>::const_iterator it =
00123 spec_chan_map.begin();
00124 for( ; it!=spec_chan_map.end(); it++){
00125 const std::string& chan_description = it->second;
00126 if(chan_description.find("TriggerOR")!=std::string::npos){
00127 kTriggerORs.push_back(it->first);
00128 }
00129 }
00130
00131 fRunNumber = chead->GetRun();
00132 MSG("AlgCalDetSI",Msg::kDebug)<<"The special channels:"<<endl;
00133 MSG("AlgCalDetSI",Msg::kDebug)<<"tof 0 "<<kTofADCChannel0<<endl;
00134 MSG("AlgCalDetSI",Msg::kDebug)<<"tof 1 "<<kTofADCChannel1<<endl;
00135 MSG("AlgCalDetSI",Msg::kDebug)<<"tof 2 "<<kTofADCChannel2<<endl;
00136 MSG("AlgCalDetSI",Msg::kDebug)<<"cer 1 "<<kCerenkovChannel1<<endl;
00137 MSG("AlgCalDetSI",Msg::kDebug)<<"cer 2 "<<kCerenkovChannel2<<endl;
00138 MSG("AlgCalDetSI",Msg::kDebug)<<"cer 3 "<<kCerenkovChannel3<<endl;
00139 MSG("AlgCalDetSI",Msg::kDebug)<<"trig pmt "<<kTriggerPMTChannel<<endl;
00140 MSG("AlgCalDetSI",Msg::kDebug)<<"TriggerOR channels: "<<endl;
00141 kGoodTriggerORBits=0;
00142 std::vector<RawChannelId>::iterator torit = kTriggerORs.begin();
00143 for(; torit!=kTriggerORs.end(); torit++){
00144 MSG("AlgCalDetSI",Msg::kDebug)<<(*torit)<<endl;
00145 kGoodTriggerORBits|=CandCalDetSIHandle::ComputeTORBits(torit->GetCrate(), torit->GetVarcId());
00146 }
00147 MSG("AlgCalDetSI",Msg::kDebug)<<"GoodTORBits: "<<kGoodTriggerORBits<<std::endl;
00148
00149 }
00150
00151
00152
00153
00154
00155 if(!ch.InheritsFrom("CandCalDetSIHandle")){
00156 MSG("AlgCalDetSI",Msg::kError)<<"Bad parameter in RunAlg"<<endl;
00157 return;
00158 }
00159
00160 CandCalDetSIHandle *ccdhp = dynamic_cast<CandCalDetSIHandle *>(&ch);
00161 if(ccdhp==0){
00162 MSG("AlgCalDetSI", Msg::kError)<<"Could not make a CandCalDetSIHandle"<<endl;
00163 return;
00164 }
00165 CandCalDetSIHandle &ccdh = *ccdhp;
00166
00167
00168 MSG("AlgCalDetSI",Msg::kDebug)<<"Datapointers before setting: "<<endl
00169 <<"fRawDDB "<<fRawDDB<<endl
00170 <<"fRawDCB "<<fRawDCB<<endl
00171 <<"fRawOSB "<<fRawOSB<<endl
00172 <<"fRawTOFB "<<fRawTOFB<<endl
00173 <<"fRawSDB "<<fRawSDB<<endl
00174 <<"fRawVErrB "<<fRawVErrB<<endl
00175 <<endl;
00176
00177 SetDataPointers(cx);
00178
00179 MSG("AlgCalDetSI",Msg::kDebug)<<"Datapointers after setting: "<<endl
00180 <<"fRawDDB "<<fRawDDB<<endl
00181 <<"fRawDCB "<<fRawDCB<<endl
00182 <<"fRawOSB "<<fRawOSB<<endl
00183 <<"fRawTOFB "<<fRawTOFB<<endl
00184 <<"fRawSDB "<<fRawSDB<<endl
00185 <<"fRawVErrB "<<fRawVErrB<<endl
00186 <<endl;
00187
00188 Int_t timestamp;
00189 Int_t earliestts = 640000000;
00190 Int_t latestts = 0;
00191 Int_t timeframe;
00192
00193 ccdh.SetCerenkovChannel1(kCerenkovChannel1);
00194 ccdh.SetCerenkovChannel2(kCerenkovChannel2);
00195 ccdh.SetCerenkovChannel3(kCerenkovChannel3);
00196
00197 if(fRawDDB!=0){
00198 MSG("AlgCalDetSI",Msg::kDebug)<<"Found RawDataBlock"<<endl;
00199
00200 int size = fRawDDB->GetSize();
00201 const Int_t *ptr = fRawDDB->GetData();
00202 for (int i=0;i<size;i++) {
00203 MSG("AlgCalDetSI",Msg::kDebug)<<i<<" "<<hex<<ptr[i]<<dec<<endl;
00204 }
00205 MSG("AlgCalDetSI",Msg::kDebug)<<endl;
00206 int NDigits = fRawDDB->GetNumberOfDigits();
00207 for(int i=0;i<NDigits;i++){
00208 const RawDigit *digit = fRawDDB->At(i);
00209 MSG("AlgCalDetSI",Msg::kDebug)<<"******RawDigit info ****************"<<endl;
00210
00211 MSG("AlgCalDetSI",Msg::kDebug)<<endl<<"*********************"<<endl;
00212 Int_t ts = digit->GetTDC();
00213 const RawChannelId cid = digit->GetChannel();
00214 if(i==0){
00215 timestamp = ts;
00216 }
00217
00218
00219 Bool_t dtorhit = kTRUE;
00220 if(IsCosmic(cid)) dtorhit = kFALSE;
00221 if(cid.GetElecType()==ElecType::kVA){
00222 if(kCerenkovChannel1.GetElecType()==ElecType::kVA){
00223 if(cid.IsSameVAChip(kCerenkovChannel1)) dtorhit = kFALSE;
00224 }
00225 if(kCerenkovChannel2.GetElecType()==ElecType::kVA){
00226 if(cid.IsSameVAChip(kCerenkovChannel2)) dtorhit = kFALSE;
00227 }
00228 if(kCerenkovChannel3.GetElecType()==ElecType::kVA){
00229 if(cid.IsSameVAChip(kCerenkovChannel3)) dtorhit = kFALSE;
00230 }
00231 if(kTriggerPMTChannel.GetElecType()==ElecType::kVA){
00232 if(cid.IsSameVAChip(kTriggerPMTChannel)) dtorhit = kFALSE;
00233 }
00234 if(kTofTimeStampChannel.GetElecType()==ElecType::kVA){
00235 if(cid.IsSameVAChip(kTofTimeStampChannel)) dtorhit = kFALSE;
00236 }
00237 if(kTofADCChannel0.GetElecType()==ElecType::kVA){
00238 if(cid.IsSameVAChip(kTofADCChannel0)) dtorhit = kFALSE;
00239 }
00240 if(kTofADCChannel1.GetElecType()==ElecType::kVA){
00241 if(cid.IsSameVAChip(kTofADCChannel1)) dtorhit = kFALSE;
00242 }
00243 if(kTofADCChannel2.GetElecType()==ElecType::kVA){
00244 if(cid.IsSameVAChip(kTofADCChannel2)) dtorhit = kFALSE;
00245 }
00246 }
00247 else if(cid.GetElecType()==ElecType::kQIE){
00248 if(kCerenkovChannel1.GetElecType()==ElecType::kQIE){
00249 if(cid.IsSameChannel(kCerenkovChannel1)) dtorhit = kFALSE;
00250 }
00251 if(kCerenkovChannel2.GetElecType()==ElecType::kQIE){
00252 if(cid.IsSameChannel(kCerenkovChannel2)) dtorhit = kFALSE;
00253 }
00254 if(kCerenkovChannel3.GetElecType()==ElecType::kQIE){
00255 if(cid.IsSameChannel(kCerenkovChannel3)) dtorhit = kFALSE;
00256 }
00257 if(kTriggerPMTChannel.GetElecType()==ElecType::kQIE){
00258 if(cid.IsSameChannel(kTriggerPMTChannel)) dtorhit = kFALSE;
00259 }
00260 if(kTofTimeStampChannel.GetElecType()==ElecType::kQIE){
00261 if(cid.IsSameChannel(kTofTimeStampChannel)) dtorhit = kFALSE;
00262 }
00263 if(kTofADCChannel0.GetElecType()==ElecType::kQIE){
00264 if(cid.IsSameChannel(kTofADCChannel0)) dtorhit = kFALSE;
00265 }
00266 if(kTofADCChannel1.GetElecType()==ElecType::kQIE){
00267 if(cid.IsSameChannel(kTofADCChannel1)) dtorhit = kFALSE;
00268 }
00269 if(kTofADCChannel2.GetElecType()==ElecType::kQIE){
00270 if(cid.IsSameChannel(kTofADCChannel2)) dtorhit = kFALSE;
00271 }
00272 }
00273 if(dtorhit){
00274 if(earliestts>ts){
00275
00276 earliestts =ts;
00277 ccdh.SetSnarlMinTimeStamp(ts);
00278 }
00279 if(latestts<ts){
00280 latestts = ts;
00281 ccdh.SetSnarlMaxTimeStamp(ts);
00282 }
00283 }
00284
00285 if(digit->GetErrorCode()&RawVaDigit::kWarningState){
00286 ccdh.SetFafErr(kTRUE);
00287 }
00288 if(cid.IsSameChannel(kCerenkovChannel1)){
00289 ccdh.SetKovADC1(digit->GetADC());
00290 ccdh.SetKovTimeStamp1(digit->GetTDC());
00291 MSG("AlgCalDetSI",Msg::kDebug)<<"Found a Kov hit : ADC1="<<ccdh.GetKovADC1()
00292 <<" at time "<<ccdh.GetKovTimeStamp1()<<endl;
00293 }
00294 if(cid.IsSameChannel(kCerenkovChannel2)){
00295 ccdh.SetKovADC2(digit->GetADC());
00296 ccdh.SetKovTimeStamp2(digit->GetTDC());
00297 MSG("AlgCalDetSI",Msg::kDebug)<<"Found a Kov hit : ADC2="<<ccdh.GetKovADC2()
00298 <<" at time "<<ccdh.GetKovTimeStamp2()<<endl;
00299 }
00300 if(cid.IsSameChannel(kCerenkovChannel3)){
00301 ccdh.SetKovADC3(digit->GetADC());
00302 ccdh.SetKovTimeStamp3(digit->GetTDC());
00303 MSG("AlgCalDetSI",Msg::kDebug)<<"Found a Kov hit : ADC3="<<ccdh.GetKovADC3()
00304 <<" at time "<<ccdh.GetKovTimeStamp3()<<endl;
00305 }
00306
00307 if(cid.IsSameChannel(kTofADCChannel0)){
00308 ccdh.SetTofADC0(digit->GetADC());
00309 ccdh.SetTofADCTimeStamp0(digit->GetTDC());
00310 MSG("AlgCalDetSI",Msg::kDebug)<<"Found a Tof ADC hit : ADC0="<<ccdh.GetTofADC0()
00311 <<endl;
00312 }
00313 if(cid.IsSameChannel(kTofADCChannel1)){
00314 ccdh.SetTofADC1(digit->GetADC());
00315 ccdh.SetTofADCTimeStamp1(digit->GetTDC());
00316 MSG("AlgCalDetSI",Msg::kDebug)<<"Found a Tof ADC hit : ADC1="
00317 <<ccdh.GetTofADC1()
00318 <<endl;
00319 }
00320 if(cid.IsSameChannel(kTofADCChannel2)){
00321 ccdh.SetTofADC2(digit->GetADC());
00322 ccdh.SetTofADCTimeStamp2(digit->GetTDC());
00323 MSG("AlgCalDetSI",Msg::kDebug)<<"Found a Tof ADC hit : ADC1="
00324 <<ccdh.GetTofADC2()
00325 <<endl;
00326 }
00327 if(cid.IsSameChannel(kTofTimeStampChannel)){
00328 ccdh.SetTofTimeStamp(digit->GetTDC());
00329 }
00330
00331
00332
00333 if(cid.IsSameChannel(kTriggerPMTChannel)){
00334 ccdh.SetTriggerPMT(kTRUE);
00335 }
00336 if(IsCosmic(cid)){
00337 ccdh.SetCosmicCnt(kTRUE);
00338 }
00339
00340
00341
00342 std::vector<RawChannelId>::iterator torit=kTriggerORs.begin();
00343 for(; torit!=kTriggerORs.end(); torit++){
00344 if(cid.IsSameChannel(*torit)){
00345 UShort_t crate = torit->GetCrate();
00346 UShort_t varc = torit->GetVarcId();
00347 ccdh.SetTriggerORBits(crate,varc);
00348 }
00349 }
00350 }
00351
00352
00353 MSG("AlgCalDetSI",Msg::kDebug)<<"TriggerORBits = "
00354 <<ccdh.GetTriggerORBits()
00355 <<" (all set = "<<kGoodTriggerORBits
00356 <<" )"<<endl;
00357
00358 if(ccdh.GetTriggerORBits() == kGoodTriggerORBits){
00359 ccdh.SetTriggerOROK(kTRUE);
00360 }
00361 else{
00362 ccdh.SetTriggerOROK(kFALSE);
00363 }
00364
00365
00366 }
00367 else{
00368 ccdh.SetFafErr(kTRUE);
00369 ccdh.SetKovADC1(-999);
00370 ccdh.SetKovADC2(-999);
00371 ccdh.SetKovADC3(-999);
00372 ccdh.SetTriggerPMT(kTRUE);
00373 ccdh.SetCosmicCnt(kTRUE);
00374 ccdh.SetIsSnarlRecord(kFALSE);
00375 }
00376
00377 MSG("AlgCalDetSI",Msg::kDebug)<<endl<<"Faf err "<<(int)ccdh.GetFafErr()<<endl
00378 <<"KovADC "<<ccdh.GetKovADC1()<<endl
00379 <<"Kov Time Stamp "<<ccdh.GetKovTimeStamp1()<<endl
00380 <<"KovADC "<<ccdh.GetKovADC2()<<endl
00381 <<"Kov Time Stamp "<<ccdh.GetKovTimeStamp2()<<endl
00382 <<"KovADC "<<ccdh.GetKovADC3()<<endl
00383 <<"Kov Time Stamp "<<ccdh.GetKovTimeStamp3()<<endl
00384 <<"Trigger PMT "<<(int)ccdh.GetTriggerPMT()<<endl
00385 <<"Cosmic Cnt "<<(int)ccdh.GetCosmicCnt()<<endl;
00386
00387
00388 if(fRawDCB!=0){
00389 MSG("AlgCalDetSI",Msg::kDebug)<<"Found DeadChipBlock"<<endl;
00390
00391 DetectorType::Detector_t det = fRawDCB->GetBlockId().GetDetector();
00392
00393 ElecType::Elec_t elec = ElecType::kVA;
00394 Int_t crate = -1;
00395 const Int_t* realdata = fRawDCB->GetData();
00396
00397 const Int_t* ptr = realdata+3;
00398
00399
00400
00401 while (ptr < realdata+(fRawDCB->GetSize())) {
00402
00403 crate++;
00404 int ndead = *ptr; ptr++;
00405 for (int i=0; i<ndead; i++,ptr++) {
00406
00407
00408
00409
00410
00411
00412 ccdh.AddDeadChips(RawChannelId(det,elec,crate,*ptr));
00413 }
00414 }
00415
00416 }
00417
00418 MSG("AlgCalDetSI",Msg::kDebug)<<"DCvector: "<<ccdh.GetDeadChips().size()<<endl;
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432 if(fRawOSB!=0){
00433 MSG("AlgCalDetSI",Msg::kDebug)<<"Found UnderShootBlock"<<endl;
00434
00435 DetectorType::Detector_t det = fRawOSB->GetBlockId().GetDetector();
00436
00437 ElecType::Elec_t elec = ElecType::kVA;
00438 Int_t crate = -1;
00439 const Int_t* ptr = fRawOSB->GetData()+3;
00440
00441
00442 while (ptr < fRawOSB->GetData()+(fRawOSB->GetSize())) {
00443
00444 crate++;
00445 int ndead = *ptr; ptr++;
00446 for (int i=0; i<ndead; i++,ptr++) {
00447
00448
00449
00450
00451
00452
00453
00454 ccdh.AddUnderShootChips(RawChannelId(det,elec,crate,(*ptr)&0x1fff),
00455 (*ptr)>>13);
00456
00457 }
00458 }
00459
00460 }
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526 if(fRawTOFB!=0){
00527 MSG("AlgCalDetSI",Msg::kDebug)<<"Found TOFBlock"<<endl;
00528
00529 MSG("AlgCalDetSI", Msg::kDebug)<<"__________________________"<<endl
00530 <<*fRawTOFB<<endl
00531 <<"__________________________"<<endl;
00532 const RawTOFDigit *tofdigit = fRawTOFB->At(0);
00533 MSG("AlgCalDetSI", Msg::kDebug)<<"Got RawTOF Digit "<<tofdigit<<endl;
00534 if(tofdigit!=0){
00535 if(!tofdigit->IsStructureOk()){
00536 MSG("AlgCalDetSI", Msg::kError)<<"Bad TOF structure"<<endl;
00537 }
00538 for(int i=0;i<3;i++){
00539 Short_t chan = tofdigit->GetTdcChannel(i);
00540 MSG("AlgCalDetSI",Msg::kDebug)<<"Tof channel "<<chan<<endl;
00541 switch (chan){
00542 case 0:
00543 ccdh.SetTofTDC0(tofdigit->GetTdcValue(i));
00544 break;
00545 case 1:
00546 ccdh.SetTofTDC1(tofdigit->GetTdcValue(i));
00547 break;
00548 case 2:
00549 ccdh.SetTofTDC2(tofdigit->GetTdcValue(i));
00550 break;
00551 default:
00552 break;
00553 }
00554 }
00555 }
00556 }
00557
00558 MSG("AlgCalDetSI",Msg::kDebug)<<"TDC0 "<<ccdh.GetTofTDC0()
00559 <<" TDC1 "<<ccdh.GetTofTDC1()
00560 <<" TDC2 "<<ccdh.GetTofTDC2()<<endl;
00561
00562
00563 if(fRawSDB!=0){
00564 MSG("AlgCalDetSI",Msg::kDebug)<<"Found SnarlHeaderBlock"<<endl;
00565 ccdh.SetTrigSource(fRawSDB->GetTriggerSource());
00566 ccdh.SetSnarl(fRawSDB->GetSnarl());
00567 timeframe = fRawSDB->GetTimeFrameNo();
00568 ccdh.SetSnarlTimeFrame(timeframe);
00569 }
00570 else if(fRawDSH!=0){
00571 MSG("AlgCalDetSI",Msg::kDebug)<<"Found DaqSnarlHeader"<<endl;
00572 ccdh.SetTrigSource(fRawDSH->GetTrigSrc());
00573 ccdh.SetSnarl(fRawDSH->GetSnarl());
00574 timeframe = fRawDSH->GetTimeFrameNum();
00575 ccdh.SetSnarlTimeFrame(timeframe);
00576 }
00577
00578 MSG("AlgCalDetSI",Msg::kDebug)<<"Trigger Source "<<ccdh.GetTrigSource()
00579 <<" Snarl "<<ccdh.GetSnarl()<<endl;
00580
00581
00582 MSG("AlgCalDetSI", Msg::kDebug)<<"Timing: "<<endl
00583 <<"last snarl sec "<<fLastSnarlSec<<" last snarl ticks "
00584 <<fLastSnarlTick<<endl
00585 <<"this snarl sec "<<timeframe<<" this snarl tick "
00586 <<earliestts<<" end tick "<<latestts<<endl;
00587
00588
00589
00590 ccdh.SetTickSinceLast((timeframe-fLastSnarlSec)*640000000+(earliestts-fLastSnarlTick));
00591
00592
00593
00594 if(ccdh.GetIsSnarlRecord()){
00595
00596 fLastSnarlSec = timeframe;
00597 fLastSnarlTick = latestts;
00598 }
00599
00600 MSG("AlgCalDetSI",Msg::kDebug)<<"Ticks Since Last Snarl "<<ccdh.GetTickSinceLast()<<endl;
00601
00602
00603
00604
00605 MSG("AlgCalDetSI",Msg::kDebug)<<"Checking fVarcErrSet"<<endl;
00606 ccdh.SetSparseErr(kFALSE);
00607
00608 Int_t tb = timeframe/kNTIMEBLOCKS;
00609
00610 if(fVarcErrSet.find(tb)!=fVarcErrSet.end()){
00611 ccdh.SetSparseErr(kTRUE);
00612 }
00613 MSG("AlgCalDetSI",Msg::kDebug)<<"Sparse Errors "<<(int)ccdh.GetSparseErr()<<endl;
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631 return;
00632 }
00633
00634
00635
00636 void AlgCalDetSI::SetDataPointers(CandContext &cx)
00637 {
00638
00639
00640
00641
00642 fRawDDB = 0;
00643 fRawDCB = 0;
00644 fRawOSB = 0;
00645 fRawTOFB = 0;
00646 fRawSDB = 0;
00647 fRawVErrB = 0;
00648 fRawDSH = 0;
00649 const RawRecord *rr = dynamic_cast<const RawRecord *>(cx.GetDataIn());
00650 if(rr==0){
00651 return;
00652 }
00653
00654 fRawDSH = dynamic_cast<const RawDaqSnarlHeader*>(rr->GetRawHeader());
00655
00656 MSG("AlgCalDetSI",Msg::kDebug)<<"Found a RawRecord in SetDataPointers"<<endl;
00657
00658
00659 TIter rbi = const_cast<RawRecord*>(rr)->GetRawBlockIter();
00660
00661
00662 while(TObject* obj = rbi.Next()){
00663 MSG("AlgCalDetSI",Msg::kDebug)<<"Iterating over RawBlocks"<<endl;
00664
00665 RawDataBlock* rdb=static_cast<RawDataBlock *>(obj);
00666 if(rdb==0){
00667 continue;
00668 }
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681 Int_t maj = rdb->GetBlockId().GetMajor();
00682
00683 switch (maj){
00684 case kMdBlockSnarlHeader:
00685 fRawSDB = static_cast<RawSnarlHeaderBlock *> (rdb);
00686
00687
00688
00689
00690
00691 break;
00692 case kMdBlockVarcErrorInTf:
00693
00694
00695 {
00696 fRawVErrB = static_cast<RawVarcErrorInTfBlock *> (rdb);
00697
00698
00699
00700
00701
00702 FillVarcErrs();
00703 break;
00704 }
00705 case kMdBlockCrateReadout:
00706 fRawDDB = static_cast<RawDigitDataBlock *> (rdb);
00707
00708
00709
00710
00711
00712 break;
00713 case kMdBlockVaDeadChips:
00714 fRawDCB = static_cast<RawDeadChipBlock *> (rdb);
00715
00716
00717
00718
00719
00720 break;
00721 case kMdBlockVaOvershoot:
00722 fRawOSB = static_cast<RawOvershootBlock *> (rdb);
00723 MSG("AlgCalDetSI",Msg::kDebug)<<"fRawOSB="<<fRawOSB<<endl;
00724
00725
00726
00727
00728 break;
00729 case kMdBlockTofReadout:
00730 fRawTOFB = static_cast<RawTOFBlock *> (rdb);
00731
00732
00733
00734
00735
00736 break;
00737 default:
00738 MSG("AlgCalDetSI",Msg::kDebug)<<"ID did not match any options: "<<maj<<endl;
00739 break;
00740 }
00741 }
00742 return;
00743 }
00744
00745
00746
00747 void AlgCalDetSI::FillVarcErrs()
00748 {
00749
00750 MSG("AlgCalDetSI", Msg::kDebug)<<"In FillVarcErrs"<<endl;
00751 Int_t thisTF = fRawVErrB->GetTimeFrame();
00752 if(thisTF!=fTimeFrame){
00753 MSG("AlgCalDetSI", Msg::kDebug)<<"New time frame, clearing VErrs. Old TimeFrame="
00754 <<fTimeFrame<<" New TF="<<thisTF<<endl;
00755 fVarcErrSet.clear();
00756 fTimeFrame = thisTF;
00757 }
00758
00759 const Int_t NSErrs = fRawVErrB->GetNumberOfSparsErrors();
00760 if(NSErrs>0){
00761 fVarcErrSet.insert(thisTF);
00762 }
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789 return;
00790 }
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801