Fix in combinatorics
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Nov 2013 16:40:41 +0000 (16:40 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Nov 2013 16:40:41 +0000 (16:40 +0000)
ITS/UPGRADE/testITSU/DetectorK.cxx
ITS/UPGRADE/testITSU/DetectorK.h
ITS/UPGRADE/testITSU/testDetectorUp.C

index ca3d8a9..a0598d9 100644 (file)
@@ -22,8 +22,6 @@ http://rnc.lbl.gov/~jhthomas
 
 Changes by S. Rossegger -> see header file
 
-RS: Allows to have smaller pt's in the TPC, play with kMinRadTPCTrack constant
-
 ***********************************************************/
 
 
@@ -45,8 +43,8 @@ RS: Allows to have smaller pt's in the TPC, play with kMinRadTPCTrack constant
 #define KaonMass                 0.498  // Mass of the Kaon
 #define D0Mass                   1.865  // Mass of the D0
 
-const double DetectorK::kPtMinFix = 0.050;
-const double DetectorK::kPtMaxFix = 20.5;
+const double DetectorK::kPtMinFix = 0.150;
+const double DetectorK::kPtMaxFix = 31.5;
 const double DetectorK::kMinRadTPCTrack = 132.0;
 
 //TMatrixD *probKomb; // table for efficiency kombinatorics
@@ -107,7 +105,8 @@ DetectorK::DetectorK()
     fConfLevel(0.0027),      // 0.27 % -> 3 sigma confidence
     fAvgRapidity(0.45),      // Avg rapidity, MCS calc is a function of crossing angle
     fParticleMass(0.140),    // Standard: pion mass 
-    fMaxRadiusSlowDet(10.),
+  fMaxRadiusSlowDet(10.),
+    fAtLeastHits(-1),     // if -1, then require hit on all ITS layers
     fAtLeastCorr(-1),     // if -1, then correct hit on all ITS layers
     fAtLeastFake(1),       // if at least x fakes, track is considered fake ...
     fMaxSeedRadius(50000),
@@ -133,6 +132,7 @@ DetectorK::DetectorK(char *name, char *title)
     fAvgRapidity(0.45),      // Avg rapidity, MCS calc is a function of crossing angle
     fParticleMass(0.140),     // Standard: pion mass
     fMaxRadiusSlowDet(10.),
+    fAtLeastHits(-1),     // if -1, then require hit on all ITS layers
     fAtLeastCorr(-1),     // if -1, then correct hit on all ITS layers
     fAtLeastFake(1),       // if at least x fakes, track is considered fake ...
     fMaxSeedRadius(50000),
@@ -1075,7 +1075,7 @@ void DetectorK::SolveViaBilloir(Int_t flagD0,Int_t print, Bool_t allPt, Double_t
            
        }
        
-       if (fAtLeastCorr != -1) {
+       if (fAtLeastCorr != -1 || fAtLeastHits) {
          // Calculate probabilities from Kombinatorics tree ...
          Double_t *probs = PrepareEffFakeKombinations(&probKomb, &probLay);
          fEfficiency[massloop][i] = probs[0]; // efficiency
@@ -1343,7 +1343,7 @@ void DetectorK::SolveViaBilloir(Int_t flagD0,Int_t print, Bool_t allPt, Double_t
 
 
          }
-         if (fAtLeastCorr != -1) {
+         if (fAtLeastCorr != -1 || fAtLeastHits != -1 ) {
            // Calculate probabilities from Kombinatorics tree ...
            Double_t *probs = PrepareEffFakeKombinations(&probKomb, &probLay);
            fEfficiency[massloop][i] = probs[0]; // efficiency
@@ -2225,9 +2225,13 @@ Double_t* DetectorK::PrepareEffFakeKombinations(TMatrixD *probKomb, TMatrixD *pr
        printf("Error: unexpected values in combinatorics table\n");
     }
 
+    Int_t fkAtLeastHits = fAtLeastHits;
     Int_t fkAtLeastCorr = fAtLeastCorr;
+    if (fAtLeastHits == -1) fkAtLeastHits = nLayer; // all hits are "correct"
     if (fAtLeastCorr == -1) fkAtLeastCorr = nLayer; // all hits are "correct"
-    
+    //
+    if (flCorr+flFake < fAtLeastHits) continue;
+
     if (flCorr>=fkAtLeastCorr && flFake==0) { // at least correct but zero fake
       Double_t probEffLayer = 1;
       for (Int_t l=0; l<nLayer; l++) {
index d145c92..f95ceba 100644 (file)
@@ -94,6 +94,10 @@ class DetectorK : public TNamed {
   Float_t GetAvgRapidity() const { return fAvgRapidity; }
   void SetConfidenceLevel(Float_t confLevel) {fConfLevel = confLevel; }
   Float_t GetConfidenceLevel() const { return fConfLevel; }
+
+  void SetAtLeastHits(Int_t atLeast ) {fAtLeastHits = atLeast; }
+  Int_t GetAtLeastHits() const { return fAtLeastHits; }
+
   void SetAtLeastCorr(Int_t atLeastCorr ) {fAtLeastCorr = atLeastCorr; }
   Int_t GetAtLeastCorr() const { return fAtLeastCorr; }
   void SetAtLeastFake(Int_t atLeastFake ) {fAtLeastFake = atLeastFake; }
@@ -166,6 +170,8 @@ class DetectorK : public TNamed {
   Float_t fParticleMass;        // Particle used for tracking. Standard: mass of pion
   Double_t fMaxRadiusSlowDet;   // Maximum radius for slow detectors.  Fast detectors 
                                 // and only fast detectors reside outside this radius.
+
+  Int_t fAtLeastHits;     // min. number of hits for the track to account it
   Int_t fAtLeastCorr;     // min. number of correct hits for the track to be "good"
   Int_t fAtLeastFake;     // min. number of fake hits for the track to be "fake"
 
index 7477c64..e91c370 100644 (file)
@@ -3,6 +3,8 @@
 // .L DetectorK.cxx++
 
 //void standardPlots() {
+
+
 void testDetectorUp() {
 
 
@@ -19,7 +21,7 @@ void testDetectorUp() {
   Double_t resZOB        = 0.0004;
   Double_t eff           = 0.95;
   //
-  /*
+  //  /*
   its.AddLayer((char*)"ddd1",  2.32 ,  x0IB, resRPhiIB, resZIB,eff); 
   its.AddLayer((char*)"ddd2",  3.13 ,  x0IB, resRPhiIB, resZIB,eff); 
   its.AddLayer((char*)"ddd3",  3.91 ,  x0IB, resRPhiIB, resZIB,eff); 
@@ -27,20 +29,21 @@ void testDetectorUp() {
   its.AddLayer((char*)"ddd5",  24.71 ,  x0OB, resRPhiOB, resZOB,eff); 
   its.AddLayer((char*)"ddd6",  35.33 ,  x0OB, resRPhiOB, resZOB,eff); 
   its.AddLayer((char*)"ddd7",  40.53 ,  x0OB, resRPhiOB, resZOB,eff); 
-  */
+  //  */
   //
+  /*
   its.AddLayer((char*)"ddd1",  2.32 ,  x0IB, resRPhiIB, resZIB,eff); 
   its.AddLayer((char*)"ddd2",  3.13 ,  x0IB, resRPhiIB, resZIB,eff); 
   its.AddLayer((char*)"ddd3",  3.91 ,  x0IB, resRPhiIB, resZIB,eff); 
-  //  its.AddLayer((char*)"ddd4",  19.41,  x0OB, resRPhiOB, resZOB,eff); 
-  //  its.AddLayer((char*)"ddd5",  24.71 ,  x0OB, resRPhiOB, resZOB,eff); 
-  its.AddLayer((char*)"ddd4",  5.,  x0OB, resRPhiOB, resZOB,eff); 
-  its.AddLayer((char*)"ddd5",  33. ,  x0OB, resRPhiOB, resZOB,eff); 
+  its.AddLayer((char*)"ddd4",  19.41+5,  x0OB, resRPhiOB, resZOB,eff); 
+  its.AddLayer((char*)"ddd5",  24.71+5,  x0OB, resRPhiOB, resZOB,eff); 
+  //  its.AddLayer((char*)"ddd4",  5.,  x0OB, resRPhiOB, resZOB,eff); 
+  //  its.AddLayer((char*)"ddd5",  32. ,  x0OB, resRPhiOB, resZOB,eff); 
   its.AddLayer((char*)"ddd6",  35.33 ,  x0OB, resRPhiOB, resZOB,eff); 
   its.AddLayer((char*)"ddd7",  40.53 ,  x0OB, resRPhiOB, resZOB,eff); 
+  */
 
-
-
+  its.SetAtLeastHits(5);
   its.SetAtLeastCorr(5);
   its.SetAtLeastFake(1);
   //
@@ -56,6 +59,22 @@ void testDetectorUp() {
 
 }
 
+void testDetectorCurr() {
+  DetectorK its("ALICE","ITS");
+  its.MakeAliceCurrent(0,0);
+  its.SetAtLeastCorr(4);
+  its.SetAtLeastFake(1);
+  its.PrintLayout();
+  its.SolveViaBilloir(0);
+  its.MakeStandardPlots(0,2,1,kTRUE);
+  //  return;
+  its.AddTPC(0.1,0.1);
+  its.SolveViaBilloir(0);
+  its.MakeStandardPlots(1,1,1,kTRUE);
+  
+}
 
 void particleDependendResolution() { 
 // particle dependency on resolution