//__________________________________________________________________________________________________
void AliRICHhit::Print(Option_t*)const
{
- ::Info("hit","chamber=%2i, PID=%9i, TID=%6i, eloss=%8.3f eV",fChamber,fPid,fTrack,fEloss*1e9);
+ TVector3 glob(fX,fY,fZ);
+ AliRICH *pRich = (AliRICH*)gAlice->GetDetector("RICH");
+ TVector3 loc = pRich->C(fChamber)->Glob2Loc(glob);
+ ::Info("hit","chamber=%2i, PID=%9i, TID=%6i, eloss=%9.3f eV, XYz(%7.2f,%7.2f,%7.2f)",fChamber,fPid,fTrack,fEloss*1e9,loc.X(),loc.Y(),loc.Z());
}
//__________________________________________________________________________________________________
ClassImp(AliRICHdigit)
fCombiPid,fChamber,fSize,fDimXY,fX,fY,fQdc,fStatus);
}
//__________________________________________________________________________________________________
+ClassImp(AliRICHreco)
+//__________________________________________________________________________________________________
+void AliRICHreco::Print(Option_t*)const
+{
+ ::Info("reco","ThetaCherenkov=%9.6f, Nphotons=%4i, TID=%9i",fThetaCherenkov,fNphotons,fTid);
+}
+//__________________________________________________________________________________________________
ClassImp(AliRICH)
//__________________________________________________________________________________________________
// RICH manager class
{
//
// *** DEFINITION OF AVAILABLE RICH MATERIALS ***
- // ORIGIN : NICK VAN EIJNDHOVEN
- // Modified by: N. Colonna (INFN - BARI, Nicola.Colonna@ba.infn.it)
- // R.A. Fini (INFN - BARI, Rosanna.Fini@ba.infn.it)
- // R.A. Loconsole (Bari University, loco@riscom.ba.infn.it)
- //
- 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;
- }
-
-
- //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 );
- }
-
- //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;
- }
-
- //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);
- }
-
- //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));
- }
-
- /*******************************************End of rich_media.f***************************************/
-
- Float_t rIndexFreon[26];
-
-
- // --- Photon energy (GeV)
- // --- Refraction indexes
- for (i = 0; i < 26; ++i) {
- rIndexFreon[i] = ppckov[i] * .0172 * 1e9 + 1.177;
- //rIndexFreon[i] = 1;
- }
-
-
+
+#include "Opticals.h"
+
Float_t a=0,z=0,den=0,radl=0,absl=0;
Float_t tmaxfd=-10.0, deemax=-0.2, stemax=-0.1,epsil=0.001, stmin=-0.001;
Int_t isxfld = gAlice->Field()->Integ();
AliMedium(kCSI, "CSI$", 16, 1, isxfld, sxmgmx,tmaxfd, stemax, deemax, epsil, stmin);
AliMaterial(11, "GRI", a=63.54,z=29.0,den=8.96, radl=1.43, absl=0); //anode grid (Cu)
- AliMedium(7, "GRIGLIA$", 11, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(7, "GRID$", 11, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
AliMaterial(50, "ALUM", a=26.98,z=13.0,den=2.7, radl=8.9, absl=0); //aluminium sheet (Al)
AliMedium(10, "ALUMINUM$", 50, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
Float_t aQuartz[2]={28.09,16.0}; Float_t zQuartz[2]={14.00, 8.0}; Float_t wmatQuartz[2]={1,2};
AliMixture (20, "QUA",aQuartz,zQuartz,den=2.64,-2, wmatQuartz);//Quarz (SiO2) - trasnparent
- AliMedium(3, "QUARZO$", 20, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(3, "QUARTZ$", 20, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
AliMixture (21, "QUAO",aQuartz, zQuartz, den=2.64, -2, wmatQuartz);//Quarz (SiO2) - opaque
- AliMedium(8, "QUARZOO$", 21, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(8, "QUARTZO$", 21, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
Float_t aFreon[2]={12,19}; Float_t zFreon[2]={6,9}; Float_t wmatFreon[2]={6,14};
AliMixture (30, "FRE",aFreon,zFreon,den=1.7,-2,wmatFreon);//Freon (C6F14)
Float_t aMethane[2]={12.01,1}; Float_t zMethane[2]={6,1}; Float_t wmatMethane[2]={1,4};
AliMixture (40, "MET", aMethane, zMethane, den=7.17e-4,-2, wmatMethane);//methane (CH4)
- AliMedium(5, "METANO$", 40, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(5, "METHANE$", 40, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
AliMixture (41, "METG", aMethane, zMethane, den=7.17e-4, -2, wmatMethane);
AliMedium(kGAP, "GAP$", 41, 1, isxfld, sxmgmx,tmaxfd, 0.1, -deemax, epsil, -stmin);
AliMedium(11, "GLASS", 32, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
Int_t *idtmed = fIdtmed->GetArray()-999;
- 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);
+ gMC->SetCerenkov(idtmed[1000], kNbins, aPckov, aAbsCH4, aQeAll, aIdxCH4);
+ gMC->SetCerenkov(idtmed[1001], kNbins, aPckov, aAbsCH4, aQeAll, aIdxCH4);
+ gMC->SetCerenkov(idtmed[1002], kNbins, aPckov, aAbsSiO2, aQeAll, aIdxSiO2);
+ gMC->SetCerenkov(idtmed[1003], kNbins, aPckov, aAbsC6F14, aQeAll, aIdxC6F14);
+ gMC->SetCerenkov(idtmed[1004], kNbins, aPckov, aAbsCH4, aQeAll, aIdxCH4);
+ gMC->SetCerenkov(idtmed[1005], kNbins, aPckov, aAbsCsI, aQeCsI, aIdxCH4);
+ gMC->SetCerenkov(idtmed[1006], kNbins, aPckov, aAbsGrid, aQeAll, aIdxGrid);
+ gMC->SetCerenkov(idtmed[1007], kNbins, aPckov, aAbsOpSiO2, aQeAll, aIdxOpSiO2);
+ gMC->SetCerenkov(idtmed[1008], kNbins, aPckov, aAbsCH4, aQeAll, aIdxCH4);
+ gMC->SetCerenkov(idtmed[1009], kNbins, aPckov, aAbsGrid, aQeAll, aIdxGrid);
+ gMC->SetCerenkov(idtmed[1010], kNbins, aPckov, aAbsOpSiO2, aQeAll, aIdxOpSiO2);
+
}//void AliRICH::CreateMaterials()
//__________________________________________________________________________________________________
Float_t AliRICH::Fresnel(Float_t ene,Float_t pdoti, Bool_t pola)const
public:
inline AliRICHhit();
inline AliRICHhit(Int_t fIshunt, Int_t track, Int_t *vol, Float_t *hits);
- inline AliRICHhit(Int_t tid,TVector3 x3,Double_t eloss);
+ AliRICHhit(Int_t tid,TVector3 x3) :AliHit(0,tid) {fInX3=x3;}
+ inline AliRICHhit(Int_t tid,TVector3 x3in,TVector3 x3out,Double_t eloss);
virtual ~AliRICHhit() {;}
-
+
Int_t C() const{return fChamber;}
Int_t Chamber() const{return fChamber;}
Int_t Pid() const{return fPid;}
Int_t fPid; //particle code
Double_t fEloss; //ionisation energy loss in gas
Float_t fMomX,fMomY,fMomZ; //momentum at photochatode entry point
- Float_t fNPads; // Pads hit
- Float_t fCerenkovAngle; // Dummy cerenkov angle
+ Float_t fNPads; //Pads hit
+ Float_t fCerenkovAngle; //Dummy cerenkov angle
Float_t fMomFreoX,fMomFreoY,fMomFreoZ; //momentum at freon entry point
+ TVector3 fInX3,fOutX3; //3-vectors at the entrance and exit of the GAP
ClassDef(AliRICHhit,2) //RICH hit class
};//class AliRICHhit
fChamber=fPid=kBad;
fEloss=kBad;
fMomX=fMomY=fMomZ=fNPads=fCerenkovAngle=fMomFreoX=fMomFreoY=fMomFreoZ=kBad;
+ fInX3.SetXYZ(0,0,0);fOutX3.SetXYZ(0,0,0);
}
//__________________________________________________________________________________________________
AliRICHhit::AliRICHhit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hit)
fMomFreoX=hit[19];fMomFreoY=hit[20];fMomFreoZ=hit[21];
}
//__________________________________________________________________________________________________
-AliRICHhit::AliRICHhit(Int_t tid,TVector3 x3,Double_t eloss)
+AliRICHhit::AliRICHhit(Int_t tid,TVector3 x3in,TVector3 x3out,Double_t eloss)
:AliHit(0,tid)
{//ctor
- fX=x3.X();fY=x3.Y();fZ=x3.Z();
+ fX=x3out.X();fY=x3out.Y();fZ=x3out.Z();
+ fInX3=x3in;
+ fOutX3=x3out;
fEloss=eloss;
}
fDimXY = 100*(xmax-xmin+1)+ymax-ymin+1;//find box containing cluster
fStatus=kRaw;
}//CoG()
+class AliRICHreco: public TObject
+{
+public:
+ AliRICHreco() {fTid=fNphotons=kBad; fThetaCherenkov=kBad;}
+ AliRICHreco(Int_t tid,Double_t thetaCherenkov,Int_t nPhotons) {fTid=tid;fThetaCherenkov=thetaCherenkov;fNphotons=nPhotons;}
+ virtual ~AliRICHreco() {;}
+
+ void Print(Option_t *option="")const; //virtual print
+
+protected:
+ Int_t fTid; // track Id reference
+ Int_t fNphotons; // number of photons contributed to the recontruction
+ Double_t fThetaCherenkov; // reconstructed Theta Cerenkov for a given charged track
+
+ ClassDef(AliRICHreco,1) //RICH reco class
+
+};//class AliRICHreco
//__________________AliRICH_________________________________________________________________________
class AliRICHParam;
class AliRICHChamber;
{
public:
AliRICH();
- AliRICH(const char *name, const char *title);
+ AliRICH(const char *name, const char *title);
AliRICH(const AliRICH& RICH):AliDetector(RICH) {;}
virtual ~AliRICH();
inline void CreateSDigits();
inline void CreateDigits();
inline void CreateClusters();
- void AddHit(Int_t track, Int_t *vol, Float_t *hits) {TClonesArray &tmp=*fHits; new(tmp[fNhits++])AliRICHhit(fIshunt,track,vol,hits);}//virtual
- void AddHit(Int_t tid,TVector3 x3,Double_t eloss=0) {TClonesArray &tmp=*fHits;new(tmp[fNhits++])AliRICHhit(tid,x3,eloss);}
+ inline void CreateRecos();
+ void AddHit(Int_t track, Int_t *vol, Float_t *hits) {TClonesArray &tmp=*fHits; new(tmp[fNhits++])AliRICHhit(fIshunt,track,vol,hits);}//virtual
+ void AddHit(Int_t tid,TVector3 x3) {TClonesArray &tmp=*fHits;new(tmp[fNhits++])AliRICHhit(tid,x3);}
+ void AddHit(Int_t tid,TVector3 x3in,TVector3 x3out,Double_t eloss) {TClonesArray &tmp=*fHits;new(tmp[fNhits++])AliRICHhit(tid,x3in,x3out,eloss);}
inline void AddSDigit(int c,int x,int y,int q,int pid,int tid);
void AddDigit(int c,int x,int y,int q,int cpid,int *tid){TClonesArray &tmp=*((TClonesArray*)fDigitsNew->At(c-1));new(tmp[fNdigitsNew[c-1]++])AliRICHdigit(c,x,y,q,cpid,tid[0],tid[1],tid[2]);}
void AddCluster(AliRICHcluster &cl) {TClonesArray &tmp=*((TClonesArray*)fClusters->At(cl.C()-1));new(tmp[fNclusters[cl.C()-1]++])AliRICHcluster(cl);}
-
+ void AddReco(Int_t tid,Double_t thetaCherenkov,Int_t nPhotons) {TClonesArray &tmp=*(TClonesArray*)fRecos;new(tmp[fNrecos++])AliRICHreco(tid,thetaCherenkov,nPhotons);}
void ResetHits() {AliDetector::ResetHits();fNcerenkovs=0;if(fCerenkovs)fCerenkovs->Clear();fNspecials=0;if(fSpecials)fSpecials->Clear();} //virtual
void ResetSDigits() {fNsdigits=0; if(fSdigits) fSdigits ->Clear();}
void ResetDigits() {if(fDigitsNew)for(int i=0;i<kNCH;i++){fDigitsNew->At(i)->Clear();fNdigitsNew[i]=0;}}
void ResetClusters() {if(fClusters) for(int i=0;i<kNCH;i++){fClusters ->At(i)->Clear();fNclusters[i]=0;}}
+ void ResetRecos() {if(fRecos) fRecos->Clear();fNrecos=0;}
//Hits provided by AliDetector
TClonesArray* SDigits() const{return fSdigits;}
TClonesArray* Digits(Int_t iC) const{if(fDigitsNew) return (TClonesArray *)fDigitsNew->At(iC-1);else return 0;}
TClonesArray* Clusters(Int_t iC) const{if(fClusters) return (TClonesArray *)fClusters->At(iC-1);else return 0;}
+ TClonesArray* Recos() const{return fRecos;}
AliRICHChamber* C(Int_t iC) const{return (AliRICHChamber*)fChambers->At(iC-1);}
AliRICHParam* Param() const{return fpParam;}
Int_t fNdigitsNew[kNCH]; //! Array of current numbers of digits
TObjArray *fClusters; //! Each chamber holds it's one lists of clusters
Int_t fNclusters[kNCH]; //! Array of current numbers of raw clusters
+ TClonesArray *fRecos; //! pointer to the list of recos
+ Int_t fNrecos; //! number of recos
TClonesArray *fCerenkovs; //! ??? List of cerenkovs
Int_t fNcerenkovs; //! ??? Current number of cerenkovs
for(Int_t i=0;i<kNCH;i++) {fClusters->AddAt(new TClonesArray("AliRICHcluster",10000), i); fNclusters[i]=0;}
}
//__________________________________________________________________________________________________
+void AliRICH::CreateRecos()
+{
+ if(fRecos) return;
+ if(GetDebug())Info("CreateRecos","creating recos containers.");
+ fRecos = new TClonesArray("AliRICHreco",1000);fNrecos=0;
+}
+//__________________________________________________________________________________________________
void AliRICH::AddSDigit(int c,int x,int y,int q,int pid,int tid)
{
switch(pid){
#include "AliRICHParam.h"
#include <AliLoader.h>
#include <TCanvas.h>
+#include <TPolyLine.h>
#include <TParticle.h>
#include <TStyle.h>
#include <TH2.h>
//__________________________________________________________________________________________________
void AliRICHDisplFast::Exec()
{
- TH2F *pHitsH2 = new TH2F("pHitsH2" , "Event Display",165,-AliRICHParam::PcSizeY()/2,AliRICHParam::PcSizeY()/2,
- 144,-AliRICHParam::PcSizeX()/2,AliRICHParam::PcSizeX()/2);
+ TH2F *pHitsH2 = new TH2F("pHitsH2" , "Event Display",165,-AliRICHParam::PcSizeX()/2,AliRICHParam::PcSizeX()/2,
+ 144,-AliRICHParam::PcSizeY()/2,AliRICHParam::PcSizeY()/2);
pHitsH2->SetStats(kFALSE);
- TH2F *pDigitsH2 = new TH2F("pDigitsH2" ,"Event Display",165,-AliRICHParam::PcSizeY()/2,AliRICHParam::PcSizeY()/2,
- 144,-AliRICHParam::PcSizeX()/2,AliRICHParam::PcSizeX()/2);
- TH2F *pClustersH2 = new TH2F("pClustersH2","Event Display",165,-AliRICHParam::PcSizeY()/2,AliRICHParam::PcSizeY()/2,
- 144,-AliRICHParam::PcSizeX()/2,AliRICHParam::PcSizeX()/2);
+ TH2F *pDigitsH2 = new TH2F("pDigitsH2" ,"Event Display",165,-AliRICHParam::PcSizeX()/2,AliRICHParam::PcSizeX()/2,
+ 144,-AliRICHParam::PcSizeY()/2,AliRICHParam::PcSizeY()/2);
+ TH2F *pClustersH2 = new TH2F("pClustersH2","Event Display",165,-AliRICHParam::PcSizeX()/2,AliRICHParam::PcSizeX()/2,
+ 144,-AliRICHParam::PcSizeY()/2,AliRICHParam::PcSizeY()/2);
TCanvas *Display = new TCanvas("Display","RICH Display",0,0,600,600);
pHitsH2->SetTitle(Form("event %i module %2i",iEventN,iChamber));
pHitsH2->SetMarkerColor(kRed); pHitsH2->SetMarkerStyle(29); pHitsH2->SetMarkerSize(0.4);
pHitsH2->Draw();
+ DrawSectors();
Display->Update();
Display->Modified();
getchar();
pRich->GetLoader()->UnloadHits();
}//Exec()
//__________________________________________________________________________________________________
+void AliRICHDisplFast::DrawSectors()
+{
+ Double_t x1[5] = {-AliRICHParam::PcSizeX()/2,
+ -AliRICHParam::SectorSizeX()/2-AliRICHParam::DeadZone(),
+ -AliRICHParam::SectorSizeX()/2-AliRICHParam::DeadZone(),
+ -AliRICHParam::PcSizeX()/2,
+ -AliRICHParam::PcSizeX()/2};
+ Double_t y1[5] = {AliRICHParam::DeadZone()/2,
+ AliRICHParam::DeadZone()/2,
+ AliRICHParam::PcSizeY()/2,
+ AliRICHParam::PcSizeY()/2,
+ AliRICHParam::DeadZone()/2};
+ Double_t x2[5] = {-AliRICHParam::SectorSizeX()/2,
+ AliRICHParam::SectorSizeX()/2,
+ AliRICHParam::SectorSizeX()/2,
+ -AliRICHParam::SectorSizeX()/2,
+ -AliRICHParam::SectorSizeX()/2};
+ Double_t y2[5] = {AliRICHParam::DeadZone()/2,
+ AliRICHParam::DeadZone()/2,
+ AliRICHParam::PcSizeY()/2,
+ AliRICHParam::PcSizeY()/2,
+ AliRICHParam::DeadZone()/2};
+ Double_t x3[5] = { AliRICHParam::SectorSizeX()/2+AliRICHParam::DeadZone(),
+ AliRICHParam::PcSizeX()/2,
+ AliRICHParam::PcSizeX()/2,
+ AliRICHParam::SectorSizeX()/2+AliRICHParam::DeadZone(),
+ AliRICHParam::SectorSizeX()/2+AliRICHParam::DeadZone()};
+ Double_t y3[5] = {AliRICHParam::DeadZone()/2,
+ AliRICHParam::DeadZone()/2,
+ AliRICHParam::PcSizeY()/2,
+ AliRICHParam::PcSizeY()/2,
+ AliRICHParam::DeadZone()/2};
+ Double_t x4[5] = {-AliRICHParam::PcSizeX()/2,
+ -AliRICHParam::SectorSizeX()/2-AliRICHParam::DeadZone(),
+ -AliRICHParam::SectorSizeX()/2-AliRICHParam::DeadZone(),
+ -AliRICHParam::PcSizeX()/2,
+ -AliRICHParam::PcSizeX()/2};
+ Double_t y4[5] = {-AliRICHParam::PcSizeY()/2,
+ -AliRICHParam::PcSizeY()/2,
+ -AliRICHParam::DeadZone()/2,
+ -AliRICHParam::DeadZone()/2,
+ -AliRICHParam::PcSizeY()/2};
+ Double_t x5[5] = {-AliRICHParam::SectorSizeX()/2,
+ AliRICHParam::SectorSizeX()/2,
+ AliRICHParam::SectorSizeX()/2,
+ -AliRICHParam::SectorSizeX()/2,
+ -AliRICHParam::SectorSizeX()/2};
+ Double_t y5[5] = {-AliRICHParam::PcSizeY()/2,
+ -AliRICHParam::PcSizeY()/2,
+ -AliRICHParam::DeadZone()/2,
+ -AliRICHParam::DeadZone()/2,
+ -AliRICHParam::PcSizeY()/2};
+ Double_t x6[5] = { AliRICHParam::SectorSizeX()/2+AliRICHParam::DeadZone(),
+ AliRICHParam::PcSizeX()/2,
+ AliRICHParam::PcSizeX()/2,
+ AliRICHParam::SectorSizeX()/2+AliRICHParam::DeadZone(),
+ AliRICHParam::SectorSizeX()/2+AliRICHParam::DeadZone()};
+ Double_t y6[5] = {-AliRICHParam::PcSizeY()/2,
+ -AliRICHParam::PcSizeY()/2,
+ -AliRICHParam::DeadZone()/2,
+ -AliRICHParam::DeadZone()/2,
+ -AliRICHParam::PcSizeY()/2};
+ TPolyLine *sector1 = new TPolyLine(5,x1,y1);
+ TPolyLine *sector2 = new TPolyLine(5,x2,y2);
+ TPolyLine *sector3 = new TPolyLine(5,x3,y3);
+ TPolyLine *sector4 = new TPolyLine(5,x4,y4);
+ TPolyLine *sector5 = new TPolyLine(5,x5,y5);
+ TPolyLine *sector6 = new TPolyLine(5,x6,y6);
+ sector1->SetLineColor(21);
+ sector2->SetLineColor(21);
+ sector3->SetLineColor(21);
+ sector4->SetLineColor(21);
+ sector5->SetLineColor(21);
+ sector6->SetLineColor(21);
+ sector1->Draw();
+ sector2->Draw();
+ sector3->Draw();
+ sector4->Draw();
+ sector5->Draw();
+ sector6->Draw();
+}
AliRICHDisplFast() {;}
~AliRICHDisplFast() {;}
+
+ void DrawSectors(); //Draw sectors in plot
void Exec();//virtual
protected:
ClassDef(AliRICHDisplFast,0)
clusY[ich][k] = pCluster->Y();
clusQ[ich][k] = pCluster->Q();
clusMul[ich][k] = pCluster->Size();
- pCluster->Print();
+// pCluster->Print();
}
}
Rich()->GetLoader()->TreeH()->GetEntry(i);
- Rich()->Hits()->Print();
+// Rich()->Hits()->Print();
Int_t iPrim = 0;
AliRICHhit* pHit=0;
if (!pHit) return;
- pHit->Print();
+// pHit->Print();
TParticle *pParticle = gAlice->GetRunLoader()->Stack()->Particle(pHit->GetTrack());
Float_t pmod = pParticle->P();
Float_t trackEta = pParticle->Eta();
Int_t q = (Int_t)TMath::Sign(1.,pParticle->GetPDG()->Charge());
- pParticle->Print();
+// pParticle->Print();
cout << " pmod " << pmod << " pt " << pt << " Eta " << trackEta << " charge " << q << endl;
Int_t copy;
static Int_t iCurrentChamber;
- TLorentzVector x4,p4;
+ static TLorentzVector x4,p4,mipInX4,mipOutX4;
Float_t pos[3],mom[4],localPos[3],localMom[4];
Float_t coscerenkov;
TParticle *current = (TParticle*)(*gAlice->GetMCApp()->Particles())[gAlice->GetMCApp()->GetCurrentTrackNumber()];
-
-
Float_t cherenkovLoss=0;
-
-
if(gMC->TrackPid()==kCerenkov){//C
Float_t ckovEnergy = current->Energy();
if(ckovEnergy > 5.6e-09 && ckovEnergy < 7.8e-09 ){//C+E
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
+ if(gMC->IsTrackEntering()||gMC->IsNewTrack()) {//MIP in GAP Entering
eloss=0;
- else if(gMC->IsTrackExiting()||gMC->IsTrackStop()||gMC->IsTrackDisappeared()){//MIP in GAP Exiting
+ gMC->TrackPosition(mipInX4);
+ }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
+ gMC->TrackPosition(mipOutX4);
+ AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),mipInX4.Vect(),mipOutX4.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();
aIdxOpSiO2[i] =1;
}
- Float_t aAbsC6F14old[kNbins]={//previous values 26 in total added 0.0001 to the 30
- 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 142.9206,
- 56.6496, 25.5862, 13.9529, 12.0391, 10.4295, 8.8042, 7.0690, 4.4611, 2.0284, 1.2930,
- 0.5772, 0.4074, 0.3350, 0.0001, 0.0001, 0.0001 0.0001, 0.0001, 0.0001, 0.0001};
- Float_t aAbsSiO2old[kNbins]={//previous values 26 in total added 0.0001 to the 30
- 105.8000, 65.5200, 48.5800, 42.8500, 35.7900, 31.2620, 28.5980, 27.5270, 25.0070, 22.8150,
- 21.0040, 19.2660, 17.5250, 15.8780, 14.1770, 11.7190, 9.2820, 6.6200, 4.0930, 2.6010,
- 1.1490, 0.6670, 0.3630, 0.1920, 0.1500, 0.1090, 0.0001, 0.0001, 0.0001, 0.0001};
-
Float_t aAbsC6F14[kNbins]={//New values from A.DiMauro 28.10.03 total 31
- 32701.4219, 17996.1141, 10039.7281, 1799.1230, 1799.1231, 1799.1231, 1241.4091, 179.0987, 179.0986, 179.0987
+ 32701.4219, 17996.1141, 10039.7281, 1799.1230, 1799.1231, 1799.1231, 1241.4091, 179.0987, 179.0986, 179.0987,
179.0987, 118.9800, 39.5058, 23.7244, 11.1283, 7.1573, 3.6249, 2.1236, 0.7362, 0.5348,
0.3387, 0.3074, 0.3050, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001};
Float_t aAbsSiO2[kNbins]={//New values from A.DiMauro 28.10.03 total 31
aAbsGrid[i] =1e-4;
}
- Float_t aQeCsIold[kNbins]={
- 0.0002, 0.0006, 0.0007, 0.0050, 0.0075, 0.0101, 0.0243, 0.0405, 0.0689, 0.1053,
- 0.1215, 0.1417, 0.1579, 0.1620, 0.1661, 0.1677, 0.1743, 0.1768, 0.1793, 0.1826,
- 0.1859, 0.1876, 0.1892, 0.1909, 0.2075, 0.2158, 0.0001, 0.0001, 0.0001, 0.0001 };
-
- Float_t aQeCsI1[kNbins] = {0.0002, 0.0006, 0.0007, 0.0010, 0.0049, 0.0073, 0.0104, 0.0519, 0.0936, 0.1299,
- 0.1560, 0.1768, 0.1872, 0.1976, 0.2142, 0.2288, 0.2434, 0.2599, 0.2673, 0.2808,
- 0.2859, 0.2954, 0.3016, 0.3120, 0.3172, 0.3224, 0.3266, 0.3328, 0.3359, 0.3390};
+ Float_t aQeCsI[kNbins] = {//New values from A.DiMauro 28.10.03 total 31
+ 0.0002, 0.0006, 0.0007, 0.0010, 0.0049, 0.0073, 0.0104, 0.0519, 0.0936, 0.1299,
+ 0.1560, 0.1768, 0.1872, 0.1976, 0.2142, 0.2288, 0.2434, 0.2599, 0.2673, 0.2808,
+ 0.2859, 0.2954, 0.3016, 0.3120, 0.3172, 0.3224, 0.3266, 0.3328, 0.3359, 0.3390};
// 0.3431};
Float_t aQeAll[kNbins];
for(i=0;i<kNbins;i++){
- aQeCsI1[i]/= (1.0-Fresnel(aPckov[i]*1e9,1.0,0)); //FRESNEL LOSS CORRECTION
+ aQeCsI[i]/= (1.0-Fresnel(aPckov[i]*1e9,1.0,0)); //FRESNEL LOSS CORRECTION
aQeAll[i]=1; //QE for all other materials except for PC must be 1.
}
#ifdef __CINT__
+ Float_t aAbsC6F14old[kNbins]={//previous values 26 in total added 0.0001 to the 30
+ 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 142.9206,
+ 56.6496, 25.5862, 13.9529, 12.0391, 10.4295, 8.8042, 7.0690, 4.4611, 2.0284, 1.2930,
+ 0.5772, 0.4074, 0.3350, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001};
+ Float_t aAbsSiO2old[kNbins]={//previous values 26 in total added 0.0001 to the 30
+ 105.8000, 65.5200, 48.5800, 42.8500, 35.7900, 31.2620, 28.5980, 27.5270, 25.0070, 22.8150,
+ 21.0040, 19.2660, 17.5250, 15.8780, 14.1770, 11.7190, 9.2820, 6.6200, 4.0930, 2.6010,
+ 1.1490, 0.6670, 0.3630, 0.1920, 0.1500, 0.1090, 0.0001, 0.0001, 0.0001, 0.0001};
+ Float_t aQeCsIold[kNbins]={
+ 0.0002, 0.0006, 0.0007, 0.0050, 0.0075, 0.0101, 0.0243, 0.0405, 0.0689, 0.1053,
+ 0.1215, 0.1417, 0.1579, 0.1620, 0.1661, 0.1677, 0.1743, 0.1768, 0.1793, 0.1826,
+ 0.1859, 0.1876, 0.1892, 0.1909, 0.2075, 0.2158, 0.0001, 0.0001, 0.0001, 0.0001 };
+
//Now plot all the thigs
//Freon, Quartz, Opaque ,Methane,CsI,Grid
const Int_t kC6F14M= 24; const Int_t kC6F14C=kRed;
pAbsCH4Gr->Draw("APL");
pC->cd(4);
- TGraph *pQeCsIG=new TGraph(kNbins,aPckov,aQeCsI1);
+ TGraph *pQeCsIG=new TGraph(kNbins,aPckov,aQeCsI);
pQeCsIG->SetMarkerStyle(kCsIMarker); pQeCsIG->SetMarkerColor(kCsIColor);
pQeCsIG->Draw("APL");
pQeCsIG->GetXaxis()->SetTitle("energy, GeV");
aTrC6F14[i]=TMath::Exp(-AliRICHParam::FreonThickness() /(aAbsC6F14[i]+0.0001));
aTrSiO2[i] =TMath::Exp(-AliRICHParam::QuartzThickness()/(aAbsSiO2[i] +0.0001));
aTrCH4[i] =TMath::Exp(-AliRICHParam::GapThickness() /(aAbsCH4[i] +0.0001));
- aTotTr[i] =aTrC6F14[i]*aTrSiO2[i]*aTrCH4[i]*aQeCsI1[i];
+ aTotTr[i] =aTrC6F14[i]*aTrSiO2[i]*aTrCH4[i]*aQeCsI[i];
}
TGraph *pTrC6F14G=new TGraph(kNbins,aPckov,aTrC6F14);pTrC6F14G->SetMarkerStyle(kC6F14M);pTrC6F14G->SetMarkerColor(kC6F14C);
TGraph *pTrSiO2G=new TGraph(kNbins,aPckov,aTrSiO2);pTrSiO2G->SetMarkerStyle(kSiO2M); pTrSiO2G->SetMarkerColor(kSiO2C);
for(int i=1;i<=7;i++){
pQeC->cd(i);
switch(i){
- case 1: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI1);pQeCsIGr->SetTitle("Module 1");break;
- case 2: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI2);pQeCsIGr->SetTitle("Module 2");break;
- case 3: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI3);pQeCsIGr->SetTitle("Module 3");break;
- case 4: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI4);pQeCsIGr->SetTitle("Module 4");break;
- case 5: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI5);pQeCsIGr->SetTitle("Module 5");break;
- case 6: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI6);pQeCsIGr->SetTitle("Module 6");break;
- case 7: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI7);pQeCsIGr->SetTitle("Module 7");break;
+ case 1: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI);pQeCsIGr->SetTitle("Module 1");break;
+ case 2: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI);pQeCsIGr->SetTitle("Module 2");break;
+ case 3: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI);pQeCsIGr->SetTitle("Module 3");break;
+ case 4: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI);pQeCsIGr->SetTitle("Module 4");break;
+ case 5: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI);pQeCsIGr->SetTitle("Module 5");break;
+ case 6: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI);pQeCsIGr->SetTitle("Module 6");break;
+ case 7: TGraph *pQeCsIGr=new TGraph(kNbins,aPckov,aQeCsI);pQeCsIGr->SetTitle("Module 7");break;
}
pQeCsIGr->SetMarkerStyle(kCsIMarker); pQeCsIGr->SetMarkerColor(kCsIColor);
pQeCsIGr->Draw("APL");
#pragma link C++ class AliRICHCerenkov+;
#pragma link C++ class AliRICHdigit+;
#pragma link C++ class AliRICHcluster+;
+#pragma link C++ class AliRICHreco+;
#pragma link C++ class AliRICHv3+;
#pragma link C++ class AliRICHSDigit+;
#pragma link C++ class AliRICHSegmentationV0+;
void DisplFast(){ AliRICHDisplFast *d = new AliRICHDisplFast(); d->Exec();}
-void Digits2Recos()
+void C_R()
{
AliRICHRecon *detect = new AliRICHRecon("RICH patrec algorithm","Reconstruction");
for(Int_t iPrimN=0;iPrimN<rl->TreeH()->GetEntries();iPrimN++){//prims loop
rl->TreeH()->GetEntry(iPrimN);
- for(Int_t i=0;i<r->Specials()->GetEntries();i++){//specials loop
+ for(Int_t i=0;i<r->Specials()->GetEntries();i++){//specials loop
Int_t padx=1+ ((AliRICHSDigit*)r->Specials()->At(i))->PadX()+r->Param()->NpadsX()/2;
Int_t pady=1+ ((AliRICHSDigit*)r->Specials()->At(i))->PadY()+r->Param()->NpadsY()/2;
Double_t q= ((AliRICHSDigit*)r->Specials()->At(i))->QPad();
// else
// Info("","More then 3 sdigits for the given pad");
}else{//new pad, add the pevious one
- if(id!=kBad&&r->Param()->IsOverTh(chamber,x,y,q))
+ if(id!=kBad&&r->Param()->IsOverTh(chamber,x,y,q)) {
r->AddDigit(chamber,x,y,q,combiPid,tid);
+ }
combiPid=pSdig->CombiPid();chamber=pSdig->C();id=pSdig->Id();
x=pSdig->X();y=pSdig->Y();
q=pSdig->Q();
if(ReadAlice()){//it's from file, reconstruct
pMenu->AddButton("hits->sdigits->digits->clusters","MainTrank()","Convert");
- pMenu->AddButton("hits->sdigits", "H_SD()", "Perform first phase converstion");
- pMenu->AddButton("sdigits->digits", "SD_D()", "Perform first phase converstion");
- pMenu->AddButton("digits->clusters", "D_C()", "Perform first phase converstion");
+ pMenu->AddButton("hits->sdigits", "H_SD()", "Perform first phase conversion");
+ pMenu->AddButton("sdigits->digits", "SD_D()", "Perform first phase conversion");
+ pMenu->AddButton("digits->clusters", "D_C()", "Perform first phase conversion");
+ pMenu->AddButton("clusters->recos", "C_R()", "Perform first phase conversion");
pMenu->AddButton("Show","Show()","Shows the structure of events in files");
pMenu->AddButton("OLD specials->sdigits", "OLD_S_SD()", "Perform first phase converstion");