]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - RICH/api.txt
Adding new calibration flavours for trigger
[u/mrichter/AliRoot.git] / RICH / api.txt
index 95c4933a2e9e93993f9b14085bdb570012fc6826..1254a3a5249a705f7816b299dad6c1ddec69aeff 100644 (file)
-How to open session?
-       use static methode  AliRunLoader::Open("galice.root","AlicE","update")
-How to retrive pointer to alice run loader:
-        use pRICH->GetLoader()->GetRunLoader() (all detector classes inherit from AliDetector wich has GetLoader())
-       use methode AliRun::GetRunLoader for gAlice (depricated)
-How to get pointers to deifferent root trees:
+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()        
+How to avoid using gAlice:
+       detector->GetLoader()->GetRunLoader()->GetAliRun() returns gAlice global pointer.
+How to retrieve pointer to alice run loader:
+        use pRICH->GetLoader()->GetRunLoader() (all detector classes inherit from AliDetector which has GetLoader())
+       use method AliRun::GetRunLoader for gAlice (deprecated)
+How to get pointers to different root trees:
        TreeE belongs to AliRunLoader, available after AliRunLoader::LoadHeader()
        TreeK belongs to AliRunLoader, available after AliRunLoader::LoadKinematics()
        TreeH belongs to AliLoader   , available after AliLoader::LoadHits()
        TreeS belongs to AliLoader   , available after AliLoader::LoadSDigits()
        TreeD belongs to AliLoader   , available after AliLoader::LoadDigits()
        TreeR belongs to AliLoader   , available after AliLoader::LoadRecPoints()
-
-
-How to work with the stack of particles?
-       - pointer to the stack is returned by gAlice->Stack() (global gAlice of type AliRun) or AliRunLoader::Stack() but
-        before one needs to load event header by AliRunLoader::LoadHeader() otherwise both methods return 0.
-        Moreover loading header gives the information about number of particles only. 
-        To retrive the list of particle one also needs to load kinematics by AliRunLoader::LoadKinematics()        
-       - total amount of particles in stack for a given event:         AliRunLoader::Stack()->GetNtrack() or AliRun::GetEvent() (after LoadHeader())
-       - total amount of primiry particles in stack for a given event: AliRunLoader::Stack()->GetNprimary() or AliLoader::TreeH()->GetEntries() (after LoadHeader())
-
-
-
-How to retrive hits:
-       Hits a stored on primiry by primiry basis. To retrieve all hits one needs to do:
-       initialise the root tree and containers:    AliLoader::LoadHits() 
-       read number of primiries in current event:
-       loop on the list of primiries:
-
-
-
-How to retrive sdigits? 
+        all methods return 0 on success. 
+How to get event of interest:
+       AliRunLoader::GetEvent(event_number) returns 0 on success
+How to deal with the stack of particles?
+        - first of all, the stack includes primary as well as secondary particles
+       - pointer to the stack is taken:
+               AliRun::Stack() (global gAlice of type AliRun - deprecated way to do)
+               AliRunLoader::Stack() but before one needs to load event header by AliRunLoader::LoadHeader() otherwise both methods return 0.
+               Moreover loading header gives the information about number of particles only. 
+               To retrieve the list of particle one also needs to load kinematics by AliRunLoader::LoadKinematics()        
+       - total amount of particles in stack for a given event:        
+               AliStack::GetNtrack() 
+                AliRun::GetEvent() (after LoadHeader())
+       - total amount of primary particles in stack for a given event (after LoadHeader()): 
+               AliStack::GetNprimary() 
+How to retrieve hits:
+       Hits are stored on primary by primary basis. Hits for the given primary is TClonesArray.
+       To retrieve all hits one needs to do:
+       -initialize the root tree and containers:   pRich->GetLoader()->LoadHits();  (AliLoader::LoadHits() returns 0 on success)
+       -read number of entries in TreeH:           pRich->GetLoader()->TreeH()->GetEntries()
+       -then for each entry:                       pRich->GetLoader()->TreeH()->GetEntry(i)
+How to retrieve sdigits? 
        Sdigits stored in tree S with the branch of TClonesArray, all sdigits in a single TClonesArray
        So the tree has only one entry.
        One needs to say:
-       pRich->GetLoader()->LoadSDigits(); this one open file, get the tree and invoke AliRICH::SetTreeAddress()    
-
-
-
-gAlice->GetMCApp()->GetCurrentTrackNumber()
-
-
-What are the debug methodes avail:
-       AliModule::GetDebug() 
-       AliModule::SetDebug()
-       AliRun::GetDebug()
-       AliRun::SetDebug()
-
-
-How to get info for tid number?
-       Header and Kinematics trees must be loaded, then possible to retrive pointer to Stack of particles
+       -pRich->GetLoader()->LoadSDigits(); this one open file, get the tree and invoke AliRICH::SetTreeAddress()    
+How to retrieve digits? 
+       Digits stored in tree D with the 7 branches of TClonesArray, one per chamber, all digits of a given chamber in a single TClonesArray
+       So the tree has only one entry.
+       -One needs to say:
+         pRich->GetLoader()->LoadDigits(); this one opens file, gets the tree and invoke AliRICH::SetTreeAddress() which in turn corresponds 
+          branches of the tree to the digits containers in memory. There are 7 containers, one per chamber, all of them belong to AliRICH.
+       -Then one needs to take the tree entry (only one) to the memory:
+          pRich->GetLoader()->TreeD()->GetEntry(0) 
+       -Finally pRich->Digits(chamber_number) returns the pointer to TClonesArray of AliRICHdigit          
+What are the debug methods avail:
+        AliLog::SetGlobalDebugLevel(AliLog::kDebug)
+How to get info for a given particle number:
+       Header and Kinematics trees must be loaded, then possible to retrieve pointer to Stack of particles
        Int_t AliRunLoader::LoadHeader(); Int_t AliRunLoader::LoadKinematics()
        AliStack *AliRunLoader::Stack()
        TParticle *AliStack::Particle(tid)
        TParticle::Print()
-
-How to deal with AliRunDigitizer?
+How to deal with AliRunDigitizer:
        AliRunDigitizer::Exec() just call AliRunDigitizer::Digitize()   
-
-How to avoid using gAlice?
-       Rich()->GetLoader()->GetRunLoader()->GetAliRun() returns gAlice global pointer.
-         
-
-
+What are the meanings of different VMC flags:         
+       gMC->IsTrackAlive()
+       gMC->IsTrackStop()
+       gMC->IsTrackDisappeared()
+How to get pad number for a local position:
+       use static TVector AliRICHParam::Loc2Pad(TVector2 position);
+Why list of chambers belongs to AliRICHParam:
+
+How to check if a given stack particle is primary:
+       Stack is TClonesArray of TParticle. TParticle::GetMother(0) returns -1 if it's primary (no mother)         
+How to loop over all possible object:         
+  for(Int_t iEventN=0;iEventN < GetLoader()->GetRunLoader()->GetAliRun()->GetEventsPerRun();iEventN++){//events loop
+    for(Int_t iEntryN=0;iEntryN < GetLoader()->TreeH()->GetEntries();iEntryN++){//TreeH loop
+      GetLoader()->TreeH()->GetEntry(iEntryN);//get current entry (prim)  
+      for(Int_t iHitN=0;iHitN<Hits()->GetEntries();iHitN++){//hits loop
+        AliVHMPIDHit *pHit=(AliVHMPIDHit*)Hits()->At(iHitN);//get current hit 
+        
+      }//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 track by track. It means that it may happen that the same
+        pad is affected by few tracks. But this might be known after the trasport of full event only. 
+
+Generalized structure of AliReconstruction:
+
+Run()
+{
+  if(there is galice.root)                                          |
+    AliRunLoader::Open(....)                                        | this is done in InitRunLoader()
+  else                                                              |
+    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              |
+   reconstructor=get detector's reconstructor                       | this is done in RunLocalReconstruction()
+   if(detector HasLocalReconstruction) skip this detector           | IMPORTANT! if HasLocalReconstruction() returns YES use RunLocalEventReconstruction instead
+   if(run upon raw data)                                            |  
+     reconstructor->Reconstruct(fRunLoader, fRawReader);            |   
+   else                                                             |
+     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 
+}