Update of ExB efect simulation for SPD (G. Bruno)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Oct 2010 23:09:21 +0000 (23:09 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Oct 2010 23:09:21 +0000 (23:09 +0000)
ITS/AliITSSimuParam.cxx
ITS/AliITSSimuParam.h
ITS/AliITSsimulationSPD.cxx
ITS/AliITSsimulationSPD.h

index a18184f..a92cee2 100644 (file)
@@ -33,6 +33,7 @@ const TString  AliITSSimuParam::fgkSPDCouplingOptDefault = "old";
 const Double_t AliITSSimuParam::fgkSPDCouplColDefault = 0.;
 const Double_t AliITSSimuParam::fgkSPDCouplRowDefault = 0.055;
 const Float_t  AliITSSimuParam::fgkSPDEccDiffDefault = 0.85;
+const Float_t  AliITSSimuParam::fgkSPDLorentzHoleWeightDefault = 1.0;
 const Float_t  AliITSSimuParam::fgkSDDDiffCoeffDefault = 3.23;
 const Float_t  AliITSSimuParam::fgkSDDDiffCoeff1Default = 30.;
 const Float_t  AliITSSimuParam::fgkSDDJitterErrorDefault = 20.; // 20 um from beam test 2001
@@ -63,6 +64,8 @@ fSPDCouplOpt(0),
 fSPDCouplCol(fgkSPDCouplColDefault),
 fSPDCouplRow(fgkSPDCouplRowDefault),
 fSPDEccDiff(0.),
+fSPDLorentzDrift(kTRUE),
+fSPDLorentzHoleWeight(fgkSPDLorentzHoleWeightDefault),
 fSPDAddNoisyFlag(kFALSE),
 fSPDRemoveDeadFlag(kFALSE),
 fSDDElectronics(0),
@@ -110,6 +113,8 @@ fSPDCouplOpt(simpar.fSPDCouplOpt),
 fSPDCouplCol(simpar.fSPDCouplCol),
 fSPDCouplRow(simpar.fSPDCouplRow),
 fSPDEccDiff(simpar.fSPDEccDiff),
+fSPDLorentzDrift(simpar.fSPDLorentzDrift),
+fSPDLorentzHoleWeight(simpar.fSPDLorentzHoleWeight),
 fSPDAddNoisyFlag(simpar.fSPDAddNoisyFlag),
 fSPDRemoveDeadFlag(simpar.fSPDRemoveDeadFlag),
 fSDDElectronics(simpar.fSDDElectronics),
@@ -179,6 +184,8 @@ void AliITSSimuParam::PrintParameters() const{
   printf("Coupling value (column)   = %f\n",fSPDCouplCol);
   printf("Coupling value (row)      = %f\n",fSPDCouplRow);
   printf("Eccentricity in diffusion = %f\n",fSPDEccDiff);
+  printf("Flag to add Lorentz Drift = %d\n",fSPDLorentzDrift);
+  printf("Weight of Holes in Lor.Drift = %f\n",fSPDLorentzHoleWeight);
   printf("Flag to add noisy         = %d\n",fSPDAddNoisyFlag);
   printf("Flag to remove dead       = %d\n",fSPDRemoveDeadFlag);
   printf("\n");
index dc61cfd..0163e93 100644 (file)
@@ -67,6 +67,10 @@ class AliITSSimuParam : public TObject {
   void   SetSPDSigmaDiffusionAsymmetry(Double_t ecc) {fSPDEccDiff=ecc;}   
   void   GetSPDSigmaDiffusionAsymmetry(Double_t &ecc) const {ecc=fSPDEccDiff;}
 
+  void    SetSPDLorentzDrift(Bool_t ison) {fSPDLorentzDrift=ison;}
+  Bool_t  GetSPDLorentzDrift() const {return fSPDLorentzDrift;}
+  void    SetSPDLorentzHoleWeight(Float_t weight) {fSPDLorentzHoleWeight=weight;}
+  Float_t GetSPDLorentzHoleWeight() const {return fSPDLorentzHoleWeight;}
   
   void   SetSPDAddNoisyFlag(Bool_t value) {fSPDAddNoisyFlag = value;}
   Bool_t GetSPDAddNoisyFlag() {return fSPDAddNoisyFlag;}
@@ -186,6 +190,7 @@ class AliITSSimuParam : public TObject {
   static const Double_t fgkSPDCouplColDefault; //default for fSPDCouplCol
   static const Double_t fgkSPDCouplRowDefault; //default for fSPDCouplRow
   static const Float_t fgkSPDEccDiffDefault;//default for fSPDEccDiff
+  static const Float_t fgkSPDLorentzHoleWeightDefault;//default for fSPDLorentzHoleWeight
   static const Float_t fgkSDDDiffCoeffDefault; // default for fSDDDiffCoeff
   static const Float_t fgkSDDDiffCoeff1Default; // default for fSDDDiffCoeff1 
   static const Float_t fgkSDDJitterErrorDefault; // default for fSDDJitterError
@@ -219,6 +224,9 @@ class AliITSSimuParam : public TObject {
   Double_t fSPDCouplRow;    // SPD Coupling parameter along the rows
   Float_t  fSPDEccDiff;     // Eccentricity (i.e. asymmetry parameter) in the 
                             // Gaussian diffusion for SPD  
+  Bool_t   fSPDLorentzDrift;     // Flag to decide whether to simulate the Lorentz Drift or not in SPD
+  Float_t  fSPDLorentzHoleWeight;// Lorentz Angle is computed for SPD as average of Hole and Electron
+                                 // this parameter gives the relative weights between the two
   Bool_t   fSPDAddNoisyFlag;     // Flag saying whether noisy pixels should be added to digits
   Bool_t   fSPDRemoveDeadFlag;   // Flag saying whether dead pixels should be removed from digits
 
index 0b1ec33..df3f849 100644 (file)
@@ -128,8 +128,8 @@ void AliITSsimulationSPD::Init(){
    } else {
        fCoupling=1;
    } // end if
-   //SetLorentzDrift(kTRUE);
-   if (fLorentz) SetTanLorAngle();
+   SetLorentzDrift(simpar->GetSPDLorentzDrift());
+   if (fLorentz) SetTanLorAngle(simpar->GetSPDLorentzHoleWeight());
    //SetStrobeGeneration(kFALSE);
    if (fStrobe) GenerateStrobePhase();
 }
@@ -155,13 +155,11 @@ Bool_t AliITSsimulationSPD::SetTanLorAngle(Double_t WeightHole) {
     }
     Double_t WeightEle=1.-WeightHole;
     AliITSSimuParam* simpar = fDetType->GetSimuParam();
-    Double_t pos[3]={0.,0.,0.};
-    Double_t B[3]={0.,0.,0.};
-    TGeoGlobalMagField::Instance()->Field(pos,B);
-    fTanLorAng = TMath::Tan(WeightHole*simpar->LorentzAngleHole(B[2]) +
-                             WeightEle*simpar->LorentzAngleElectron(B[2]));
-    fTanLorAng*=-1.; // this only for the old geometry
-                      // comment the upper line for the new geometry
+    AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
+    if (!fld) AliFatal("The field is not initialized");
+    Double_t bz = fld->SolenoidField();
+    fTanLorAng = TMath::Tan(WeightHole*simpar->LorentzAngleHole(bz) +
+                             WeightEle*simpar->LorentzAngleElectron(bz));
     return kTRUE;
 }
 //______________________________________________________________________
index 5883b9f..196029c 100644 (file)
@@ -61,9 +61,9 @@ public:
    void SetLorentzDrift(Bool_t b=kFALSE)
         {fLorentz=b; if(fLorentz) SetTanLorAngle();};
    // This function set the relative contribution between holes and electrons: use  0<=WeightHole<=1
-   Bool_t SetTanLorAngle(Double_t WeightHole=0.5);
+   Bool_t SetTanLorAngle(Double_t WeightHole=1.0);
    // Getter for the Lorentz angle
-   Double_t GetTanLorAngle(){return fTanLorAng;};
+   Double_t GetTanLorAngle() const {return fTanLorAng;};
    //
    void CreateHistograms();
    void FillHistograms(Int_t ix,Int_t iz,Double_t v=1.0);