00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012 #include <fstream>
00013
00014 #include "TClonesArray.h"
00015 #include "TFile.h"
00016 #include "TTree.h"
00017
00018 #include "CalDetPID/CalDetBeamMomentum.h"
00019 #include "CalDetPID/CalDetParticleType.h"
00020 #include "Calibrator/Calibrator.h"
00021 #include "CalDetPID/CandCalDetPIDHandle.h"
00022 #include "CalDetSI/CandCalDetSIHandle.h"
00023 #include "CandData/CandRecord.h"
00024 #include "CandDigit/CandDigitListHandle.h"
00025 #include "RecoBase/CandStripListHandle.h"
00026 #include "DatabaseInterface/DbiResultPtr.h"
00027 #include "DatabaseUpdater/DbuSubRunSummary.h"
00028 #include "JobControl/JobCommand.h"
00029 #include "JobControl/JobCModuleRegistry.h"
00030 #include "MinosObjectMap/MomNavigator.h"
00031 #include "RawData/RawRecord.h"
00032 #include "RawData/RawDaqSnarlHeader.h"
00033 #include "RawData/RawDeadChipBlock.h"
00034 #include "RawData/RawDigitDataBlock.h"
00035 #include "RawData/RawChannelId.h"
00036 #include "RawData/RawVaDigit.h"
00037 #include "Validity/VldContext.h"
00038 #include "Validity/VldTimeStamp.h"
00039 #include "MessageService/MsgService.h"
00040
00041 #include "CalDetTracker/CDTrackerModule.h"
00042 #include "CalDetTracker/CDMapMaker.h"
00043 #include "CalDetTracker/CDCrossTalker.h"
00044 #include "CalDetTracker/CDBeamMuTracker.h"
00045 #include "CalDetTracker/CDCosmicTracker.h"
00046 #include "CalDetTracker/CDTrackedHits.h"
00047 #include "CalDetTracker/CDUnidentifiedHits.h"
00048 #include "CalDetTracker/CDTrackInfo.h"
00049 #include "CalDetTracker/CDTrackedHitInfo.h"
00050 #include "CalDetTracker/CDXTalkHitInfo.h"
00051 #include "CalDetTracker/CDPIDInfo.h"
00052 #include "CalDetTracker/CDTruthifier.h"
00053 #include "CalDetTracker/CDTrackedHitInfo.h"
00054 #include "CalDetTracker/CDTrackInfo.h"
00055 #include "CalDetTracker/CDTrackerOptions.h"
00056 #include "CalDetTracker/CDPIDInfo.h"
00057
00058 using std::endl;
00059 using std::cout;
00060
00061 CVSID("$Id: CDTrackerModule.cxx,v 1.25 2005/08/28 01:41:37 rhatcher Exp $");
00062
00063 JOBMODULE(CDTrackerModule,"CDTrackerModule",
00064 "Track Muons in CalDet");
00065
00066
00067
00068 CDTrackerModule::CDTrackerModule()
00069 {
00070 ffirstrecord=true;
00071
00072 fBeamMomentum=0;
00073 fNumDeadChips=-1;
00074 fTemperature=-1;
00075 fSimFlag=SimFlag::kUnknown;
00076 frun=0;
00077 fsubrun=0;
00078 fsnarl=0;
00079 fSec=-1;
00080 fStartSnarl=0;
00081 fEndSnarl=0;
00082 fStartTime=0;
00083 fEndTime=0;
00084 fsavefile=0;
00085 fJustWriteTracks=0;
00086 fOverwriteFile=0;
00087 fWritePID=0;
00088 sprintf(ftag,"SetFileIDToMakeThisShorter");
00089 fWriteTruth=0;
00090
00091
00092 fTrkInfo=0;
00093 ftree=0;
00094 fPID=0;
00095
00096
00097 fTrkHits=new TClonesArray("CDTrackedHitInfo",1000);
00098
00099 fCCHits=new TClonesArray("CDTrackedHitInfo",1000);
00100
00101 fStTrkHits=new TClonesArray("CDTrackedHitInfo",1000);
00102
00103 fXTalkHits=new TClonesArray("CDXTalkHitInfo",1000);
00104
00105 fUnTrkHits=new TClonesArray("CDTrackedHitInfo",1000);
00106
00107 fTruthHits=new TClonesArray("CDTruthHitInfo",1000);
00108
00109
00110 fTrkOpt=new CDTrackerOptions();
00111 }
00112
00113
00114
00115 JobCResult CDTrackerModule::Ana(const MomNavigator *mom)
00116 {
00117
00118 JobCResult result(JobCResult::kPassed);
00119
00120 CandRecord* candrec=dynamic_cast<CandRecord*>
00121 (mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00122 if (candrec==0) {
00123 MSG("CDTrackerModule",Msg::kWarning)
00124 <<"No PrimaryCandidateRecord in MOM." << endl;
00125 result.SetFailed();
00126 return result;
00127 }
00128
00129 RawRecord *rr=dynamic_cast<RawRecord *>
00130 (mom->GetFragment("RawRecord"));
00131 if (rr==0) {
00132 MSG("CDTrackerModule",Msg::kWarning)
00133 <<"No RawRecord in MOM." << endl;
00134 result.SetFailed();
00135 return result;
00136 }
00137
00138 const RawDeadChipBlock* dcb=dynamic_cast<const RawDeadChipBlock*>
00139 (rr->FindRawBlock("RawDeadChipBlock"));
00140 if(dcb) {
00141 fNumDeadChips=dcb->GetNumberOfEntries();
00142 if (fNumDeadChips>0) {
00143 MAXMSG("CDTrackerModule",Msg::kDebug,100)
00144 <<"Found dead chips="<<fNumDeadChips<<endl;
00145 }
00146 }
00147 else {
00148 MAXMSG("CDTrackerModule",Msg::kWarning,10)
00149 <<"No RawDeadChipBlock present"<<endl;
00150 }
00151
00152 const RawDaqSnarlHeader* snarlHdr =
00153 dynamic_cast<const RawDaqSnarlHeader*>(rr->GetRawHeader());
00154 if(snarlHdr){
00155 fsnarl=snarlHdr->GetSnarl();
00156 fSec=snarlHdr->GetVldContext().GetTimeStamp().GetSec();
00157 fEndSnarl=fsnarl;
00158 fEndTime=fSec;
00159
00160 if(ffirstrecord) {
00161 fSimFlag=snarlHdr->GetVldContext().GetSimFlag();
00162 fStartTime=snarlHdr->GetVldContext().GetTimeStamp().GetSec();
00163 fStartSnarl=snarlHdr->GetSnarl();
00164 frun=snarlHdr->GetRun();
00165 fsubrun=snarlHdr->GetSubRun();
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190 MSG("CDTrackerModule",Msg::kVerbose)<<"Subrun="<<fsubrun<<endl;
00191 }
00192 }
00193 else{
00194 MSG("CDTrackerModule",Msg::kWarning)
00195 <<"No RawDaqSnarlHeader in MOM."<<endl;
00196 result.SetFailed();
00197 return result;
00198 }
00199
00200
00201 Calibrator& cal=Calibrator::Instance();
00202 cal.Reset(snarlHdr->GetVldContext());
00203 fTemperature=cal.GetTemperature();
00204 MAXMSG("CDTrackerModule",Msg::kDebug,20)
00205 <<"Used Calibrator to get temperature="<<fTemperature<<" C"<<endl;
00206
00207 int ExtTrigTime=0;
00208 const RawDigitDataBlock *rddb=dynamic_cast<const RawDigitDataBlock *>
00209 (rr->FindRawBlock("RawDigitDataBlock"));
00210
00211
00212 if (rddb) {
00213 RawChannelId id(Detector::kCalDet,ElecType::kVA,0,0x1602);
00214 id.SetModeBits(true,true,true);
00215 TIter it=rddb->GetDatumIter();
00216 while (TObject *obj=it.Next()) {
00217 RawVaDigit *rvd=dynamic_cast<RawVaDigit *>(obj);
00218 if (rvd) {
00219 RawChannelId rcid=rvd->GetChannel();
00220 if (rcid.IsSameChannel(id)) ExtTrigTime=rvd->GetTDC();
00221 }
00222 }
00223 }
00224
00225
00226 if(ffirstrecord) {
00227 MSG("CDTrackerModule",Msg::kDebug)
00228 <<"Opening file..."<<endl;
00229
00230 fsavefile=this->OpenFile(frun,fsubrun);
00231
00232
00233 this->InitialiseTree();
00234 ffirstrecord=false;
00235 MSG("CDTrackerModule",Msg::kDebug)
00236 <<"... file opened and tree initialised"<<endl;
00237
00238 if (fSimFlag==SimFlag::kData){
00239
00240
00241 DbiResultPtr<CalDetBeamMomentum> cdbm(snarlHdr->GetVldContext(),
00242 Dbi::kDefaultTask,
00243 Dbi::kDisabled);
00244
00245 MSG("CDTrackerModule",Msg::kDebug)
00246 <<"Number of rows in CalDetBeamMomentum="<<cdbm.GetNumRows()
00247 <<endl;
00248
00249
00250 if(cdbm.GetNumRows()==1) {
00251 fBeamMomentum=cdbm.GetRow(0)->GetMomentum();
00252 MSG("CDTrackerModule",Msg::kInfo)
00253 <<"Found beam momentum in database="<<fBeamMomentum<<endl;
00254 }
00255 else{
00256 MSG("CDTrackerModule",Msg::kInfo)
00257 <<"Problem with beam momentum in database"
00258 <<", #rows="<<cdbm.GetNumRows()
00259 <<", beamMomentum="<<fBeamMomentum<<endl;
00260 }
00261 }
00262 }
00263 static Bool_t firstSnarl=true;
00264 if (firstSnarl){
00265 MSG("CDTrackerModule",Msg::kInfo)
00266 <<"Started tracking... (first snarl number="<<fsnarl
00267 <<", second="<<fSec<<")"<<endl;
00268 firstSnarl=false;
00269 }
00270
00271 if (fWritePID){
00272
00273 fPID=new CDPIDInfo();
00274
00275
00276 CandCalDetSIHandle* cdsi=dynamic_cast<CandCalDetSIHandle*>
00277 (candrec->FindCandHandle("CandCalDetSIHandle"));
00278
00279
00280 if(cdsi) {
00281 this->FillPID(cdsi);
00282 }
00283 else{
00284 if (fSimFlag==SimFlag::kData){
00285 MSG("CDTrackerModule",Msg::kError)
00286 <<"No caldet SI handle; not filling CDPIDInfo!"<<endl;
00287 }
00288
00289 }
00290
00291 CandCalDetPIDHandle* cdpid=dynamic_cast<CandCalDetPIDHandle*>
00292 (candrec->FindCandHandle("CandCalDetPIDHandle"));
00293
00294
00295 if (cdpid){
00296 MSG("CalDetPID",Msg::kDebug)
00297 <<"Tracker::particle="<<cdpid->GetPIDType()
00298 <<", nooverlap="<<cdpid->NoOverlap()
00299 <<", inckvtime="<<cdpid->InCERTime()
00300 <<", ol chi2="<<cdpid->GetOLChi2()
00301 <<endl;
00302 this->FillPID(cdpid);
00303 }
00304 else{
00305 if (fSimFlag==SimFlag::kData){
00306 MAXMSG("CDTrackerModule",Msg::kWarning,5)
00307 <<"No caldet pid handle; not filling CDPIDInfo!"<<endl;
00308 }
00309
00310 }
00311 }
00312
00313
00314 CandDigitListHandle *digitlist=dynamic_cast<CandDigitListHandle*>
00315 (candrec->FindCandHandle("CandDigitListHandle"));
00316 if(digitlist==0) {
00317 MSG("CDTrackerModule", Msg::kFatal)
00318 << "No CandDigitList in MOM." << endl;
00319 result.SetFailed();
00320 return result;
00321 }
00322
00323
00324 CandStripListHandle *striplist=dynamic_cast<CandStripListHandle*>
00325 (candrec->FindCandHandle("CandStripListHandle"));
00326 if(striplist==0) {
00327 MSG("CDTrackerModule", Msg::kFatal)
00328 << "No CandStripList in MOM." << endl;
00329 result.SetFailed();
00330 return result;
00331 }
00332
00334
00336 if (fWriteTruth){
00337
00338 if (fSimFlag!=SimFlag::kData){
00339 MAXMSG("CDTrackerModule", Msg::kVerbose,5)
00340 <<"fSimFlag="<<SimFlag::AsString(fSimFlag)
00341 <<". Accessing truth info..."<<endl;
00342
00343 CDTruthifier cdTruthifier;
00344 cdTruthifier.GetTruthHitInfo(mom,fTruthHits);
00345
00346 Float_t beamP=0;
00347
00348
00349
00350
00351 if (fWritePID && fPID){
00352 cdTruthifier.RecoStdHep(mom,fPID);
00353 beamP=fPID->GetTrueParticleMomentum();
00354 }
00355 else if (!fPID){
00356
00357
00358 beamP=cdTruthifier.ParticleMomentum(mom);
00359 }
00360
00361
00362 static Float_t count=0;
00363 MAXMSG("CDTrackerModule",Msg::kVerbose,200)
00364 <<"beamP="<<beamP<<", fBeamMomentum="<<fBeamMomentum
00365 <<", count="<<count<<endl;
00366 fBeamMomentum=fBeamMomentum*(count/(count+1))+beamP*(1/(count+1));
00367 count++;
00368 }
00369 }
00370
00371
00372 CDMapMaker *mpmkrStrips = new CDMapMaker(striplist);
00373
00374
00375 CDCrossTalker xtalker(mpmkrStrips->GetStripMap(),0.9,
00376 fTrkOpt->Cosmic());
00377 xtalker.GetXTalkStripInfo(fXTalkHits);
00378
00379
00380 CDTracker *tracker;
00381
00382
00383
00384 if(fTrkOpt->Cosmic()){
00385 tracker=new CDCosmicTracker(xtalker.GetCleanStripMap(),fTrkOpt);
00386 }
00387 else{
00388 tracker=new CDBeamMuTracker(xtalker.GetCleanStripMap(),fTrkOpt);
00389 }
00390
00391
00392 fTrkInfo=tracker->GetTrackInfo();
00393
00394
00395 fTrkInfo->SetAbsTime(digitlist->GetAbsTime());
00396 fTrkInfo->SetTriggerTime(ExtTrigTime);
00397
00398
00399 CDTrackedHits trkHits(tracker->GetTrackedStripMap(PlaneView::kX),
00400 tracker->GetTrackedStripMap(PlaneView::kY),
00401 tracker->GetCCStripMap());
00402
00403
00404 trkHits.GetTrackedStripInfo(fStTrkHits,fTrkInfo->GetAngle(0),
00405 fTrkInfo->GetAngle(1));
00406
00407
00408 trkHits.GetCCStripInfo(fCCHits);
00409
00410
00411 fTrkInfo->SetRange(trkHits.GetTrkRange());
00412
00413
00414
00415 if(!fTrkOpt->Cosmic()){
00416 trkHits.GetTrackedStripInfo(fTrkHits);
00417
00418 fTrkInfo->SetRange(trkHits.GetTrkRange());
00419 }
00420
00421
00422
00423 CDUnidentifiedHits uihStrips
00424 (mpmkrStrips->GetStripMap(),
00425 tracker->GetTrackedStripMap(PlaneView::kX),
00426 tracker->GetTrackedStripMap(PlaneView::kY),
00427 tracker->GetCCStripMap(),
00428 xtalker.GetXTalkStripMap());
00429
00430
00431 uihStrips.GetUnidentifiedStripInfo(fUnTrkHits);
00432
00433
00434 if(fTrkInfo->GetResult(0)==1 && fTrkInfo->GetResult(1)==1){
00435 ftree->Fill();
00436 }
00437 else {
00438 result.SetFailed();
00439 if(!fJustWriteTracks)
00440 ftree->Fill();
00441 }
00442
00443
00444 delete tracker;
00445 delete mpmkrStrips;
00446
00447
00448 this->CleanDataMembers();
00449
00450 return result;
00451 }
00452
00453
00454 void CDTrackerModule::CleanDataMembers()
00455 {
00456
00457
00458
00459
00460 fTrkHits->Clear();
00461 fStTrkHits->Clear();
00462 fCCHits->Clear();
00463 fXTalkHits->Clear();
00464 fUnTrkHits->Clear();
00465 fTruthHits->Clear();
00466
00467
00468 if (fTrkInfo) delete fTrkInfo;
00469 if (fPID) delete fPID;
00470
00471
00472 fTrkInfo=0;
00473 fPID=0;
00474
00475
00476 }
00477
00478
00479
00480 void CDTrackerModule::HandleCommand(JobCommand* cmd)
00481 {
00482
00483 if (cmd->HaveCmd()) {
00484 string sc = cmd->PopCmd();
00485
00486 if (sc == "TrackOpt") {
00487 string st(cmd->PopOpt());
00488 fTrkOpt->SetTrackerOptions(st);
00489 return;
00490 }
00491
00492 else if (sc == "ADCThreshold") {
00493 fTrkOpt->SetThresh(cmd->PopFloatOpt());
00494 return;
00495 }
00496
00497 else if (sc == "MinNHits") {
00498 fTrkOpt->SetMinHit(cmd->PopIntOpt());
00499 return;
00500 }
00501
00502 else if (sc == "MinTrkLen") {
00503 fTrkOpt->SetTrkLenCut(cmd->PopIntOpt());
00504 return;
00505 }
00506
00507 else if (sc == "MaxAngle") {
00508 fTrkOpt->SetAngleLimit(cmd->PopFloatOpt());
00509 return;
00510 }
00511
00512 else if (sc == "MinAngle") {
00513 fTrkOpt->SetMinAngle(cmd->PopFloatOpt());
00514 return;
00515 }
00516
00517 else if (sc == "MinVertAngle") {
00518 fTrkOpt->SetMinVertAngle(cmd->PopFloatOpt());
00519 return;
00520 }
00521
00522 else if (sc == "SearchRange") {
00523 fTrkOpt->SetAcceptance(cmd->PopIntOpt());
00524 return;
00525 }
00526
00527 else if (sc == "HitsPerPlane") {
00528 fTrkOpt->SetHitsPerPlane(cmd->PopIntOpt());
00529 return;
00530 }
00531
00532 else if (sc == "MaxHotPlanes") {
00533 fTrkOpt->SetMaxHotPlanes(cmd->PopIntOpt());
00534 return;
00535 }
00536
00537 else if (sc == "FileID") {
00538 sprintf(ftag,"%s",cmd->PopOpt());
00539 return;
00540 }
00541
00542 else if (sc == "JustWriteTracks") {
00543 int tempNum=cmd->PopIntOpt();
00544 if(tempNum==0)
00545 fJustWriteTracks=0;
00546 if(tempNum>0)
00547 fJustWriteTracks=1;
00548 return;
00549 }
00550
00551 else if (sc == "OverwriteFile") {
00552 int tempNum=cmd->PopIntOpt();
00553 if(tempNum==0)
00554 fOverwriteFile=0;
00555 if(tempNum>0)
00556 fOverwriteFile=1;
00557 return;
00558 }
00559
00560 else if (sc == "WritePID") {
00561 int tempNum=cmd->PopIntOpt();
00562 if(tempNum==0)
00563 fWritePID=0;
00564 if(tempNum>0)
00565 fWritePID=1;
00566 return;
00567 }
00568 else if (sc == "WriteTruth") {
00569 int tempNum=cmd->PopIntOpt();
00570 if(tempNum==0)
00571 fWriteTruth=0;
00572 if(tempNum>0)
00573 fWriteTruth=1;
00574 return;
00575 }
00576 else MSG("CDTrackerModule",Msg::kWarning)
00577 << "Don't understand '" << sc.c_str() << "'\n";
00578 }
00579 }
00580
00581
00582
00583 void CDTrackerModule::EndJob()
00584 {
00585 MSG("CDTrackerModule",Msg::kDebug)<<"Running EndJob()"<<endl;
00586
00587 if (fsavefile!=0 && fsavefile->IsWritable()){
00588 fsavefile->cd();
00589
00590 MSG("CDTrackerModule",Msg::kInfo)
00591 <<"Writing to file... "<<endl;
00592
00593 fsavefile->pwd();
00594 ftree->Write();
00595
00596 MSG("CDTrackerModule",Msg::kDebug)
00597 <<"Creating options tree..."<<endl;
00598 TTree opt_tree("TrackerOptions","Tracker Options");
00599 opt_tree.Branch("SimFlag",&fSimFlag,"SimFlag/I",32000);
00600 opt_tree.Branch("StartTime",&fStartTime,"StartTime/I",32000);
00601 opt_tree.Branch("EndTime",&fEndTime,"EndTime/I",32000);
00602 opt_tree.Branch("StartSnarl",&fStartSnarl,"StartSnarl/I",32000);
00603 opt_tree.Branch("EndSnarl",&fEndSnarl,"EndSnarl/I",32000);
00604 opt_tree.Branch("BeamMomentum",&fBeamMomentum,
00605 "BeamMomentum/F",32000);
00606 opt_tree.Branch("Run",&frun,"run/I",32000);
00607 opt_tree.Branch("SubRun",&fsubrun,"subrun/I",32000);
00608 opt_tree.Branch("TrackerOptions","CDTrackerOptions",
00609 &fTrkOpt,8000,1);
00610
00611 MSG("CDTrackerModule",Msg::kInfo)
00612 <<"Time="<<fStartTime<<"->"<<fEndTime<<endl
00613 <<"Snarl="<<fStartSnarl<<"->"<<fEndSnarl<<endl;
00614
00615 MSG("CDTrackerModule",Msg::kDebug)<<"Filling tree..."<<endl;
00616 opt_tree.Fill();
00617 opt_tree.Write();
00618 MSG("CDTrackerModule",Msg::kInfo)<<"Closing file..."<<endl;
00619 fsavefile->Close();
00620 }
00621 else {
00622 MSG("CDTrackerModule",Msg::kWarning)
00623 <<"File not writable!"<<endl;
00624 }
00625
00626 delete fTrkHits;
00627 delete fCCHits;
00628 delete fStTrkHits;
00629 delete fXTalkHits;
00630 delete fUnTrkHits;
00631 delete fTruthHits;
00632
00633 MSG("CDTrackerModule",Msg::kDebug)
00634 <<"End of CDTrackerModule::EndJob() reached"<<endl;
00635 }
00636
00637
00638
00639 TFile* CDTrackerModule::OpenFile(Int_t runNumber,
00640 Int_t runNumberSub)
00641 {
00642
00643 TFile* outputFile=0;
00644
00645
00646 char *trackerdir=getenv("TRACKER_DIR");
00647
00648
00649 string sTrackerDir="";
00650
00651 if (trackerdir!=NULL) {
00652 sTrackerDir=trackerdir;
00653 }
00654 else {
00655 MSG("CDTrackerModule",Msg::kInfo)
00656 <<"Environmental variable $TRACKER_DIR not set."
00657 <<" Writing file(s) to current directory"<<endl;
00658 sTrackerDir=".";
00659 }
00660
00661
00662 string sRunNumber=Form("%d",runNumber);
00663 string sRunNumberSub=Form("%d",runNumberSub);
00664 MSG("CDTrackerModule",Msg::kVerbose)
00665 <<"srunnumbersub="<<sRunNumberSub<<endl;
00666
00667 string sTag=ftag;
00668 string sBase=sTrackerDir+"/Tracker"+sRunNumber+"_"+
00669 sRunNumberSub+"_"+sTag;
00670 string sFileName=sBase+".root";
00671
00672
00673 ifstream Test(sFileName.c_str());
00674
00675
00676 if(!Test || fOverwriteFile){
00677 outputFile=new TFile(sFileName.c_str(),"RECREATE");
00678 if(fOverwriteFile) {
00679 if(Test) Test.close();
00680 }
00681 }
00682 else {
00683
00684 Int_t fred=1;
00685 while(Test) {
00686 Test.close();
00687 string sAppendage=Form("%d",fred);
00688 sFileName=sBase+"_"+sAppendage+".root";
00689 Test.open(sFileName.c_str());
00690 fred++;
00691 }
00692 outputFile = new TFile(sFileName.c_str(),"NEW");
00693 outputFile->SetCompressionLevel(9);
00694 }
00695
00696 MSG("CDTrackerModule",Msg::kInfo)
00697 <<"Output file opened: "<<sFileName<<endl;
00698 return outputFile;
00699 }
00700
00701
00702
00703 void CDTrackerModule::InitialiseTree()
00704 {
00705
00706 ftree=new TTree("TrackerTree","Tracker Tree");
00707
00708
00709 ftree->Branch("Snarl",&fsnarl,"snarl/I",32000);
00710 ftree->Branch("NumDeadChips",&fNumDeadChips,"NumDeadChips/I",32000);
00711 ftree->Branch("Sec",&fSec,"Sec/I",32000);
00712 ftree->Branch("Temperature",&fTemperature,"Temperature/F",32000);
00713 if(fWritePID==1) ftree->Branch("PIDInfo","CDPIDInfo",&fPID,8000,1);
00714 ftree->Branch("TrackInfo","CDTrackInfo",&fTrkInfo,8000,1);
00715 ftree->Branch("TrackedHitInfo","TClonesArray",&fTrkHits,8000,1);
00716 ftree->Branch("StraightTrackedHitInfo","TClonesArray",
00717 &fStTrkHits,8000,1);
00718 ftree->Branch("CCHitInfo","TClonesArray",&fCCHits,8000,1);
00719 ftree->Branch("XTalkHitInfo","TClonesArray",&fXTalkHits,8000,1);
00720 ftree->Branch("UnTrackedHitInfo","TClonesArray",&fUnTrkHits,8000,1);
00721 if (fWriteTruth) ftree->Branch("TruthHitInfo","TClonesArray",
00722 &fTruthHits,8000,1);
00723 }
00724
00725
00726
00727 void CDTrackerModule::FillPID(const CandCalDetPIDHandle* cdpid)
00728 {
00729
00730 if(cdpid) {
00731 MSG("CDTrackerModule",Msg::kVerbose)
00732 <<"Filling CDPIDInfo object with CalDetPID info"<<endl;
00733 fPID->SetPIDType(cdpid->GetPIDType());
00734 fPID->SetNoOverlap(cdpid->NoOverlap());
00735 fPID->SetInCERTime(cdpid->InCERTime());
00736 fPID->SetNoOverlapBits(cdpid->GetNoOverlapBits());
00737 fPID->SetInCERTimeBits(cdpid->GetInCERTimeBits());
00738 fPID->SetOLChi2(cdpid->GetOLChi2());
00739 }
00740 }
00741
00742
00743
00744 void CDTrackerModule::FillPID(CandCalDetSIHandle *cdsi)
00745 {
00746
00747 if(cdsi) {
00748 fPID->SetIsEmpty(true);
00749 fPID->SetTriggerPMT(cdsi->GetTriggerPMT());
00750 fPID->SetFafErr(cdsi->GetFafErr());
00751 fPID->SetSparseErr(cdsi->GetSparseErr());
00752 fPID->SetTrigSource(cdsi->GetTrigSource());
00753 fPID->SetKovADC1(cdsi->GetKovADC1());
00754 fPID->SetKovADC2(cdsi->GetKovADC2());
00755 fPID->SetKovADC3(cdsi->GetKovADC3());
00756 fPID->SetKovTimeStamp1(cdsi->GetKovTimeStamp1());
00757 fPID->SetKovTimeStamp2(cdsi->GetKovTimeStamp2());
00758 fPID->SetKovTimeStamp3(cdsi->GetKovTimeStamp3());
00759 fPID->SetSnarlTimeFrame(cdsi->GetSnarlTimeFrame());
00760 fPID->SetSnarlMinTimeStamp(cdsi->GetSnarlMinTimeStamp());
00761 fPID->SetSnarlMaxTimeStamp(cdsi->GetSnarlMaxTimeStamp());
00762 fPID->SetTofTDC0(cdsi->GetTofTDC0());
00763 fPID->SetTofTDC1(cdsi->GetTofTDC1());
00764 fPID->SetTofTDC2(cdsi->GetTofTDC2());
00765 fPID->SetTofADC0(cdsi->GetTofADC0());
00766 fPID->SetTofADC1(cdsi->GetTofADC1());
00767 fPID->SetTofADC2(cdsi->GetTofADC2());
00768 fPID->SetTofADCTimeStamp0(cdsi->GetTofADCTimeStamp0());
00769 fPID->SetTofADCTimeStamp1(cdsi->GetTofADCTimeStamp1());
00770 fPID->SetTofADCTimeStamp2(cdsi->GetTofADCTimeStamp2());
00771 fPID->SetTofTimeStamp(cdsi->GetTofTimeStamp());
00772 fPID->SetTickSinceLast(cdsi->GetTickSinceLast());
00773 }
00774 }
00775
00776