FairRoot/PandaRoot
Public Member Functions | Private Member Functions | Private Attributes | List of all members
OnlineDBuilderTask Class Reference

#include <OnlineDBuilderTask.h>

Inheritance diagram for OnlineDBuilderTask:

Public Member Functions

 OnlineDBuilderTask (TString trackBranchName)
 
virtual ~OnlineDBuilderTask ()
 
virtual void SetParContainers ()
 
virtual InitStatus Init ()
 
virtual void AddTrackBranch (TString trackBranchName)
 
virtual void Exec (Option_t *opt)
 
virtual void Finish ()
 

Private Member Functions

std::vector< std::pair
< TLorentzVector, int > > 
CombineFirstWithTwoSecond (std::vector< PndTrack * > first, std::vector< PndTrack * > second)
 Sets the branch name of the track data which should be analyzed. More...
 
TVector3 CorrectTrackParForPrimaryVertex (FairTrackParP input)
 
void Register ()
 
void Reset ()
 
 ClassDef (OnlineDBuilderTask, 1)
 

Private Attributes

std::map< TString, TClonesArray * > fTrack
 
TClonesArray * fMCTrack
 
TClonesArray * fDPlusArray
 
TClonesArray * fDMinusArray
 
TClonesArray * fDPlusArrayTrue
 
TClonesArray * fDMinusArrayTrue
 
FairRootManager * ioman
 

Detailed Description

Definition at line 35 of file OnlineDBuilderTask.h.

Constructor & Destructor Documentation

OnlineDBuilderTask::OnlineDBuilderTask ( TString  trackBranchName)

Default constructor

The quality numbers, qualityNumbers, as used here are defined in PndTrackingQualityAnalysis.h

Definition at line 37 of file OnlineDBuilderTask.cxx.

References AddTrackBranch().

37  :
38  FairTask("Creates PndMC test")
39 {
40  AddTrackBranch(trackBranchName);
41 }
virtual void AddTrackBranch(TString trackBranchName)
OnlineDBuilderTask::~OnlineDBuilderTask ( )
virtual

Destructor

Definition at line 48 of file OnlineDBuilderTask.cxx.

48  {
49 }

Member Function Documentation

virtual void OnlineDBuilderTask::AddTrackBranch ( TString  trackBranchName)
inlinevirtual

Definition at line 49 of file OnlineDBuilderTask.h.

References fTrack.

Referenced by OnlineDBuilderTask().

49  {
50  fTrack[trackBranchName] = 0;
51  }
std::map< TString, TClonesArray * > fTrack
OnlineDBuilderTask::ClassDef ( OnlineDBuilderTask  ,
 
)
private
std::vector< std::pair< TLorentzVector, int > > OnlineDBuilderTask::CombineFirstWithTwoSecond ( std::vector< PndTrack * >  first,
std::vector< PndTrack * >  second 
)
private

Sets the branch name of the track data which should be analyzed.

Analyses the track data and assigns quality indicator to track. Quality indicators: 1 : Not assigned 2 : All hits of the MC track were found and no additional once 3 : Some hits of the MC track were found and no additional once 4 : 70 % of all hits found belong to this MC track

Definition at line 133 of file OnlineDBuilderTask.cxx.

References CorrectTrackParForPrimaryVertex(), PndTrack::GetParamFirst(), i, and kTrack.

Referenced by Exec().

134 {
135  std::vector<std::pair<TLorentzVector, int> > result;
136 // std::cout << "OnlineDBuilderTask::CombineFirstWithTwoSecond: " << "first.size() = " << first.size() << std::endl;
137  if (second.size() == 0) return result;
138  for (size_t outer = 0; outer < first.size(); outer++){
139 // std::cout << "OnlineDBuilderTask::CombineFirstWithTwoSecond: " << "second.size() = " << second.size() << std::endl;
140  for (size_t inner1 = 0; inner1 < (second.size() - 1); inner1++){
141  //bool temp = inner1 < second.size() - 1; //[R.K. 01/2017] unused variable
142 // std::cout << "OnlineDBuilderTask::CombineFirstWithTwoSecond: " << "inner: " << 0 << ", second.size() - 1: " << second.size() - 1 << ", inner < second.size() - 1: " << temp << std::endl;
143  for (size_t inner2 = inner1 + 1; inner2 < second.size(); inner2++){
144  PndTrack* kTrack = first[outer];
145  PndTrack* pi1Track = second[inner1];
146  PndTrack* pi2Track = second[inner2];
147 
148  std::cout << "KTrack: " << kTrack->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack")) << " " << std::endl;
149  std::cout << "pi1Track: " << pi1Track->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack")) << " " << std::endl;
150  std::cout << "pi2Track: " << pi2Track->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack")) << " " << std::endl;
151 
152  FairMultiLinkedData kTrackLinks = kTrack->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack"));
153  FairMultiLinkedData pi1Links = pi1Track->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack"));
154  FairMultiLinkedData pi2Links = pi2Track->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack"));
155 
156  //int mostProbMCK = -1; //[R.K.03/2017] unused variable
157  int countK = -1;
158  int kMcId = -1;
159  for (int i = 0; i < kTrackLinks.GetNLinks(); i++){
160  if (kTrackLinks.GetLink(i).GetWeight() > countK){
161  countK = kTrackLinks.GetLink(i).GetWeight();
162  //mostProbMCK = i; //[R.K.03/2017] unused variable
163  kMcId = kTrackLinks.GetLink(i).GetIndex();
164  }
165  }
166 
167  //int mostProbMCPi = -1; //[R.K.03/2017] unused variable
168  int countPi = -1;
169  int pi1McId = -1;
170  for (int i = 0; i < pi1Links.GetNLinks(); i++){
171  if (pi1Links.GetLink(i).GetWeight() > countPi){
172  countPi = pi1Links.GetLink(i).GetWeight();
173  //mostProbMCPi = i; //[R.K.03/2017] unused variable
174  pi1McId = pi1Links.GetLink(i).GetIndex();
175  }
176  }
177 
178  //int mostProbMCPi2 = -1; //[R.K.03/2017] unused variable
179  //int countPi2 = -1; //[R.K. 01/2017] unused variable
180  int pi2McId = -1;
181  for (int i = 0; i < pi2Links.GetNLinks(); i++){
182  if (pi2Links.GetLink(i).GetWeight() > countPi){
183  countPi = pi2Links.GetLink(i).GetWeight();
184  //mostProbMCPi2 = i; //[R.K.03/2017] unused variable
185  pi2McId = pi2Links.GetLink(i).GetIndex();
186  }
187  }
188 
189  TVector3 kMom = CorrectTrackParForPrimaryVertex(kTrack->GetParamFirst());
190  TVector3 piMom = CorrectTrackParForPrimaryVertex(pi1Track->GetParamFirst());
191  TVector3 pi2Mom = CorrectTrackParForPrimaryVertex(pi2Track->GetParamFirst());
192 
193  TVector3 kMomOrig = kTrack->GetParamFirst().GetMomentum();
194  TVector3 piMomOrig = pi1Track->GetParamFirst().GetMomentum();
195  TVector3 pi2MomOrig = pi2Track->GetParamFirst().GetMomentum();
196 
197 // kMom = kMomOrig;
198 // piMom = piMomOrig;
199 // pi2Mom = pi2MomOrig;
200 
201  TLorentzVector K, pi1, pi2, D;
202 
203  K.SetXYZM(kMom.X(), kMom.Y(), kMom.Z(), TDatabasePDG::Instance()->GetParticle(321)->Mass());
204  pi1.SetXYZM(piMom.X(), piMom.Y(), piMom.Z(), TDatabasePDG::Instance()->GetParticle(211)->Mass());
205  pi2.SetXYZM(pi2Mom.X(), pi2Mom.Y(), pi2Mom.Z(), TDatabasePDG::Instance()->GetParticle(211)->Mass());
206 
207  D = K + pi1 + pi2;
208  std::cout << "D: " << D.Px() << "/" << D.Py() << "/" << D.Pz() << " " << D.M() << std::endl;
209  int matchIndex = 0;
210  if (kMcId == 3){
211  if(pi1McId == 4){
212  if (pi2McId == 5){
213  std::cout << "D+ Match!" << std::endl;
214  matchIndex = 1;
215  }
216  }
217  else if (pi1McId == 5){
218  if (pi2McId == 4){
219  std::cout << "D+ Match!" << std::endl;
220  matchIndex = 1;
221  }
222  }
223  }
224  if (kMcId == 6){
225  if(pi1McId == 7){
226  if (pi2McId == 8){
227  std::cout << "D- Match!" << std::endl;
228  matchIndex = -1;
229  }
230  }
231  else if (pi1McId == 8){
232  if (pi2McId == 7){
233  std::cout << "D- Match!" << std::endl;
234  matchIndex = -1;
235  }
236  }
237  }
238 
239  std::cout << "Created D Meson: " << matchIndex << std::endl;
240  result.push_back(std::make_pair(D, matchIndex));
241  }
242  }
243  }
244 // std::cout << "OnlineDBuilderTask::CombineFirstWithTwoSecond: " << " End of Method" << std::endl;
245  return result;
246 }
Int_t i
Definition: run_full.C:25
TVector3 CorrectTrackParForPrimaryVertex(FairTrackParP input)
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
TVector3 OnlineDBuilderTask::CorrectTrackParForPrimaryVertex ( FairTrackParP  input)
private

Definition at line 248 of file OnlineDBuilderTask.cxx.

References Double_t.

Referenced by CombineFirstWithTwoSecond().

248  {
249  TVector2 tMomVector(input.GetMomentum().X(), input.GetMomentum().Y());
250  TVector2 perpMomVector(- tMomVector.Y(), tMomVector.X());
251  TVector2 posVector(input.GetPosition().X(), input.GetPosition().Y());
252 
253 // TVector2 circleCenter(posVector);
254  TVector2 circleCenter = posVector - input.GetQ() * perpMomVector * 100/(0.3 * 2); //todo this has to be checked if sign is correct!
255 // circleCenter -= (tMomVector.Mod() * 100/(0.3 * 2)) * tMomVector.Rotate(TMath::Pi()/2.).Unit() * input.GetQ();
256 
257  std::cout << "MomentumVector: " << tMomVector.X() << "/" << tMomVector.Y()
258  << " PerMomVector: " << perpMomVector.X() << "/" << perpMomVector.Y()
259  << " posVector: " << posVector.X() << "/" << posVector.Y() << " Q: " << input.GetQ() << std::endl;
260 
261  TVector2 tempVec = posVector - circleCenter;
262  TVector2 tempVec2 = -1 * circleCenter;
263 
264  std::cout << "CircleCenter: " << circleCenter.X() << "/" << circleCenter.Y()
265  << " tempVec: " << tempVec.X() << "/" << tempVec.Y()
266  << " tempVec2: " << tempVec2.X() << "/" << tempVec2.Y() << std::endl;
267  Double_t deltaPhi = TVector2::Phi_mpi_pi(tempVec.Phi() - tempVec2.Phi()); //todo check if tempVec - tempVec2 or vice versa
268  TVector2 corrMom = tMomVector.Rotate(-deltaPhi); //todo check if deltaPhi or -deltaPhi
269  TVector2 corrPos = tempVec.Rotate(-deltaPhi);
270  corrPos += circleCenter;
271  std::cout << "Phi: " << deltaPhi << " correctedMomentum: " << corrMom.X() << "/" << corrMom.Y() << std::endl;
272  std::cout << "CorrectedPosition: " << corrPos.X() << "/" << corrPos.Y() << std::endl;
273  std::cout << "Corrected vs. Original -- x: " << corrMom.X() << " vs. " << input.GetMomentum().X() << "; y: " << corrMom.Y() << " vs. " << input.GetMomentum().Y() << std::endl;
274  return TVector3(corrMom.X(), corrMom.Y(), input.GetMomentum().Z());
275 }
Double_t
void OnlineDBuilderTask::Exec ( Option_t *  opt)
virtual

Virtual method Exec

Definition at line 78 of file OnlineDBuilderTask.cxx.

References CombineFirstWithTwoSecond(), fDMinusArray, fDMinusArrayTrue, fDPlusArray, fDPlusArrayTrue, fTrack, PndTrack::GetParamFirst(), i, trackArray, and vec.

78  {
79  fDMinusArray->Delete();
80  fDPlusArray->Delete();
81  fDMinusArrayTrue->Delete();
82  fDPlusArrayTrue->Delete();
83  std::cout << "-I- OnlineDBuilderTask::Exec: Event " << FairRootManager::Instance()->GetEntryNr() << std::endl;
84 
85  std::vector<PndTrack*> plusTracks;
86  std::vector<PndTrack*> minusTracks;
87 
88 // std::cout << "-I- OnlineDBuilderTask::Exec: " << " fTrack->GetEntriesFast(): " << fTrack->GetEntriesFast() << std::endl;
89  for (std::map<TString, TClonesArray*>::iterator iter = fTrack.begin(); iter != fTrack.end(); iter++){
90  TClonesArray* trackArray = iter->second;
91  for (Int_t trackIndex = 0; trackIndex < trackArray->GetEntriesFast(); trackIndex++){
92  PndTrack* myTrack = (PndTrack*)trackArray->At(trackIndex);
93  if (myTrack->GetParamFirst().GetQ() > 0) plusTracks.push_back(myTrack);
94  if (myTrack->GetParamFirst().GetQ() < 0) minusTracks.push_back(myTrack);
95  }
96  }
97 // std::cout << "-I- OnlineDBuilderTask::Exec: " << " After first Loop -- " << " plusTracks.size(): " << plusTracks.size() << ", minusTracks.size(): " << minusTracks.size() << std::endl;
98 
99  std::cout << "CombinePlusTracks: " << plusTracks.size() << std::endl;
100  for (size_t i = 0; i < plusTracks.size(); i++){
101  std::cout << plusTracks[i]->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack")) << std::endl;
102  }
103  std::cout << " MinusTracks: " << minusTracks.size() << std::endl;
104  for (size_t i = 0; i < minusTracks.size(); i++){
105  std::cout << minusTracks[i]->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack")) << std::endl;
106  }
107  std::vector<std::pair<TLorentzVector, int> > Dminus = CombineFirstWithTwoSecond(plusTracks, minusTracks);
108  std::cout << std::endl;
109  std::vector<std::pair<TLorentzVector, int > > Dplus = CombineFirstWithTwoSecond(minusTracks, plusTracks);
110  std::cout << std::endl;
111 // std::cout << "-I- OnlineDBuilderTask::Exec: Dminus.size: " << Dminus.size() << ", Dplus.size: " << Dplus.size() << std::endl;
112 
113  for (size_t i = 0; i < Dminus.size(); i++){
114  TLorentzVector* vec = new ((*fDMinusArray)[fDMinusArray->GetEntriesFast()]) TLorentzVector(Dminus[i].first);
115  std::cout << "DMinus " << Dminus[i].second << " " << vec->Px() << "/" << vec->Py() << "/" << vec->Pz() << " " << vec->M() << std::endl;
116  if (Dminus[i].second == -1){
117  new ((*fDMinusArrayTrue)[fDMinusArrayTrue->GetEntriesFast()]) TLorentzVector(Dminus[i].first); //TLorentzVector* vec1 = //[R.K.03/2017] unused variable
118  }
119  }
120  for (size_t i = 0; i < Dplus.size(); i++){
121 // std::cout << "-I- OnlineDBuilderTask::Exec:" << "TCA n entries: " << fDPlusArray->GetEntriesFast() << std::endl;
122  TLorentzVector* vec = new ((*fDPlusArray)[fDPlusArray->GetEntriesFast()]) TLorentzVector(Dplus[i].first);
123  std::cout << "DPlus " << Dplus[i].second << " " << vec->Px() << "/" << vec->Py() << "/" << vec->Pz() << " " << vec->M() << std::endl;
124 
125  if (Dplus[i].second == 1){
126  new ((*fDPlusArrayTrue)[fDPlusArrayTrue->GetEntriesFast()]) TLorentzVector(Dplus[i].first); //TLorentzVector* vec2 = //[R.K.03/2017] unused variable
127  }
128  }
129  std::cout << "-I- OnlineDBuilderTask::Exec: Finish " << std::endl << std::endl;
130 }
TClonesArray * trackArray
Definition: NHitsPerEvent.C:14
Int_t i
Definition: run_full.C:25
TClonesArray * fDPlusArrayTrue
TClonesArray * fDMinusArray
TClonesArray * fDPlusArray
std::vector< std::pair< TLorentzVector, int > > CombineFirstWithTwoSecond(std::vector< PndTrack * > first, std::vector< PndTrack * > second)
Sets the branch name of the track data which should be analyzed.
TClonesArray * fDMinusArrayTrue
std::map< TString, TClonesArray * > fTrack
dble_vec_t vec[12]
Definition: ranlxd.cxx:380
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
void OnlineDBuilderTask::Finish ( )
virtual

Definition at line 277 of file OnlineDBuilderTask.cxx.

References fDMinusArray, and fDPlusArray.

277  {
278  fDMinusArray->Delete();
279  fDPlusArray->Delete();
280 }
TClonesArray * fDMinusArray
TClonesArray * fDPlusArray
InitStatus OnlineDBuilderTask::Init ( )
virtual

Definition at line 52 of file OnlineDBuilderTask.cxx.

References fDMinusArray, fDMinusArrayTrue, fDPlusArray, fDPlusArrayTrue, fMCTrack, fTrack, and ioman.

52  {
53 
54  ioman = FairRootManager::Instance();
55  if (!ioman) {
56  std::cout << "-E- OnlineDBuilderTask::Init: "
57  << "RootManager not instantiated!" << std::endl;
58  return kFATAL;
59  }
60 
61  for (std::map<TString, TClonesArray*>::iterator iter = fTrack.begin(); iter != fTrack.end(); iter++){
62  iter->second = (TClonesArray*) ioman->GetObject(iter->first);
63  }
64  fMCTrack = (TClonesArray*) ioman->GetObject("MCTrack");
65 
66  fDPlusArray = ioman->Register("DPlus", "TLorentzVector", "Analysis", kTRUE);
67  fDMinusArray = ioman->Register("DMinus", "TLorentzVector", "Analysis", kTRUE);
68  fDPlusArrayTrue = ioman->Register("DPlusTrue", "TLorentzVector", "Analysis", kTRUE);
69  fDMinusArrayTrue = ioman->Register("DMinusTrue", "TLorentzVector", "Analysis", kTRUE);
70 
71  std::cout
72  << "-I- OnlineDBuilderTask::Init: Initialization successfull"
73  << std::endl;
74 
75  return kSUCCESS;
76 }
TClonesArray * fDPlusArrayTrue
TClonesArray * fDMinusArray
TClonesArray * fDPlusArray
TClonesArray * fMCTrack
TClonesArray * fDMinusArrayTrue
std::map< TString, TClonesArray * > fTrack
FairRootManager * ioman
void OnlineDBuilderTask::Register ( )
private
void OnlineDBuilderTask::Reset ( )
private
void OnlineDBuilderTask::SetParContainers ( )
virtual

Virtual method Init

Definition at line 43 of file OnlineDBuilderTask.cxx.

43  {
44 
45 }

Member Data Documentation

TClonesArray* OnlineDBuilderTask::fDMinusArray
private

Definition at line 83 of file OnlineDBuilderTask.h.

Referenced by Exec(), Finish(), and Init().

TClonesArray* OnlineDBuilderTask::fDMinusArrayTrue
private

Definition at line 86 of file OnlineDBuilderTask.h.

Referenced by Exec(), and Init().

TClonesArray* OnlineDBuilderTask::fDPlusArray
private

Definition at line 82 of file OnlineDBuilderTask.h.

Referenced by Exec(), Finish(), and Init().

TClonesArray* OnlineDBuilderTask::fDPlusArrayTrue
private

Definition at line 85 of file OnlineDBuilderTask.h.

Referenced by Exec(), and Init().

TClonesArray* OnlineDBuilderTask::fMCTrack
private

Definition at line 80 of file OnlineDBuilderTask.h.

Referenced by Init().

std::map<TString, TClonesArray*> OnlineDBuilderTask::fTrack
private

Definition at line 79 of file OnlineDBuilderTask.h.

Referenced by AddTrackBranch(), Exec(), and Init().

FairRootManager* OnlineDBuilderTask::ioman
private

Definition at line 89 of file OnlineDBuilderTask.h.

Referenced by Init().


The documentation for this class was generated from the following files: