00001 #include "FarDetShieldPlankListModule.h"
00002 #include "FarDetShieldPlankListHandle.h"
00003 #include "FarDetShieldPlankHandle.h"
00004
00005 #include "MessageService/MsgService.h"
00006 #include "MinosObjectMap/MomNavigator.h"
00007 #include "JobControl/JobCModuleRegistry.h"
00008
00009 #include "Algorithm/AlgConfig.h"
00010 #include "Algorithm/AlgFactory.h"
00011 #include "Algorithm/AlgHandle.h"
00012
00013 #include "RawData/RawRecord.h"
00014 #include "RawData/RawDaqSnarlHeader.h"
00015 #include "RawData/RawSnarlHeaderBlock.h"
00016
00017 #include "CandDigit/CandDigitListHandle.h"
00018 #include "CandDigit/CandDigitHandle.h"
00019 #include "CandData/CandHeader.h"
00020 #include "CandData/CandRecord.h"
00021 #include "Candidate/CandContext.h"
00022
00023 #include "UgliGeometry/UgliGeomHandle.h"
00024
00025 JOBMODULE(FarDetShieldPlankListModule, "FarDetShieldPlankListModule","");
00026
00027 CVSID("$Id: FarDetShieldPlankListModule.cxx,v 1.8 2006/11/08 10:29:05 blake Exp $");
00028
00029 ClassImp(FarDetShieldPlankListModule)
00030
00031 FarDetShieldPlankListModule::FarDetShieldPlankListModule():
00032 fListIn("canddigitlist"),
00033 fListOut("FarDetShieldPlankListHandle"),
00034 fShieldFile(0),
00035 fShieldTree(0)
00036 {
00037
00038 }
00039
00040 FarDetShieldPlankListModule::~FarDetShieldPlankListModule()
00041 {
00042
00043 }
00044
00045 void FarDetShieldPlankListModule::BeginJob()
00046 {
00047 MSG("FarDetShieldPlank",Msg::kDebug) << " *** FarDetShieldPlankListModule::BeginJob() *** " << endl;
00048
00049
00050
00051
00052
00053
00054 }
00055
00056 JobCResult FarDetShieldPlankListModule::Reco(MomNavigator* mom)
00057 {
00058 MSG("FarDetShieldPlank",Msg::kDebug) << " *** FarDetShieldPlankListModule::Reco(...) *** " << endl;
00059 JobCResult result(JobCResult::kPassed);
00060
00061 CandRecord *candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00062 if (candrec == 0) {
00063 MSG("FarDetShieldPlank", Msg::kWarning) << " *** FAILED TO FIND CANDRECORD *** " << endl;
00064 return result.SetFailed();
00065 }
00066
00067 CandDigitListHandle *cdlh = dynamic_cast<CandDigitListHandle*>(candrec->FindCandHandle("CandDigitListHandle", fListIn.Data()));
00068 if(cdlh){
00069 MSG("FarDetShieldPlank", Msg::kDebug) << " *** MAKE HANDLE *** " << endl;
00070 TObjArray* myarray = new TObjArray();
00071 myarray->Add(cdlh);
00072 AlgFactory &af = AlgFactory::GetInstance();
00073 AlgHandle ah = af.GetAlgHandle("AlgFarDetShieldPlankList","default");
00074
00075 CandContext cx(this, mom);
00076 cx.SetCandRecord(candrec);
00077 cx.SetDataIn(myarray);
00078
00079 FarDetShieldPlankListHandle csslh = FarDetShieldPlankList::MakeCandidate(ah, cx);
00080 csslh.SetName(fListOut.Data());
00081 csslh.SetTitle(TString("Created by FarDetShieldPlankListModule"));
00082
00083 candrec->SecureCandHandle(csslh);
00084
00085 delete myarray;
00086 }
00087
00088 return result;
00089 }
00090
00091 JobCResult FarDetShieldPlankListModule::Ana(const MomNavigator* mom)
00092 {
00093 MSG("FarDetShieldPlank",Msg::kDebug) << " *** FarDetShieldPlankListModule::Ana(...) *** " << endl;
00094
00095 JobCResult result(JobCResult::kPassed);
00096
00097 run=-1; snarl=-1; timeframe=-1; time=-1; date=-1;
00098
00099 const RawRecord *rawrec = dynamic_cast<const RawRecord*>(mom->GetFragment("RawRecord"));
00100 if(rawrec == 0){
00101 MSG("FarDetShieldPlank", Msg::kWarning) << " *** FAILED TO FIND RAWRECORD *** " << endl;
00102 return result.SetFailed();
00103 }
00104
00105 const RawDaqSnarlHeader* rawheader = dynamic_cast<const RawDaqSnarlHeader*>(rawrec->GetRawHeader());
00106 if(rawheader){
00107 if(run<0) run = rawheader->GetRun();
00108 if(snarl<0) snarl = rawheader->GetSnarl();
00109 if(timeframe<0) timeframe = rawheader->GetTimeFrameNum();
00110 }
00111
00112 const RawSnarlHeaderBlock* rdb = dynamic_cast<const RawSnarlHeaderBlock*>(rawrec->FindRawBlock("RawSnarlHeaderBlock"));
00113 if(rdb){
00114 date = (((VldTimeStamp)(rdb->GetTriggerTime())).GetSec()-1059696000)/(3600*24);
00115 time = (((VldTimeStamp)(rdb->GetTriggerTime())).GetSec()-1059696000)%(3600*24);
00116 }
00117
00118 const CandRecord *const candrec = dynamic_cast<const CandRecord *>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00119 if(candrec == 0){
00120 MSG("FarDetShieldPlank", Msg::kWarning) << " *** FAILED TO FIND CANDRECORD *** " << endl;
00121 return result.SetFailed();
00122 }
00123
00124 const CandHeader* candheader = dynamic_cast<const CandHeader*>(candrec->GetCandHeader());
00125 if(candheader){
00126 if(run<0) run = candheader->GetRun();
00127 if(snarl<0) snarl = candheader->GetSnarl();
00128 }
00129
00130 const FarDetShieldPlankListHandle* shldlist = dynamic_cast<const FarDetShieldPlankListHandle*>(candrec->FindCandHandle("FarDetShieldPlankListHandle"));
00131 if(shldlist==0){
00132 return result.SetFailed();
00133 }
00134
00135 if(!fShieldFile){
00136
00137
00138
00139 TString mystring("shieldplank.root");
00140 TDirectory* tmpd = gDirectory;
00141 fShieldFile = new TFile(mystring.Data(),"RECREATE");
00142 fShieldTree = new TTree("ShieldTree","ShieldTree");
00143 fShieldTree->SetAutoSave(100);
00144
00145 fShieldTree->Branch("run",&run,"run/I");
00146 fShieldTree->Branch("snarl",&snarl,"snarl/I");
00147 fShieldTree->Branch("timeframe",&timeframe,"timeframe/I");
00148 fShieldTree->Branch("time",&time,"time/I");
00149 fShieldTree->Branch("date",&date,"date/I");
00150 fShieldTree->Branch("section",§ion,"section/I");
00151 fShieldTree->Branch("subsection",&subsection,"subsection/I");
00152 fShieldTree->Branch("plane",&plane,"plane/I");
00153 fShieldTree->Branch("Nerrors",&Nerrors,"Nerrors/I");
00154 fShieldTree->Branch("Nstrips",&Nstrips,"Nstrips/I");
00155 fShieldTree->Branch("Ndigits",&Ndigits,"Ndigits/I");
00156 fShieldTree->Branch("Xpos",&Xpos,"Xpos/D");
00157 fShieldTree->Branch("Ypos",&Ypos,"Ypos/D");
00158
00159 fShieldTree->Branch("crateN",&crateN,"crateN/I");
00160 fShieldTree->Branch("varcN",&varcN,"varcN/I");
00161 fShieldTree->Branch("vmmN",&vmmN,"vmmN/I");
00162 fShieldTree->Branch("vaadcN",&vaadcN,"vaadcN/I");
00163 fShieldTree->Branch("vachipN",&vachipN,"vachipN/I");
00164 fShieldTree->Branch("vachannelN",&vachannelN,"vachannelN/I");
00165 fShieldTree->Branch("TrawN",&TrawN,"TrawN/D");
00166 fShieldTree->Branch("TcalN",&TcalN,"TcalN/D");
00167 fShieldTree->Branch("QrawN",&QrawN,"QrawN/D");
00168 fShieldTree->Branch("QcalN",&QcalN,"QcalN/D");
00169 fShieldTree->Branch("ZposN",&ZposN,"ZposN/D");
00170
00171 fShieldTree->Branch("crateS",&crateS,"crateS/I");
00172 fShieldTree->Branch("varcS",&varcS,"varcS/I");
00173 fShieldTree->Branch("vmmS",&vmmS,"vmmS/I");
00174 fShieldTree->Branch("vaadcS",&vaadcS,"vaadcS/I");
00175 fShieldTree->Branch("vachipS",&vachipS,"vachipS/I");
00176 fShieldTree->Branch("vachannelS",&vachannelS,"vachannelS/I");
00177 fShieldTree->Branch("TrawS",&TrawS,"TrawS/D");
00178 fShieldTree->Branch("TcalS",&TcalS,"TcalS/D");
00179 fShieldTree->Branch("QrawS",&QrawS,"QrawS/D");
00180 fShieldTree->Branch("QcalS",&QcalS,"QcalS/D");
00181 fShieldTree->Branch("ZposS",&ZposS,"ZposS/D");
00182
00183 gDirectory = tmpd;
00184 }
00185
00186 TIter shlditr(shldlist->GetDaughterIterator());
00187 while(FarDetShieldPlankHandle* shld = dynamic_cast<FarDetShieldPlankHandle*>(shlditr())){
00188
00189 section = shld->GetSection();
00190 subsection = shld->GetSubSection();
00191 plane = shld->GetPlane();
00192 Nstrips = shld->GetNStrips();
00193 Ndigits = shld->GetNDaughters();
00194 Nerrors = shld->GetGeomErrors();
00195 Xpos = shld->GetX();
00196 Ypos = shld->GetY();
00197
00198 crateN = -1;
00199 varcN = -1;
00200 vmmN = -1;
00201 vaadcN = -1;
00202 vachipN = -1;
00203 vachannelN = -1;
00204 TrawN = 0.0;
00205 TcalS = 0.0;
00206 QrawN = 0.0;
00207 QcalN = 0.0;
00208 ZposN = 0.0;
00209
00210 crateS = -1;
00211 varcS = -1;
00212 vmmS = -1;
00213 vaadcS = -1;
00214 vachipS = -1;
00215 vachannelS = -1;
00216 TrawS = 0.0;
00217 TcalS = 0.0;
00218 QrawS = 0.0;
00219 QcalS = 0.0;
00220 ZposS = 0.0;
00221
00222 TIter digitr(shld->GetDaughterIterator());
00223 while(CandDigitHandle* digit = dynamic_cast<CandDigitHandle*>(digitr())){
00224
00225 if(digit->GetPlexSEIdAltL().GetEnd()==StripEnd::kNegative){
00226 TrawN = shld->GetTime(StripEnd::kNegative,CalTimeType::kNone);
00227 TcalN = shld->GetTime(StripEnd::kNegative,CalTimeType::kT0);
00228 QrawN = shld->GetCharge(StripEnd::kNegative,CalDigitType::kNone);
00229 QcalN = shld->GetCharge(StripEnd::kNegative,CalDigitType::kPE);
00230 ZposN = shld->GetZ(StripEnd::kNegative);
00231
00232 RawChannelId rawch = digit->GetChannelId();
00233 crateN=rawch.GetCrate();
00234 varcN=rawch.GetVarcId();
00235 vmmN=rawch.GetVmm();
00236 vaadcN=rawch.GetVaAdcSel();
00237 vachipN=rawch.GetVaChip();
00238 vachannelN=rawch.GetVaChannel();
00239 }
00240
00241 if(digit->GetPlexSEIdAltL().GetEnd()==StripEnd::kPositive){
00242 TrawS = shld->GetTime(StripEnd::kPositive,CalTimeType::kNone);
00243 TcalS = shld->GetTime(StripEnd::kPositive,CalTimeType::kT0);
00244 QrawS = shld->GetCharge(StripEnd::kPositive,CalDigitType::kNone);
00245 QcalS = shld->GetCharge(StripEnd::kPositive,CalDigitType::kPE);
00246 ZposS = shld->GetZ(StripEnd::kPositive);
00247
00248 RawChannelId rawch = digit->GetChannelId();
00249 crateS=rawch.GetCrate();
00250 varcS=rawch.GetVarcId();
00251 vmmS=rawch.GetVmm();
00252 vaadcS=rawch.GetVaAdcSel();
00253 vachipS=rawch.GetVaChip();
00254 vachannelS=rawch.GetVaChannel();
00255 }
00256
00257 }
00258
00259 TDirectory* tmpd = gDirectory;
00260 fShieldFile->cd();
00261 fShieldTree->Fill();
00262 gDirectory = tmpd;
00263 }
00264
00265 return result;
00266 }
00267
00268 const Registry& FarDetShieldPlankListModule::DefaultConfig() const
00269 {
00270 MSG("FarDetShieldPlank",Msg::kDebug) << " *** FarDetShieldPlankListModule::DefaultConfig( ) *** " << endl;
00271
00272 static Registry r;
00273 r.SetName("FarDetShieldPlankListModule.config.default");
00274 r.UnLockValues();
00275 r.Set("ListIn",fListIn.Data());
00276 r.Set("ListOut",fListOut.Data());
00277 r.LockValues();
00278
00279 AlgFactory &af = AlgFactory::GetInstance();
00280
00281 af.Register("AlgFarDetShieldPlankList","default");
00282 AlgHandle ah_list = af.GetAlgHandle("AlgFarDetShieldPlankList","default");
00283 AlgConfig &ac_list = ah_list.GetAlgConfig();
00284 ac_list.UnLockValues();
00285 ac_list.LockValues();
00286
00287 af.Register("AlgFarDetShieldPlank","default");
00288 AlgHandle ah_plank = af.GetAlgHandle("AlgFarDetShieldPlank","default");
00289 AlgConfig &ac_plank = ah_plank.GetAlgConfig();
00290 ac_plank.UnLockValues();
00291 ac_plank.LockValues();
00292
00293 return r;
00294 }
00295
00296 void FarDetShieldPlankListModule::Config(const Registry& r)
00297 {
00298 MSG("FarDetShieldPlank",Msg::kDebug) << " *** FarDetShieldPlankListModule::Config( ) *** " << endl;
00299
00300
00301 const char* tmpchar = 0;
00302
00303 if(r.Get("ListIn",tmpchar)){ fListIn = tmpchar; }
00304 if(r.Get("ListOut",tmpchar)){ fListOut = tmpchar; }
00305
00306 AlgFactory &af = AlgFactory::GetInstance();
00307
00308 AlgHandle ah_list = af.GetAlgHandle("AlgFarDetShieldPlankList","default");
00309 AlgConfig &ac_list = ah_list.GetAlgConfig();
00310 ac_list.UnLockValues();
00311 ac_list.LockValues();
00312
00313 AlgHandle ah_plank = af.GetAlgHandle("AlgFarDetShieldPlank","default");
00314 AlgConfig &ac_plank = ah_plank.GetAlgConfig();
00315 ac_plank.UnLockValues();
00316 ac_plank.LockValues();
00317
00318 return;
00319 }
00320
00321 void FarDetShieldPlankListModule::EndJob()
00322 {
00323 if(fShieldFile){
00324 MSG("FarDetShieldPlank",Msg::kDebug) << " *** saving SHIELD INFO to file *** " << endl;
00325 TDirectory* tmpd = gDirectory;
00326 fShieldFile->cd();
00327 fShieldTree->Write();
00328 fShieldFile->Close();
00329 gDirectory = tmpd;
00330 MSG("FarDetShieldPlank",Msg::kDebug) << " ... data saved to file *** " << endl;
00331 }
00332 }