]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/ZDCMAPPINGda.cxx
Geometry for MFT (Brigitte)
[u/mrichter/AliRoot.git] / ZDC / ZDCMAPPINGda.cxx
index 5c130f42ca96cc44be8ac6d1aef2195755abcd3c..22488938f82b1f0bfaa51dbace18cfc49378d41d 100644 (file)
@@ -26,6 +26,7 @@ Trigger Types Used: different trigger types are used
 #include <stdio.h>
 #include <stdlib.h>
 #include <Riostream.h>
+#include <signal.h>
 
 // DATE
 #include <event.h>
@@ -50,20 +51,22 @@ Trigger Types Used: different trigger types are used
 
 int main(int argc, char **argv) {
 
+  // needed for streamer application
   gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
-                                       "*",
-                                       "TStreamerInfo",
-                                       "RIO",
-                                       "TStreamerInfo()"); 
+                                        "*",
+                                        "TStreamerInfo",
+                                        "RIO",
+                                        "TStreamerInfo()"); 
+  // needed for Minuit plugin
+  gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer",
+                                        "Minuit",
+                                        "TMinuitMinimizer",
+                                        "Minuit",
+                                        "TMinuitMinimizer(const char*)");
 
-  TMinuitMinimizer m; 
-  gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer", "Minuit","TMinuitMinimizer",
-      "Minuit", "TMinuitMinimizer(const char *)");
+  //TMinuitMinimizer m; 
   TVirtualFitter::SetDefaultFitter("Minuit");
 
-  //const Char_t* tableSOD[]  = {"ALL", "no", "SOD", "all", NULL, NULL};
-  //monitorDeclareTable(const_cast<char**>(tableSOD));
-  
   char *monitor_table[] = { "ALL", "no", "PHY", "yes", "SOD", "all", NULL };
   int err = monitorDeclareTable(monitor_table);
   if(err){
@@ -72,10 +75,10 @@ int main(int argc, char **argv) {
   } 
   
   int status=0, nphys=0;
-  int const kNModules = 10;
+  int const kNModules = 9;
   int const kNChannels = 24;
   int const kNScChannels = 32;  
-  int const kZDCTDCGeo=4;
+  int const kZDCTDCGeo = 4;
   
   int itdc=0, iprevtdc=-1, ihittdc=0;
   float tdcData[6], tdcL0=-999.;       
@@ -108,15 +111,14 @@ int main(int argc, char **argv) {
     tdcMod[y]=tdcCh[y]=tdcSigCode[y]=tdcDet[y]=tdcSec[y]=-1;
   }
  
-  TH1F * hTDC[6];
-  char ntdchist[20];
-  for(Int_t it=0; it<6; it++){
-    if(it==0)      hTDC[it] = new TH1F("TDCZNC", "TDC ZNC", 200, -200., 200.);
-    else if(it==1) hTDC[it] = new TH1F("TDCZNA", "TDC ZNA", 200, -200., 200.);
-    else if(it==2) hTDC[it] = new TH1F("TDCZPC", "TDC ZPC", 200, -200., 200.);
-    else if(it==3) hTDC[it] = new TH1F("TDCZPA", "TDC ZPA", 200, -200., 200.);
-    else if(it==4) hTDC[it] = new TH1F("TDCZEM1","TDC ZEM1",200, -200., 200.);
-    else if(it==5) hTDC[it] = new TH1F("TDCZEM2","TDC ZEM2",200, -200., 200.);
+  TH1F * hTDC[6]={0x0,0x0,0x0,0x0,0x0,0x0};
+  for(int it=0; it<6; it++){
+    if(it==0) hTDC[it] = new TH1F("TDCZEM1","TDC ZEM1",200, -200., 200.);
+    else if(it==1) hTDC[it] = new TH1F("TDCZEM2","TDC ZEM2",200, -200., 200.);
+    else if(it==2) hTDC[it] = new TH1F("TDCZNC", "TDC ZNC", 200, -200., 200.);
+    else if(it==3) hTDC[it] = new TH1F("TDCZPC", "TDC ZPC", 200, -200., 200.);
+    else if(it==4) hTDC[it] = new TH1F("TDCZNA", "TDC ZNA", 200, -200., 200.);
+    else if(it==5) hTDC[it] = new TH1F("TDCZPA", "TDC ZPA", 200, -200., 200.);
   }
   
   /* log start of process */
@@ -124,7 +126,7 @@ int main(int argc, char **argv) {
   signal(SIGSEGV, SIG_DFL);
 
   /* check that we got some arguments = list of files */
-  if (argc<2) {
+  if(argc<2) {
     printf("Wrong number of arguments\n");
     return -1;
   }
@@ -132,8 +134,7 @@ int main(int argc, char **argv) {
   FILE *mapFile4Shuttle;
 
   /* read the data files */
-  int n;
-  for(n=1;n<argc;n++){
+  for(int n=1;n<argc;n++){
    
     status=monitorSetDataSource( argv[n] );
     if (status!=0) {
@@ -157,7 +158,9 @@ int main(int argc, char **argv) {
     
     /* loop on events (infinite) */
     for(;;) {
-
+      
+      if(nphys > 50000) break;
+      
       struct eventHeaderStruct *event;
       eventTypeType eventT;
  
@@ -237,25 +240,25 @@ int main(int argc, char **argv) {
             fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",
               is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);
             //printf("  Mapping DA -> %d ADC: mod %d ch %d, code %d det %d, sec %d\n",
-            //  is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);
+              //is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);
          }
          for(Int_t is=0; is<kNScChannels; is++){
             fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",
               is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);
             //if(scMod[is]!=-1) printf("  Mapping DA -> %d Scaler: mod %d ch %d, code %d det %d, sec %d\n",
-            //  is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);
+              //is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);
          }
          for(Int_t is=0; is<kNScChannels; is++){
             fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\n",
               is,tdcMod[is],tdcCh[is],tdcSigCode[is]);
             //if(tdcMod[is]!=-1) printf("  Mapping DA -> %d TDC: mod %d ch %d, code %d\n",
-            //  is,tdcMod[is],tdcCh[is],tdcSigCode[is]);
+              //is,tdcMod[is],tdcCh[is],tdcSigCode[is]);
          }
          for(Int_t is=0; is<kNModules; is++){
             fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\n",
             modGeo[is],modType[is],modNCh[is]);
             //printf("  Mapping DA -> Module mapping: geo %d type %d #ch %d\n",
-            //  modGeo[is],modType[is],modNCh[is]);
+              //modGeo[is],modType[is],modNCh[is]);
          }
          
        //} //if (rawstream)
@@ -263,10 +266,11 @@ int main(int argc, char **argv) {
       }// SOD event
       else if(eventT==PHYSICS_EVENT){ 
 
+        for(int ij=0; ij<6; ij++) tdcData[ij]=-999.;
        rawStreamZDC->SetSODReading(kTRUE);
 
        // ----- Setting ch. mapping -----
-       for(Int_t jk=0; jk<2*kNChannels; jk++){
+       for(int jk=0; jk<2*kNChannels; jk++){
          rawStreamZDC->SetMapADCMod(jk, adcMod[jk]);
          rawStreamZDC->SetMapADCCh(jk, adcCh[jk]);
          rawStreamZDC->SetMapADCSig(jk, sigCode[jk]);
@@ -275,36 +279,50 @@ int main(int argc, char **argv) {
        }
        
        while(rawStreamZDC->Next()){
+         if(rawStreamZDC->GetADCModule()!=kZDCTDCGeo) continue; //skipping ADCs, scalers and trigger cards
+
           if(rawStreamZDC->GetADCModule()==kZDCTDCGeo && rawStreamZDC->IsZDCTDCDatum()==kTRUE){
              //
             itdc = rawStreamZDC->GetChannel(); 
-            if((itdc>=8 && itdc<=13) || itdc==15){
-               if(itdc==iprevtdc) ihittdc++;
-               else ihittdc=0;
-               iprevtdc=itdc;
-               if(ihittdc<1 && itdc!=15) tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum();
-              //
-              if(itdc==15 && ihittdc<1){
-                tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum();
-                        for(int ic=0; ic<6; ic++){
-                  if(tdcData[ic]!=-999. && tdcL0!=-999.) hTDC[ic]->Fill(tdcData[ic]-tdcL0);
-                }
+             if(itdc==iprevtdc) ihittdc++;
+             else ihittdc=0;
+             iprevtdc=itdc;
+            //
+            if(((itdc>=8 && itdc<=13) || itdc==15) && ihittdc==0){
+               if(itdc!=15){
+                tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum();
+                //
+                //printf("   ev.%d **** TDC%d %1.0f ns  \n",nphys,itdc, tdcData[itdc-8]);
               }
+              //
+              else if(itdc==15){
+                 tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum();
+                 //
+                 //printf("   ev.%d ++++ TDCL0 %1.0f ns  \n",nphys,tdcL0);
+                 //
+                 for(int ic=0; ic<6; ic++){
+                   if(tdcData[ic]!=-999. && tdcL0!=-999.){
+                     hTDC[ic]->Fill(tdcData[ic]-tdcL0);
+                     //printf(" ev.%d -> Filling histo%d: %f ns\n",nphys,ic, tdcData[ic]-tdcL0);
+                   }
+                 }
+               }
             }
          }
         }
        
-       nphys++;
-       
+       nphys++;
+      
+        delete rawStreamZDC;
+        rawStreamZDC = 0x0;    
+       delete reader;
+
       }//(if PHYSICS_EVENT) 
       else if(eventT==END_OF_RUN){
         printf("End Of Run detected\n");
         break;
       }
       
-      delete rawStreamZDC;
-      rawStreamZDC = 0x0;
-      
       iev++; 
 
       /* free resources */
@@ -322,9 +340,9 @@ int main(int argc, char **argv) {
   //
   Float_t xUp=0., xLow=0., deltaX=0;
   Int_t binMax=0, nBinsx=0;
-  Float_t mean[6], sigma[6];
-  TF1 *fitfun[6];
-  for(Int_t k=0; k<6; k++){
+  Float_t mean[6]={0.,0.,0.,0.,0.,0.}, sigma[6]={0.,0.,0.,0.,0.,0.};
+  TF1 *fitfun[6]={0x0,0x0,0x0,0x0,0x0,0x0};
+  for(int k=0; k<6; k++){
     if(hTDC[k]->GetEntries()!=0){
        binMax = hTDC[k]->GetMaximumBin();
        if(binMax<=1){
@@ -337,11 +355,11 @@ int main(int argc, char **argv) {
        deltaX = xUp-xLow;
        nBinsx = (hTDC[k]->GetXaxis())->GetNbins();
        //printf(" xMax = %f\n", xLow+binMax*deltaX/nBinsx);
-       hTDC[k]->Fit("gaus","Q","",xLow+binMax*deltaX/nBinsx*0.6,xLow+binMax*deltaX/nBinsx*1.24);
+       hTDC[k]->Fit("gaus","Q","",xLow+binMax*deltaX/nBinsx*0.75,xLow+binMax*deltaX/nBinsx*1.25);
        fitfun[k] = hTDC[k]->GetFunction("gaus");
        mean[k] = (Float_t) (fitfun[k]->GetParameter(1));
        sigma[k] = (Float_t) (fitfun[k]->GetParameter(2));
-       //printf("\t Mean value from fit = %1.2f\n", mean[k]);
+       //printf("\t Mean value from fit = %1.2f ns\n", mean[k]);
        //
        fprintf(fileShuttle,"\t%f\t%f\n",mean[k], sigma[k]);
      }