|
//-*- mode: c++ -*- #include "BrGeantToMRSTracks.h" #include "BrSpectrometerTracks.h" #include "TClonesArray.h" ClassImp(BrGeantToMRSTracks) //_______________________________________________________________ BrGeantToMRSTracks::BrGeantToMRSTracks() : BrModule() // default constructor { fCombineModule = 0; fMrsTracks = 0; } //_______________________________________________________________ BrGeantToMRSTracks::BrGeantToMRSTracks(Char_t* Name,Char_t* Title) : BrModule(Name,Title) // normal constructor { fCombineModule = new BrModuleMatchTrack("MRS","MRS matching", "TPM1","TPM2","D5"); fMrsTracks = new TObjArray; } //_______________________________________________________________ BrGeantToMRSTracks::~BrGeantToMRSTracks() // default destructor { if (fCombineModule) delete fCombineModule; if (fMrsTracks){ fMrsTracks->Clear(); delete fMrsTracks; } } //_______________________________________________________________ void BrGeantToMRSTracks::Clear() { fMrsTracks->Clear(); fCombineModule->Clear(); } //_______________________________________________________________ void BrGeantToMRSTracks::Init() { fCombineModule->Init(); } //_______________________________________________________________ void BrGeantToMRSTracks::Event(BrEventNode* InputNode, BrEventNode* OutputNode) { Clear(); if (DebugLevel() > 0) fCombineModule->SetDebugLevel(DebugLevel()); // Use BrMatchedTrack to combine tracks, to use fiducial cuts fCombineModule->CombineFrontBack(OutputNode); TClonesArray* MatchedTracks = fCombineModule->GetMatchedTracks(); if (!MatchedTracks){ cout << " In BrGeantToMRSTracks: No MatchedTracks list! " << endl; } Char_t Name[32]; sprintf(Name,"GeantTracks"); BrDataTable *GeantTracks = InputNode->GetDataTable(Name); if (!GeantTracks){ cout << " In BrGeantToMRSTracks: No GeantTracks table! " << endl; return; } sprintf(Name,"DetectorTrack TPM1"); BrDataTable *FrontDetectorTracks = OutputNode->GetDataTable(Name); if (!FrontDetectorTracks){ cout << " In BrGeantToMRSTracks: No DetectorTrack TPM1 table! " << endl; return; } sprintf(Name,"DetectorTrack TPM2"); BrDataTable *BackDetectorTracks = OutputNode->GetDataTable(Name); if (!BackDetectorTracks){ cout << " In BrGeantToMRSTracks: No DetectorTrack TPM2 table! " << endl; return; } BrPlane3D BeamPlane(0,0,0,0,0,1,0,1,0); BrDataTable* mrstable = new BrDataTable("MrsTracks"); OutputNode->AddObject(mrstable); BrDetectorTrack* backtrack = 0; BrDetectorTrack* fronttrack = 0; BrGeantTrack* geanttrack = 0; BrMrsTrack* mrstrack = 0; BrMatchedTrack* matchedtrack = 0; if (DebugLevel()) cout << " BrGeantToMRSTracks: Number of matched tracks is: " << MatchedTracks->GetEntries() << endl; for (Int_t i_m=0; i_m<MatchedTracks->GetEntries(); i_m++){ matchedtrack = (BrMatchedTrack*)MatchedTracks->At(i_m); fronttrack = matchedtrack->GetFrontTrack(); backtrack = matchedtrack->GetBackTrack(); if ((backtrack->GetID()==fronttrack->GetID()) && (matchedtrack->GetStatus()==BrMatchedTrack::kOk)){ matchedtrack->SetID(backtrack->GetID()); // correctly matched track, now create new MRS track mrstrack = new BrMrsTrack(); mrstrack->SetTrackId(matchedtrack->GetID()); mrstrack->SetMatchedTrack(matchedtrack); mrstable->Add(mrstrack); if (DebugLevel()) cout << " Created GEANT MRS track nr: " << mrstable->GetEntries()-1 <<" ID: " << mrstrack->GetTrackId() << endl; for (Int_t i_g=0; i_g<GeantTracks->GetEntries(); i_g++){ geanttrack = (BrGeantTrack*)GeantTracks->At(i_g); if (geanttrack->TrackNo() == mrstrack->GetTrackId()){ mrstrack->SetMomentum(geanttrack->P()*geanttrack->Charge()); if (DebugLevel()) cout << " Momentum: " << mrstrack->GetMomentum() << " Momentum from Match: " << matchedtrack->GetMomentum() << endl; } } // loop over Geanttracks // find intersection with beam plane BrDetectorVolume* frontvolume = fCombineModule->GetFrontVolume(); BrLine3D local_frontline = fronttrack->GetTrackLine(); BrLine3D global_frontline = frontvolume->LocalToGlobal(local_frontline); BrVector3D intersection = BeamPlane.GetIntersectionWithLine(global_frontline); mrstrack->SetTx(intersection.X()); mrstrack->SetTy(intersection.Y()); mrstrack->SetTz(intersection.Z()); if(DebugLevel()>=1){ cout << "Track # " << mrstrack->GetTrackId() << endl; cout << " P " << mrstrack->GetMomentum() << endl; cout << " Tx " << mrstrack->GetTx() << endl; cout << " Ty " << mrstrack->GetTy() << endl; cout << " Tz " << mrstrack->GetTz() << endl; } } // if matching front-back tracks found } // loop over matched tracks /* for (Int_t i_b=0; i_b<BackDetectorTracks->GetEntries(); i_b++){ backtrack = (BrDetectorTrack*)BackDetectorTracks->At(i_b); for (Int_t i_f=0; i_f<FrontDetectorTracks->GetEntries(); i_f++){ fronttrack = (BrDetectorTrack*)FrontDetectorTracks->At(i_f); if (backtrack->GetID()==fronttrack->GetID()){ matchedtrack = new BrMatchedTrack(); matchedtrack->SetFrontTrack(fronttrack); matchedtrack->SetBackTrack(backtrack); matchedtrack->SetID(backtrack->GetID()); mrstrack = new BrMrsTrack(); mrstrack->SetId(matchedtrack->GetID()); mrstrack->FillFrontTrack(fronttrack); mrstrack->FillBackTrack(backtrack); mrstrack->SetMatchedTrack(matchedtrack); mrstable->Add(mrstrack); if (DebugLevel()) cout << " Created GEANT MRS track nr: " << mrstable->GetEntries()-1 <<" ID: " << mrstrack->GetId() << endl; for (Int_t i_g=0; i_g<GeantTracks->GetEntries(); i_g++){ geanttrack = (BrGeantTrack*)GeantTracks->At(i_g); if (geanttrack->TrackNo() == mrstrack->GetId()){ mrstrack->SetMomentum(geanttrack->P()*geanttrack->Charge()); if (DebugLevel()) cout << " Momentum: " << mrstrack->GetMomentum() << endl; } } // loop over Geanttracks } // matching front and back found } // loop over fronttracks } // loop over backtracks */ if (DebugLevel()) cout << " Number of GEANT MRS tracks created: " << mrstable->GetEntries() << endl; } |
||||||
This page automatically generated by script docBrat by Christian Holm |
Copyright ; 2002 BRAHMS Collaboration
<brahmlib@rcf.rhic.bnl.gov>
|