]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/global/CompareFlatESDs.C
added placement new after reinterpret_cast in order to get vtable; added empty contru...
[u/mrichter/AliRoot.git] / HLT / global / CompareFlatESDs.C
index 3761f2ea0acae42cb01df77e8a0a9dd0f2fba528..f4360664295d8e8e0e6b158e302e2d470940063d 100644 (file)
 #include "Riostream.h"
 #endif   
 
-void CompareFlatESDs(const char* filename1="outFlatESD1.root",const char* filename2="outFlatESD2.root") {
+void CompareFlatESDs(const char* filename1="outFlatESD1.dat",const char* filename2="outFlatESD2.dat", Bool_t verbose=kFALSE) {
   
   
   // Create output histograms
   
-    TH2F* hNTracks;
   
   TString outputFilename = "$PWD/compare.root";
   
        cout<< "creating histograms"<<endl;
-       hNTracks = new TH2F("nTracks","number of tracks", 100,0,100, 100,0,100);
+       TH2F* hNTracks = new TH2F("nTracks","number of tracks", 100,0,100, 100,0,100);
+       TH2F* hNV0s = new TH2F("nV0s","number of V0s", 10,0,10, 10,0,10);
+       TH2F* hVtxTr = new TH2F("vtxTr","vtx Tracks", 2,0,2, 2,0,2);
+       TH2F* hVtxSPD = new TH2F("vtxSPD","vtx SPD", 2,0,2, 2,0,2);
+       TH1F * hStat = new TH1F("stat","statistics Differences",20,0,20);
+       hStat->GetXaxis()->SetBinLabel(1,"All events");
+       hStat->GetXaxis()->SetBinLabel(2,"no diffs");
+       hStat->GetXaxis()->SetBinLabel(3,"nTracks");
+       hStat->GetXaxis()->SetBinLabel(4,"nV0s");
+       hStat->GetXaxis()->SetBinLabel(5,"vtxTracks");
+       hStat->GetXaxis()->SetBinLabel(6,"vtxSPD");
+       hStat->GetXaxis()->SetBinLabel(7,"tracks->extParams");
+
   
   
 
@@ -79,11 +90,15 @@ void CompareFlatESDs(const char* filename1="outFlatESD1.root",const char* filena
     char *endBuff2 = buffer2+length2;
        
     int iEvent = 0;
+       static const int nExt = 4;
     
        while( curr1 < endBuff1  && curr2 < endBuff2 ){
+//cout<<" curr1 endBuff1 curr2 endBuff2 "<< static_cast<void*> (curr1)<<" "<<static_cast<void*> (endBuff1)<<" "<<static_cast<void*> (curr2)<<" "<<static_cast<void*> (endBuff2)<<endl;
+
+       Int_t diff[6]={0};
       AliFlatESDEvent *flatEsd1 = reinterpret_cast<AliFlatESDEvent *>(curr1);
       AliFlatESDEvent *flatEsd2 = reinterpret_cast<AliFlatESDEvent *>(curr2);
-         
+         /*
          if(flatEsd1->GetNumberOfTracks()==0  ||  flatEsd2->GetNumberOfTracks() ==0){
                if(flatEsd1->GetNumberOfTracks()==0){
                  curr1=curr1+ flatEsd1->GetSize();
@@ -93,116 +108,179 @@ void CompareFlatESDs(const char* filename1="outFlatESD1.root",const char* filena
                }
                continue;
          }
-         
+         */
          
       cout<<endl<<"Reading event "<<iEvent<<":"<<endl;
+         /*
+       if(  flatEsd1->GetNumberOfTracks() != flatEsd2->GetNumberOfTracks() ) {
+               cout<<"\t\tDIFFERENCE!: ";
+               diff[0] =1;
+       }
+       cout<<"\t\tntracks: "<<flatEsd1->GetNumberOfTracks()<< " | " <<flatEsd2->GetNumberOfTracks();
+       hNTracks->Fill(flatEsd1->GetNumberOfTracks(),flatEsd2->GetNumberOfTracks());
          
-         
-         if( (Bool_t) flatEsd1->GetPrimaryVertexSPD() != (Bool_t) flatEsd2->GetPrimaryVertexSPD()  ) cout<<"DIFFERENCE!: ";
-      cout<<"vtx SPD: "<<(Bool_t) flatEsd1->GetPrimaryVertexSPD() << " | " << (Bool_t) flatEsd2->GetPrimaryVertexSPD() << endl;
+         if(  flatEsd1->GetNumberOfV0s() != flatEsd2->GetNumberOfV0s() ){
+               cout<<"\t\tDIFFERENCE!: ";
+               diff[1] =1;
+       }
+         cout<<"\t\tnV0's: "<<flatEsd1->GetNumberOfV0s()<< " | " <<flatEsd2->GetNumberOfV0s()<<endl;
+         hNV0s->Fill(flatEsd1->GetNumberOfV0s(),flatEsd2->GetNumberOfV0s());
+        
+         if( (Bool_t) flatEsd1->GetPrimaryVertexTracks() != (Bool_t) flatEsd2->GetPrimaryVertexTracks()  ){
+               cout<<"\t\tDIFFERENCE!: ";
+               diff[2] =1;
+       }
+
+
+         cout<<"\t\tvtx tracks: "<<(Bool_t) flatEsd1->GetPrimaryVertexTracks()<< " | " <<      (Bool_t) flatEsd2->GetPrimaryVertexTracks();      
+         hVtxTr->Fill( (Bool_t) flatEsd1->GetPrimaryVertexTracks(), (Bool_t) flatEsd2->GetPrimaryVertexTracks());
+
         
-         if( (Bool_t) flatEsd1->GetPrimaryVertexTracks() != (Bool_t) flatEsd2->GetPrimaryVertexTracks()  ) cout<<"DIFFERENCE!: ";
-         cout<<" vtx tracks: "<<(Bool_t) flatEsd1->GetPrimaryVertexTracks()<< " | " << (Bool_t) flatEsd2->GetPrimaryVertexTracks()<< endl;
-         
-         if(  flatEsd1->GetNumberOfTracks() != flatEsd2->GetNumberOfTracks() ) cout<<"DIFFERENCE!: ";
-         cout<<" ntracks: "<<flatEsd1->GetNumberOfTracks()<< " | " <<flatEsd2->GetNumberOfTracks()<< endl;
-         
-         if(  flatEsd1->GetNumberOfV0s() != flatEsd2->GetNumberOfV0s() ) cout<<"DIFFERENCE!: ";
-         cout<<" nV0's: "<<flatEsd1->GetNumberOfV0s()<< " | " <<flatEsd2->GetNumberOfV0s()<< endl;
-         
          
+         if( (Bool_t) flatEsd1->GetPrimaryVertexSPD() != (Bool_t) flatEsd2->GetPrimaryVertexSPD()  ){
+               cout<<"\t\tDIFFERENCE!: ";
+               diff[3] =1;
+       }
+      cout<<"\t\tvtx SPD: "<<(Bool_t) flatEsd1->GetPrimaryVertexSPD() << " | " << (Bool_t) flatEsd2->GetPrimaryVertexSPD()<<endl;
+         hVtxSPD->Fill( (Bool_t) flatEsd1->GetPrimaryVertexSPD(), (Bool_t) flatEsd2->GetPrimaryVertexSPD());
+
+  if(true|| (Bool_t)flatEsd1->GetPrimaryVertexSPD() && (Bool_t)flatEsd2->GetPrimaryVertexSPD()  ){
+               cout<<endl<<"\t\tvtx tracksX: "<< flatEsd1->GetPrimaryVertexSPD()<<" | " <<     flatEsd2->GetPrimaryVertexSPD();          
+               }
+         */
          
          // compare tracks
-         
-         
+         #if 1
          AliFlatESDTrack *track1 = flatEsd1->GetTracks();
          AliFlatESDTrack *track2 = flatEsd2->GetTracks();
-    for (Int_t idxTrack = 0; idxTrack < flatEsd1->GetNumberOfTracks(); ++idxTrack) { 
+    for (Int_t idxTrack = 0; idxTrack < flatEsd1->GetNumberOfTracks() && track1 && track2; ++idxTrack) { 
 
-      if (track1 && track2) {
-       AliFlatExternalTrackParam* exp11 = track1->GetTrackParamCp();
-       AliFlatExternalTrackParam* exp21 = track1->GetTrackParamIp();
-       AliFlatExternalTrackParam* exp31 = track1->GetTrackParamTPCInner();
-       AliFlatExternalTrackParam* exp41 = track1->GetTrackParamOp();
-       
-       AliFlatExternalTrackParam* exp12 = track2->GetTrackParamCp();
-       AliFlatExternalTrackParam* exp22 = track2->GetTrackParamIp();
-       AliFlatExternalTrackParam* exp32 = track2->GetTrackParamTPCInner();
-       AliFlatExternalTrackParam* exp42 = track2->GetTrackParamOp();
-
-       Float_t alphaFLAT1[4] = {-99., -99., -99., -99.};
-       if (exp11) alphaFLAT1[0] = exp11->GetAlpha();
-       if (exp21) alphaFLAT1[1] = exp21->GetAlpha();
-       if (exp31) alphaFLAT1[2] = exp31->GetAlpha();
-       if (exp41) alphaFLAT1[3] = exp41->GetAlpha();
-       
-       Float_t alphaFLAT2[4] = {-99.,-99., -99., -99.};
-       if (exp12) alphaFLAT2[0] = exp12->GetAlpha();
-       if (exp22) alphaFLAT2[1] = exp22->GetAlpha();
-       if (exp32) alphaFLAT2[2] = exp32->GetAlpha();
-       if (exp42) alphaFLAT2[3] = exp42->GetAlpha();
-       
-       
-       Float_t pFLAT1[4] = {-99., -99., -99., -99.};
-       if (exp11) pFLAT1[0] = exp11->GetSigned1Pt();
-       if (exp21) pFLAT1[1] = exp21->GetSigned1Pt();
-       if (exp31) pFLAT1[2] = exp31->GetSigned1Pt();
-       if (exp41) pFLAT1[3] = exp41->GetSigned1Pt();
-       
-       Float_t pFLAT2[4] = {-99., -99., -99., -99.};
-       if (exp12) pFLAT2[0] = exp12->GetSigned1Pt();
-       if (exp22) pFLAT2[1] = exp22->GetSigned1Pt();
-       if (exp32) pFLAT2[2] = exp32->GetSigned1Pt();
-       if (exp42) pFLAT2[3] = exp42->GetSigned1Pt();
-       
-       
-       
-         if( alphaFLAT1[0] != alphaFLAT2[0] ) cout<<"DIFFERENCE!: ";
-         cout<<" alpha0: "<<alphaFLAT1[0]<< " | " <<alphaFLAT2[0]<< endl;
-         if( alphaFLAT1[1] != alphaFLAT2[1] ) cout<<"DIFFERENCE!: ";
-         cout<<" alpha1: "<<alphaFLAT1[1]<< " | " <<alphaFLAT2[1]<< endl;
-         if( alphaFLAT1[2] != alphaFLAT2[2] ) cout<<"DIFFERENCE!: ";
-         cout<<" alpha2: "<<alphaFLAT1[2]<< " | " <<alphaFLAT2[2]<< endl;
-         if( alphaFLAT1[3] != alphaFLAT2[3] ) cout<<"DIFFERENCE!: ";
-         cout<<" alpha3: "<<alphaFLAT1[3]<< " | " <<alphaFLAT2[3]<< endl;
-       
+               AliFlatExternalTrackParam* ext[2][nExt] ={
+                       {
+                               track1->GetTrackParamRefitted(),
+                               track1->GetTrackParamIp(),
+                               track1->GetTrackParamTPCInner(),
+                               track1->GetTrackParamOp(),
+               //              track1->GetTrackParamCp(),
+               //              track1->GetTrackParamITSOut()
+                       },
+                       {
+                               track2->GetTrackParamRefitted(),
+                               track2->GetTrackParamIp(),
+                               track2->GetTrackParamTPCInner(),
+                               track2->GetTrackParamOp(),
+                       //      track2->GetTrackParamCp(),
+                       //      track2->GetTrackParamITSOut()
+                       }
+               };
        
+       //Printf("  TEST: FlatTrack1 %d > FlatExternalTrackParam1 > %p %p %p %p", idxTrack, exp11, exp21, exp31, exp41);
+       //Printf("  TEST: FlatTrack2 %d > FlatExternalTrackParam2 > %p %p %p %p", idxTrack, exp12, exp22, exp32, exp42);
+
+
+       for(int iExt=0; iExt<nExt; ++iExt){
+cout<<endl<<iExt<<endl;                
+if(!ext[0][iExt] && !ext[1][iExt]) continue;   
+               if(!ext[0][iExt] && ext[1][iExt]){
+               //      cout<<"DIFFERENCE!: ";
+                       cout<<" ext"<<iExt<<" not set in "<<filename1<<endl;
+               }       
+               if(ext[0][iExt] && !ext[1][iExt]){
+               //      cout<<"DIFFERENCE!: ";
+                       cout<<" ext"<<iExt<<" not set in "<<filename2<<endl;
+               }
+
+
+               if( (!ext[0][iExt] || !ext[1][iExt])|| ext[0][iExt]->GetAlpha() != ext[1][iExt]->GetAlpha() ) {
+       //              cout<<"DIFFERENCE!: ";
+                       //cout<<" alpha"<<iExt<<" :"  << (ext[0][iExt] ? ext[0][iExt]->GetAlpha() : -99.)  << "\t\t" << (ext[1][iExt] ?  ext[1][iExt]->GetAlpha(): -99.)<<endl;
+                       diff[4]=1;
+               }       cout<<" alpha"<<iExt<<" :"  << (ext[0][iExt] ? ext[0][iExt]->GetAlpha() : -99.)  << "\t\t" << (ext[1][iExt] ?  ext[1][iExt]->GetAlpha(): -99.)<<endl;
+                       
+
+               if( (!ext[0][iExt] || !ext[1][iExt])||ext[0][iExt]->GetX() != ext[1][iExt]->GetX() ) {
+                       //cout<<"DIFFERENCE!: ";
+                       //cout<<" GetX"<<iExt<<" :"  << (ext[0][iExt] ? ext[0][iExt]->GetX(): -99.)  << " | " << (ext[1][iExt] ?  ext[1][iExt]->GetX(): -99.)<<endl;
+                       diff[4]=1;
+               }       
+cout<<" GetX"<<iExt<<" :"  << (ext[0][iExt] ? ext[0][iExt]->GetX(): -99.)  << " | " << (ext[1][iExt] ?  ext[1][iExt]->GetX(): -99.)<<endl;
+
+
+               if( (!ext[0][iExt] || !ext[1][iExt])||ext[0][iExt]->GetSigned1Pt() !=  ext[0][iExt]->GetSigned1Pt() ) {
+                       //cout<<"DIFFERENCE!: ";
+                       //cout<<" 1/pt"<<iExt<<" :"  <<  (ext[0][iExt] ? ext[0][iExt]->GetSigned1Pt(): -99.)  << " | " << (ext[1][iExt] ?  ext[1][iExt]->GetSigned1Pt(): -99.)<<endl;
+                       diff[4]=1;
+               }       
+       cout<<" 1/pt"<<iExt<<" :"  <<  (ext[0][iExt] ? ext[0][iExt]->GetSigned1Pt(): -99.)  << " | " << (ext[1][iExt] ?  ext[1][iExt]->GetSigned1Pt(): -99.)<<endl;
+                       
+
+}
        
-         if( pFLAT1[0] != pFLAT2[0] ) cout<<"DIFFERENCE!: ";
-         cout<<" p0: "<<pFLAT1[0]<< " | " <<pFLAT2[0]<< endl;
-         if( pFLAT1[1] != pFLAT2[1] ) cout<<"DIFFERENCE!: ";
-         cout<<" p1: "<<pFLAT1[1]<< " | " <<pFLAT2[1]<< endl;
-         if( pFLAT1[2] != pFLAT2[2] ) cout<<"DIFFERENCE!: ";
-         cout<<" p2: "<<pFLAT1[2]<< " | " <<pFLAT2[2]<< endl;
-         if( pFLAT1[3] != pFLAT2[3] ) cout<<"DIFFERENCE!: ";
-         cout<<" p3: "<<pFLAT1[3]<< " | " <<pFLAT2[3]<< endl;
-         
-         
-         if( track1->GetNumberOfTPCClusters() != track2->GetNumberOfTPCClusters() ) cout<<"DIFFERENCE!: ";
-         cout<<" nTPCclusters: "<<track1->GetNumberOfTPCClusters()<< " | " <<track2->GetNumberOfTPCClusters()<< endl;
          
-         if( track1->GetNumberOfITSClusters() != track2->GetNumberOfITSClusters() ) cout<<"DIFFERENCE!: ";
-         cout<<" nITSclusters: "<<track1->GetNumberOfITSClusters()<< " | " <<track2->GetNumberOfITSClusters()<< endl;
-       
+         /*
+       if( track1->GetNumberOfTPCClusters() != track2->GetNumberOfTPCClusters() ){
+               cout<<"DIFFERENCE!: ";
+               cout<<" nTPCclusters: "<<track1->GetNumberOfTPCClusters()<< " | " <<track2->GetNumberOfTPCClusters()<< endl;
+               diff[4]=1;
+       }  
+       if( track1->GetNumberOfITSClusters() != track2->GetNumberOfITSClusters() ){
+               cout<<"DIFFERENCE!: ";
+               cout<<" nITSclusters: "<<track1->GetNumberOfITSClusters()<< " | " <<track2->GetNumberOfITSClusters()<< endl;
+               diff[4]=1;
+       }
+*/
+
+// compare clusters
+       if( verbose &&  track1->GetNumberOfTPCClusters() == track2->GetNumberOfTPCClusters()){
+               for (Int_t idxCluster = 0; idxCluster < track1->GetNumberOfTPCClusters(); ++idxCluster){
+                       AliFlatTPCCluster * cl1 = track1->GetTPCCluster(idxCluster);
+                       AliFlatTPCCluster * cl2 = track2->GetTPCCluster(idxCluster);
 /*
+                       if( cl1->GetX()&& cl2->GetX() && cl1->GetX() != cl2->GetX() ){
+                               cout<<"DIFFERENCE!: ";
+                               cout<<" cluster: "<<idxCluster<<" GetX :"<<cl1->GetX()<< " | " <<cl2->GetX()<< endl;
+                               diff=kTRUE;
+                       }
+                               cout<<" cluster: "<<idxCluster<<" GetX :"<<cl1->GetX()<< " | " <<cl2->GetX()<< endl;
+                               cout<<" cluster: "<<idxCluster<<" GetY :"<<cl1->GetY()<< " | " <<cl2->GetY()<< endl;
 
-       for (Int_t idxCluster = 0; idxCluster < track1->GetNumberOfTPCClusters(); ++idxCluster){
-         Printf(" TEST: FlatTrack %d > FlatCluster %d has row %d", idxTrack, idxCluster, track1->GetTPCCluster(idxCluster).GetPadRow());
-      }
-  */    
+                       if( cl1 && cl2 && cl1->GetY() != cl2->GetY() ){
+                               cout<<"DIFFERENCE!: ";
+                               cout<<" cluster: "<<idxCluster<<" GetY :"<<cl1->GetY()<< " | " <<cl2->GetY()<< endl;
+                               diff=kTRUE;
+                       }
+                       if( cl1->GetZ()&& cl2->GetZ() && cl1->GetZ() != cl2->GetZ() ){
+                               cout<<"DIFFERENCE!: ";
+                               cout<<" cluster: "<<idxCluster<<" GetZ :"<<cl1->GetZ()<< " | " <<cl2->GetZ()<< endl;
+                               diff=kTRUE;
+                       }
+*/
+                       if( cl1->GetPadRow()&& cl2->GetPadRow() && cl1->GetPadRow() != cl2->GetPadRow() ){
+                               cout<<"DIFFERENCE!: ";
+                               cout<<" cluster: "<<idxCluster<<" GetPadRow :"<<cl1->GetPadRow()<< " | " <<cl2->GetPadRow()<< endl;
+                               diff[5]=1;
+                       }
+
+               }
          }
      
       track1 = track1->GetNextTrack();
       track2 = track2->GetNextTrack();
          
          
+         }
+#endif
+          hStat->Fill(0);        
+         Bool_t diffs=kFALSE;
+         for(int iDiff=0; iDiff<5;++iDiff){
+               if(diff[iDiff]){
+                       hStat->Fill(iDiff+2);
+                       diffs = kTRUE;
+               }
        }
-         
-         
-         
-         hNTracks->Fill(flatEsd1->GetNumberOfTracks(),flatEsd2->GetNumberOfTracks());
-         
-         
+       if(!diffs) hStat->Fill(1);        
+
+
       curr1=curr1+ flatEsd1->GetSize();
       curr2=curr2+ flatEsd2->GetSize();
       iEvent++;
@@ -214,9 +292,16 @@ void CompareFlatESDs(const char* filename1="outFlatESD1.root",const char* filena
   else {
     cout << "File could not be read" << endl;
   }
+
+
+
   
        TList histosList;
+       histosList.Add(hStat);
        histosList.Add(hNTracks);
+       histosList.Add(hNV0s);
+       histosList.Add(hVtxTr);
+       histosList.Add(hVtxSPD);
   histosList.SaveAs(outputFilename);
   
   return;