// ------------------------------------------------------------------------- // ----- R3BTraHitFinder source file ----- // ----- Created 01/06/11 by N.Ashwood ----- // ------------------------------------------------------------------------- #include "R3BTraHitFinder.h" #include "TMath.h" #include "TVector3.h" #include "TGeoMatrix.h" #include "TClonesArray.h" #include "TRandom.h" #include "FairRootManager.h" #include "FairRunAna.h" #include "FairRuntimeDb.h" #include "FairLogger.h" #include "TGeoManager.h" #include "R3BTraPoint.h" #include "R3BTrackerHit.h" R3BTraHitFinder::R3BTraHitFinder() : FairTask("R3B Tracker Hit Finder ") { fThreshold=0.; //no threshold fTrackerResolution=0.; //perfect resolution } R3BTraHitFinder::~R3BTraHitFinder() { } // ----- Public method Init -------------------------------------------- InitStatus R3BTraHitFinder::Init() { FairRootManager* ioManager = FairRootManager::Instance(); if ( !ioManager ) Fatal("Init", "No FairRootManager"); fTrackerHitCA = (TClonesArray*) ioManager->GetObject("TraPoint"); // Register output array TraHit fTraHitCA = new TClonesArray("R3BTrackerHit",1000); ioManager->Register("TrackerHit", "Tracker Hit", fTraHitCA, kTRUE); return kSUCCESS; } // ----- Public method ReInit -------------------------------------------- InitStatus R3BTraHitFinder::ReInit() { return kSUCCESS; } // ----- Public method Exec -------------------------------------------- void R3BTraHitFinder::Exec(Option_t* opt) { Reset(); // Si Geometrical parameter: // Inner layer Double_t Length1 = 19.03 ; // cm Double_t WidthMax1 = 7.945 ; // cm Double_t WidthMin1 = 2.25 ; // cm Double_t StripPitch1= 0.005 ; // = 50 um //Double_t AngRangeMin1=7.; //Double_t InclAng1=14.9; Double_t AngTrap1=atan((WidthMax1/2 -WidthMin1/2)/Length1); //Double_t WidthHalf1=WidthMax1 - (Length1/cos(AngTrap1))*sin(AngTrap1); Double_t StepZ1= StripPitch1/sin(AngTrap1) ; // step along the z axis of the detector (in xz plan) Double_t StepX1= StripPitch1/cos(AngTrap1) ; // step along the x axis of the detector (in xz plan) Int_t NbStrip1 = int(WidthMax1/StepX1); // //LOG(INFO) << "NbStrip1= " << NbStrip1 <GetEntries(); //LOG(INFO) << " NEW EVENT " <0){ traHit = new R3BTraPoint*[traHitsPerEvent]; for(Int_t i=0;iAt(i); Energy = ExpResSmearing(traHit[i]->GetEnergyLoss()); //Energy = traHit[i]->GetEnergyLoss(); Detector = traHit[i]->GetDetCopyID(); X_track = traHit[i]->GetXIn(); Y_track = traHit[i]->GetYIn(); Z_track = traHit[i]->GetZIn(); Px = traHit[i]->GetPxOut(); Py = traHit[i]->GetPyOut(); Pz = traHit[i]->GetPzOut(); if(Detector<=6){ // = inner layer //LOG(INFO) << Detector << " " << j << " " << k <=7 && Detector<=18){ // = Middle layer //LOG(INFO) << Detector <=19){ // = outer layer //LOG(INFO) << Detector <GetEnergyLoss() <= fThreshold) AddHit(Energy, Detector, X_Hit, Y_Hit, Z_Hit, Px, Py, Pz, Theta, Phi); //AddHit(Energy, Detector); } } //LOG(INFO) << " " <Clear(); } // ---- Public method Finish -------------------------------------------------- void R3BTraHitFinder::Finish() { // here event. write histos LOG(INFO) << "" <Gaus(inputEnergy,fTrackerResolution); //LOG(INFO) << "energy " << energy << " for and Energy of "<< inputEnergy <0 && Y>0)Phi=atan(Y/X); if(X<0 && Y>=0)Phi=TMath::Pi()+atan(Y/X); if(X<0 && Y<0)Phi=-TMath::Pi()+atan(Y/X); if(X>0 && Y<=0)Phi=atan(Y/X); return Phi; } // ----- Private method AddHit -------------------------------------------- R3BTrackerHit* R3BTraHitFinder::AddHit(Double_t ene,Int_t det,Double_t x,Double_t y,Double_t z, Double_t px, Double_t py, Double_t pz, Double_t th,Double_t phi){ //R3BTrackerHit* R3BTraHitFinder::AddHit(Double_t ene,Int_t det){ TClonesArray& clref = *fTraHitCA; Int_t size = clref.GetEntriesFast(); return new(clref[size]) R3BTrackerHit(ene, det, x, y, z, px, py, pz, th, phi); //return new(clref[size]) R3BTrackerHit(ene, det); } ClassImp(R3BTraHitFinder)