00001
00002
00003
00004
00005
00006
00007
00008
00010 #include "MinosObjectMap/MomNavigator.h"
00011 #include "JobControl/JobCModuleRegistry.h"
00012 #include "JobControl/JobCResult.h"
00013 #include "MessageService/MsgService.h"
00014 #include "RawData/RawSnarlHeaderBlock.h"
00015 #include "RawData/RawDaqHeader.h"
00016 #include "RawData/RawRecord.h"
00017 #include "Validity/VldContext.h"
00018 #include "RawData/RawRunConfigBlock.h"
00019 #include "RawData/RawSpillServerMonitorBlock.h"
00020 #include "OnlineUtil/mdRunTypeCodes.h"
00021 #include "OnlineUtil/mdSpillData.h"
00022
00023 #include "FilterRunType.h"
00024 #include "RSM.h"
00025 #include "UtilRSM.h"
00026
00027 ClassImp(FilterRunType)
00028 CVSID("$Id: FilterRunType.cxx,v 1.8 2007/11/14 14:08:52 bspeak Exp $");
00029
00030 JOBMODULE(FilterRunType,"FilterRunType","Filter on RunType");
00031
00032 FilterRunType::FilterRunType()
00033 {
00034 RSMSyn << "FilterRunType::FilterRunType" << endl;
00035 fRun = 0;
00036 fSubRun = 0;
00037
00038 fPassRun.SetPassed().SetAOK();
00039 }
00040
00041 FilterRunType::~FilterRunType()
00042 {
00043 RSMSyn << "FilterRunType::~FilterRunType" << endl;
00044 }
00045
00046 JobCResult FilterRunType::Ana(const MomNavigator* mom)
00047 {
00048
00049
00050 RawRecord* rawrec = 0;
00051 const char* InputStream = 0;
00052
00053 TIter momitr = const_cast<MomNavigator*>(mom)->FragmentIter();
00054 TObject* momobj = 0;
00055 while ((momobj=momitr())) {
00056 if ((rawrec=dynamic_cast<RawRecord*>(momobj))) {
00057 const RawSnarlHeaderBlock* hdrblk =
00058 dynamic_cast<const RawSnarlHeaderBlock*>
00059 (rawrec->FindRawBlock("RawSnarlHeaderBlock"));
00060
00061 bool IsFakeSpill = false;
00062 if(hdrblk) {
00063 if(hdrblk->GetRemoteSpillType() == kSpillType_Fake) IsFakeSpill = true;
00064 }
00065 if(!IsFakeSpill && fOnlyFakeSpill) return JobCResult::kFailed;
00066
00067 const RawDaqHeader* dhdr =
00068 dynamic_cast<const RawDaqHeader*>(rawrec->GetRawHeader());
00069
00070 if (fRun!=dhdr->GetRun() || fSubRun!=dhdr->GetSubRun()) {
00071 if (fRun==dhdr->GetRun() && fPassRunTypeName.size()!=0) {
00072
00073 RSMDeb << "Only SubRun Changed" <<endl;
00074 fSubRun = dhdr->GetSubRun();
00075 return fPassRun;
00076 }
00077 RSMDeb << "Run change: " <<
00078 fRun << "-" << fSubRun << " -> " <<
00079 dhdr->GetRun() << "-" << dhdr->GetSubRun() << endl;
00080
00081 fRun = dhdr->GetRun();
00082 fSubRun = dhdr->GetSubRun();
00083 if(dhdr->GetVldContext().GetDetector()==Detector::kFar
00084 && fRun<=RUNNUM_NEW_RUNTYPES) {
00085 RSMDeb << "I can't play with early far runtypes yet" <<endl;
00086 fPassRun.SetPassed();
00087 return fPassRun;
00088 }
00089 fPassRun.SetPassed();
00090 RSMDeb << "fPassRun:" << fPassRun << endl;
00091 }
00092 else {
00093
00094 return fPassRun;
00095 }
00096 Short_t RType = dhdr->GetRunType();
00097 Short_t BaseRType = RType&RUN_TYPE_MASK_TYPECODE;
00098 if (fPassRunType != 0) {
00099 if(fPassRunType!=RType || fPassRunType!=BaseRType) {
00100 fPassRun.SetFailed();
00101 }
00102 RSMDeb << "fPassRun:" << fPassRun << endl;
00103 }
00104 else {
00105 if((RType&RUN_TYPE_MASK_TEST)!=0
00106 && !fPassTest) fPassRun.SetFailed();
00107 if((RType&RUN_TYPE_MASK_MODIFIED)!=0
00108 && !fPassModified) fPassRun.SetFailed();
00109 if(BaseRType==RUN_TYPE_PHYSICS
00110 && !fPassPhysics) fPassRun.SetFailed();
00111 if(BaseRType==RUN_TYPE_CHECKOUT
00112 && !fPassCheckOut) fPassRun.SetFailed();
00113 if(BaseRType==RUN_TYPE_VA_CALIBRATE
00114 && !fPassVACalibrate) fPassRun.SetFailed();
00115 if(BaseRType==RUN_TYPE_VA_PEDESTAL
00116 && !fPassVAPedestal) fPassRun.SetFailed();
00117 if(BaseRType==RUN_TYPE_QIE_CALIBRATE
00118 && !fPassQieCalibrate) fPassRun.SetFailed();
00119 if(BaseRType==RUN_TYPE_QIE_MONITOR
00120 && !fPassQieMonitor) fPassRun.SetFailed();
00121 }
00122
00123 if (rawrec->GetTempTags().Get("stream",InputStream)
00124 && fPassRunTypeName.size()!=0) {
00125 fPassRun.SetFailed();
00126 if (!strcmp("DaqMonitor",InputStream)) {
00127 TIter rawitr = rawrec->GetRawBlockIter();
00128 RawRunConfigBlock* rrcfgb = 0;
00129 TObject *rawobj = 0;
00130 while ((rawobj=rawitr())) {
00131 if ( (rrcfgb = dynamic_cast<RawRunConfigBlock*>(rawobj)) ) {
00132 RSMDeb << "RawRunConfigBlock for: " <<
00133 rrcfgb->GetRun() << "-" << rrcfgb->GetSubRun() <<
00134 endl << "[" << rrcfgb->GetRunConfig() << "]" << endl;
00135 string rtname;
00136 rtname = UtilRSM::ParseConfigBlock(rrcfgb,"runTypeName");
00137 if(fPassRunTypeName == rtname) fPassRun.SetPassed();
00138 RSMDeb << "fPassRun:" << fPassRun << endl;
00139 }
00140 }
00141 }
00142 }
00143 }
00144 }
00145 return fPassRun;
00146 }
00147
00148 void FilterRunType::BeginJob()
00149 {
00150 RSMSyn << "FilterRunType::BeginJob" << endl;
00151 fRun = 0;
00152 fSubRun = 0;
00153 }
00154
00155 void FilterRunType::EndJob()
00156 {
00157 RSMSyn << "FilterRunType::EndJob" << endl;
00158 }
00159
00160 const Registry& FilterRunType::DefaultConfig() const
00161 {
00162 RSMSyn << "FilterRunType::DefaultConfig" << endl;
00163 static Registry r;
00164
00165 string name = this->JobCModule::GetName();
00166 r.SetName((name+".config.default").c_str());
00167
00168 r.UnLockValues();
00169
00170
00171 r.Set("PassPhysics",1);
00172 r.Set("PassCheckOut",1);
00173 r.Set("PassVACalibrate",1);
00174 r.Set("PassVAPedestal",1);
00175 r.Set("PassQieCalibrate",1);
00176 r.Set("PassQieMonitor",1);
00177 r.Set("OnlyFakeSpill",0);
00178
00179
00180 r.Set("PassTest",1);
00181 r.Set("PassModified",1);
00182
00183
00184
00185
00186
00187 r.Set("PassRunType",0);
00188 r.Set("PassRunTypeName","");
00189
00190 r.LockValues();
00191 return r;
00192 }
00193
00194 void FilterRunType::Config(const Registry& r)
00195 {
00196 RSMSyn << "FilterRunType::Config" << endl;
00197 int tmpi = 0;
00198 const char* tmps = 0;
00199
00200 if(r.Get("PassPhysics",tmpi)) fPassPhysics=tmpi;
00201 if(r.Get("PassCheckOut",tmpi)) fPassCheckOut=tmpi;
00202 if(r.Get("PassVACalibrate",tmpi)) fPassVACalibrate=tmpi;
00203 if(r.Get("PassVAPedestal",tmpi)) fPassVAPedestal=tmpi;
00204 if(r.Get("PassQieCalibrate",tmpi)) fPassQieCalibrate=tmpi;
00205 if(r.Get("PassQieMonitor",tmpi)) fPassQieMonitor=tmpi;
00206 if(r.Get("OnlyFakeSpill",tmpi)) fOnlyFakeSpill=tmpi;
00207 if(r.Get("PassTest",tmpi)) fPassTest=tmpi;
00208 if(r.Get("PassModified",tmpi)) fPassModified=tmpi;
00209 if(r.Get("PassRunType",tmpi)) fPassRunType=tmpi;
00210 if(r.Get("PassRunTypeName",tmps)) fPassRunTypeName=tmps;
00211 }