/// /// Example program for Trigger Check. /// /// Missing Spill Checking Program, Original is written by Kendoll.M /// Beam Data Access was added by Yano, basing on prototype of Beam Accessing Library. #include "IHandle.hxx" #include #include #include #include #include "IMidasBank.hxx" #include "IMidasFile.hxx" #include "IMidasBankProxyRegistry.hxx" #include "ICOMETRawEvent.hxx" // COMET software includes #include "IMidasBankProxy.hxx" #include "ICOMETRawEvent.hxx" #include "IRawDataHeader.hxx" // oaRawEvent includes //#include "IRunInfoBank.hxx" #include "IMCMBank.hxx" //#include "ITriggerBank.hxx" #include #include /// ROOT stuff #include "TROOT.h" #include "TFile.h" #include "TTree.h" #include "IRawBeamData.hxx" Int_t Extract_RunNumber(char FileName[], UInt_t *RunNumber, UInt_t *SubRunNumber){ char ProcessRN[200]; if (strstr(FileName,".mid.gz")==NULL){ std::cout << "error" <" << std::endl; return(1); } else{ strcpy(FileName,argv[1]); } if (Extract_RunNumber(FileName,&RunNumber,&SubRunNumber)==0){ std::cerr << "Something wrong with Filename. It should be .root" << std::endl; return 0; } //std::cout << RunNumber< 1 ) { if( argc < 2 ) { std::cerr << "Usage : " << argv[0] << " or " << std::endl << " " << argv[0] << " " << std::endl; return( 1 ); } std::cout<PromoteMidasBanks(false); //re->ls(); serNumber = re->GetHeader().GetSeqNo(); //RunNumber = re->GetHeader().GetRun(); //SubRunNumber = re->GetContext().GetSubRun(); if(firstEvent){ serNumber = -9999; // Sequence number for first event is wrong. firstEvent = false; continue; } /* --- M.Kendoll's part-- /// Trigger Bank COMET::IHandle triggerBank; while ( triggerBank = re->GetMidasBank("OTRI",triggerBank) ) { COMET::ITriggerBank& trigger = re->UseMidasBank("OTRI"); TrgId = (trigger.GetTriggerWord()>>48) & 0xffff; nSpill = (trigger.GetTriggerWord()>>32) & 0xffff; if(TrgId==1){ if(nSpill!=lastnspill+1&&!firstspill){ // check for missing spills std::cout<<"Missed a spill!"< mcmBank; while ( mcmBank = re->GetMidasBank("OMCM",mcmBank) ) { COMET::IMCMBank& mcm = re->UseMidasBank("OMCM"); TrgId = (mcm.GetTriggerWord()>>48) & 0xffff; nSpill = (mcm.GetTriggerWord()>>32) & 0xffff; TrgSec = (Int_t) mcmBank->GetUnixTimeTrig(); HdrSec = (Int_t) re->GetHeader().GetTimeStamp(); /* if(TrgId==1){ std::cout << nSpill <<" "<< lastnspill << std::endl; } */ if(firstspill){ lastnspill=nSpill-1; } if(TrgId==1){ if((nSpill==0&&lastnspill==65535)&&!firstspill){ lastnspill=-1; } if((nSpill!=lastnspill+1&&!firstspill)){ // check for missing spills int nMSpill=0; int missing_spill=0; while ((nSpill!=lastnspill+1+nMSpill)){ missing_spill= lastnspill+nMSpill+1; if (missing_spill>65535)missing_spill=missing_spill-65536; std::cerr<<"Missed a spill!"< 1264342865-60 && trg_sec[0] < 1264343146+60) bad_cond = 1 ; else if( 598937 <= spillnum && spillnum <= 598941 && trg_sec[0] > 1264344537-60 && trg_sec[0] < 1264344927+60) bad_cond = 1 ; else if( 1201242 <= spillnum && spillnum <= 1201270 && trg_sec[0] > 1267200809-60 && trg_sec[0] < 1267335297+60) bad_cond = 1 ; else if( 1202461 <= spillnum && spillnum <= 1202533 && trg_sec[0] > 1267200809-60 && trg_sec[0] < 1267335297+60) bad_cond = 1 ; else if( 1234283 <= spillnum && spillnum <= 1234304 && trg_sec[0] > 1267200809-60 && trg_sec[0] < 1267335297+60) bad_cond = 1 ; else if( 1235436 <= spillnum && spillnum <= 1235450 && trg_sec[0] > 1267200809-60 && trg_sec[0] < 1267335297+60) bad_cond = 1 ; bool normal_cond = ( (Int_t)run_type == 1 ) && ( hct[0][0] >= 10 ) && ( hct[1][0] >= 10 ) && ( hct[2][0] >= 10 ); bool beamtrg = ( ct_np[4][0] > 1e11 ); bool mucenter = ( sqrt( mumon[2] * mumon[2] + mumon[4] * mumon[4] ) < 10 ); bool muct = ( 31.7 < ( mumon[0] / ct_np[4][0] * 1e9 ) ) && ( ( mumon[0] / ct_np[4][0] * 1e9 ) < 35.1 ); if(!bad_cond && normal_cond ){ count_normal_spill ++; count_normal_pot += ct_np[4][0]; } if(!bad_cond && normal_cond && beamtrg && mucenter && muct && good_gps_flag){ count_good_spill ++; count_good_pot += ct_np[4][0]; } */ //std::cout << "find a Spill (No.:"<< nSpill << " TriggerTime:"<< TrgSec <<") in Beam Quick Summary" << std::endl; fout << RunNumber <<" "<< SubRunNumber<<" "<< serNumber<< " " << nSpill <<" " <100)break; } // manager->end(); double fraction =(double)(missedspill)/(double)(nBeam+missedspill); std::cout<<"----------------------- Summary -----------------------"<