]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - RICH/api.txt
Working version of the class for the TOF Trigger. For the time being,
[u/mrichter/AliRoot.git] / RICH / api.txt
index 5f1a6973bc7676f185b8b8eec781b0036331390a..ec958e92e7cda45e2cce68f581ef1ddb60186017 100644 (file)
@@ -1,7 +1,7 @@
 How to open session:
        use static method  AliRunLoader::Open("galice.root","AlicE","update")
 How to get total number of events in galice.root:
-       use AliRun::GetEventsPerRun()        
+       use AliRun::GetEventsPerRun()  or AliRunLoader::GetNumberOfEvents()      
 How to avoid using gAlice:
        detector->GetLoader()->GetRunLoader()->GetAliRun() returns gAlice global pointer.
 How to retrieve pointer to alice run loader:
@@ -63,14 +63,6 @@ What are the meanings of different VMC flags:
        gMC->IsTrackAlive()
        gMC->IsTrackStop()
        gMC->IsTrackDisappeared()
-How is sdigit produced from hit:
-       Responsible method is AliRICH::Hits2SDigits
-       One hit may affect one or more pads.
-        Hit position is taken on the anode wires plane as the most of avalanche is developed there.
-        This position is not directly available, track intersections with entrance and exit of amplification gap are only stored.
-        So the position in the middle of the gap is calculated as average out of pHit->In() and pHit->Out() positions.
-        Then, total charge collected for this hit is calculated by AliRICHParam::Hit2Qdc.    
-        Area of disintegration is a list of pads affected by current hit. This is a parameter of Mathienson    
 How to get pad number for a local position:
        use static TVector AliRICHParam::Loc2Pad(TVector2 position);
 Why list of chambers belongs to AliRICHParam:
@@ -87,3 +79,189 @@ How to loop over all possible object:
       }//hits loop
     }//TreeH loop
   }//events loop
+
+
+RICH full simulation-reconstruction sequence
+
+hits->sdigit:
+       Responsible method is AliRICH::Hits2SDigits
+       One hit may affect one or more pads.
+        Hit position is taken on the anode wires plane as the most of avalanche is developed there.
+        This position is not directly available, track intersections with entrance and exit of amplification gap are only stored.
+        So the position in the middle of the gap is calculated as average out of pHit->In() and pHit->Out() positions.
+        Then, total charge collected for this hit is calculated by AliRICHParam::Hit2Qdc.    
+        Area of disintegration is a list of pads affected by current hit. This is a parameter of Mathienson    
+sdigits->digits:
+       The necessety of sdigits is dictated by the fact that trasport engine transports tracks in a continious sequence track by track. 
+  It means that it may happen that the same pad is affected by few tracks. But this might be known only after the trasport of full event is finished. 
+
+digits->clusters
+       A set of neighbouring digits compose cluster. The aim of this trasformation is to construct a list of clusters out of digits list.
+  The calling sequence is:
+  AliReconstruction::Run()
+  
+       AliRICHReconstructor::Reconstruct() creates an empty clusters list,  loops on chambers, retrives a list of digits for a given chamber, gives it to the methode Dig2Clu() and finally serializes
+                                        the list 
+                                        
+       AliRICHReconstructor::Dig2Clu() which knows no details about 
+
+
+clusters+tracks->theta cerenkov 
+
+       
+       
+       
+
+
+
+
+
+
+
+Generalized structure of AliReconstruction:
+
+Run()
+{
+  if(there is galice.root)                                        <-|
+    AliRunLoader::Open(....)                                        | 
+  else                                                              | this is done in InitRunLoader()
+    if(raw data process requested)                                  |
+      create galice.root on the base of AliRawReader::NextEvent   <-|   
+  
+  for(all detectors){                                             <-|
+   if(detector not selected to run) skip this detector              | this is done in RunLocalReconstruction()
+   reconstructor=get detector's reconstructor                       | 
+                                                                    |   
+   if(detector HasLocalReconstruction) skip this detector           | IMPORTANT! if HasLocalReconstruction() returns YES use RunLocalEventReconstruction instead
+   if(run upon raw data)                                            |  
+     reconstructor->Reconstruct(fRunLoader, fRawReader);            |   
+   else                                                             | <- this approach is currently used by RICH as all branches are mounted in AliRICH.cxx
+     reconstructor->Reconstruct(fRunLoader);                        |
+  }                                                               <-|  
+
+  for(all events){                                                      
+  
+    for(all detectors){                                                 |            
+      if(detector not selected to run) skip this detector               |
+      reconstructor=get detector's reconstructor                        | 
+      loader=get detector's loader                                      | this is done in RunLocalEventReconstruction()
+      if(raw data process requested and detector HasDigitConversion){   | 
+        loader->LoadDigits("update");                                   | open file and invoke  detector->SetTreeAddress();
+        loader->CleanDigits();                                          |   
+        loader->MakeDigitsContainer();                                  | create tree
+        reconstructor->Reconstruct(fRawReader,loader->TreeD());         | expected to fill TreeD out of raw reader
+        loader->WriteDigits("overwrite");                               | 
+        loader->UnloadDigits();                                         |  
+      }                                                                 |
+      if(detector do not HasLocalReconstruction) skip this detector     | IMPORTANT! assumed that this detector is already processed in RunLocalReconstruction()
+      loader->LoadRecPoints("update");                                  |
+      loader->CleanRecPoints();                                         |
+      loader->MakeRecPointsContainer();                                 | 
+      if(fRawReader && reconstructor do not HasDigitConversion()){      | 
+        reconstructor->Reconstruct(fRawReader, loader->TreeR());        | expected to fill TreeR out of raw reader
+      }else{                                                            |
+        loader->LoadDigits("read");                                     |
+        reconstructor->Reconstruct(loader->TreeD(),loader->TreeR());    | the only operations inside are pDigTree->GetEntry(0) and pCluTree->Fill();
+        loader->UnloadDigits();                                         | 
+      }                                                                 |
+      loader->WriteRecPoints("OVERWRITE");                              |
+      loader->UnloadRecPoints();                                        |
+    }//detectors loop                                                   |
+    
+  }//events loop 
+}
+
+
+RICH calibration and alignment.
+
+Abstract
+RICH calibrartion and alignment strategy is described with emphasis put on those aspects of the procedure which are relevant for reconstruction and thus the final detector
+figure of merit. In particulare, the refractive index calibration tecknique based on mass plot shifts analisys and chamber alignment with respect to core detectors 
+are explained in details. External sources of calibration and alignment data are aslo mentioned as well as the way RICH intends to handle those data, including initial CDB
+creater. 
+
+Calibration. 
+Looking on RICH chamber structure, full description of which is availbale elsewhere (ref RichTDR), easy to compile the table of all possible parameters affecting reconstruction.
+The first one of major importance is a freon refractive index. Although the full optical path visiable by photons includes freon vessel, proximity and amplification gaps filled 
+with methane and quartz window seperating above mentioned volumes, only freon refractive index is subject for calibration.  Refractive index of SiO2 window is not practically 
+affected by any external parameters, while influence of methane temperature to it's refractive index is negligable. So it's enough to measure there optical curves just once.
+In the rest, the only changable parameter is refractive index of freon. Temperature influence on freon refractive index was measured experimentally. The parametrization 
+found to be:
+  n=n0-0.0005(T-20)                        where T is freon temperature in degrees Celsius
+  n0=Sqrt(1+ 0.554*lamda^2/(lamda^2-5796)) where lamda is photon wavelength in nm taken at 20 degress Celsius
+Preliminary, the parametrization itself is considered to be permamnent one. The only parameter to store and retrieve is freon temperature. Since this value is available from
+DCS DB and expected to be served by a SHUTTLE program which is not yet ready, the following temporaroly solution has been adopted.
+In local CDB storage (deafult directory is $ALICE_ROOT) two versions of freon refractive index are written by external macro RichCdb.C :
+Run0_0_v0_s0.root contains DiMauro's parametrization and the temperature is set to 20 degrees. To be used as default for simulation and reconstruction.
+Run0_0_v0_s1.root contains DiMauro's parametrization and the temperature is set to 50 degrees. To be used in special uncalibrated reconstruction to test calibration procedure. 
+Both of them are valid in run range from run number 0 to run number 0, thus in no way affecting any normal operations.   
+
+Refractive index of freon (C6F14) is taken in AliRICHRecon for 3 different photon energies by means of 2 methodes: Set
+
+
+
+Alignment.
+Information about detector position and orientation is needed during reconstruction phase. This information affects track-cluster matching procedure, the relevant peace of 
+code comes to AliRICHTracker::PropogateBack(). Matching precedure consists in prolongation of the track reconstructed in core detectores up to each RICH chamber plane in 
+a sequenmce. The plane used is the entrance to RICH radiators. If the intersection exists and inside the sensitive area, the point of intersection is to be tranformed to RICH
+local reference system. Note, that in this check, the dead zones inbetween radiators are not taken into account. This operation requiring MARS to LORS transformations is done
+in AliRICHHelix::RichIntersection(). Plane to be intersected is defined by a point beloging to that plane served by AliRICHParam::Center(ChamberNumber) and a vector normal 
+to the plane served by AliRICHParam::Norm(ChamberNumber). Transformations itself are done in AliRICHParam::Mars2Lors() and AliRICHParam::Lors2Mars(). Internaly in AliRICHParam, 
+each chamber is reresented by TGeoHMatrix. It's worth to stress again that geometry related operations are needed to be done for 3 different planes per chamber, namly entrance 
+to radiator, anod wires plane and photocathode plane. So AliRICHParam sustains 7*3=21 planes. Also important to say, that direct usage of TGeoHMatrix::MasterToLocal() 
+and virce versa is not possible due to special nature of RICH LORS. According to the decision made about 3 years ago, RICH local reference system is centered in low left
+hand corner of the chamber if one looks from outside to direction pointing to interection point.
+So the most obvious candidate for alignable objects to be stored are thess 21 TGeoHMatrix objects. 
+The approach suggested in AliAlignObj is not quite feasable mainly due to the fact it relays on incrementing procedure using import from geometry.root. RICH geometry is defined 
+in a way that there is no volumes exactly corresponding to the RICH planes. 
+
+Geometry of RICH chambers.
+After the decision to rotate the whole RICH setup from 12 o'clock position to 2 o'clock position we have the following situtation:
+
+Theta = 109.5 degress for chambers 1,3
+Theta =  90.0 degress for chambers 2,4,6
+Theta =  70.5 degress for chambers 5,7
+
+Phi   =  50.0 degress for chambers 6,7 
+Phi   =  30.0 degress for chambers 3,4,5 
+Phi   =  10.0 degress for chambers 1,2 
+
+
+Old parametrisation by AliRICHChamber:
+RICH chamber 1 (454.877118 ,  80.207109 , -163.565361)(rho,theta,phi)=(490.0,109.5,10.0)
+RICH chamber 2 (482.555799 ,  85.087607 ,    0.000000)(rho,theta,phi)=(490.0, 90.0,10.0)
+RICH chamber 3 (400.012224 , 230.947165 , -163.565361)(rho,theta,phi)=(490.0,109.5,30.0)
+RICH chamber 4 (424.352448 , 245.000000 ,    0.000000)(rho,theta,phi)=(490.0, 90.0,30.0)
+RICH chamber 5 (400.012224 , 230.947165 ,  163.565361)(rho,theta,phi)=(490.0, 70.5,30.0)
+RICH chamber 6 (314.965929 , 375.361777 ,    0.000000)(rho,theta,phi)=(490.0, 90.0,50.0)
+RICH chamber 7 (296.899953 , 353.831585 ,  163.565361)(rho,theta,phi)=(490.0, 70.5,50.0)
+
+New parametrization by TGeoHMatrix: 
+RICH 1
+ -0.328736   -0.173648    0.928321    Tx = 454.877118
+ -0.057965    0.984808    0.163688    Ty =  80.207109
+ -0.942641    0.000000   -0.333807    Tz = -163.565361
+RICH 2
+  0.000000   -0.173648    0.984808    Tx = 482.555799
+  0.000000    0.984808    0.173648    Ty =  85.087607
+ -1.000000    0.000000    0.000000    Tz =   0.000000
+RICH 3
+ -0.289085   -0.500000    0.816351    Tx = 400.012224
+ -0.166903    0.866025    0.471321    Ty = 230.947165
+ -0.942641    0.000000   -0.333807    Tz = -163.565361
+RICH 4
+  0.000000   -0.500000    0.866025    Tx = 424.352448
+  0.000000    0.866025    0.500000    Ty = 245.000000
+ -1.000000    0.000000    0.000000    Tz =   0.000000
+RICH 5
+  0.289085   -0.500000    0.816351    Tx = 400.012224
+  0.166903    0.866025    0.471321    Ty = 230.947165
+ -0.942641    0.000000    0.333807    Tz = 163.565361
+RICH 6
+  0.000000   -0.766044    0.642788    Tx = 314.965929
+  0.000000    0.642788    0.766044    Ty = 375.361777
+ -1.000000    0.000000    0.000000    Tz =   0.000000
+RICH 7
+  0.214567   -0.766044    0.605918    Tx = 296.899953
+  0.255711    0.642788    0.722105    Ty = 353.831585
+ -0.942641    0.000000    0.333807    Tz = 163.565361