00001
00002
00003
00004
00005
00006
00008
00009 #include "AnalysisNtuples/Module/ANtpRecoNtpManipulator.h"
00010 #include "AnalysisNtuples/ANtpDefaultValue.h"
00011 #include "MessageService/MsgService.h"
00012 #include "MCNtuple/NtpMCTruth.h"
00013 #include "MCNtuple/NtpMCStdHep.h"
00014 #include "TruthHelperNtuple/NtpTHEvent.h"
00015 #include "TruthHelperNtuple/NtpTHTrack.h"
00016 #include "TruthHelperNtuple/NtpTHShower.h"
00017 #include "TruthHelperNtuple/NtpTHStrip.h"
00018 #include "Validity/VldContext.h"
00019 #include "Conventions/ReleaseType.h"
00020
00021 #include <cassert>
00022 #include <algorithm>
00023 #include <string>
00024
00025 using std::string;
00026
00027 ClassImp(ANtpRecoNtpManipulator)
00028
00029 CVSID("$Id: ANtpRecoNtpManipulator.cxx,v 1.16 2009/06/10 17:09:04 brebel Exp $");
00030
00031
00032 ANtpRecoNtpManipulator::ANtpRecoNtpManipulator() :
00033 fEventManipulator(0),
00034 fSnarlManipulator(0),
00035 fSliceManipulator(0),
00036 fMCManipulator(0),
00037 fNtpMCRecord(0),
00038 fNtpSRRecord(0),
00039 fNtpSRShieldStrip(0),
00040 fNtpTHRecord(0)
00041 {
00042 fEventManipulator = new ANtpEventManipulator();
00043 fSnarlManipulator = new ANtpSnarlManipulator();
00044 fSliceManipulator = new ANtpSliceManipulator();
00045 fMCManipulator = new ANtpMCManipulator();
00046
00047 MSG("ANtpRecoNtpManipulator", Msg::kDebug) << "ANtpRecoNtpManipulator::Constructor" << endl;
00048
00049 }
00050
00051
00052 ANtpRecoNtpManipulator::ANtpRecoNtpManipulator(NtpSRRecord *record,
00053 NtpMCRecord *mcRecord,
00054 NtpTHRecord *thRecord) :
00055 fEventManipulator(0),
00056 fSnarlManipulator(0),
00057 fSliceManipulator(0),
00058 fMCManipulator(0),
00059 fNtpMCRecord(mcRecord),
00060 fNtpSRRecord(record),
00061 fNtpSRCosmicRay(record->crhdr),
00062 fNtpSRDmxStatus(record->dmxstatus),
00063 fNtpSREventSummary(record->evthdr),
00064 fNtpSRShieldStrip(0),
00065 fNtpSRShieldSummary(record->vetohdr),
00066 fNtpTHRecord(thRecord),
00067 fNtpStRecord(0),
00068 fEventArray(record->evt),
00069 fTrackArray(record->trk),
00070 fShowerArray(record->shw),
00071 fStripArray(record->stp),
00072 fVetoStripArray(record->vetostp),
00073 fSliceArray(record->slc),
00074 fMCArray(0),
00075 fStdArray(0),
00076 fTHShwArray(0),
00077 fTHTrkArray(0),
00078 fTHStpArray(0),
00079 fTHEvtArray(0)
00080 {
00081 if(fNtpSRRecord){
00082
00083 const RecCandHeader &header = record->GetHeader();
00084
00085 fRun = header.GetRun();
00086 fSubRun = header.GetSubRun();
00087 fSnarl = header.GetSnarl();
00088 fTriggerSource = header.GetTrigSrc();
00089 fSpillType = header.GetRemoteSpillType();
00090 }
00091
00092 if(fNtpMCRecord){
00093 fMCArray = mcRecord->mc;
00094 fStdArray = mcRecord->stdhep;
00095 }
00096 if(fNtpTHRecord){
00097 fTHShwArray = thRecord->thshw;
00098 fTHStpArray = thRecord->thstp;
00099 fTHTrkArray = thRecord->thtrk;
00100 fTHEvtArray = thRecord->thevt;
00101 }
00102
00103 fEventManipulator = new ANtpEventManipulator();
00104 fSnarlManipulator = new ANtpSnarlManipulator();
00105 fSliceManipulator = new ANtpSliceManipulator();
00106 fMCManipulator = new ANtpMCManipulator();
00107
00108 fEventManipulator->Initialize(fEventArray, fTrackArray, fShowerArray, fStripArray);
00109 fSnarlManipulator->Initialize(fEventArray, fTrackArray, fShowerArray, fStripArray);
00110 fSliceManipulator->Initialize(fSliceArray, fStripArray);
00111 fMCManipulator->Initialize(fMCArray, fStdArray, fTHEvtArray, fTHTrkArray, fTHShwArray,
00112 fTHStpArray);
00113
00114 MSG("ANtpRecoNtpManipulator", Msg::kDebug) << "ANtpRecoNtpManipulator::Constructor" << endl;
00115 }
00116
00117
00118 ANtpRecoNtpManipulator::ANtpRecoNtpManipulator(NtpStRecord *record) :
00119 fEventManipulator(0),
00120 fSnarlManipulator(0),
00121 fSliceManipulator(0),
00122 fMCManipulator(0),
00123 fNtpMCRecord(0),
00124 fNtpSRRecord(0),
00125 fNtpSRCosmicRay(record->crhdr),
00126 fNtpSRDmxStatus(record->dmxstatus),
00127 fNtpSRDataQuality(record->dataquality),
00128 fNtpSREventSummary(record->evthdr),
00129 fNtpSRShieldStrip(0),
00130 fNtpSRShieldSummary(record->vetohdr),
00131 fNtpTHRecord(0),
00132 fNtpStRecord(record),
00133 fEventArray(record->evt),
00134 fTrackArray(record->trk),
00135 fShowerArray(record->shw),
00136 fClusterArray(record->clu),
00137 fStripArray(record->stp),
00138 fVetoStripArray(record->vetostp),
00139 fSliceArray(record->slc),
00140 fMCArray(record->mc),
00141 fStdArray(record->stdhep),
00142 fTHShwArray(record->thshw),
00143 fTHTrkArray(record->thtrk),
00144 fTHStpArray(record->thstp),
00145 fTHEvtArray(record->thevt)
00146 {
00147 if(fNtpStRecord){
00148
00149 const RecCandHeader &header = record->GetHeader();
00150
00151 fRun = header.GetRun();
00152 fSubRun = header.GetSubRun();
00153 fSnarl = header.GetSnarl();
00154 fTriggerSource = header.GetTrigSrc();
00155 fSpillType = header.GetRemoteSpillType();
00156
00157 string relName = record->GetTitle();
00158 string mcinfo = "";
00159 if(record->GetVldContext()->GetSimFlag() == SimFlag::kMC){
00160 mcinfo = "Daikon";
00161 string temp = record->mchdr.geninfo.codename;
00162 if(temp.size() != 0) mcinfo = temp;
00163 }
00164 ReleaseType::Release_t release = record->GetRelease();
00165
00166 string relMCName = ReleaseType::AsString(release);
00167 fReleaseMCType = relMCName.c_str();
00168
00169 }
00170
00171
00172 fEventManipulator = new ANtpEventManipulator();
00173 fSnarlManipulator = new ANtpSnarlManipulator();
00174 fSliceManipulator = new ANtpSliceManipulator();
00175 fMCManipulator = new ANtpMCManipulator();
00176
00177 fEventManipulator->Initialize(fEventArray,
00178 fTrackArray,
00179 fShowerArray,
00180 fStripArray);
00181 fSnarlManipulator->Initialize(fEventArray,
00182 fTrackArray,
00183 fShowerArray,
00184 fStripArray);
00185 fSliceManipulator->Initialize(fSliceArray,
00186 fStripArray);
00187 fMCManipulator->Initialize(fMCArray,
00188 fStdArray,
00189 fTHEvtArray,
00190 fTHTrkArray,
00191 fTHShwArray,
00192 fTHStpArray);
00193
00194 MSG("ANtpRecoNtpManipulator", Msg::kDebug) << "ANtpRecoNtpManipulator::Constructor" << endl;
00195 }
00196
00197
00198 ANtpRecoNtpManipulator::~ANtpRecoNtpManipulator()
00199 {
00200 if(fEventManipulator) delete fEventManipulator;
00201 if(fSnarlManipulator) delete fSnarlManipulator;
00202 if(fSliceManipulator) delete fSliceManipulator;
00203 if(fMCManipulator) delete fMCManipulator;
00204
00205 MSG("ANtpRecoNtpManipulator", Msg::kDebug) << "ANtpRecoNtpManipulator::Destructor" << endl;
00206
00207 }
00208
00209
00210 ANtpEventManipulator *ANtpRecoNtpManipulator::GetEventManipulator() const
00211 {
00212 return fEventManipulator;
00213 }
00214
00215
00216 ANtpSnarlManipulator *ANtpRecoNtpManipulator::GetSnarlManipulator() const
00217 {
00218 return fSnarlManipulator;
00219 }
00220
00221
00222 ANtpSliceManipulator *ANtpRecoNtpManipulator::GetSliceManipulator() const
00223 {
00224 return fSliceManipulator;
00225 }
00226
00227
00228 ANtpMCManipulator *ANtpRecoNtpManipulator::GetMCManipulator() const
00229 {
00230 return fMCManipulator;
00231 }
00232
00233
00234 NtpSREventSummary ANtpRecoNtpManipulator::GetSnarlEventSummary() const
00235 {
00236 return fNtpSREventSummary;
00237 }
00238
00239
00240 NtpSRShieldStrip *ANtpRecoNtpManipulator::GetShieldStrip(Int_t index)
00241 {
00242 fNtpSRShieldStrip = 0;
00243
00244 fNtpSRShieldStrip = dynamic_cast<NtpSRShieldStrip *>(fVetoStripArray->At(index));
00245
00246 return fNtpSRShieldStrip;
00247 }
00248
00249
00250 NtpSRShieldSummary ANtpRecoNtpManipulator::GetSnarlShieldSummary() const
00251 {
00252 return fNtpSRShieldSummary;
00253 }
00254
00255
00256 NtpSRCosmicRay ANtpRecoNtpManipulator::GetCosmicRayInfo() const
00257 {
00258 return fNtpSRCosmicRay;
00259 }
00260
00261
00262 NtpSRDmxStatus ANtpRecoNtpManipulator::GetDmxStatusInfo() const
00263 {
00264 return fNtpSRDmxStatus;
00265 }
00266
00267
00268 NtpSRDataQuality ANtpRecoNtpManipulator::GetDataQuality() const
00269 {
00270 return fNtpSRDataQuality;
00271 }
00272
00273
00274 Int_t ANtpRecoNtpManipulator::GetRun() const
00275 {
00276 return fRun;
00277 }
00278
00279
00280 Int_t ANtpRecoNtpManipulator::GetSubRun() const
00281 {
00282 return fSubRun;
00283 }
00284
00285
00286 Int_t ANtpRecoNtpManipulator::GetSnarl() const
00287 {
00288 return fSnarl;
00289 }
00290
00291
00292 Int_t ANtpRecoNtpManipulator::GetTriggerSource() const
00293 {
00294 return fTriggerSource;
00295 }
00296
00297
00298 Int_t ANtpRecoNtpManipulator::GetSpillType() const
00299 {
00300 return fSpillType;
00301 }
00302
00303
00304 TString ANtpRecoNtpManipulator::GetReleaseType() const
00305 {
00306 return fReleaseType;
00307 }
00308
00309
00310 TString ANtpRecoNtpManipulator::GetMCType() const
00311 {
00312 return fMCType;
00313 }
00314
00315
00316 TString ANtpRecoNtpManipulator::GetReleaseMCType() const
00317 {
00318 return fReleaseMCType;
00319 }
00320
00321
00322 NtpStRecord *ANtpRecoNtpManipulator::GetNtpStRecord() const
00323 {
00324 return fNtpStRecord;
00325 }
00326
00327
00328 TClonesArray *ANtpRecoNtpManipulator::GetStripArray() const
00329 {
00330 return fStripArray;
00331 }
00332
00333
00334 TClonesArray *ANtpRecoNtpManipulator::GetVetoStripArray() const
00335 {
00336 return fVetoStripArray;
00337 }
00338
00339
00340 TClonesArray *ANtpRecoNtpManipulator::GetEventArray() const
00341 {
00342 return fEventArray;
00343 }
00344
00345
00346 TClonesArray *ANtpRecoNtpManipulator::GetShowerArray() const
00347 {
00348 return fShowerArray;
00349 }
00350
00351
00352 TClonesArray *ANtpRecoNtpManipulator::GetClusterArray() const
00353 {
00354 return fClusterArray;
00355 }
00356
00357
00358 TClonesArray *ANtpRecoNtpManipulator::GetTrackArray() const
00359 {
00360 return fTrackArray;
00361 }
00362
00363
00364 TClonesArray *ANtpRecoNtpManipulator::GetSliceArray() const
00365 {
00366 return fSliceArray;
00367 }
00368
00369
00370 TClonesArray *ANtpRecoNtpManipulator::GetStdHepArray() const
00371 {
00372 return fStdArray;
00373 }
00374
00375
00376 TClonesArray *ANtpRecoNtpManipulator::GetMCArray() const
00377 {
00378 return fMCArray;
00379 }
00380
00381
00382 TClonesArray *ANtpRecoNtpManipulator::GetTHStpArray() const
00383 {
00384 return fTHStpArray;
00385 }
00386
00387
00388 TClonesArray *ANtpRecoNtpManipulator::GetTHShwArray() const
00389 {
00390 return fTHShwArray;
00391 }
00392
00393
00394 TClonesArray *ANtpRecoNtpManipulator::GetTHEvtArray() const
00395 {
00396 return fTHEvtArray;
00397 }
00398
00399
00400 TClonesArray *ANtpRecoNtpManipulator::GetTHTrkArray() const
00401 {
00402 return fTHTrkArray;
00403 }
00404
00405
00406 void ANtpRecoNtpManipulator::SetPrimaryTrackCriteria(Int_t useNPlanes, Int_t useLength,
00407 Int_t usePH)
00408 {
00409 fEventManipulator->SetPrimaryTrackCriteria(useNPlanes, useLength, usePH);
00410 fSnarlManipulator->SetPrimaryTrackCriteria(useNPlanes, useLength, usePH);
00411
00412 return;
00413 }
00414
00415
00416 void ANtpRecoNtpManipulator::SetPrimaryShowerCriteria(Int_t useNPlanes, Int_t usePH)
00417 {
00418 fEventManipulator->SetPrimaryShowerCriteria(useNPlanes, usePH);
00419 fSnarlManipulator->SetPrimaryShowerCriteria(useNPlanes, usePH);
00420
00421 return;
00422 }
00423
00424
00425 void ANtpRecoNtpManipulator::SetRecord(NtpSRRecord *record, NtpMCRecord *mcRecord,
00426 NtpTHRecord *thRecord)
00427 {
00428
00429 fNtpMCRecord = mcRecord;
00430 fNtpSRRecord = record;
00431 fNtpSRCosmicRay = record->crhdr;
00432 fNtpSRDmxStatus = record->dmxstatus;
00433 fNtpSREventSummary = record->evthdr;
00434 fNtpSRShieldStrip = 0;
00435 fNtpSRShieldSummary = record->vetohdr;
00436 fNtpTHRecord = thRecord;
00437 fNtpStRecord = 0;
00438 fEventArray = record->evt;
00439 fTrackArray = record->trk;
00440 fShowerArray = record->shw;
00441 fClusterArray = record->clu;
00442 fStripArray = record->stp;
00443 fVetoStripArray = record->vetostp;
00444 fSliceArray = record->slc;
00445 fMCArray = 0;
00446 fStdArray = 0;
00447 fTHShwArray = 0;
00448 fTHStpArray = 0;
00449 fTHTrkArray = 0;
00450 fTHEvtArray = 0;
00451
00452 if(fNtpMCRecord){
00453 fMCArray = mcRecord->mc;
00454 fStdArray = mcRecord->stdhep;
00455 }
00456 if(fNtpTHRecord){
00457 fTHShwArray = thRecord->thshw;
00458 fTHStpArray = thRecord->thstp;
00459 fTHTrkArray = thRecord->thtrk;
00460 fTHEvtArray = thRecord->thevt;
00461 }
00462
00463 fEventManipulator->Initialize(fEventArray, fTrackArray, fShowerArray, fStripArray);
00464 fSnarlManipulator->Initialize(fEventArray, fTrackArray, fShowerArray, fStripArray);
00465 fSliceManipulator->Initialize(fSliceArray, fStripArray);
00466 fMCManipulator->Initialize(fMCArray, fStdArray, fTHShwArray, fTHStpArray, fTHEvtArray,
00467 fTHTrkArray);
00468
00469 return;
00470 }
00471
00472
00473 void ANtpRecoNtpManipulator::SetRecord(NtpStRecord *record)
00474 {
00475 fNtpMCRecord = 0;
00476 fNtpSRRecord = 0;
00477 fNtpSRCosmicRay = record->crhdr;
00478 fNtpSRDmxStatus = record->dmxstatus;
00479 fNtpSREventSummary = record->evthdr;
00480 fNtpSRShieldStrip = 0;
00481 fNtpSRShieldSummary = record->vetohdr;
00482 fNtpTHRecord = 0;
00483 fNtpStRecord = record;
00484 fEventArray = record->evt;
00485 fTrackArray = record->trk;
00486 fShowerArray = record->shw;
00487 fClusterArray = record->clu;
00488 fStripArray = record->stp;
00489 fVetoStripArray = record->vetostp;
00490 fSliceArray = record->slc;
00491 fMCArray = record->mc;
00492 fStdArray = record->stdhep;
00493 fTHShwArray = record->thshw;
00494 fTHTrkArray = record->thtrk;
00495 fTHStpArray = record->thstp;
00496 fTHEvtArray = record->thevt;
00497
00498 fEventManipulator->Initialize(fEventArray, fTrackArray, fShowerArray, fStripArray);
00499 fSnarlManipulator->Initialize(fEventArray, fTrackArray, fShowerArray, fStripArray);
00500 fSliceManipulator->Initialize(fSliceArray, fStripArray);
00501 fMCManipulator->Initialize(fMCArray, fStdArray, fTHShwArray, fTHStpArray, fTHEvtArray,
00502 fTHTrkArray);
00503
00504 return;
00505 }