23 #include "TClonesArray.h"
24 #include "TVirtualMC.h"
25 #include "TObjArray.h"
26 #include "TGeoMCGeometry.h"
27 #include "TLorentzVector.h"
28 #include "TParticle.h"
29 #include "TVirtualMC.h"
31 #include "TGeoSphere.h"
36 #include "TGeoCompositeShape.h"
37 #include "TGeoMatrix.h"
38 #include "TGeoManager.h"
46 #include "FairGeoInterface.h"
47 #include "FairGeoLoader.h"
48 #include "FairGeoNode.h"
49 #include "FairRootManager.h"
50 #include "FairVolume.h"
51 #include "FairGeoMedia.h"
52 #include "FairGeoMedium.h"
53 #include "FairGeoRootBuilder.h"
61 #include "FairRuntimeDb.h"
68 : FairDetector(
"PndDrcDefault",kTRUE),
87 fPos(TLorentzVector(0,0,0,0)),
88 fMom(TLorentzVector(0,0,0,0)),
98 fDetEffAtProduction(kFALSE),
99 fTransportEffAtProduction(kFALSE),
106 fTakeRealReflectivity(kFALSE),
107 fStopSecondaries(kFALSE),
108 fStopChargedTrackAfterDIRC(kFALSE),
114 fDrcPDCollection(new TClonesArray(
"PndDrcPDPoint")),
115 fDrcEVCollection(new TClonesArray(
"PndDrcEVPoint")),
116 fDrcBarCollection (new TClonesArray(
"PndDrcBarPoint")),
120 if(fVerboseLevel > 0){
121 std::cout<<
"-I- PndBarrelDIRC: fListOfSensitives contains:";
124 std::cout<<std::endl;
132 : FairDetector(name, active),
149 fRunCherenkov(kTRUE),
151 fPos(TLorentzVector(0,0,0,0)),
152 fMom(TLorentzVector(0,0,0,0)),
162 fDetEffAtProduction(kFALSE),
163 fTransportEffAtProduction(kFALSE),
170 fTakeRealReflectivity(kFALSE),
171 fStopSecondaries(kFALSE),
173 fStopChargedTrackAfterDIRC(kFALSE),
179 fDrcPDCollection(new TClonesArray(
"PndDrcPDPoint")),
180 fDrcEVCollection(new TClonesArray(
"PndDrcEVPoint")),
181 fDrcBarCollection (new TClonesArray(
"PndDrcBarPoint")),
185 if(fVerboseLevel > 0){
186 std::cout<<
"-I- PndBarrelDIRC: fListOfSensitives contains:";
189 std::cout<<std::endl;
219 cout <<
" -I- PndDrc: Intialization started... " << endl;
226 cout <<
"We do not have gGeoManager" << endl;
228 cout <<
"there is gGeoManager" << endl;
231 cout <<
"list of sensitives has " <<
fListOfSensitives.size() <<
" entries" << endl;
235 if (
fRunCherenkov==kFALSE) cout <<
" -I- PndDrc: Switching OFF Cherenkov Propagation" << endl;
260 Int_t credibleLimit=280;
261 Double_t efficiency[501] = {231.84,615.36,657.4,258.78,9839.92,44.67,67.87,51.01,41.49,5.36,49.4,2.13,35.49,8.66,5.03,7.51,13.27,18.71,3.92,3.66,8.2,0.56,7.68,2.87,10.06,3.47,3.39,6.99,6.01,4.92,6.25,5.97,6.92,8.29,10.45,8.68,8.6,9.79,11.76,9.53,10.98,9.9,10.97,11.31,10.88,10.78,12.16,12.38,12.37,13.04,12.36,13.18,13.7,13.85,13.66,13.98,14.55,14.93,14.82,14.97,14.98,15.14,15.35,15.37,15.43,15.49,15.59,15.84,15.84,15.92,16.01,16.22,16.41,16.42,16.52,16.86,17.1,17.17,17.22,17.46,17.79,17.99,18.13,18.33,18.34,18.53,18.72,18.95,19.02,19.15,19.28,19.45,19.66,19.69,19.77,19.73,19.95,19.98,20.17,20.29,20.33,20.37,20.47,20.48,20.57,20.75,20.8,20.84,20.86,20.88,21.0,21.06,21.0,21.06,21.06,21.04,21.1,21.14,21.08,21.17,21.3,21.38,21.49,21.58,21.69,21.77,21.87,22.02,22.13,22.29,22.35,22.45,22.53,22.55,22.64,22.67,22.73,22.74,22.71,22.79,22.76,22.77,22.76,22.75,22.78,22.7,22.68,22.72,22.66,22.64,22.7,22.67,22.71,22.67,22.75,22.77,22.83,22.84,22.93,22.97,23.0,23.08,23.16,23.27,23.25,23.37,23.44,23.49,23.55,23.52,23.58,23.64,23.63,23.58,23.64,23.63,23.62,23.64,23.63,23.66,23.59,23.59,23.56,23.58,23.63,23.57,23.66,23.62,23.67,23.64,23.54,23.57,23.51,23.53,23.45,23.3,23.41,23.25,23.21,23.08,23.01,22.92,22.9,22.76,22.76,22.61,22.53,22.48,22.39,22.29,22.24,22.2,22.12,22.07,21.96,21.89,21.87,21.76,21.74,21.58,21.49,21.48,21.37,21.29,21.2,21.17,21.03,20.98,20.92,20.85,20.76,20.69,20.58,20.56,20.47,20.37,20.32,20.24,20.13,20.08,19.9,19.84,19.77,19.69,19.63,19.51,19.41,19.27,19.06,19.01,18.87,18.7,18.49,18.41,18.17,17.98,17.84,17.69,17.5,17.25,17.15,16.98,16.79,16.66,16.48,16.32,16.19,16.02,15.88,15.77,15.67,15.5,15.39,15.23,15.09,15.04,14.92,14.75,14.7,14.5,14.45,14.34,14.25,14.16,14.13,14.0,13.92,13.84,13.76,13.73,13.61,13.54,13.52,13.45,13.41,13.39,13.31,13.22,13.17,13.13,13.06,13.2,13.09,12.97,12.92,12.73,12.65,12.4,12.22,12.02,11.79,11.59,11.33,11.03,10.68,10.46,10.14,9.88,9.62,9.36,9.14,8.87,8.63,8.51,8.24,8.07,7.88,7.77,7.65,7.52,7.35,7.27,7.21,7.1,6.92,6.89,6.79,6.74,6.56,6.54,6.5,6.39,6.33,6.25,6.27,6.14,6.06,6.04,6.01,5.91,5.89,5.79,5.75,5.75,5.67,5.61,5.51,5.52,5.43,5.43,5.34,5.31,5.35,5.23,5.2,5.14,5.11,5.11,5.01,4.98,4.93,4.99,4.89,4.82,4.87,4.8,4.7,4.65,4.65,4.61,4.49,4.56,4.44,4.42,4.44,4.35,4.35,4.27,4.29,4.19,4.13,4.08,4.02,4.07,3.92,3.95,3.88,3.82,3.86,3.74,3.71,3.66,3.72,3.62,3.55,3.56,3.57,3.45,3.38,3.36,3.36,3.28,3.25,3.19,3.26,3.13,3.17,3.15,3.04,2.98,2.93,2.98,2.9,2.89,2.9,2.81,2.74,2.81,2.68,2.73,2.7,2.57,2.58,2.55,2.55,2.37,2.39,2.39,2.44,2.37,2.26,2.27,2.27,2.23,2.26,2.14,2.08,2.15,2.06,2.09,2.04,2.0,1.95,2.02,1.87,1.9,1.8,1.87,1.85,1.87,1.81,1.86,1.74,1.74,1.63,1.59,1.5,1.5,1.44,1.47,1.32,1.24,1.28,1.19,1.21,1.21,1.1,1.1,1.05,1.06,0.94,0.92,0.87,0.92,0.81,0.86,0.78,0.77,0.8,0.67,0.7,0.81,0.61,0.64,0.71,0.66,0.67,0.68,0.69,0.68,0.73};
264 for(Int_t
i=0;
i<1000;
i++) lambda[
i] =
i;
267 for (Int_t iBin=0;iBin<1000;iBin++){
268 if (iBin<credibleLimit || iBin > 700){
279 cout <<
" -I- PndDrc: Intialization successfull" << endl;
284 if (fVerboseLevel >0) cout<<
" \n\n>>>>>>>>>>>>>>>>>>>>new event in the Barrel DIRC" <<endl;
293 Int_t
num = vol->getMCid();
298 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
299 fTime = gMC->TrackTime() * 1.0e09;
301 gMC->TrackPosition(
fPos);
302 gMC->TrackMomentum(
fMom);
322 if(gMC->GetStack()->GetCurrentParentTrackNumber() != -1 ){
323 if(gMC->IsNewTrack()) gMC->StopTrack();
330 if(
fPdgCode != 50000050 && gMC->IsTrackExiting() && num == gMC->VolId(
"DrcBarSensor")){
331 cout<<
"track is stopped after the Barrel DIRC"<<endl;
334 if(nam.BeginsWith(
"DrcEVSensor") && gMC->IsTrackExiting() &&
fMom.Z() > 0.) gMC->StopTrack();
339 if (fVerboseLevel >0) cout<<
"Photon killed" << endl;
347 if(ra >
fDetEff->Eval(lambda)) gMC->StopTrack();
352 if(gMC->IsTrackExiting() && nam.Contains(
"LENS")){
353 if(
fMom.Z() > 0.) gMC->StopTrack();
365 Int_t NbouncesX, NbouncesY;
369 NumberOfBounces(
fPos.Vect(), PphoInitBar, barId, &NbouncesX, &NbouncesY, &angleX, &angleY);
371 Double_t n_quartz =
sqrt(1. + (0.696*lam_tr*lam_tr/(lam_tr*lam_tr-pow(0.068,2))) + (0.407*lam_tr*lam_tr/(lam_tr*lam_tr-pow(0.116,2))) + 0.897*lam_tr*lam_tr/(lam_tr*lam_tr-pow(9.896,2)));
375 Double_t TotalTrProb = pow(bounce_probX, (Int_t)NbouncesX)*pow(bounce_probY, (Int_t)NbouncesY);
377 if(ra_tr > TotalTrProb) gMC->StopTrack();
385 if(gMC->IsTrackEntering() && num == gMC->VolId(
"DrcEVSensor")){
389 if(gMC->IsTrackEntering()){
401 if(nam.BeginsWith(
"DrcEVSensor")){
414 TVector3 lnorm = TVector3(result[0],result[1],result[2]);
421 fTimeAtEVEntrance = 0.0;
426 if (gMC->IsTrackExiting() && num == gMC->VolId(
"DrcBarSensor") &&
fPos.Z()<-118.99){
431 if (gMC->IsTrackEntering()){
432 if (nam.BeginsWith(
"DrcCathodeSensor")){
434 std::cout<<
" -E- No PndGeoHandling loaded."<<std::endl;
438 Int_t mcpId, prismId;
439 sscanf(gMC->CurrentVolPath(),
"/cave_1/BarrelDIRC_0/DrcPDbase_%d/DrcMCP_%d", &prismId, &mcpId);
455 if(nam.BeginsWith(
"DrcBar") && gMC->IsTrackEntering()){
463 if(bpass && nam.BeginsWith(
"DrcBarSensor") ){
466 TString path = gMC->CurrentVolPath();
467 if (fVerboseLevel >1) cout<<
"Volume: " << nam << endl;
468 sscanf(path,
"/cave_1/BarrelDIRC_0/DrcBarBox_%d/DrcBarBoxCover_0/DrcBarBoxAir_0/DrcBarSensor_%d", &s, &
b);
470 if(s < 17)
fNBar = s*10 +
b;
471 else std::cout<<
"Error: Wrong BarBox Id "<< s <<std::endl;
473 TVector3 barMom =
fMom.Vect();
475 fMass = gMC->TrackMass();
508 if(dir.Theta() < 3.1415/2.){
511 if(dir.Theta() >= 3.1415/2.){
512 Z0 = -(start.Z() -
fzup);
514 X0 = Z0*tan(dir.Theta())*
cos(dir.Phi());
515 Y0 = Z0*tan(dir.Theta())*
sin(dir.Phi());
532 up_down.SetXYZ(0.,1.,0.);
534 left_right.SetXYZ(1.,0.,0.);
535 Double_t angle1 = dir.Angle(left_right);
536 if(angle1 >
fpi/2.){angle1 =
fpi - dir.Angle(left_right);}
537 Double_t angle2 = dir.Angle(up_down);
538 if(angle2 >
fpi/2.){angle2 =
fpi - dir.Angle(up_down);}
549 if(print){std::cout<<
"n = "<<n<<
", NN = "<<*NN<<
", x0 = "<<x0<<
", a = "<<a<<std::endl;}
551 if(x0 < 0.){x1 = x0 - (n+1)*a;}
552 if(print){std::cout<<
"xy = "<< x1<<std::endl;}
554 if((m/2. - TMath::Floor(m/2.)) == 0.) {
555 if(print){std::cout<<
"odd==0"<<std::endl;}
556 if(x0 >= 0. && x1 + xEn <= a){xK = x1 + xEn;}
557 if(x0 >= 0. && x1 + xEn > a){xK = 2*a - x1 - xEn; n = 1. +
n;}
558 if(x0 < 0. && x1 + xEn >= 0.){xK = a - (x1 + xEn); n = -1. -
n;}
559 if(x0 < 0. && x1 + xEn < 0.) {xK = a + x1 + xEn; n = -
n;}
560 if(print){std::cout<<
"xK = "<< xK<<
", n = "<<n<<std::endl;}
564 if((m/2. - TMath::Floor(m/2.)) != 0.) {
565 if(print){std::cout<<
"even!=0"<<std::endl;}
566 if(x0 >= 0. && x1 + xEn <= a){xK = a - (x1 + xEn);}
567 if(x0 >= 0. && x1 + xEn > a){xK = x1 + xEn -
a; n = 1. +
n;}
568 if(x0 < 0. && x1 + xEn >= 0.){xK = x1 + xEn; n = -1. -
n;}
569 if(x0 < 0. && x1 + xEn < 0.) {xK = - (x1 + xEn); n = -
n;}
570 if(print){std::cout<<
"xK = "<< xK<<
", n = "<<n<<std::endl;}
580 if (fVerboseLevel)
Print();
610 cout <<
"-I- PndDrc: " << nPDHits <<
" points registered in the photodetector for this event." << endl;
611 cout <<
"-I- PndDrc: " << nEVHits <<
" points registered in the expansion volume for this event." << endl;
612 cout <<
"-I- PndDrc: " << nBarHits <<
" points registered in the bar for this event." << endl;
614 if (fVerboseLevel>1){
631 Int_t nPDEntries = clPD1->GetEntriesFast();
632 cout <<
"-I- PndDrc: " << nPDEntries <<
" entries to add." << endl;
633 TClonesArray& clrefPD = *clPD2;
635 Int_t nBarEntries = clBar1->GetEntriesFast();
636 cout <<
"-I- PndDrc: " << nBarEntries <<
" entries to add." << endl;
637 TClonesArray& clrefBar = *clBar2;
642 for (Int_t
i=0;
i<nPDEntries;
i++) {
644 Int_t indexPD = oldpointPD->GetTrackID() +
offset;
645 oldpointPD->SetTrackID(indexPD);
650 for (Int_t
i=0;
i<nBarEntries;
i++) {
652 Int_t indexBar = oldpointBar->GetTrackID() +
offset;
653 oldpointBar->SetTrackID(indexBar);
658 cout <<
" -I- PndDrc: " << clPD2->GetEntriesFast() <<
" merged entries." << endl;
659 cout <<
" -I- PndDrc: " << clBar2->GetEntriesFast() <<
" merged entries." << endl;
665 cout<<
" ======= DRC:: ConstructGeometry() ======== " << endl;
666 cout<<
" ============================================= " << endl;
668 TString fileName = GetGeometryFileName();
669 if(fileName.EndsWith(
".root")){
670 ConstructRootGeometry();
672 std::cout<<
"Geometry format not supported!"<<std::endl;
675 cout<<
" ============================================= " << endl;
680 cout<<
" ==================================================== " << endl;
681 cout<<
" ======= DRC:: ConstructOpticalGeometry() ======== " << endl;
686 ephoton_i[0] = 1.907*1.0e-09;
687 ephoton_i[1] = 6.199*1.0e-09;
689 reflectivity_i[0] = 1.;
690 reflectivity_i[1] = 1.;
694 reflectivity_b[0] = 0.;
695 reflectivity_b[1] = 0.;
698 Int_t npoints_r = 46;
700 ephoton_r[0] = 1.907*1.0e-09;
701 ephoton_r[1] = 1.937*1.0e-09;
702 ephoton_r[2] = 1.968*1.0e-09;
703 ephoton_r[3] = 2.000*1.0e-09;
704 ephoton_r[4] = 2.033*1.0e-09;
705 ephoton_r[5] = 2.066*1.0e-09;
706 ephoton_r[6] = 2.101*1.0e-09;
707 ephoton_r[7] = 2.138*1.0e-09;
708 ephoton_r[8] = 2.175*1.0e-09;
709 ephoton_r[9] = 2.214*1.0e-09;
710 ephoton_r[10] = 2.254*1.0e-09;
711 ephoton_r[11] = 2.296*1.0e-09;
712 ephoton_r[12] = 2.339*1.0e-09;
713 ephoton_r[13] = 2.384*1.0e-09;
714 ephoton_r[14] = 2.431*1.0e-09;
715 ephoton_r[15] = 2.480*1.0e-09;
716 ephoton_r[16] = 2.530*1.0e-09;
717 ephoton_r[17] = 2.583*1.0e-09;
718 ephoton_r[18] = 2.638*1.0e-09;
719 ephoton_r[19] = 2.695*1.0e-09;
720 ephoton_r[20] = 2.755*1.0e-09;
721 ephoton_r[21] = 2.818*1.0e-09;
722 ephoton_r[22] = 2.883*1.0e-09;
723 ephoton_r[23] = 2.952*1.0e-09;
724 ephoton_r[24] = 3.024*1.0e-09;
725 ephoton_r[25] = 3.100*1.0e-09;
726 ephoton_r[26] = 3.179*1.0e-09;
727 ephoton_r[27] = 3.263*1.0e-09;
728 ephoton_r[28] = 3.351*1.0e-09;
729 ephoton_r[29] = 3.444*1.0e-09;
730 ephoton_r[30] = 3.542*1.0e-09;
731 ephoton_r[31] = 3.647*1.0e-09;
732 ephoton_r[32] = 3.757*1.0e-09;
733 ephoton_r[33] = 3.875*1.0e-09;
734 ephoton_r[34] = 3.999*1.0e-09;
735 ephoton_r[35] = 4.133*1.0e-09;
736 ephoton_r[36] = 4.275*1.0e-09;
737 ephoton_r[37] = 4.428*1.0e-09;
738 ephoton_r[38] = 4.592*1.0e-09;
739 ephoton_r[39] = 4.769*1.0e-09;
740 ephoton_r[40] = 4.959*1.0e-09;
741 ephoton_r[41] = 5.166*1.0e-09;
742 ephoton_r[42] = 5.391*1.0e-09;
743 ephoton_r[43] = 5.636*1.0e-09;
744 ephoton_r[44] = 5.904*1.0e-09;
745 ephoton_r[45] = 6.199*1.0e-09;
748 reflectivity_r[0] = 0.870;
749 reflectivity_r[1] = 0.880;
750 reflectivity_r[2] = 0.885;
751 reflectivity_r[3] = 0.890;
752 reflectivity_r[4] = 0.895;
753 reflectivity_r[5] = 0.900;
754 reflectivity_r[6] = 0.905;
755 reflectivity_r[7] = 0.910;
756 reflectivity_r[8] = 0.915;
757 reflectivity_r[9] = 0.920;
758 reflectivity_r[10] = 0.923;
759 reflectivity_r[11] = 0.925;
760 reflectivity_r[12] = 0.926;
761 reflectivity_r[13] = 0.928;
762 reflectivity_r[14] = 0.930;
763 reflectivity_r[15] = 0.935;
764 reflectivity_r[16] = 0.936;
765 reflectivity_r[17] = 0.937;
766 reflectivity_r[18] = 0.938;
767 reflectivity_r[19] = 0.940;
768 reflectivity_r[20] = 0.940;
769 reflectivity_r[21] = 0.939;
770 reflectivity_r[22] = 0.938;
771 reflectivity_r[23] = 0.938;
772 reflectivity_r[24] = 0.937;
773 reflectivity_r[25] = 0.937;
774 reflectivity_r[26] = 0.936;
775 reflectivity_r[27] = 0.935;
776 reflectivity_r[28] = 0.934;
777 reflectivity_r[29] = 0.932;
778 reflectivity_r[30] = 0.930;
779 reflectivity_r[31] = 0.928;
780 reflectivity_r[32] = 0.926;
781 reflectivity_r[33] = 0.924;
782 reflectivity_r[34] = 0.922;
783 reflectivity_r[35] = 0.920;
784 reflectivity_r[36] = 0.910;
785 reflectivity_r[37] = 0.905;
786 reflectivity_r[38] = 0.895;
787 reflectivity_r[39] = 0.890;
788 reflectivity_r[40] = 0.885;
789 reflectivity_r[41] = 0.860;
790 reflectivity_r[42] = 0.840;
791 reflectivity_r[43] = 0.820;
792 reflectivity_r[44] = 0.800;
793 reflectivity_r[45] = 0.780;
795 gMC->DefineOpSurface(
"LensSurface", kGlisur, kDielectric_dielectric, kGround, 0.0);
796 gMC->DefineOpSurface(
"MirrSurface", kGlisur, kDielectric_metal, kPolished, 0.0);
797 gMC->DefineOpSurface(
"EVSurface", kGlisur, kDielectric_metal, kPolished, 0.0);
798 gMC->DefineOpSurface(
"BlackSurface", kGlisur, kDielectric_dielectric, kPolished, 0.0);
815 gMC->SetMaterialProperty(
"BlackSurface",
"REFLECTIVITY", npoints_i, ephoton_i, reflectivity_b);
818 gMC->SetMaterialProperty(
"MirrSurface",
"REFLECTIVITY", npoints_i, ephoton_i, reflectivity_i);
820 gMC->SetMaterialProperty(
"MirrSurface",
"REFLECTIVITY", npoints_r, ephoton_r, reflectivity_r);
823 gMC->SetBorderSurface(
"BarMirrorSurface",
"DrcMirror", 0,
"DrcBarBoxAir", 0,
"MirrSurface");
826 for(Int_t
i=0;
i<3;
i++){
827 gMC->SetBorderSurface(
"Lens1AirSurface",
"DrcLENS1Sensor",
i,
"DrcEntrance", 0,
"BlackSurface");
828 gMC->SetBorderSurface(
"Lens2AirSurface",
"DrcLENS2Sensor",
i,
"DrcEntrance", 0,
"BlackSurface");
838 gMC->SetSkinSurface(
"AirMirrorSurface",
"DrcMirror",
"MirrSurface");
840 cout<<
" ======= DRC::ConstructOpGeometry -> Finished! ====== "<< endl;
853 PndDrcPDPoint*
PndDrc::AddHit(Int_t trackID, Int_t copyNo, Int_t mcpId, TVector3
pos, TVector3
mom, TVector3 momAtEV,
Double_t timeAtEV,
Double_t time,
Double_t length, Int_t pdgCode, Int_t eventID) {
855 Int_t size = clrefPD.GetEntriesFast();
857 cout <<
"-I- PndDrc: Adding PD Point at (" << pos.X() <<
", " << pos.Y()
858 <<
", " << pos.Z() <<
") cm, detector " << copyNo <<
", track "
859 << trackID <<
" event "<<eventID <<
" barId "<<
fDrcBarCollection->GetEntriesFast()-1 <<endl;
875 PndDrcEVPoint*
PndDrc::AddEVHit(Int_t trackID, Int_t copyNo, TVector3
pos, TVector3
mom,
Double_t time,
Double_t length, Int_t pdgCode, Int_t eventID,
Double_t timestart,
Double_t timestartEV,
Double_t VeloPhoton,TVector3 normal) {
877 Int_t size = clrefEV.GetEntriesFast();
879 cout <<
"-I- PndDrc: Adding EV Point at (" << pos.X() <<
", " << pos.Y()
880 <<
", " << pos.Z() <<
") cm, detector " << copyNo <<
", track "
881 << trackID <<
" event "<<eventID << endl;
896 PndDrcBarPoint*
PndDrc::AddBarHit(Int_t trackID, Int_t copyNo, TVector3
pos, TVector3
mom,
Double_t time,
Double_t length, Int_t pdgCode,
Double_t thetaC, Int_t BarId, Int_t eventID,
Double_t mass) {
898 Int_t size = clrefBar.GetEntriesFast();
900 cout <<
"-I- PndBarDrc: Adding Bar Point at (" << pos.X() <<
", " << pos.Y()
901 <<
", " << pos.Z() <<
") cm, detector " << copyNo <<
", track "
902 << trackID <<
" event "<<eventID <<
" PDG "<<pdgCode<< endl;
friend F32vec4 acos(const F32vec4 &a)
Double_t fEfficiencyR[1000]
friend F32vec4 cos(const F32vec4 &a)
virtual Bool_t ProcessHits(FairVolume *vol=0)
virtual void ConstructOpGeometry()
TClonesArray * fDrcPDCollection
Double_t lambda(Double_t x, Double_t y, Double_t z)
friend F32vec4 sqrt(const F32vec4 &a)
Bool_t fTransportEffAtProduction
static T Sqrt(const T &x)
TLorentzVector fMom
position
friend F32vec4 sin(const F32vec4 &a)
void CreateUniqueSensorId(TString startName, std::vector< std::string > listOfSensitives)
Has to be called during simulation to create unique sensor id.
void NumberOfBounces(TVector3, TVector3, Int_t, Int_t *, Int_t *, Double_t *, Double_t *)
Int_t fTrackID
Switch ON/OFF Cherenkov propagation.
PndDrcPDPoint * AddHit(Int_t trackID, Int_t copyNo, Int_t mcpId, TVector3 pos, TVector3 mom, TVector3 momAtEV, Double_t timeAtEV, Double_t time, Double_t length, Int_t pdgCode, Int_t eventID)
TGeoManager * gGeoManager
Double_t fMass
MC volume ID of drc.
void AddPoint(DetectorId iDet)
virtual void BeginEvent()
virtual void CopyClones(TClonesArray *clPD1, TClonesArray *clPD2, TClonesArray *clBar1, TClonesArray *clBar2, Int_t offset)
virtual void FinishPrimary()
Bool_t fRunCherenkov
///< converter for detector names
virtual void Print() const
TClonesArray * fDrcBarCollection
Hit collection.
virtual TClonesArray * GetCollection(Int_t iColl) const
Double32_t fLengthEV
length
PndDrcEVPoint * AddEVHit(Int_t trackID, Int_t copyNo, TVector3 pos, TVector3 mom, Double_t time, Double_t length, Int_t pdgCode, Int_t eventID, Double_t timestart, Double_t timestartEV, Double_t VeloPhoton, TVector3 normal)
Int_t fEventID
Hit collection in the bar.
Bool_t fDetEffAtProduction
Detector Efficiency as a function of photon wavelength.
Int_t fPdgCode
Pointer to basic DRC geometry data.
TClonesArray * fDrcEVCollection
Hit collection.
virtual void ConstructGeometry()
Double_t fTimeAtEVEntrance
Int_t GetShortID(TString path)
for a given path the (unique) position of the sensor path in the fSensorNamePar-List is given...
friend F32vec4 fabs(const F32vec4 &a)
static PndGeoHandling * Instance()
TVector3 MasterToLocalShortId(const TVector3 &master, const Int_t &shortId)
Double_t FindOutPoint(Double_t, Double_t, Double_t, Double_t *, Bool_t)
PndDrcBarPoint * AddBarHit(Int_t trackID, Int_t copyNo, TVector3 pos, TVector3 mom, Double_t time, Double_t length, Int_t pdgCode, Double_t thetaC, Int_t nBar, Int_t eventID, Double_t mass)
Bool_t fTakeRealReflectivity
virtual void EndOfEvent()
virtual void Initialize()
std::vector< std::string > fListOfSensitives
Bool_t fStopChargedTrackAfterDIRC
bool CheckIfSensitive(std::string name)