From: morsch Date: Tue, 29 Oct 2002 14:01:32 +0000 (+0000) Subject: StepManager and CreateMaterials removed (inherited from AliRICH) (J. Barbosa) X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=601cdd6762c96f95f4200f8ce38d2582db67cd60 StepManager and CreateMaterials removed (inherited from AliRICH) (J. Barbosa) --- diff --git a/RICH/AliRICHv3.cxx b/RICH/AliRICHv3.cxx index 6e6e07de66c..cf6de68c537 100644 --- a/RICH/AliRICHv3.cxx +++ b/RICH/AliRICHv3.cxx @@ -77,245 +77,6 @@ AliRICHv3::~AliRICHv3() delete GetChamber(0)->GetSegmentationModel(); }//AliRICHv3::dtor() -void AliRICHv3::CreateMaterials() -{ -// Provides material definition for simulation (currently GEANT) - if(IsDebugStart()) cout<\n"; - - Int_t isxfld = gAlice->Field()->Integ(); - Float_t sxmgmx = gAlice->Field()->Max(); - Int_t i; - - - //Photons energy intervals - Float_t ppckov[26]; - for (i=0;i<26;i++) - { - ppckov[i] = (Float_t(i)*0.1+5.5)*1e-9; - //printf ("Energy intervals: %e\n",ppckov[i]); - } - - - //Refraction index for quarz - Float_t rIndexQuarz[26]; - Float_t e1= 10.666; - Float_t e2= 18.125; - Float_t f1= 46.411; - Float_t f2= 228.71; - for (i=0;i<26;i++) - { - Float_t ene=ppckov[i]*1e9; - Float_t a=f1/(e1*e1 - ene*ene); - Float_t b=f2/(e2*e2 - ene*ene); - rIndexQuarz[i] = TMath::Sqrt(1. + a + b ); - //printf ("rIndexQuarz: %e\n",rIndexQuarz[i]); - } - - //Refraction index for opaque quarz, methane and grid - Float_t rIndexOpaqueQuarz[26]; - Float_t rIndexMethane[26]; - Float_t rIndexGrid[26]; - for (i=0;i<26;i++) - { - rIndexOpaqueQuarz[i]=1; - rIndexMethane[i]=1.000444; - rIndexGrid[i]=1; - //printf ("rIndexOpaqueQuarz , etc: %e, %e, %e\n",rIndexOpaqueQuarz[i], rIndexMethane[i], rIndexGrid[i]=1); - } - - //Absorption index for freon - Float_t abscoFreon[26] = {179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, - 179.0987, 142.9206, 56.64957, 25.58622, 13.95293, 12.03905, 10.42953, 8.804196, - 7.069031, 4.461292, 2.028366, 1.293013, .577267, .40746, .334964, 0., 0., 0.}; - - - Float_t abscoQuarz [26] = {105.8, 65.52, 48.58, 42.85, 35.79, 31.262, 28.598, 27.527, 25.007, 22.815, 21.004, - 19.266, 17.525, 15.878, 14.177, 11.719, 9.282, 6.62, 4.0925, 2.601, 1.149, .667, .3627, - .192, .1497, .10857}; - - //Absorption index for methane - Float_t abscoMethane[26]; - for (i=0;i<26;i++) - { - abscoMethane[i]=AbsoCH4(ppckov[i]*1e9); - //printf("abscoMethane: %e for energy: %e\n", abscoMethane[i],ppckov[i]*1e9); - } - - //Absorption index for opaque quarz, csi and grid, efficiency for all and grid - Float_t abscoOpaqueQuarz[26]; - Float_t abscoCsI[26]; - Float_t abscoGrid[26]; - Float_t efficAll[26]; - Float_t efficGrid[26]; - for (i=0;i<26;i++) - { - abscoOpaqueQuarz[i]=1e-5; - abscoCsI[i]=1e-4; - abscoGrid[i]=1e-4; - efficAll[i]=1; - efficGrid[i]=1; - } - - //Efficiency for csi - - Float_t efficCsI[26] = {0.000199999995, 0.000600000028, 0.000699999975, 0.00499999989, 0.00749999983, 0.010125, - 0.0242999997, 0.0405000001, 0.0688500032, 0.105299994, 0.121500008, 0.141749993, 0.157949999, - 0.162, 0.166050002, 0.167669997, 0.174299985, 0.176789999, 0.179279998, 0.182599992, 0.18592, - 0.187579989, 0.189239994, 0.190899998, 0.207499996, 0.215799987}; - - - - //FRESNEL LOSS CORRECTION FOR PERPENDICULAR INCIDENCE AND - //UNPOLARIZED PHOTONS - - for (i=0;i<26;i++) - { - efficCsI[i] = efficCsI[i]/(1.-Fresnel(ppckov[i]*1e9,1.,0)); - } - - - Float_t afre[2], agri, amet[2], aqua[2], ahon, zfre[2], zgri, zhon, - zmet[2], zqua[2]; - Int_t nlmatfre; - Float_t densquao; - Int_t nlmatmet, nlmatqua; - Float_t wmatquao[2], rIndexFreon[26]; - Float_t aquao[2], epsil, stmin, zquao[2]; - Int_t nlmatquao; - Float_t radlal, densal, tmaxfd, deemax, stemax; - Float_t aal, zal, radlgri, densfre, radlhon, densgri, denshon,densqua, densmet, wmatfre[2], wmatmet[2], wmatqua[2]; - - Int_t *idtmed = fIdtmed->GetArray()-999; - - // --- Photon energy (GeV) - // --- Refraction indexes - for (i = 0; i < 26; ++i) { - rIndexFreon[i] = ppckov[i] * .0172 * 1e9 + 1.177; - //rIndexFreon[i] = 1; - //printf ("rIndexFreon: %e \n efficCsI: %e for energy: %e\n",rIndexFreon[i], efficCsI[i], ppckov[i]); - } - - // --- Detection efficiencies (quantum efficiency for CsI) - // --- Define parameters for honeycomb. - // Used carbon of equivalent rad. lenght - - ahon = 12.01; - zhon = 6.; - denshon = 0.1; - radlhon = 18.8; - - // --- Parameters to include in GSMIXT, relative to Quarz (SiO2) - - aqua[0] = 28.09; - aqua[1] = 16.; - zqua[0] = 14.; - zqua[1] = 8.; - densqua = 2.64; - nlmatqua = -2; - wmatqua[0] = 1.; - wmatqua[1] = 2.; - - // --- Parameters to include in GSMIXT, relative to opaque Quarz (SiO2) - - aquao[0] = 28.09; - aquao[1] = 16.; - zquao[0] = 14.; - zquao[1] = 8.; - densquao = 2.64; - nlmatquao = -2; - wmatquao[0] = 1.; - wmatquao[1] = 2.; - - // --- Parameters to include in GSMIXT, relative to Freon (C6F14) - - afre[0] = 12.; - afre[1] = 19.; - zfre[0] = 6.; - zfre[1] = 9.; - densfre = 1.7; - nlmatfre = -2; - wmatfre[0] = 6.; - wmatfre[1] = 14.; - - // --- Parameters to include in GSMIXT, relative to methane (CH4) - - amet[0] = 12.01; - amet[1] = 1.; - zmet[0] = 6.; - zmet[1] = 1.; - densmet = 7.17e-4; - nlmatmet = -2; - wmatmet[0] = 1.; - wmatmet[1] = 4.; - - // --- Parameters to include in GSMIXT, relative to anode grid (Cu) - - agri = 63.54; - zgri = 29.; - densgri = 8.96; - radlgri = 1.43; - - // --- Parameters to include in GSMATE related to aluminium sheet - - aal = 26.98; - zal = 13.; - densal = 2.7; - radlal = 8.9; - - // --- Glass parameters - - Float_t aglass[5]={12.01, 28.09, 16., 10.8, 23.}; - Float_t zglass[5]={ 6., 14., 8., 5., 11.}; - Float_t wglass[5]={ 0.5, 0.105, 0.355, 0.03, 0.01}; - Float_t dglass=1.74; - - - AliMaterial(1, "Air $", 14.61, 7.3, .001205, 30420., 67500); - AliMaterial(6, "HON", ahon, zhon, denshon, radlhon, 0); - AliMaterial(16, "CSI", ahon, zhon, denshon, radlhon, 0); - AliMixture(20, "QUA", aqua, zqua, densqua, nlmatqua, wmatqua); - AliMixture(21, "QUAO", aquao, zquao, densquao, nlmatquao, wmatquao); - AliMixture(30, "FRE", afre, zfre, densfre, nlmatfre, wmatfre); - AliMixture(40, "MET", amet, zmet, densmet, nlmatmet, wmatmet); - AliMixture(41, "METG", amet, zmet, densmet, nlmatmet, wmatmet); - AliMaterial(11, "GRI", agri, zgri, densgri, radlgri, 0); - AliMaterial(50, "ALUM", aal, zal, densal, radlal, 0); - AliMixture(32, "GLASS",aglass, zglass, dglass, 5, wglass); - AliMaterial(31, "COPPER$", 63.54, 29., 8.96, 1.4, 0.); - - tmaxfd = -10.; - stemax = -.1; - deemax = -.2; - epsil = .001; - stmin = -.001; - - AliMedium(1, "DEFAULT MEDIUM AIR$", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(2, "HONEYCOMB$", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(3, "QUARZO$", 20, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(4, "FREON$", 30, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(5, "METANO$", 40, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(6, "CSI$", 16, 1, isxfld, sxmgmx,tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(7, "GRIGLIA$", 11, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(8, "QUARZOO$", 21, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(9, "GAP$", 41, 1, isxfld, sxmgmx,tmaxfd, .1, -deemax, epsil, -stmin); - AliMedium(10, "ALUMINUM$", 50, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(11, "GLASS", 32, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - AliMedium(12, "PCB_COPPER", 31, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); - - - gMC->SetCerenkov(idtmed[1000], 26, ppckov, abscoMethane, efficAll, rIndexMethane); - gMC->SetCerenkov(idtmed[1001], 26, ppckov, abscoMethane, efficAll, rIndexMethane); - gMC->SetCerenkov(idtmed[1002], 26, ppckov, abscoQuarz, efficAll,rIndexQuarz); - gMC->SetCerenkov(idtmed[1003], 26, ppckov, abscoFreon, efficAll,rIndexFreon); - gMC->SetCerenkov(idtmed[1004], 26, ppckov, abscoMethane, efficAll, rIndexMethane); - gMC->SetCerenkov(idtmed[1005], 26, ppckov, abscoCsI, efficCsI, rIndexMethane); - gMC->SetCerenkov(idtmed[1006], 26, ppckov, abscoGrid, efficGrid, rIndexGrid); - gMC->SetCerenkov(idtmed[1007], 26, ppckov, abscoOpaqueQuarz, efficAll, rIndexOpaqueQuarz); - gMC->SetCerenkov(idtmed[1008], 26, ppckov, abscoMethane, efficAll, rIndexMethane); - gMC->SetCerenkov(idtmed[1009], 26, ppckov, abscoGrid, efficGrid, rIndexGrid); - gMC->SetCerenkov(idtmed[1010], 26, ppckov, abscoOpaqueQuarz, efficAll, rIndexOpaqueQuarz); -}//AliRICHv3::CreateMaterials() - void AliRICHv3::CreateGeometry() { @@ -786,6 +547,7 @@ void AliRICHv3::Init() } + void AliRICHv3::BuildGeometry() { // Provides geometry structure for event display (ROOT TNode tree) @@ -990,515 +752,6 @@ void AliRICHv3::BuildGeometry() }//AliRICHv3::BuildGeometry() -void AliRICHv3::StepManager() -{ -// The active Step Manager is realised currently in AliRICHv3 for debug -// leaving StepManager in AliRICH intact. To be removed in future. - - Int_t copy, id; - static Int_t idvol; - static Int_t vol[2]; - Int_t ipart; - static Float_t hits[22]; - static Float_t ckovData[19]; - TLorentzVector position; - TLorentzVector momentum; - Float_t pos[3]; - Float_t mom[4]; - Float_t localPos[3]; - Float_t localMom[4]; - Float_t localTheta,localPhi; - Float_t theta,phi; - Float_t destep, step; - Double_t ranf[2]; - Int_t nPads; - Float_t coscerenkov; - static Float_t eloss, xhit, yhit, tlength; - const Float_t kBig=1.e10; - - TClonesArray &lhits = *fHits; - TParticle *current = (TParticle*)(*gAlice->Particles())[gAlice->CurrentTrack()]; - - //if (current->Energy()>1) - //{ - - // Only gas gap inside chamber - // Tag chambers and record hits when track enters - - idvol=-1; - id=gMC->CurrentVolID(copy); - Float_t cherenkovLoss=0; - //gAlice->KeepTrack(gAlice->CurrentTrack()); - - gMC->TrackPosition(position); - pos[0]=position(0); - pos[1]=position(1); - pos[2]=position(2); - //bzero((char *)ckovData,sizeof(ckovData)*19); - ckovData[1] = pos[0]; // X-position for hit - ckovData[2] = pos[1]; // Y-position for hit - ckovData[3] = pos[2]; // Z-position for hit - ckovData[6] = 0; // dummy track length - //ckovData[11] = gAlice->CurrentTrack(); - - //printf("\n+++++++++++\nTrack: %d\n++++++++++++\n",gAlice->CurrentTrack()); - - //AliRICH *RICH = (AliRICH *) gAlice->GetDetector("RICH"); - - /********************Store production parameters for Cerenkov photons************************/ -//is it a Cerenkov photon? - if (gMC->TrackPid() == 50000050) { - - //if (gMC->VolId("GAP ")==gMC->CurrentVolID(copy)) - //{ - Float_t ckovEnergy = current->Energy(); - //energy interval for tracking - if (ckovEnergy > 5.6e-09 && ckovEnergy < 7.8e-09 ) - //if (ckovEnergy > 0) - { - if (gMC->IsTrackEntering()){ //is track entering? - //printf("Track entered (1)\n"); - if (gMC->VolId("FRE1")==gMC->CurrentVolID(copy) || gMC->VolId("FRE2")==gMC->CurrentVolID(copy)) - { //is it in freo? - if (gMC->IsNewTrack()){ //is it the first step? - //printf("I'm in!\n"); - Int_t mother = current->GetFirstMother(); - - //printf("Second Mother:%d\n",current->GetSecondMother()); - - ckovData[10] = mother; - ckovData[11] = gAlice->CurrentTrack(); - ckovData[12] = 1; //Media where photon was produced 1->Freon, 2->Quarz - //printf("Produced in FREO\n"); - fCkovNumber++; - fFreonProd=1; - //printf("Index: %d\n",fCkovNumber); - } //first step question - } //freo question - - if (gMC->IsNewTrack()){ //is it first step? - if (gMC->VolId("QUAR")==gMC->CurrentVolID(copy)) //is it in quarz? - { - ckovData[12] = 2; - //printf("Produced in QUAR\n"); - } //quarz question - } //first step question - - //printf("Before %d\n",fFreonProd); - } //track entering question - - if (ckovData[12] == 1) //was it produced in Freon? - //if (fFreonProd == 1) - { - if (gMC->IsTrackEntering()){ //is track entering? - //printf("Track entered (2)\n"); - //printf("Current volume (should be META): %s\n",gMC->CurrentVolName()); - //printf("VolId: %d, CurrentVolID: %d\n",gMC->VolId("META"),gMC->CurrentVolID(copy)); - if (gMC->VolId("META")==gMC->CurrentVolID(copy)) //is it in gap? - { - //printf("Got in META\n"); - gMC->TrackMomentum(momentum); - mom[0]=momentum(0); - mom[1]=momentum(1); - mom[2]=momentum(2); - mom[3]=momentum(3); - // Z-position for hit - - - /**************** Photons lost in second grid have to be calculated by hand************/ - - Float_t cophi = TMath::Cos(TMath::ATan2(mom[0], mom[1])); - Float_t t = (1. - .025 / cophi) * (1. - .05 / cophi); - //gMC->Rndm(ranf, 1); - gMC->GetRandom()->RndmArray(1,ranf); - //printf("grid calculation:%f\n",t); - if (ranf[0] > t) { - gMC->StopTrack(); - ckovData[13] = 5; - AddCerenkov(gAlice->CurrentTrack(),vol,ckovData); - //printf("Added One (1)!\n"); - //printf("Lost one in grid\n"); - } - /**********************************************************************************/ - } //gap - - //printf("Current volume (should be CSI) (1): %s\n",gMC->CurrentVolName()); - //printf("VolId: %d, CurrentVolID: %d\n",gMC->VolId("CSI "),gMC->CurrentVolID(copy)); - if (gMC->VolId("CSI ")==gMC->CurrentVolID(copy)) //is it in csi? - { - //printf("Got in CSI\n"); - gMC->TrackMomentum(momentum); - mom[0]=momentum(0); - mom[1]=momentum(1); - mom[2]=momentum(2); - mom[3]=momentum(3); - - /********* Photons lost by Fresnel reflection have to be calculated by hand********/ - /***********************Cerenkov phtons (always polarised)*************************/ - - Float_t cophi = TMath::Cos(TMath::ATan2(mom[0], mom[1])); - Float_t t = Fresnel(ckovEnergy*1e9,cophi,1); - //gMC->Rndm(ranf, 1); - gMC->GetRandom()->RndmArray(1,ranf); - if (ranf[0] < t) { - gMC->StopTrack(); - ckovData[13] = 6; - AddCerenkov(gAlice->CurrentTrack(),vol,ckovData); - //printf("Added One (2)!\n"); - //printf("Lost by Fresnel\n"); - } - /**********************************************************************************/ - } - } //track entering? - - - /********************Evaluation of losses************************/ - /******************still in the old fashion**********************/ - - TArrayI procs; - Int_t i1 = gMC->StepProcesses(procs); //number of physics mechanisms acting on the particle - for (Int_t i = 0; i < i1; ++i) { - // Reflection loss - if (procs[i] == kPLightReflection) { //was it reflected - ckovData[13]=10; - if (gMC->VolId("FRE1")==gMC->CurrentVolID(copy) || gMC->VolId("FRE2")==gMC->CurrentVolID(copy)) - ckovData[13]=1; - if (gMC->CurrentVolID(copy) == gMC->VolId("QUAR")) - ckovData[13]=2; - //gMC->StopTrack(); - //AddCerenkov(gAlice->CurrentTrack(),vol,ckovData); - } //reflection question - - // Absorption loss - else if (procs[i] == kPLightAbsorption) { //was it absorbed? - //printf("Got in absorption\n"); - ckovData[13]=20; - if (gMC->VolId("FRE1")==gMC->CurrentVolID(copy) || gMC->VolId("FRE2")==gMC->CurrentVolID(copy)) - ckovData[13]=11; - if (gMC->CurrentVolID(copy) == gMC->VolId("QUAR")) - ckovData[13]=12; - if (gMC->CurrentVolID(copy) == gMC->VolId("META")) - ckovData[13]=13; - if (gMC->CurrentVolID(copy) == gMC->VolId("GAP ")) - ckovData[13]=13; - - if (gMC->CurrentVolID(copy) == gMC->VolId("SRIC")) - ckovData[13]=15; - - // CsI inefficiency - if (gMC->CurrentVolID(copy) == gMC->VolId("CSI ")) { - ckovData[13]=16; - } - gMC->StopTrack(); - AddCerenkov(gAlice->CurrentTrack(),vol,ckovData); - //printf("Added One (3)!\n"); - //printf("Added cerenkov %d\n",fCkovNumber); - } //absorption question - - - // Photon goes out of tracking scope - else if (procs[i] == kPStop) { //is it below energy treshold? - ckovData[13]=21; - gMC->StopTrack(); - AddCerenkov(gAlice->CurrentTrack(),vol,ckovData); - //printf("Added One (4)!\n"); - } // energy treshold question - } //number of mechanisms cycle - /**********************End of evaluation************************/ - } //freon production question - } //energy interval question - //}//inside the proximity gap question - } //cerenkov photon question - - /**************************************End of Production Parameters Storing*********************/ - - - /*******************************Treat photons that hit the CsI (Ckovs and Feedbacks)************/ - - if (gMC->TrackPid() == 50000050 || gMC->TrackPid() == 50000051) { - //printf("Cerenkov\n"); - - //if (gMC->TrackPid() == 50000051) - //printf("Tracking a feedback\n"); - - if (gMC->VolId("CSI ")==gMC->CurrentVolID(copy)) - { - //printf("Current volume (should be CSI) (2): %s\n",gMC->CurrentVolName()); - //printf("VolId: %d, CurrentVolID: %d\n",gMC->VolId("CSI "),gMC->CurrentVolID(copy)); - //printf("Got in CSI\n"); - //printf("Tracking a %d\n",gMC->TrackPid()); - if (gMC->Edep() > 0.){ - gMC->TrackPosition(position); - gMC->TrackMomentum(momentum); - pos[0]=position(0); - pos[1]=position(1); - pos[2]=position(2); - mom[0]=momentum(0); - mom[1]=momentum(1); - mom[2]=momentum(2); - mom[3]=momentum(3); - Double_t tc = mom[0]*mom[0]+mom[1]*mom[1]; - Double_t rt = TMath::Sqrt(tc); - theta = Float_t(TMath::ATan2(rt,Double_t(mom[2])))*kRaddeg; - phi = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg; - gMC->Gmtod(pos,localPos,1); - gMC->Gmtod(mom,localMom,2); - - gMC->CurrentVolOffID(2,copy); - vol[0]=copy; - idvol=vol[0]-1; - - //Int_t sector=((AliRICHChamber*) (*fChambers)[idvol]) - //->Sector(localPos[0], localPos[2]); - //printf("Sector:%d\n",sector); - - /*if (gMC->TrackPid() == 50000051){ - fFeedbacks++; - printf("Feedbacks:%d\n",fFeedbacks); - }*/ - - //PH ((AliRICHChamber*) (*fChambers)[idvol]) - ((AliRICHChamber*)fChambers->At(idvol)) - ->SigGenInit(localPos[0], localPos[2], localPos[1]); - if(idvolTrackPid(); // particle type - ckovData[1] = pos[0]; // X-position for hit - ckovData[2] = pos[1]; // Y-position for hit - ckovData[3] = pos[2]; // Z-position for hit - ckovData[4] = theta; // theta angle of incidence - ckovData[5] = phi; // phi angle of incidence - ckovData[8] = (Float_t) fNSDigits; // first sdigit - ckovData[9] = -1; // last pad hit - ckovData[13] = 4; // photon was detected - ckovData[14] = mom[0]; - ckovData[15] = mom[1]; - ckovData[16] = mom[2]; - - destep = gMC->Edep(); - gMC->SetMaxStep(kBig); - cherenkovLoss += destep; - ckovData[7]=cherenkovLoss; - - nPads = Hits2SDigits(localPos[0],localPos[2],cherenkovLoss,idvol,kCerenkov); - - if (fNSDigits > (Int_t)ckovData[8]) { - ckovData[8]= ckovData[8]+1; - ckovData[9]= (Float_t) fNSDigits; - } - - //printf("Cerenkov loss: %f\n", cherenkovLoss); - - ckovData[17] = nPads; - //printf("nPads:%d",nPads); - - //TClonesArray *Hits = RICH->Hits(); - AliRICHHit *mipHit = (AliRICHHit*) (fHits->UncheckedAt(0)); - if (mipHit) - { - mom[0] = current->Px(); - mom[1] = current->Py(); - mom[2] = current->Pz(); - Float_t mipPx = mipHit->MomX(); - Float_t mipPy = mipHit->MomY(); - Float_t mipPz = mipHit->MomZ(); - - Float_t r = mom[0]*mom[0] + mom[1]*mom[1] + mom[2]*mom[2]; - Float_t rt = TMath::Sqrt(r); - Float_t mipR = mipPx*mipPx + mipPy*mipPy + mipPz*mipPz; - Float_t mipRt = TMath::Sqrt(mipR); - if ((rt*mipRt) > 0) - { - coscerenkov = (mom[0]*mipPx + mom[1]*mipPy + mom[2]*mipPz)/(rt*mipRt); - } - else - { - coscerenkov = 0; - } - Float_t cherenkov = TMath::ACos(coscerenkov); - ckovData[18]=cherenkov; - } - //if (sector != -1) - //{ - AddHit(gAlice->CurrentTrack(),vol,ckovData); - AddCerenkov(gAlice->CurrentTrack(),vol,ckovData); - //printf("Added One (5)!\n"); - //} - } - } - } - } - - /***********************************************End of photon hits*********************************************/ - - - /**********************************************Charged particles treatment*************************************/ - - else if (gMC->TrackCharge()) - //else if (1 == 1) - { -//If MIP - /*if (gMC->IsTrackEntering()) - { - hits[13]=20;//is track entering? - }*/ - if (gMC->VolId("FRE1")==gMC->CurrentVolID(copy) || gMC->VolId("FRE2")==gMC->CurrentVolID(copy)) - { - gMC->TrackMomentum(momentum); - mom[0]=momentum(0); - mom[1]=momentum(1); - mom[2]=momentum(2); - mom[3]=momentum(3); - hits [19] = mom[0]; - hits [20] = mom[1]; - hits [21] = mom[2]; - fFreonProd=1; - } - - if (gMC->VolId("GAP ")== gMC->CurrentVolID(copy)) { -// Get current particle id (ipart), track position (pos) and momentum (mom) - - gMC->CurrentVolOffID(3,copy); - vol[0]=copy; - idvol=vol[0]-1; - - //Int_t sector=((AliRICHChamber*) (*fChambers)[idvol]) - //->Sector(localPos[0], localPos[2]); - //printf("Sector:%d\n",sector); - - gMC->TrackPosition(position); - gMC->TrackMomentum(momentum); - pos[0]=position(0); - pos[1]=position(1); - pos[2]=position(2); - mom[0]=momentum(0); - mom[1]=momentum(1); - mom[2]=momentum(2); - mom[3]=momentum(3); - gMC->Gmtod(pos,localPos,1); - gMC->Gmtod(mom,localMom,2); - - ipart = gMC->TrackPid(); - // - // momentum loss and steplength in last step - destep = gMC->Edep(); - step = gMC->TrackStep(); - - // - // record hits when track enters ... - if( gMC->IsTrackEntering()) { -// gMC->SetMaxStep(fMaxStepGas); - Double_t tc = mom[0]*mom[0]+mom[1]*mom[1]; - Double_t rt = TMath::Sqrt(tc); - theta = Float_t(TMath::ATan2(rt,Double_t(mom[2])))*kRaddeg; - phi = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg; - - - Double_t localTc = localMom[0]*localMom[0]+localMom[2]*localMom[2]; - Double_t localRt = TMath::Sqrt(localTc); - localTheta = Float_t(TMath::ATan2(localRt,Double_t(localMom[1])))*kRaddeg; - localPhi = Float_t(TMath::ATan2(Double_t(localMom[2]),Double_t(localMom[0])))*kRaddeg; - - hits[0] = Float_t(ipart); // particle type - hits[1] = localPos[0]; // X-position for hit - hits[2] = localPos[1]; // Y-position for hit - hits[3] = localPos[2]; // Z-position for hit - hits[4] = localTheta; // theta angle of incidence - hits[5] = localPhi; // phi angle of incidence - hits[8] = (Float_t) fNSDigits; // first sdigit - hits[9] = -1; // last pad hit - hits[13] = fFreonProd; // did id hit the freon? - hits[14] = mom[0]; - hits[15] = mom[1]; - hits[16] = mom[2]; - hits[18] = 0; // dummy cerenkov angle - - tlength = 0; - eloss = 0; - fFreonProd = 0; - - Chamber(idvol).LocaltoGlobal(localPos,hits+1); - - - //To make chamber coordinates x-y had to pass localPos[0], localPos[2] - xhit = localPos[0]; - yhit = localPos[2]; - // Only if not trigger chamber - if(idvolAt(idvol)) - ->SigGenInit(localPos[0], localPos[2], localPos[1]); - } - } - - // - // Calculate the charge induced on a pad (disintegration) in case - // - // Mip left chamber ... - if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){ - gMC->SetMaxStep(kBig); - eloss += destep; - tlength += step; - - - // Only if not trigger chamber - if(idvol 0) - { - if(gMC->TrackPid() == kNeutron) - printf("\n\n\n\n\n Neutron Making Pad Hit!!! \n\n\n\n"); - nPads = Hits2SDigits(xhit,yhit,eloss,idvol,kMip); - hits[17] = nPads; - //printf("nPads:%d",nPads); - } - } - - hits[6]=tlength; - hits[7]=eloss; - if (fNSDigits > (Int_t)hits[8]) { - hits[8]= hits[8]+1; - hits[9]= (Float_t) fNSDigits; - } - - //if(sector !=-1) - new(lhits[fNhits++]) AliRICHHit(fIshunt,gAlice->CurrentTrack(),vol,hits); - eloss = 0; - // - // Check additional signal generation conditions - // defined by the segmentation - // model (boundary crossing conditions) - } else if - //PH (((AliRICHChamber*) (*fChambers)[idvol]) - (((AliRICHChamber*)fChambers->At(idvol)) - ->SigGenCond(localPos[0], localPos[2], localPos[1])) - { - //PH ((AliRICHChamber*) (*fChambers)[idvol]) - ((AliRICHChamber*)fChambers->At(idvol)) - ->SigGenInit(localPos[0], localPos[2], localPos[1]); - if (eloss > 0) - { - if(gMC->TrackPid() == kNeutron) - printf("\n\n\n\n\n Neutron Making Pad Hit!!! \n\n\n\n"); - nPads = Hits2SDigits(xhit,yhit,eloss,idvol,kMip); - hits[17] = nPads; - //printf("Npads:%d",NPads); - } - xhit = localPos[0]; - yhit = localPos[2]; - eloss = destep; - tlength += step ; - // - // nothing special happened, add up energy loss - } else { - eloss += destep; - tlength += step ; - } - } - } - /*************************************************End of MIP treatment**************************************/ - //} -}// void AliRICHv3::StepManager() Double_t* AliRICHv3::RotateXY(const Double_t* r, Double_t a) { @@ -1524,4 +777,3 @@ Double_t* AliRICHv3::RotateXY(const Double_t* r, Double_t a) } return rr; } - diff --git a/RICH/AliRICHv3.h b/RICH/AliRICHv3.h index 20c83bf57e9..d507618c994 100644 --- a/RICH/AliRICHv3.h +++ b/RICH/AliRICHv3.h @@ -17,15 +17,14 @@ public: virtual Int_t IsVersion() const {return 3;} - virtual void CreateMaterials(); // Provides material definition for simulation (currently GEANT) virtual void CreateGeometry(); // Provides geometry structure for simulation (currently GEANT volumes tree) virtual void BuildGeometry(); // Provides geometry structure for event display (ROOT TNode tree) virtual void Init(); // Makes nothing for a while - virtual void StepManager(); // Processes the particle transport - + private: - Double_t* RotateXY(const Double_t* r, Double_t a); - + + Double_t* RotateXY(const Double_t* r, Double_t a); //Rotation in the X-Y plane in G3 notation + ClassDef(AliRICHv3,1) //RICH full version, configurable with azimuthal rotation };// class AliRICHv3