FairRoot/PandaRoot
Classes | Functions | Variables
PndFTSCAGBTracker.cxx File Reference
#include "PndFTSCAGBTracker.h"
#include "PndFTSCAGBHit.h"
#include "PndFTSCAGBTrack.h"
#include "PndFTSArray.h"
#include "PndFTSCAMath.h"
#include "PndFTSCATrackLinearisationVector.h"
#include "PndFTSCAPerformance.h"
#include "TStopwatch.h"
#include "L1Timer.h"
#include "FTSCATarget.h"
#include "FTSCAHits.h"
#include "FTSCAHitsV.h"
#include "FTSCATracks.h"
#include "Math/SMatrix.h"
#include "TMatrixD.h"
#include "TVectorD.h"
#include <algorithm>
#include <fstream>
#include <iostream>
#include <sstream>
#include "PndFTSCAMCPoint.h"
#include "PndFTSPerformanceBase.h"

Go to the source code of this file.

Classes

struct  TrackHitRecord
 

Functions

t SetQPt (float_v(1.e-8f), CAMath::Abs(t.QPt())< 1.e-8f)
 
 for (unsigned char i=0;i< 15;i++) ok &
 
bool IsRightNeighbour (const FTSCANPlet &a, const FTSCANPlet &b, float pick, float &chi2)
 

Variables

bool SINGLE_THREADED = false
 
float_m ok = active0
 
const int StartStationShift = 1
 
vector< TrackHitRecordgTrackHitRecords
 

Function Documentation

for ( )

Definition at line 156 of file anal_hit_digi_cluster_fwendcap.C.

References b, c, PndMvdAdvancedPidAlgo::CalcLikelihood(), cemc, cluster_energy, CAMath::Cos(), dE, digi, digi_ene, PndEmcCluster::DigiList(), Double_t, dx, dxAbs, dyAbs, dySci, dzAbs, dzSci, PndEmcCluster::energy(), evt, f, fTrackParFinal, fTrackParGeane, PndMCTrack::Get4Momentum(), GFTrack::getCardinalRep(), PndEmcHit::GetCopy(), PndEmcDigi::GetCopy(), PndEmcHit::GetCrystal(), PndEmcDigi::GetCrystal(), PndEmcDigi::GetDetectorId(), PndEmcHit::GetEnergy(), PndEmcDigi::GetEnergy(), PndMvdPidCand::GetLikelihood(), PndEmcHit::GetModule(), PndEmcDigi::GetModule(), GFAbsTrackRep::getMom(), PndMCTrack::GetMomentum(), PndMvdPidCand::GetMvdHitdE(), PndMvdPidCand::GetMvdHitdx(), PndMvdPidCand::GetMvdHitMomentum(), PndMvdPidCand::GetMvdHits(), PndEmcDigi::GetPhi(), PndEmcDigi::GetPhiInt(), PndSdsMCPoint::GetPosition(), PndSdsMCPoint::GetPositionOut(), PndEmcHit::GetRow(), PndEmcDigi::GetRow(), GFAbsTrackRep::getStatusFlag(), PndEmcDigi::GetTheta(), PndEmcDigi::GetThetaInt(), GFTrack::getTrackRep(), PndEmcHit::GetXPad(), PndEmcDigi::GetXPad(), PndEmcHit::GetYPad(), PndEmcDigi::GetYPad(), hit, hit_ene, hit_pos(), i, kSpaceInSub, mctrack, name, nChFE, nFEBox, nhits, nsteps, offset(), offset1(), out, partGen, Pi, pos, PndMvdConvertApv::ReadNext(), rotNamech, CAMath::Sin(), thickness, TString, PndEmcCluster::where(), PndEmcDigi::where(), Y, PndEmcCluster::z(), and Z.

Referenced by PndFilteredPrimaryGenerator::AddFilter(), operator<<(), PndFsmCmpDet::readParameters(), and PndFsmCombiDet::readParameters().

156  {
157  //for (Int_t j=1;j< 3; j++){
158  Float_t sum_hit_ene,hit_ene_cp1,hit_ene_cp2,hit_ene_cp3,hit_ene_cp4;
159  Float_t sum_digi_ene,digi_ene_cp1,digi_ene_cp2,digi_ene_cp3,digi_ene_cp4;
160  Float_t sum_clus_ene=0;
161  Float_t cemc_sum=0;
162 
163  sum_hit_ene = hit_ene_cp1 = hit_ene_cp2 = hit_ene_cp3 = hit_ene_cp4 = 0;
164  sum_digi_ene = digi_ene_cp1 = digi_ene_cp2 = digi_ene_cp3 = digi_ene_cp4 =0;
165 
166  tsim->GetEntry(j);
167  tful->GetEntry(j);
168 
170  photon_momentum=mctrack->GetMomentum();
171  theta_mc=photon_momentum.Theta()*(180./TMath::Pi());
172  phi_mc=photon_momentum.Phi()*(180./TMath::Pi());
173 
174  p4mom=mctrack->Get4Momentum();
175 
176  Int_t nhits = hit_array->GetEntries();
177  for (Int_t i=0; i<nhits; i++)
178  {
180 
181  module_h = hit->GetModule();
182 
183  if (module_h==3){
184 
185  hene_mc->Fill(p4mom.E());
186 
187  hit_ene=hit->GetEnergy();
188 
189  hene_h->Fill(hit_ene);
190 
191  sum_hit_ene+=hit_ene;
192 
193  crystal_h = hit->GetCrystal();
194  row_h = hit->GetRow();
195  copy_h = hit->GetCopy();
196 
197  if (copy_h==1) hit_ene_cp1+=hit->GetEnergy();
198  if (copy_h==2) hit_ene_cp2+=hit->GetEnergy();
199  if (copy_h==3) hit_ene_cp3+=hit->GetEnergy();
200  if (copy_h==4) hit_ene_cp4+=hit->GetEnergy();
201 
202  TVector3 hit_pos(hit->GetX(),hit->GetY(),hit->GetZ());
203  hit_theta=hit_pos.Theta()*(180./TMath::Pi());
204  hit_phi=hit_pos.Phi()*(180./TMath::Pi());
205 
206  //cout << "MC: theta= "<<theta_mc<<", phi= "<<phi_mc<<endl;
207  h10->Fill(theta_mc);
208  h20->Fill(phi_mc);
209 
210  h10d->Fill(hit_theta);
211  h20d->Fill(hit_phi);
212 
213  h1->Fill(hit_theta-theta_mc);
214  h2->Fill(hit_phi-phi_mc);
215 
216  if (copy_h==1) hz_cp1_h->Fill(hit->GetZ());
217  if (copy_h==2) hz_cp2_h->Fill(hit->GetZ());
218  if (copy_h==3) hz_cp3_h->Fill(hit->GetZ());
219  if (copy_h==4) hz_cp4_h->Fill(hit->GetZ());
220 
221  hz_h->Fill(hit->GetZ());
222  hcp_z_h->Fill(copy_h,hit->GetZ());
223 
224  hxpad_x_h->Fill(hit->GetXPad(),hit->GetX());
225  hypad_y_h->Fill(hit->GetYPad(),hit->GetY());
226 
227  hx_row_h->Fill(hit->GetRow(),hit->GetX());
228 
229  id_h = hit->GetDetectorID();
230 
231  crystal_hid = (id_h%10000);
232  row_hid = ((id_h/1000000)%100);
233 
234  hmodule_h->Fill(module_h);
236  hx_y_h->Fill(hit->GetX(),hit->GetY());
237 
238  hid_h->Fill(id_h);
239  }
240  }
241  hhit_ene->Fill(sum_hit_ene);
242  hhit_ene_cp1->Fill(hit_ene_cp1);
243  hhit_ene_cp2->Fill(hit_ene_cp2);
244  hhit_ene_cp3->Fill(hit_ene_cp3);
245  hhit_ene_cp4->Fill(hit_ene_cp4);
246 
247  // digits
248  Int_t ndigits = digi_array->GetEntries();
249  //cout << "DIGI array == " << ndigits<< endl;
250  for (Int_t i=0; i<ndigits; i++)
251  {
253 
254  TVector3 digi_pos=digi->where();
255 
256  module_d = digi->GetModule();
257 
258  if (module_d==3){
259 
260  dene_mc->Fill(p4mom.E());
261 
262  digi_ene=digi->GetEnergy();
263  hene_d->Fill(digi_ene);
264 
265  sum_digi_ene+=digi_ene;
266 
267  crystal_d = digi->GetCrystal();
268  row_d = digi->GetRow();
269  copy_d = digi->GetCopy();
270 
271  Double_t digi_z=digi_pos.Z();
272  hz_d->Fill(digi_z);
273 
274  if (copy_d==1){
275  digi_ene_cp1+=digi->GetEnergy();
276  hz_cp1_d->Fill(digi_z);
277  }
278  if (copy_d==2){
279  digi_ene_cp2+=digi->GetEnergy();
280  hz_cp2_d->Fill(digi_z);
281  }
282  if (copy_d==3){
283  digi_ene_cp3+=digi->GetEnergy();
284  hz_cp3_d->Fill(digi_z);
285  }
286  if (copy_d==4){
287  digi_ene_cp4+=digi->GetEnergy();
288  hz_cp4_d->Fill(digi_z);
289  }
290 
291  digi_theta=(digi->GetTheta())*(180./TMath::Pi());
292  digi_phi=(digi->GetPhi())*(180./TMath::Pi());
293 
294  h10digi->Fill(theta_mc);
295  h20digi->Fill(phi_mc);
296 
297  h10ddigi->Fill(digi_theta);
298  h20ddigi->Fill(digi_phi);
299 
300  h1d->Fill(digi_theta-theta_mc);
301  h2d->Fill(digi_phi-phi_mc);
302 
303  hxpad_x_d->Fill(digi->GetXPad(),digi->GetThetaInt());
304  hypad_y_d->Fill(digi->GetYPad(),digi->GetPhiInt());
305 
306  hx_row_d->Fill(digi->GetRow(),digi->GetThetaInt());
307 
308  id_d = digi->GetDetectorId();
309 
310  crystal_did = (id_d%10000);
311  row_did = ((id_d/1000000)%100);
312 
313  hmodule_d->Fill(module_d);
315  hx_y_d->Fill(digi->GetThetaInt(),digi->GetPhiInt());
316 
317  hid_d->Fill(id_d);
318  }
319  }
320  hdigi_ene->Fill(sum_digi_ene);
321  hdigi_ene_cp1->Fill(digi_ene_cp1);
322  hdigi_ene_cp2->Fill(digi_ene_cp2);
323  hdigi_ene_cp3->Fill(digi_ene_cp3);
324  hdigi_ene_cp4->Fill(digi_ene_cp4);
325 
326  // reconstructed clusters
327  Int_t ClustNoOrig,ClustNo,ClustNo_cp1,ClustNo_cp2,ClustNo_cp3,ClustNo_cp4;
328  Int_t detectorID, module, mod3;
329  if (cluster_array->GetEntriesFast()>0)
330  {
331  Int_t idWithHighestEnergy = 0;
332  Double_t highestEnergy = -1.;
333 
334  // First find the cluster with the highest energy
335 
336  if (module_h==3){
337 
338  ClustNoOrig=ClustNo=
339  ClustNo_cp1=ClustNo_cp2=ClustNo_cp3=ClustNo_cp4=0;
340 
341  ClustNoOrig=cluster_array->GetEntriesFast();
342  for (Int_t i=0; i<ClustNoOrig; i++)
343  {
344  PndEmcCluster *cluster=(PndEmcCluster*)cluster_array->At(i);
345  cluster_energy=cluster->energy();
346 
347  std::vector<PndEmcDigi*> digiList=cluster->DigiList();
348  ndigi=digiList.size();
349 
350  if(ndigi != 0)
351  {
352  for(int k = 0; k < digiList.size(); k++)
353  {
354  detectorID = digiList[k]->GetDetectorId();
355  module = digiList[k]->GetModule();
356  row_c = digiList[k]->GetRow();
357  crystal_c = digiList[k]->GetCrystal();
358  copy_c = digiList[k]->GetCopy();
359 
360  crystal_cid = (detectorID%10000);
361  row_cid = ((detectorID/1000000)%100);
362 
364  //cluster_energy=cluster->energy();
365  }
366  }
367  mod3 = module;
368 
369  if (cluster_energy>highestEnergy)
370  {
371  idWithHighestEnergy = i;
372  highestEnergy = cluster_energy;
373  ClustNo++;
374  }
375  } // number of cluster
376 
377  // Lets analyze that cluster!
378  if (mod3 !=3 )cout << "mod3 = "<< mod3 << endl;
379  PndEmcCluster *cluster=(PndEmcCluster*)cluster_array->At(idWithHighestEnergy);
380 
381  TVector3 cluster_pos=cluster->where();
382  cluster_theta=cluster_pos.Theta()*(180./TMath::Pi());
383  cluster_phi=cluster_pos.Phi()*(180./TMath::Pi());//+360;
384 
385  cluster_energy=cluster->energy();
386  //ClustNo++;
387 
388  if (copy_c==1){
389  hclus_ene_cp1->Fill(cluster->energy());
390  hz_cp1_c->Fill(cluster->z());
391  ClustNo_cp1++;
392  }
393  if (copy_c==2){
394  hclus_ene_cp2->Fill(cluster->energy());
395  hz_cp2_c->Fill(cluster->z());
396  ClustNo_cp2++;
397  }
398  if (copy_c==3){
399  hclus_ene_cp3->Fill(cluster->energy());
400  hz_cp3_c->Fill(cluster->z());
401  ClustNo_cp3++;
402  }
403  if (copy_c==4){
404  hclus_ene_cp4->Fill(cluster->energy());
405  hz_cp4_c->Fill(cluster->z());
406  ClustNo_cp4++;
407  }
408 
409  hz_clust->Fill(cluster->z());
410 
411  //cout<<"CLUSTER: th="<<cluster_theta<<", ph="<<cluster_phi<<", energy="<<cluster_energy<<endl;
412 
413  sum_clus_ene+=cluster_energy;
414 
415  cemc=p4mom.E();
416  cemc_sum+=cemc;
417 
418  hclus_ene_mc->Fill(cemc);
419  hclus_ene->Fill(cluster_energy);
420 
421  hthc_mc->Fill(theta_mc); // Monte Carlo
422  hphc_mc->Fill(phi_mc); // Monte Carlo
423 
424  hthc->Fill(cluster_theta); // reconstructed
425  hphc->Fill(cluster_phi); // reconstructed
426 
429  }
430  }
431  hclus_ene_sum_mc->Fill(cemc_sum);
432 
433  hclus_ene_sum->Fill(sum_clus_ene);
434 
435  hClustNoOrig->Fill(ClustNoOrig);
436  hClustNo->Fill(ClustNo);
437 
438  hClNo_cp1->Fill(ClustNo_cp1);
439  hClNo_cp2->Fill(ClustNo_cp2);
440  hClNo_cp3->Fill(ClustNo_cp3);
441  hClNo_cp4->Fill(ClustNo_cp4);
442  }
PndMCTrack * mctrack
Double_t crystal_cid
Double_t hit_theta
Short_t GetCrystal() const
Definition: PndEmcHit.h:60
Short_t GetXPad() const
Definition: PndEmcHit.cxx:87
TClonesArray * digi
TVector3 hit_pos(hit->GetX(), hit->GetY(), hit->GetZ())
Double_t theta_mc
Double_t crystal_did
TVector3 where() const
virtual Double_t GetEnergy() const
Definition: PndEmcDigi.cxx:296
represents the reconstructed hit of one emc crystal
Definition: PndEmcDigi.h:40
Int_t i
Definition: run_full.C:25
Double_t crystal_c
TVector3 photon_momentum
Int_t GetThetaInt() const
Definition: PndEmcDigi.h:99
Int_t GetDetectorId() const
Definition: PndEmcDigi.h:97
TClonesArray * digi_array
TH2F * hrow_crystal_c
Short_t GetCrystal() const
Definition: PndEmcDigi.h:105
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const std::vector< Int_t > & DigiList() const
Definition: PndEmcCluster.h:40
TH2F * hrow_crystal_h
Double_t crystal_h
Double_t crystal_hid
Short_t GetCopy() const
Definition: PndEmcDigi.h:106
TLorentzVector Get4Momentum() const
Definition: PndMCTrack.cxx:102
Short_t GetModule() const
Definition: PndEmcDigi.h:103
TClonesArray * hit_array
Double_t GetTheta() const
Definition: PndEmcDigi.h:101
Double_t z() const
Double_t module_h
Double_t digi_ene
Double_t cluster_theta
Short_t GetYPad() const
Definition: PndEmcHit.cxx:120
TClonesArray * cluster_array
Double_t
virtual Double_t GetEnergy() const
Definition: PndEmcHit.h:54
Double_t cluster_energy
Double_t cluster_phi
Double_t row_did
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
Double_t hit_phi
Double_t digi_theta
Double_t row_hid
TH2F * hrow_crystal_d
represents the deposited energy of one emc crystal from simulation
Definition: PndEmcHit.h:26
Double_t row_cid
Short_t GetRow() const
Definition: PndEmcHit.h:59
Double_t GetPhi() const
Definition: PndEmcDigi.h:102
Short_t GetYPad() const
Definition: PndEmcDigi.cxx:261
Short_t GetRow() const
Definition: PndEmcDigi.h:104
virtual Double_t energy() const
const TVector3 & where() const
Definition: PndEmcDigi.h:111
TH1F * hclus_ene_sum_mc
PndSdsMCPoint * hit
Definition: anasim.C:70
Short_t GetXPad() const
Definition: PndEmcDigi.cxx:223
TClonesArray * mctrack_array
Short_t GetCopy() const
Definition: PndEmcHit.h:61
TLorentzVector p4mom
Double_t Pi
Short_t GetModule() const
Definition: PndEmcHit.h:58
Double_t module_d
Double_t digi_phi
Double_t hit_ene
Int_t GetPhiInt() const
Definition: PndEmcDigi.h:100
Double_t crystal_d
bool IsRightNeighbour ( const FTSCANPlet a,
const FTSCANPlet b,
float  pick,
float &  chi2 
)
inline

Definition at line 1863 of file PndFTSCAGBTracker.cxx.

References fabs(), i, FTSCANPlet::IHit(), FTSCANPlet::ISta(), FTSCANPlet::N(), FTSCANPlet::Param(), FTSCANPlet::QMomentum(), FTSCANPlet::QMomentumErr2(), sqrt(), and StartStationShift.

1864 {
1865  int start = (a.N() < b.N() ) ? 0 : a.N() - b.N();
1866  for( int i = start; i<a.N()-StartStationShift; i++)
1867  {
1868  if ( a.IHit(i+StartStationShift) != b.IHit(i) )
1869  {
1870  return false;
1871  }
1872  }
1873 
1874  //chi2 = fabs(a.QMomentum() - b.QMomentum())/sqrt(a.QMomentumErr2() + b.QMomentumErr2());
1875 
1876  chi2= fabs(a.Param().Tx() - b.Param().Tx())/sqrt(a.Param().Err2Tx() + b.Param().Err2Tx());
1877  //cout<<"b.ISta(b.N()-1) "<<b.ISta(b.N()-1)<<endl;
1878  if (b.ISta(b.N()-1)==26)
1879  {
1880  chi2 = fabs(a.QMomentum() - b.QMomentum())/sqrt(a.QMomentumErr2() + b.QMomentumErr2());
1881  }
1882  /*
1883  float chi2_qp = fabs(a.QMomentum() - b.QMomentum())/sqrt(a.Param().Err2QMomentum() + b.Param().Err2QMomentum());
1884  float chi2_x = fabs(a.Param().X() - b.Param().X())/sqrt(a.Param().Err2X() + b.Param().Err2X());
1885 
1886  cout<<"a.QP "<<a.QMomentum()<<" b.QP "<<b.QMomentum()<<endl;
1887  cout<<"a.C44 "<<a.Param().Err2QMomentum()<<" b.C44 "<<b.Param().Err2QMomentum()<<endl;
1888  cout<<"a.Tx() "<<a.Param().Tx()<<" b.Tx() "<<b.Param().Tx()<<endl;
1889  cout<<"a.C22 "<<a.Param().Err2Tx()<<" b.C22 "<<b.Param().Err2Tx()<<endl;
1890  cout<<"a.X() "<<a.Param().X()<<" b.X() "<<b.Param().X()<<endl;
1891  cout<<"a.C00 "<<a.Param().Err2X()<<" b.C00 "<<b.Param().Err2X()<<endl;
1892  cout<<"dif qp "<<a.QMomentum()-b.QMomentum()<<" tx "<<a.Param().Tx()-b.Param().Tx()<<" x "<<a.Param().X()-b.Param().X()<<endl;
1893  cout<<"chi2_tx "<<chi2<<" chi2_qp "<<chi2_qp<<" chi2_x "<<chi2_x<<endl;
1894  */
1895  if ( chi2 > pick ) return false; // neighbours must have same qp (or some other criteria)
1896 
1897  chi2 *= chi2;
1898  //cout<<"picked neigh \n";
1899  //cout<<endl;
1900  return true;
1901 }
int ISta(int IH) const
Definition: FTSCANPlets.h:36
const int StartStationShift
Int_t i
Definition: run_full.C:25
float QMomentumErr2() const
Definition: FTSCANPlets.h:43
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
float QMomentum() const
Definition: FTSCANPlets.h:41
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
const TES & IHit(int IH) const
Definition: FTSCANPlets.h:35
const PndFTSCATrackParam & Param() const
Definition: FTSCANPlets.h:38
int N() const
Definition: FTSCANPlets.h:33
t SetQPt ( float_v(1.e-8f)  )

Variable Documentation

vector<TrackHitRecord> gTrackHitRecords

Definition at line 1556 of file PndFTSCAGBTracker.cxx.

ok &return ok = active0
bool SINGLE_THREADED = false

Definition at line 75 of file PndFTSCAGBTracker.cxx.

const int StartStationShift = 1

Definition at line 1412 of file PndFTSCAGBTracker.cxx.