X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=ITS%2FAliITSsimulationFastPoints.cxx;h=84afdd3d2b650c8a04cb8b58ca1d02e49026ba5d;hb=e35bc8c6f1e1d866196414569baf940bcc3fa5d2;hp=f094afaebb77b65c53268a08b6abd48c32080632;hpb=1ca7869b62ab56172aa60913e439a5ee237757ff;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSsimulationFastPoints.cxx b/ITS/AliITSsimulationFastPoints.cxx index f094afaebb7..84afdd3d2b6 100644 --- a/ITS/AliITSsimulationFastPoints.cxx +++ b/ITS/AliITSsimulationFastPoints.cxx @@ -13,15 +13,14 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.1.2.5 2000/10/02 16:03:20 barbera -Forward declarations added +/* $Id$ */ +////////////////////////////////////////////////////////// +// implements fast simulation // +// // +// // +////////////////////////////////////////////////////////// -Revision 1.4 2000/09/22 12:43:59 nilsen -Default track number set to -3 and not 0. -*/ #include #include "AliITS.h" @@ -41,7 +40,7 @@ AliITSsimulationFastPoints::AliITSsimulationFastPoints() fSigmaRPhi[0] = fSigmaRPhi[1] = 12e-4; fSigmaRPhi[2] = fSigmaRPhi[3] = 38e-4; fSigmaRPhi[4] = fSigmaRPhi[5] = 20e-4; - fSigmaZ[0] = fSigmaZ[1] = 70e-4; + fSigmaZ[0] = fSigmaZ[1] = 120e-4; // resolution for 425 micron pixels fSigmaZ[2] = fSigmaZ[3] = 28e-4; fSigmaZ[4] = fSigmaZ[5] = 830e-4; fSigmaDe[0] = fSigmaDe[1] = 0.72e-6; @@ -53,131 +52,96 @@ AliITSsimulationFastPoints::AliITSsimulationFastPoints() } //------------------------------------------------------------- -void AliITSsimulationFastPoints::CreateFastRecPoints(AliITSmodule *mod, Int_t module, TRandom *random){ - // Fast points simulator +void AliITSsimulationFastPoints::CreateFastRecPoints(Int_t module, TClonesArray* recp){ + // Fast points simulator + AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS"); - AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS"); - AliITSgeom *gm = aliITS->GetITSgeom(); - - const Float_t kdEdXtoQ = 2.778e+8; - - Int_t ihit,flag,numofhits; - Float_t xg,yg,zg,xl,yl,zl; - Float_t px,py,pz; - //Double_t p, theta, pt, ps; - Float_t locals[3]; - Float_t globals[3]; - //Float_t xg1,yg1,zg1; - Double_t sigmarphi=0., sigmaz=0., sigmade=0., thrde=0.; - Float_t deltaXl,deltaZl,deltaDe; - - Int_t hitlay, hitlad, hitdet, hitstatus, hittrack; - Float_t hitx, hity, hitz, hitpx, hitpy, hitpz, hitdestep; - - - Int_t hitstatus1, hittrack1; - Float_t hitx1, hity1, hitz1; - Float_t hitdestep1; - - Float_t xMg,yMg,zMg; - //Float_t dx,dy,dz,ds; - - - numofhits = mod->GetNhits(); - printf("numofhits %d \n",numofhits); - flag = 1; - for(ihit=0;ihitGetHit(ihit); - hit->GetPositionG(hitx1,hity1,hitz1); - hitstatus1 = hit->GetTrackStatus(); - hitdestep1 = hit->GetIonization(); - - hittrack1 = hit->GetTrack(); - - mod->MedianHit(module,hitx1,hity1,hitz1,hitstatus1,xMg,yMg,zMg,flag); - if (flag!=1) { - hitx = xMg; - hity = yMg; - hitz = zMg; - hit->GetDetectorID(hitlay,hitlad,hitdet); - hit->GetMomentumG(hitpx,hitpy,hitpz); - hitdestep = hit->GetIonization(); - hitstatus = hitstatus1; - hittrack = hit->GetTrack(); - - if (hitdestep > 0) { - xg = hitx; - yg = hity; - zg = hitz; - // Transform to the module local frame - globals[0] = hitx; - globals[1] = hity; - globals[2] = hitz; - gm->GtoL(hitlay,hitlad,hitdet,globals,locals); - xl = locals[0]; - yl = locals[1]; - zl = locals[2]; - px = hitpx; - py = hitpy; - pz = hitpz; - /* - // Calculate transverse momentum and pseudorapidity - // to allow pt and eta dependence in sigma values - // of the spatial resolution - p = TMath::Sqrt((px*px)+(py*py)+(pz*pz)); - theta = TMath::ACos(pz/p); - pt = p * TMath::Sin(theta); - ps = -TMath::Log(TMath::Tan(theta/2)); - */ - - // Retrieve sigma values for position and energy, and energy - // threshold - - sigmarphi = SigmaRPhi(hitlay); - sigmaz = SigmaZ(hitlay); - sigmade = SigmaDe(hitlay); - thrde = ThrDe(hitlay); - // Randomize position and deposited energy - Int_t k=3*(Int_t)((hitlay-1)/2); - - deltaXl = (float)(random[k].Gaus(0,sigmarphi)); - deltaZl = (float)(random[k+1].Gaus(0,sigmaz)); - deltaDe = (float)(random[k+2].Gaus(0,sigmade)); - // Apply energy threshold and trasform back to global reference - // system - - if ( (hitdestep+deltaDe) > thrde ){ - locals[0] = xl + deltaXl; - locals[1] = yl; - locals[2] = zl + deltaZl; - AliITSRecPoint rp; - rp.fTracks[0]=hittrack; - rp.fTracks[1]=-3; - rp.fTracks[2]=-3; - rp.SetX(locals[0]); - rp.SetZ(locals[2]); - rp.SetdEdX(hitdestep+deltaDe); - rp.SetQ(kdEdXtoQ*(hitdestep+deltaDe)); // number of e - rp.SetSigmaX2(sigmarphi*sigmarphi); - rp.SetSigmaZ2(sigmaz*sigmaz); - aliITS->AddRecPoint(rp); - /* - gm->LtoG(hitlay,hitlad,hitdet,locals,globals); - xg1 = globals[0]; - yg1 = globals[1]; - zg1 = globals[2]; - dx = TMath::Abs(xg1-hitx); - dy = TMath::Abs(yg1-hity); - dz = TMath::Abs(zg1-hitz); - ds = TMath::Abs(deltaDe); - */ - } // if ( (hitdestep+deltaDe) - else flag=1; - } // if (hitdestep > 0) - else flag=1; - } // if (flag!=1) - } + CreateFastRecPoints((AliITSmodule *)(aliITS->GetModule(module)), + module,gRandom,recp); +} +//------------------------------------------------------------- +void AliITSsimulationFastPoints::CreateFastRecPoints(AliITSmodule *mod, + Int_t module, + TRandom *random, + TClonesArray* recp) { + // Fast points simulator + TClonesArray &pt=*recp; + AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS"); + AliITSgeom *gm = aliITS->GetITSgeom(); + const Float_t kdEdXtoQ = 1.0e+6; // GeV->KeV + + Int_t lay,lad,det; + gm->GetModuleId(module,lay,lad,det); + Int_t ind=(lad-1)*gm->GetNdetectors(lay)+(det-1); + Int_t lyr=(lay-1); + + + Int_t ihit,flag,numofhits; + Float_t locals[3]; + Float_t globals[3]; + Double_t sigmarphi=0., sigmaz=0., sigmade=0., thrde=0.; + Float_t deltaXl,deltaZl,deltaDe; + + Int_t hitlay, hitlad, hitdet, hitstatus; + Float_t hitpx, hitpy, hitpz, hitdestep; + + Int_t hitstatus1, hittrack1; + Float_t hitx1, hity1, hitz1; + Float_t hitdestep1; + Float_t xMg,yMg,zMg; + Int_t irecp=0; + numofhits = mod->GetNhits(); + //printf("numofhits %d \n",numofhits); + for(ihit=0;ihitGetHit(ihit); + hit->GetPositionG(hitx1,hity1,hitz1); + hitstatus1 = hit->GetTrackStatus(); + hitdestep1 = hit->GetIonization(); + hittrack1 = hit->GetTrack(); + + mod->MedianHit(module,hitx1,hity1,hitz1,hitstatus1,xMg,yMg,zMg,flag); + if (flag!=1) { + hitdestep = hit->GetIonization(); + + if (hitdestep > 0) { + hit->GetDetectorID(hitlay,hitlad,hitdet); + hit->GetMomentumG(hitpx,hitpy,hitpz); + hitstatus = hitstatus1; + // Transform to the module local frame + globals[0] = xMg; + globals[1] = yMg; + globals[2] = zMg; + gm->GtoL(hitlay,hitlad,hitdet,globals,locals); + // Retrieve sigma values for position and energy, and energy + // threshold + sigmarphi = SigmaRPhi(hitlay); + sigmaz = SigmaZ(hitlay); + sigmade = SigmaDe(hitlay); + thrde = ThrDe(hitlay); + deltaXl = random->Gaus(0,sigmarphi); + deltaZl = random->Gaus(0,sigmaz); + deltaDe = random->Gaus(0,sigmade); + + // Apply energy threshold and trasform back to global reference + // system + + if ( (hitdestep+deltaDe) > thrde ){ + locals[0] += deltaXl; + locals[2] += deltaZl; + Int_t lab[4] = {hit->GetTrack(),-3,-3,ind}; + Float_t q=kdEdXtoQ*(hitdestep+deltaDe); + if(hitlay<3) q=1.; // SPD binary readout + Float_t hitv[6] = {locals[0],locals[2],sigmarphi*sigmarphi,sigmaz*sigmaz,q,q}; + Int_t info[3] = {0,0,lyr}; + AliITSRecPoint rp(lab,hitv,info,kTRUE); + + new (pt[irecp]) AliITSRecPoint(rp); + irecp++; + } // end if ( (hitdestep+deltaDe) + } // end if (hitdestep > 0) + } // end if (flag!=1) + } // end for ihit } //_______________________________________________________________________ void AliITSsimulationFastPoints::SetSigmaRPhi(Double_t srphi[6])