- }//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(1/*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
+ }//CF in CSI
+
+//Treat charged particles
+ static Float_t eloss;
+ if(gMC->TrackCharge() && gMC->CurrentVolID(copy)==gMC->VolId("GAP ")){//MIP in GAP
+ gMC->CurrentVolOffID(3,copy); iCurrentChamber=copy;
+ if(gMC->IsTrackEntering()||gMC->IsNewTrack())//MIP in GAP Entering
+ eloss=0;
+ else if(gMC->IsTrackExiting()||gMC->IsTrackStop()||gMC->IsTrackDisappeared()){//MIP in GAP Exiting
+ eloss+=gMC->Edep();//take into account last step dEdX
+ gMC->TrackPosition(x4);
+ AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),x4.Vect(),eloss);//HIT for MIP for conditions: MIP in GAP Exiting
+ GenerateFeedbacks(iCurrentChamber,eloss);//MIP+GAP+Exit
+ }else//MIP in GAP going inside
+ eloss += gMC->Edep();
+ }//MIP in GAP