- if(gMC->TrackPid()==kCerenkov||gMC->TrackPid()==kFeedback){//CF
- if(gMC->VolId("CSI ")==gMC->CurrentVolID(copy)){//CF+CSI
- if(gMC->Edep()>0.){//CF+CSI+DE
- gMC->TrackPosition(x4); pos[0]=x4(0); pos[1]=x4(1); pos[2]=x4(2);
- gMC->TrackMomentum(p4); mom[0]=p4(0); mom[1]=p4(1); mom[2]=p4(2); mom[3]=p4(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->CurrentVolOffID(2,copy); vol[0]=copy; iCurrentChamber=vol[0];
-
- gMC->Gmtod(pos,localPos,1); gMC->Gmtod(mom,localMom,2);
-
- Param()->SigGenInit(localPos[0],localPos[2]);
- ckovData[0]=gMC->TrackPid();
- ckovData[1]=pos[0]; ckovData[2]=pos[1]; ckovData[3]=pos[2];
- ckovData[4]=theta; ckovData[5]=phi; //theta-phi angles 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;
-
- GenerateFeedbacks(iCurrentChamber,cherenkovLoss);//CF+CSI+DE
-
- if (fNsdigits > (Int_t)ckovData[8]) {
- ckovData[8]= ckovData[8]+1;
- ckovData[9]= (Float_t) fNsdigits;
- }
-
- ckovData[17] = nPads;
- 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;
- ckovData[18]=TMath::ACos(coscerenkov);//Cerenkov angle
- }
- AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,ckovData);//PHOTON HIT CF+CSI+DE
- //AddCerenkov(gAlice->GetCurrentTrackNumber(),vol,ckovData);
- }//CF+CSI+DE
- }//CF+CSI
- }/*CF*/else if(gMC->TrackCharge()){//MIP
- if(gMC->VolId("FRE1")==gMC->CurrentVolID(copy)||gMC->VolId("FRE2")==gMC->CurrentVolID(copy)){//MIP+FRE
- gMC->TrackMomentum(p4); mom[0]=p4(0); mom[1]=p4(1); mom[2]=p4(2); mom[3]=p4(3);
- hits[19]=mom[0]; hits [20] = mom[1]; hits [21] = mom[2]; fFreonProd=1;
- }//MIP+FRE
- if(gMC->VolId("GAP ")==gMC->CurrentVolID(copy)){//MIP+GAP
- gMC->CurrentVolOffID(3,copy); vol[0]=copy; iCurrentChamber=vol[0];
- gMC->TrackPosition(x4); pos[0]=x4(0); pos[1]=x4(1); pos[2]=x4(2);
- gMC->TrackMomentum(p4); mom[0]=p4(0); mom[1]=p4(1); mom[2]=p4(2); mom[3]=p4(3);
- gMC->Gmtod(pos,localPos,1); gMC->Gmtod(mom,localMom,2);
- ipart =gMC->TrackPid();
- destep = gMC->Edep();step = gMC->TrackStep();// momentum loss and steplength in last step
- if(gMC->IsTrackEntering()){//MIP+GAP+Enter record hit when mip enters ...
- 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]; hits[2] = localPos[1]; hits[3] = localPos[2];
- hits[4] = localTheta; hits[5] = localPhi; // theta-phi angles 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;
- C(iCurrentChamber)->LocaltoGlobal(localPos,hits+1);
-
- Param()->SigGenInit(localPos[0], localPos[2]);
- }/*MIP+GAP+Enter*/else if(gMC->IsTrackExiting()||gMC->IsTrackStop()||gMC->IsTrackDisappeared()){//MIP+GAP+Exit
- gMC->SetMaxStep(kBig);
- eloss += destep;
- tlength += step;
- if (eloss > 0) {
- if(gMC->TrackPid() == kNeutron) printf("\n\n\n\n\n Neutron Making Pad Hit!!! \n\n\n\n");
- GenerateFeedbacks(iCurrentChamber,eloss);//MIP+GAP+Exit
- hits[17] = nPads;
- }
- hits[6]=tlength; hits[7]=eloss;
- if(fNsdigits > (Int_t)hits[8]) {
- hits[8]= hits[8]+1;
- hits[9]= (Float_t) fNsdigits;
- }
- AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,hits);//MIP HIT MIP+GAP+Exit
- eloss = 0;
- }/*MIP+GAP+Exit*/else if(Param()->SigGenCond(localPos[0], localPos[2])){//MIP+GAP+Spec
- Param()->SigGenInit(localPos[0], localPos[2]);
- if(eloss>0){
- if(gMC->TrackPid() == kNeutron) printf("\n\n\n\n\n Neutron Making Pad Hit!!! \n\n\n\n");
- GenerateFeedbacks(iCurrentChamber,eloss);//MIP+GAP+Spec
- hits[17] = nPads;
- }
-
- eloss = destep; tlength += step ;
- }/*MIP+GAP+Spec*/else{//MIP+GAP+nothing special
- eloss += destep;
- tlength += step ;
- }//MIP+GAP+nothing special
- }//MIP+GAP
- }//MIP
-}//void AliRICHv1::StepManager()