13 #include "FairRootManager.h"
21 #include "FairRunAna.h"
22 #include "FairRuntimeDb.h"
23 #include "FairBaseParSet.h"
24 #include "FairGeoVolume.h"
26 #include "FairGeoTransform.h"
27 #include "FairGeoVector.h"
28 #include "FairGeoMedium.h"
29 #include "FairGeoNode.h"
34 #include "TParticlePDG.h"
35 #include "TDatabasePDG.h"
37 #include "TGeoManager.h"
45 #include "TPolyLine.h"
56 :FairTask(
"PndDrcRecoLookupMapS")
65 :FairTask(
"PndDrcRecoLookupMapS")
84 cout <<
" ---------- INITIALIZATION ------------" << endl;
87 FairRootManager* ioman = FairRootManager::Instance();
89 cout <<
"-E- PndDrcRecoLookupMapS::Init: "
90 <<
"RootManager not instantiated!" << endl;
95 fMCArray = (TClonesArray*) ioman->GetObject(
"MCTrack");
97 cout <<
"-W- PndDrcRecoLookupMapS::Init: "
98 <<
"No MCTrack array!" << endl;
104 cout <<
"-W- PndDrcRecoLookupMapS::Init: "
105 <<
"No DrcBarPoint array!" << endl;
109 fPDPointArray = (TClonesArray*) ioman->GetObject(
"DrcPDPoint");
111 cout <<
"-W- PndDrcRecoLookupMapS::Init: "
112 <<
"No DrcPDPoint array!" << endl;
125 fDigiArray = (TClonesArray*) ioman->GetObject(
"DrcDigi");
127 cout <<
"-W- PndDrcRecoLookupMapS::Init: " <<
"No DrcDigi array!" << endl;
132 fPDHitArray = (TClonesArray*) ioman->GetObject(
"DrcPDHit");
134 cout <<
"-W- PndDrcRecoLookupMapS::Init: "
135 <<
"No DrcPDHit array!" << endl;
162 fnX1.SetXYZ(-1., 0.,0.);
163 fnY1.SetXYZ( 0., 1.,0.);
165 cout <<
"-I- PndDrcRecoLookupMapS: Intialization successfull" << endl;
175 FairRunAna*
run = FairRunAna::Instance();
176 if ( ! run ) Fatal(
"SetParContainers",
"No analysis run");
178 FairRuntimeDb* db = run->GetRuntimeDb();
179 if ( ! db ) Fatal(
"SetParContainers",
"No runtime database");
183 cout <<
"-I- PndDrcRecoLookupMapS::SetParContainers(). read parameters" << endl;
184 cout<<
"read them!"<<endl;
190 if(
fVerbose>1) Info(
"SetParContainers",
"done.");
205 cout<<
"EVENT # "<<
nevents<<endl;
216 cout <<
"PndDrcRecoLookupMapS: Number of Detected MC Tracks : "<<
fMCArray->GetEntries()<<endl;
229 for(Int_t j=0; j<
fHitArray->GetEntriesFast(); j++) {
234 Int_t chtrID= pt->GetTrackID();
237 cout<<
"nother track px = "<<pt->GetPx()<<
", py = "<<pt->GetPy()<<endl;
255 cout <<
"PndDrcRecoLookupMapS: Number of Detected Photon MCPDPoints : "<<
fPDPointArray->GetEntries()<<endl;
256 cout <<
"PndDrcRecoLookupMapS: Number of Detected Photon PDHits : "<<
fPDHitArray->GetEntries()<<endl;
260 for(Int_t k=0; k<
fPDHitArray->GetEntriesFast(); k++) {
266 if(mcPDRef < 0)
continue;
271 fBarId = fBarPoint->GetDetectorID();
275 Int_t trID= Ppt->GetTrackID();
291 if(
fabs(trMpdg) == 11){Mrmass = 0.000511; MoSign = 1;}
292 if(
fabs(trMpdg) == 13){Mrmass = 0.105658; MoSign = 1;}
293 if(
fabs(trMpdg) == 211){Mrmass = 0.139570; MoSign = -1;}
294 if(
fabs(trMpdg) == 321){Mrmass = 0.49368; MoSign = -1;}
295 if(
fabs(trMpdg) == 2212){Mrmass = 0.938; MoSign = -1;}
296 if(
fabs(trMpdg) == 50000050){Mrmass = 0.0; MoSign = -1;}
310 fpixID = pdhit->GetDetectorID();
321 fPphoPD.SetXYZ(Ppt->GetPx(), Ppt->GetPy(), Ppt->GetPz());
335 fPMo.SetPhi(phi_extra);
342 fBarPoint->Momentum(
fPMo);
347 TVector3 motherMom =
fPMo.Unit();
403 cout<<
"NO SUCH HIT IN LUT!!!"<<endl;
442 std::vector<TVector3> ambig;
443 std::vector<Double_t> CHreco;
444 std::vector<Double_t> Tamb;
445 std::vector<Double_t> Path;
449 TVectorD CHdiff(8*NumAmb);
450 TVectorD Adiff(8*NumAmb);
452 for(Int_t
i=0;
i<NumAmb;
i++){
456 kZ = -
sqrt(1. - pow(kX,2.) - pow(kY,2.));
458 fkBar.SetXYZ(kX, kY, kZ);
462 for(Int_t jamb=0; jamb <8; jamb++){
463 if(jamb == 1){
fkBar.SetXYZ(-kX, kY, kZ);}
464 if(jamb == 2){
fkBar.SetXYZ(kX, -kY, kZ);}
465 if(jamb == 3){
fkBar.SetXYZ(kX, kY, -kZ);}
466 if(jamb == 4){
fkBar.SetXYZ(-kX, -kY, kZ);}
467 if(jamb == 5){
fkBar.SetXYZ(kX, -kY, -kZ);}
468 if(jamb == 6){
fkBar.SetXYZ(-kX, kY, -kZ);}
469 if(jamb == 7){
fkBar.SetXYZ(-kX, -kY, -kZ);}
474 ambig.push_back(
fkBar);
478 Path.push_back(
fPath);
496 ambig.push_back((0.,0.,0.));
497 CHreco.push_back(-999.);
498 CHdiff(8*
i+jamb) = -999.;
499 Tamb.push_back(-999.);
500 Path.push_back(-999.);
501 Adiff(8*
i+jamb) = -999.;
526 if(startPhi < 0.){startPhi = 360. + startPhi;}
532 if(startPhi >= 0. && startPhi < 90.){
535 if(startPhi >= 90. && startPhi < 270.){
538 if(startPhi >= 270. && startPhi < 360.){
543 TVector3 ver1, ver2, ver3, ver4;
549 ver1.RotateZ(PhiRot/180.*
fpi);
550 ver2.RotateZ(PhiRot/180.*
fpi);
551 ver3.RotateZ(PhiRot/180.*
fpi);
552 ver4.RotateZ(PhiRot/180.*
fpi);
559 return PhiRot/180.*
fpi;
574 if(dir.Theta() < 3.1415/2.){
577 if(dir.Theta() >= 3.1415/2.){
578 Z0 = -(start.Z() -
fzup);
603 if(printt){std::cout<<
"n = "<<n<<
", NN = "<<*NN<<
", x0 = "<<x0<<
", a = "<<a<<std::endl;}
605 if(x0 < 0.){x1 = x0 - (n+1)*a;}
606 if(printt){std::cout<<
"xy = "<< x1<<std::endl;}
608 if((m/2. - TMath::Floor(m/2.)) == 0.) {
610 if(x0 >= 0. && x1 + xEn <= a){xK = x1 + xEn;}
611 if(x0 >= 0. && x1 + xEn > a){xK = 2*a - x1 - xEn; n = 1. +
n;}
612 if(x0 < 0. && x1 + xEn >= 0.){xK = a - (x1 + xEn); n = -1. -
n;}
613 if(x0 < 0. && x1 + xEn < 0.) {xK = a + x1 + xEn; n = -
n;}
614 if(printt){std::cout<<
"xK = "<< xK<<
", n = "<<n<<std::endl;}
618 if((m/2. - TMath::Floor(m/2.)) != 0.) {
620 if(x0 >= 0. && x1 + xEn <= a){xK = a - (x1 + xEn);}
621 if(x0 >= 0. && x1 + xEn > a){xK = x1 + xEn -
a; n = 1. +
n;}
622 if(x0 < 0. && x1 + xEn >= 0.){xK = x1 + xEn; n = -1. -
n;}
623 if(x0 < 0. && x1 + xEn < 0.) {xK = - (x1 + xEn); n = -
n;}
624 if(printt){std::cout<<
"xK = "<< xK<<
", n = "<<n<<std::endl;}
636 xx[0] = v1.X(); xx[1] = v2.X(); xx[2] = v3.X(); xx[3] = v4.X(); xx[4] = v1.X();
637 yy[0] = v1.Y(); yy[1] = v2.Y(); yy[2] = v3.Y(); yy[3] = v4.Y(); yy[4] = v1.Y();
638 TPolyLine *p6 =
new TPolyLine(5,xx,yy);
662 if(kb.Z() < 0.){Z0 = start.Z() -
fGeo->
barBoxZUp(); kz = kb.Z();}
666 cout<<
"-I- Reco ambig Time: Zstart = "<<start.Z()<<
", Z0 = "<<Z0<<endl;
673 cout<<
"RECO ambig TIME: thetas are: quartz = "<<kb.Theta()/
fpi*180.<<
", oil = "<<thetaOil/
fpi*180.<<endl;
675 kb.SetTheta(thetaOil);
680 cout<<
"-I- Reco ambig Time: Zev = "<<
fGeo->
EVlen()<<endl;
681 cout<<
"-I- Reco ambig Time: L0 = "<<L0<<
", L1 = "<<L1<<endl;
682 cout<<
"-I- Reco ambig Time: time is "<< L0/u_quartz + L1/u_oil <<endl;
687 return L0/u_quartz + L1/u_oil;
698 cout <<
"-I- PndDrcRecoLookupMapS: Finish" << endl;
void SetChPartDirInBar2(TVector3 val)
friend F32vec4 acos(const F32vec4 &a)
void AddChDiff(Double_t val)
friend F32vec4 cos(const F32vec4 &a)
void AddHitTime(Double_t val)
Double_t RecoAmbigTime(TVector3, TVector3, Double_t *, Bool_t)
virtual void SetParContainers()
Double_t InBarCoordSyst(TVector3, TVector3 *, TVector3 *, TVector3 *, TVector3 *)
friend F32vec4 sqrt(const F32vec4 &a)
TClonesArray * fDrcLutInfoArray
Bool_t GetParamsForPixel(Int_t, Double_t *)
virtual void SetParContainers()
friend F32vec4 sin(const F32vec4 &a)
TVector3 GetMomentum() const
void SetChPartPdg(Int_t val)
Int_t NumberOfBounces(TVector3, TVector3, Int_t)
void DrawBarBox(TVector3, TVector3, TVector3, TVector3)
void SetChPartDirInBar(TVector3 val)
TClonesArray * fPDHitArray
virtual Double_t GetTime()
TString pt(TString pts, TString exts="px py pz")
void SetCherenkovReal(Double_t val)
Int_t GetBarPointID() const
virtual Int_t GetRefIndex()
void AddLambda(Double_t val)
void AddAngle(Double_t val)
void SetChPartDir(TVector3 val)
virtual ~PndDrcRecoLookupMapS()
virtual void Exec(Option_t *option)
void AddTime(Double_t val)
void AddNOfBounces(Double_t val)
TClonesArray * fBarPointArray
void AddTruePath(Double_t val)
friend F32vec4 fabs(const F32vec4 &a)
void SetCherenkovMC(Double_t val)
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)
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
Digitization Parameter Class for DIRC barrel part.
TClonesArray * fPDPointArray
virtual Int_t GetRefIndex()
virtual InitStatus Init()
void AddPath(Double_t val)
TClonesArray * fDigiArray
TVector3 GetStartVertex() const
Int_t GetMotherID() const
Double_t GetStartTime() const
PndGeoDrc * fGeo
Basic geometry data of barrel DRC.