140 likes | 283 Views
Particle ID in TRD Prashant Shukla Institute of Physics University of Heidelberg. Presentation at TRD Software Meet 6Th Oct. at GSI. Implementaion of TRD PID: Presently in the EVENT SUMMARY DATA (ESD) tracks only total dE/dx from all TRD layers is included.
E N D
Particle ID in TRD Prashant Shukla Institute of Physics University of Heidelberg Presentation at TRD Software Meet 6Th Oct. at GSI
Implementaion of TRD PID: Presently in the EVENT SUMMARY DATA (ESD) tracks only total dE/dx from all TRD layers is included. The aim is to include dE/dx signals from all 6 planes of TRD and also the time bin of maximum cluster from all 6 planes. The PID will be constructed with these 12 signals by liklihood method later.
1. AliTRDpidESD.cxx: The changes to be done in Bethe Block function are as follow: Double_t AliTRDpidESD::Bethe(Double_t bg) Double_t bg2=bg*bg; if (bg<3.5e1) bethe=(1.+ bg2)/bg2*(log(5940*bg2) - bg2/(1.+ bg2)); else // Density effect ( approximately :) bethe=(1.+ bg2)/bg2*(log(3.5*5940*bg) - bg2/(1.+ bg2)); return bethe/11.091; The factor 5940 -----> 2120 The factor 11.091------> 9.8957 The parameters for AliTRDpidESD are given by AliTRDReconstructor::FillESD(AliRunLoader*,AliESD* esd) Double_t parTRD[] = {187., 0.23, 10.}; // fMIP, fRes, fRange To be replaced by {165., 0.23, 10.};
2. Modifications in ESD track AliESDtrack.h: const Int_t kNPlane = AliTRDgeometry::Nplan(); Float_t fTRDsignal; // detector's PID signal // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS Float_t fTRDsignals[kNPlane]; // TRD signals from all six planes Int_t fTRDTimBin[kNPlane]; // Time bin of Max cluster from all six planes // ------------------------------------------------------------- Float_t GetTRDsignal() const {return fTRDsignal;} // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS Float_t GetTRDsignals(Int_t i) const {return fTRDsignals[i];} Int_t GetTRDTimBin(Int_t i) const {return fTRDTimBin[i];} // -------------------------------------------------------
AliESDtrack.cxx: Bool_t AliESDtrack::UpdateTrackParams(AliKalmanTrack *t, ULong_t flags) // This function is called by // Int_t AliTRDtracker::Clusters2Tracks(AliESD* event) // Int_t AliTRDtracker::PropagateBack(AliESD* event) // Int_t AliTRDtracker::RefitInward(AliESD* event) : : : case kTRDin: case kTRDrefit: fTRDsignal=t->GetPIDsignal(); // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS for (Int_t i=0;i<kNPlane;i++){ fTRDsignals[i] = t->GetPIDsignals(i); fTRDTimBin[i] = t->GetPIDTimBin(i); } // ----------------------------------------------- AliESDtrack::AliESDtrack(const AliESDtrack& track):TObject(track) fTRDsignal=track.fTRDsignal; // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS for (Int_t i=0;i<kNPlane;i++) fTRDsignals[i]=track.fTRDsignals[i]; for (Int_t i=0;i<kNPlane;i++) fTRDTimBin[i]=track.fTRDTimBin[i]; //-----------------------------------------------------------
4. AliTRDtrack: AliTRDtrack.h const Int_t kNPlane = AliTRDgeometry::Nplan(); Float_t fdEdx; // dE/dx // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS Float_t fdEdxPlane[kNPlane]; // dE/dx from all 6 planes Int_t fTimBinPlane[kNPlane]; // time bin of Max cluster from all 6 planes // ---------------------------------------------------------------- Float_t fdQdl[kMAX_CLUSTERS_PER_TRACK]; // cluster amplitudes corrected for track angles // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS Int_t fPlaneNum[kMAX_CLUSTERS_PER_TRACK]; // corresponding Plane Number of clusters Int_t fTimeBin[kMAX_CLUSTERS_PER_TRACK]; // corresponding time bins of clusters // ------------------------------------------------------------------ // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS Float_t GetPIDsignals(Int_t i) const {return fdEdxPlane[i];} Int_t GetPIDTimBin(Int_t i) const {return fTimBinPlane[i];} // ---------------------------------------- void SetdEdx(Float_t dedx) {fdEdx=dedx;} // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS void SetdEdxTimBin(); // This is setting fdEdxPlane and fTimBinPlane // ------------------------------------------------------------------
4. AliTRDtrack.cxx void AliTRDtrack::CookdEdx(Double_t low, Double_t up) // This function is also called by BEFORE UpdateTrackParams // Int_t AliTRDtracker::Clusters2Tracks(AliESD* event) and // Int_t AliTRDtracker::PropagateBack(AliESD* event) // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS void SetdEdxTimBin(); // This is setting fdEdxPlane and fTimBinPlane //-------------------------------------------------------------- Int_t AliTRDtrack::Update(const AliTRDcluster *c, Double_t chisq, UInt_t index, Double_t h01) Int_t AliTRDtrack::UpdateMI(const AliTRDcluster *c, Double_t chisq, UInt_t index, Double_t h01, Int_t plane) // This function is called by // Int_t AliTRDtracker::FollowProlongation(AliTRDtrack& t, Int_t rf) // Int_t AliTRDtracker::FollowBackProlongation(AliTRDtrack& t) // Int_t AliTRDtracker::Refit(AliTRDtrack& t, Int_t rf) Int_t n=GetNumberOfClusters(); fIndex[n]=index; // *** ADDED TO GET MORE INFORMATION FOR TRD PID ---- PS fPlanNum[n] = plane; fTimBin[n] = c->GetLocalTimeBin(); //--------------------------------------------------
5. AliTRDtrack.cxx Copy Constructors AliTRDtrack::AliTRDtrack(const AliTRDcluster *c, UInt_t index, const Double_t xx[5], const Double_t cc[15], Double_t xref, Double_t alpha) : AliKalmanTrack() fdEdx=0.; for (Int_t i=0;i<kNPlane;i++){ fdEdxPlane[i] = 0.; fTimBinPlane[i] = 0.; } for(UInt_t i=1; i<kMAX_CLUSTERS_PER_TRACK; i++) { fdQdl[i] = 0; fIndex[i] = 0; fIndexBackup[i] = 0; //bacup indexes MI fPlaneNum[i] = 0; fTimeBin[i] = 0; } AliTRDtrack::AliTRDtrack(const AliTRDtrack& t) : AliKalmanTrack(t) AliTRDtrack::AliTRDtrack(const AliKalmanTrack& t, Double_t alpha) AliTRDtrack::AliTRDtrack(const AliESDtrack& t) fdEdx=t.fdEdx; for (Int_t i=0;i<kNPlane;i++){ fdEdxPlane[i] = t.fdEdxPlane[i]; fTimBinPlane[i] = t.fTimBinPlane[i]; } for (Int_t i=0; i<n; i++) { fIndex[i]=t.fIndex[i]; fIndexBackup[i]=t.fIndex[i]; // MI - backup indexes fdQdl[i]=t.fdQdl[i]; fPlaneNum[i] = t.fPlaneNum[i]; fTimeBin[i] = t.fTimeBin[i]; }
void SetdEdxTimBin() { // Sums up the charge in each plane for track <t> and also get the // Time bin for Max. Cluster // const Int_t kNPlane = AliTRDgeometry::Nplan(); const Int_t kNPlane = 6; Double_t clscharge[kNPlane], nCluster[kNPlane], timebin[kNPlane], maxclscharge[kNPlane]; //Initialization of cluster charge per plane. for (Int_t iPlane = 0; iPlane < kNPlane; iPlane++) { clscharge[iPlane] = 0.0; nCluster[iPlane] = 0.0; timebin[iPlane] = 0.0; maxclscharge[iPlane] = 0.0; }
// Loop through all clusters associated to track TRDtrack UInt_t nClus = GetNumberOfClusters(); // from Kalmantrack for (Int_t iClus = 0; iClus < nClus; iClus++) { Int_t iPlane = fPlaneNum[iClus]; Double_t charge = fdQdl[iClus]; Double_t tb = fTimeBin[iClus]; clscharge[iPlane]+ = charge; if(charge > maxclscharge[iPlane]) { maxclscharge[iPlane] = charge; timebin[iPlane] = tb; } nCluster[iPlane]++; } // end of loop over cluster // Setting the fdEdxPlane and fTimBinPlane variabales Double_t Total_ch = 0; for (Int_t iPlane = 0; iPlane < kNPlane; iPlane++) { fdEdxPlane[iPlane] = clscharge[iPlane]; fTimBinPlane[iPlane] = timebin[iPlane]; Total_ch+ = clscharge[iPlane]; }
Total dE/dx e pi
HIJING cent1 event generated at CERN with Aliroot v4-02-04. The ESD from one event checked with CheckESD.C macro. gen\rec: electron muon pion kaon proton electron: 14 0 15 3 0 muon: 0 0 0 0 0 pion: 6 0 4388 45 7 kaon: 2 0 72 280 2 proton: 1 0 19 3 213 other: 0 0 0 0 0 TRD PID eff = (87.7 +- 0.5) % gen\rec: electron muon pion kaon proton electron: 0 0 32 0 0 muon: 0 0 0 0 0 pion: 0 0 4446 0 0 kaon: 0 0 356 0 0 proton: 0 0 236 0 0 other: 0 0 0 0 0
HIJING cent1 event generated with Aliroot v4-02-06. The ESD from one event checked with CheckESD.C macro. gen\rec: electron muon pion kaon proton electron: 24 0 5 1 0 muon: 0 0 0 0 0 Pion: 33 0 5616 184 47 kaon: 7 0 162 316 16 proton: 7 0 47 3 283 other: 0 0 0 0 0 ONLY TRD PID gen\rec: electron muon pion kaon proton electron: 0 0 27 3 0 muon: 0 0 0 0 0 pion: 21 0 5350 268 241 kaon: 8 0 368 59 66 proton: 15 0 196 8 121 other: 0 0 0 0 0