00001 #include "FarDetDeadChipModule.h"
00002
00003 #include "MessageService/MsgService.h"
00004 #include "MinosObjectMap/MomNavigator.h"
00005 #include "JobControl/JobCommand.h"
00006 #include "JobControl/JobCModuleRegistry.h"
00007
00008 #include "FarDetDataQualityHandle.h"
00009 #include "FarDetDeadChipHandle.h"
00010
00011 #include "TDirectory.h"
00012 #include "TString.h"
00013
00014 CVSID("$Id: FarDetDeadChipModule.cxx,v 1.2 2006/04/21 17:40:11 blake Exp $");
00015
00016 JOBMODULE(FarDetDeadChipModule,"FarDetDeadChipModule","FarDetDeadChipModule");
00017
00018 FarDetDeadChipModule::FarDetDeadChipModule() :
00019 fDeadChipFile(0),
00020 fDeadChipTree(0),
00021 fWriteBusyChips(0),
00022 fWriteColdChips(1),
00023 fWriteHotChips(1)
00024 {
00025
00026 }
00027
00028 FarDetDeadChipModule::~FarDetDeadChipModule()
00029 {
00030
00031 }
00032
00033 void FarDetDeadChipModule::BeginJob()
00034 {
00035 MSG("FarDetDeadChipModule",Msg::kInfo) << " *** FarDetDeadChipModule::BeginJob() *** " << endl;
00036 }
00037
00038 JobCResult FarDetDeadChipModule::Ana(const MomNavigator *mom)
00039 {
00040 MSG("FarDetDeadChipModule",Msg::kInfo) << " *** FarDetDeadChipModule::Ana() *** " << endl;
00041
00042 JobCResult result(JobCResult::kPassed);
00043
00044 CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00045 if( candrec ){
00046 FarDetDataQualityHandle* fardet = dynamic_cast<FarDetDataQualityHandle*>(candrec->FindCandHandle("FarDetDataQualityHandle"));
00047 if( fardet ){
00048
00049 if( !fDeadChipFile ){
00050
00051
00052
00053 TString mystring("fardet.deadchip.root");
00054 TDirectory* tmpddd = gDirectory;
00055 fDeadChipFile = new TFile(mystring.Data(),"RECREATE");
00056 fDeadChipTree = new TTree("DeadChipTree","DeadChipTree");
00057 fDeadChipTree->SetAutoSave(100);
00058 fDeadChipTree->Branch("date",&date,"date/I");
00059 fDeadChipTree->Branch("time",&time,"time/I");
00060 fDeadChipTree->Branch("run",&run,"run/I");
00061 fDeadChipTree->Branch("snarl",&snarl,"snarl/I");
00062 fDeadChipTree->Branch("crate",&crate,"crate/I");
00063 fDeadChipTree->Branch("varc",&varc,"varc/I");
00064 fDeadChipTree->Branch("vmm",&vmm,"vmm/I");
00065 fDeadChipTree->Branch("vaadc",&vaadc,"vaadc/I");
00066 fDeadChipTree->Branch("vachip",&vachip,"vachip/I");
00067 fDeadChipTree->Branch("plane",&plane,"plane/I");
00068 fDeadChipTree->Branch("shld",&shld,"shld/I");
00069 fDeadChipTree->Branch("nanosec",&nanosec,"nanosec/I");
00070 fDeadChipTree->Branch("status",&status,"status/I");
00071 gDirectory = tmpddd;
00072 }
00073
00074
00075 date=fardet->GetDate();
00076 time=fardet->GetTime();
00077 run=fardet->GetRun();
00078 snarl=fardet->GetSnarl();
00079
00080 TIter chipitr(fardet->GetDaughterIterator());
00081 while(FarDetDeadChipHandle* deadchip = dynamic_cast<FarDetDeadChipHandle*>(chipitr())){
00082 crate=deadchip->GetCrate();
00083 varc=deadchip->GetVarc();
00084 vmm=deadchip->GetVmm();
00085 vaadc=deadchip->GetVaadc();
00086 vachip=deadchip->GetVaChip();
00087 plane=deadchip->GetPlane();
00088 shld=deadchip->GetShld();
00089 nanosec=deadchip->GetNanosec()-fardet->GetNanosec();
00090 status=0;
00091
00092 if( fWriteBusyChips && deadchip->GetVaChipStatus()==VaChip::kBusy ){
00093 status=2;
00094 TDirectory* tmpddd = gDirectory;
00095 fDeadChipFile->cd();
00096 fDeadChipTree->Fill();
00097 gDirectory = tmpddd;
00098 }
00099
00100 if( fWriteColdChips && deadchip->GetVaChipStatus()==VaChip::kCold ){
00101 status=4;
00102 TDirectory* tmpddd = gDirectory;
00103 fDeadChipFile->cd();
00104 fDeadChipTree->Fill();
00105 gDirectory = tmpddd;
00106 }
00107
00108 if( fWriteHotChips && deadchip->GetVaChipStatus()==VaChip::kHot ){
00109 status=5;
00110 TDirectory* tmpddd = gDirectory;
00111 fDeadChipFile->cd();
00112 fDeadChipTree->Fill();
00113 gDirectory = tmpddd;
00114 }
00115
00116 }
00117
00118 }
00119 }
00120
00121 return result;
00122
00123 }
00124
00125 const Registry& FarDetDeadChipModule::DefaultConfig() const
00126 {
00127 MSG("FarDetDeadChipModule",Msg::kInfo) << " *** FarDetDeadChipModule::DefaultConfig() *** " << endl;
00128
00129 static Registry r;
00130 r.SetName("FarDetDeadChipModule.config.default");
00131 r.UnLockValues();
00132 r.Set("WriteBusyChips",fWriteBusyChips);
00133 r.Set("WriteColdChips",fWriteColdChips);
00134 r.Set("WriteHotChips",fWriteHotChips);
00135 r.LockValues();
00136
00137 return r;
00138 }
00139
00140 void FarDetDeadChipModule::Config(const Registry &r)
00141 {
00142 MSG("FarDetDeadChipModule",Msg::kInfo) << " *** FarDetDeadChipModule::Config() *** " << endl;
00143
00144 Int_t tmpint;
00145
00146 if(r.Get("WriteBusyChips",tmpint)) fWriteBusyChips = tmpint;
00147 if(r.Get("WriteColdChips",tmpint)) fWriteColdChips = tmpint;
00148 if(r.Get("WriteHotChips",tmpint)) fWriteHotChips = tmpint;
00149
00150 MSG("FarDetDeadChipModule",Msg::kInfo)
00151 << " configuration: " << endl
00152 << " WriteBusyChips=" << fWriteBusyChips << endl
00153 << " WriteColdChips=" << fWriteColdChips << endl
00154 << " WriteHotChips=" << fWriteHotChips << endl;
00155
00156 return;
00157 }
00158
00159
00160 void FarDetDeadChipModule::EndJob()
00161 {
00162 MSG("FarDetDeadChipModule",Msg::kInfo) << " *** FarDetDeadChipModule::EndJob() *** " << endl;
00163
00164 if(fDeadChipFile){
00165 MSG("FarDetDeadChipModule",Msg::kDebug) << " *** saving DEAD CHIP INFO to file *** " << endl;
00166 TDirectory* tmpddd = gDirectory;
00167 fDeadChipFile->cd();
00168 fDeadChipTree->Write();
00169 fDeadChipFile->Close();
00170 gDirectory = tmpddd;
00171 MSG("FarDetDeadChipModule",Msg::kDebug) << " ... data saved to file " << endl;
00172 }
00173
00174 }