Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
#include <vector>

#include "TROOT.h"
#include "TFile.h"
#include "TDirectory.h"
#include "TChain.h"
#include "TObject.h"
#include "TCanvas.h"
#include "TMath.h"
#include "TLegend.h"
#include "TGraph.h"
#include "TH1.h"
#include "TH2.h"
#include "TH3.h"
#include "TTree.h"
#include "TF1.h"
#include "TPaveText.h"


#include "DataFormats/SiStripDetId/interface/SiStripDetId.h"

void MakeMap()
{
   double P_Min               = 1;
   double P_Max               = 15;
   int    P_NBins             = 14  ;
   double Path_Min            = 0.2 ;
   double Path_Max            = 1.6 ;
   int    Path_NBins          = 42  ;
   double Charge_Min          = 0   ;
   double Charge_Max          = 5000;
   int    Charge_NBins        = 500 ;

   TH3F* Charge_Vs_Path = new TH3F ("Charge_Vs_Path"     , "Charge_Vs_Path" , P_NBins, P_Min, P_Max, Path_NBins, Path_Min, Path_Max, Charge_NBins, Charge_Min, Charge_Max);



   ///////////////////////////////////////// MAKE MAP OF GAINS
   std::map<unsigned int,double> Gains;
   TChain* t1 = new TChain("SiStripCalib/APVGain");
   t1->Add("file:Gains.root");

   unsigned int  tree_DetId;
   unsigned char tree_APVId;
   double        tree_Gain;

   t1->SetBranchAddress("DetId"             ,&tree_DetId      );
   t1->SetBranchAddress("APVId"             ,&tree_APVId      );
   t1->SetBranchAddress("Gain"              ,&tree_Gain       );

   for (unsigned int ientry = 0; ientry < t1->GetEntries(); ientry++) {
       t1->GetEntry(ientry);
       Gains[tree_DetId<<3 | tree_APVId] = tree_Gain;
   }
   /////////////////////////////////////////

   vector<string> VInputFiles;
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190645.root");       //size = 1727.02MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190646.root");       //size = 1863.46MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190659.root");       //size = 2661.59MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190661.root");       //size = 6034.83MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190663.root");       //size = 1668.16MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190678.root");       //size = 9927.4MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190679.root");       //size = 913.426MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190688.root");       //size = 4128.89MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190702.root");       //size = 1996.21MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190703.root");       //size = 4408.31MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190705.root");       //size = 7187.65MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190706.root");       //size = 2186.41MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190707.root");       //size = 5083.74MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190708.root");       //size = 2683.04MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190733.root");       //size = 7182.07MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190736.root");       //size = 3222.12MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190738.root");       //size = 5912.86MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190782.root");       //size = 7974.95MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190895.root");       //size = 15331.2MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190906.root");       //size = 7652.26MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190945.root");       //size = 1562.03MB
//   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_190949.root");       //size = 8016.04MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191046.root");       //size = 4838.85MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191056.root");       //size = 97.7042MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191057.root");       //size = 1283.01MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191062.root");       //size = 10698.4MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191086.root");       //size = 9208.68MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191090.root");       //size = 2663.71MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191201.root");       //size = 899.183MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191202.root");       //size = 1975.63MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191226.root");       //size = 30174.2MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191247.root");       //size = 23016.2MB
//   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191248.root");       //size = 1653.05MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191264.root");       //size = 2810.84MB
//   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191271.root");       //size = 6688.46MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191276.root");       //size = 256.78MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191277.root");       //size = 16743.7MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191367.root");       //size = 56.7291MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191691.root");       //size = 193.001MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191692.root");       //size = 522.558MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191694.root");       //size = 849.879MB
//   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191700.root");       //size = 12765.5MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191701.root");       //size = 2647.48MB
//   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191718.root");       //size = 3851.63MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191720.root");       //size = 3203.27MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191721.root");       //size = 3108.56MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191726.root");       //size = 171.324MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191800.root");       //size = 901.921MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191810.root");       //size = 1926.16MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191811.root");       //size = 2952.6MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191830.root");       //size = 7499.53MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191833.root");       //size = 2139.62MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191834.root");       //size = 7184.75MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191837.root");       //size = 1212.49MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191839.root");       //size = 653.932MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191842.root");       //size = 264.614MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191845.root");       //size = 460.653MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191849.root");       //size = 877.692MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191856.root");       //size = 2393.8MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191857.root");       //size = 483.061MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191858.root");       //size = 809.952MB
   VInputFiles.push_back("rfio:/castor/cern.ch/user/m/mgalanti/calibrationtree/GR12//calibTree_191859.root");       //size = 2158.63MB


   TString EventPrefix("");
   TString EventSuffix("");

   TString TrackPrefix("track");
   TString TrackSuffix("");

   TString CalibPrefix("GainCalibration");
   TString CalibSuffix("");
 

   for(unsigned int i=0;i<VInputFiles.size();i++){
      printf("Openning file %3i/%3i --> %s\n",i+1, (int)VInputFiles.size(), (char*)(VInputFiles[i].c_str())); fflush(stdout);
      TChain* tree = new TChain("gainCalibrationTree/tree");
      tree->Add(VInputFiles[i].c_str());

      unsigned int                 eventnumber    = 0;    tree->SetBranchAddress(EventPrefix + "event"          + EventSuffix, &eventnumber   , NULL);
      unsigned int                 runnumber      = 0;    tree->SetBranchAddress(EventPrefix + "run"            + EventSuffix, &runnumber     , NULL);
      std::vector<bool>*           trigtech       = 0;    tree->SetBranchAddress(EventPrefix + "TrigTech"       + EventSuffix, &trigtech      , NULL); 

      std::vector<double>*         trackchi2ndof  = 0;    tree->SetBranchAddress(TrackPrefix + "chi2ndof"       + TrackSuffix, &trackchi2ndof , NULL);
      std::vector<float>*          trackp         = 0;    tree->SetBranchAddress(TrackPrefix + "momentum"       + TrackSuffix, &trackp        , NULL);
      std::vector<float>*          trackpt        = 0;    tree->SetBranchAddress(TrackPrefix + "pt"             + TrackSuffix, &trackpt       , NULL);
      std::vector<unsigned int>*   trackhitsvalid = 0;    tree->SetBranchAddress(TrackPrefix + "hitsvalid"      + TrackSuffix, &trackhitsvalid, NULL);

      std::vector<int>*            trackindex     = 0;    tree->SetBranchAddress(CalibPrefix + "trackindex"     + CalibSuffix, &trackindex    , NULL);
      std::vector<unsigned int>*   rawid          = 0;    tree->SetBranchAddress(CalibPrefix + "rawid"          + CalibSuffix, &rawid         , NULL);
      std::vector<unsigned short>* firststrip     = 0;    tree->SetBranchAddress(CalibPrefix + "firststrip"     + CalibSuffix, &firststrip    , NULL);
      std::vector<unsigned short>* nstrips        = 0;    tree->SetBranchAddress(CalibPrefix + "nstrips"        + CalibSuffix, &nstrips       , NULL);
      std::vector<unsigned int>*   charge         = 0;    tree->SetBranchAddress(CalibPrefix + "charge"         + CalibSuffix, &charge        , NULL);
      std::vector<float>*          path           = 0;    tree->SetBranchAddress(CalibPrefix + "path"           + CalibSuffix, &path          , NULL);
      std::vector<unsigned char>*  amplitude      = 0;    tree->SetBranchAddress(CalibPrefix + "amplitude"      + CalibSuffix, &amplitude     , NULL);

      int TreeStep = tree->GetEntries()/50;if(TreeStep==0)TreeStep=1;
      for (unsigned int ientry = 0; ientry < tree->GetEntries(); ientry++) {
         if(ientry%TreeStep==0){printf(".");fflush(stdout);}
         tree->GetEntry(ientry);

         int FirstAmplitude = 0;
         for(unsigned int c=0;c<(*path).size();c++){
            FirstAmplitude+=(*nstrips)[c];
            int t = (*trackindex)[c];
            if((*trackpt)[t]<5)continue;
            if((*trackhitsvalid)[t]<5)continue;

            int Charge = 0;
            for(unsigned int s=0;s<(*nstrips)[c];s++){
              int StripCharge =  (*amplitude)[FirstAmplitude-(*nstrips)[c]+s];
              if(StripCharge<254){
                 StripCharge=(int)(StripCharge/Gains[(*rawid)[c]<<3 | (*firststrip)[c]/128]);
                 if(StripCharge>=1024){
                    StripCharge = 255;
                 }else if(StripCharge>=254){
                    StripCharge = 254;
                 }
              }
              Charge += StripCharge;
            }
//          printf("ChargeDifference = %i Vs %i with Gain = %f\n",(*charge)[c],Charge,Gains[(*rawid)[c]]);
            double ClusterChargeOverPath   =  ( (double) Charge )/(*path)[c] ;       



	    SiStripDetId SSdetId((*rawid)[c]);
            //printf("ModuleGeometry = %i\n",SSdetId.moduleGeometry());




//            Charge_Vs_Path->Fill((*trackp)[t],(*path)[c],ClusterChargeOverPath);
            Charge_Vs_Path->Fill(SSdetId.moduleGeometry(),(*path)[c],ClusterChargeOverPath);
         }
      }printf("\n");
   }printf("\n");

   TFile * out = new TFile("ProbaMap.root", "RECREATE");
   Charge_Vs_Path->Write();
   out->Write();
   out->Close();
   delete out;

}